From 2423e07adeaf2cb9d203a69f9bdef73c4fb4fc1e Mon Sep 17 00:00:00 2001 From: choforito84 Date: Wed, 13 May 2020 11:54:37 -0500 Subject: [PATCH] Update to numpy --- FAQ.readme | 4 +- build/lib/glmnet_python/GLMnet.so | Bin 0 -> 454320 bytes build/lib/glmnet_python/__init__.py | 40 + build/lib/glmnet_python/coxnet.py | 186 ++ build/lib/glmnet_python/cvcompute.py | 34 + build/lib/glmnet_python/cvelnet.py | 83 + build/lib/glmnet_python/cvfishnet.py | 99 + build/lib/glmnet_python/cvglmnet.py | 355 +++ build/lib/glmnet_python/cvglmnetCoef.py | 95 + build/lib/glmnet_python/cvglmnetPlot.py | 129 + build/lib/glmnet_python/cvglmnetPredict.py | 96 + build/lib/glmnet_python/cvlognet.py | 173 ++ build/lib/glmnet_python/cvmrelnet.py | 84 + build/lib/glmnet_python/cvmultnet.py | 135 + build/lib/glmnet_python/dataprocess.py | 52 + build/lib/glmnet_python/elnet.py | 226 ++ build/lib/glmnet_python/fishnet.py | 218 ++ build/lib/glmnet_python/glmnet.py | 484 ++++ build/lib/glmnet_python/glmnetCoef.py | 86 + build/lib/glmnet_python/glmnetControl.py | 113 + build/lib/glmnet_python/glmnetPlot.py | 241 ++ build/lib/glmnet_python/glmnetPredict.py | 367 +++ build/lib/glmnet_python/glmnetPrint.py | 59 + build/lib/glmnet_python/glmnetSet.py | 239 ++ build/lib/glmnet_python/loadGlmLib.py | 32 + build/lib/glmnet_python/lognet.py | 337 +++ build/lib/glmnet_python/mrelnet.py | 254 ++ build/lib/glmnet_python/printDict.py | 13 + build/lib/glmnet_python/structtype.py | 9 + build/lib/glmnet_python/wtmean.py | 37 + dist/glmnet_python-0.2.0-py3.6.egg | Bin 0 -> 233843 bytes .../glmnet_vignette-checkpoint.ipynb | 2344 +++++++++++++++++ docs/_sources/glmnet_vignette.ipynb.txt | 62 +- docs/glmnet_vignette.ipynb | 378 ++- glmnet_python.egg-info/PKG-INFO | 100 + glmnet_python.egg-info/SOURCES.txt | 59 + glmnet_python.egg-info/dependency_links.txt | 1 + glmnet_python.egg-info/requires.txt | 1 + glmnet_python.egg-info/top_level.txt | 1 + .../Untitled-checkpoint.ipynb | 6 + glmnet_python/GLMnet.so | Bin 468107 -> 454320 bytes glmnet_python/Untitled.ipynb | 100 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 1359 bytes .../__pycache__/coxnet.cpython-36.pyc | Bin 0 -> 3127 bytes .../__pycache__/cvcompute.cpython-36.pyc | Bin 0 -> 927 bytes .../__pycache__/cvelnet.cpython-36.pyc | Bin 0 -> 1693 bytes .../__pycache__/cvfishnet.cpython-36.pyc | Bin 0 -> 1991 bytes .../__pycache__/cvglmnet.cpython-36.pyc | Bin 0 -> 12116 bytes .../__pycache__/cvglmnetCoef.cpython-36.pyc | Bin 0 -> 3823 bytes .../__pycache__/cvglmnetPlot.cpython-36.pyc | Bin 0 -> 3601 bytes .../cvglmnetPredict.cpython-36.pyc | Bin 0 -> 3852 bytes .../__pycache__/cvlognet.cpython-36.pyc | Bin 0 -> 4189 bytes .../__pycache__/cvmrelnet.cpython-36.pyc | Bin 0 -> 1805 bytes .../__pycache__/cvmultnet.cpython-36.pyc | Bin 0 -> 3099 bytes .../__pycache__/dataprocess.cpython-36.pyc | Bin 0 -> 1755 bytes .../__pycache__/elnet.cpython-36.pyc | Bin 0 -> 3725 bytes .../__pycache__/fishnet.cpython-36.pyc | Bin 0 -> 3537 bytes .../__pycache__/glmnet.cpython-36.pyc | Bin 0 -> 15611 bytes .../__pycache__/glmnetCoef.cpython-36.pyc | Bin 0 -> 3476 bytes .../__pycache__/glmnetControl.cpython-36.pyc | Bin 0 -> 4235 bytes .../__pycache__/glmnetPlot.cpython-36.pyc | Bin 0 -> 7175 bytes .../__pycache__/glmnetPredict.cpython-36.pyc | Bin 0 -> 10506 bytes .../__pycache__/glmnetPrint.cpython-36.pyc | Bin 0 -> 2078 bytes .../__pycache__/glmnetSet.cpython-36.pyc | Bin 0 -> 10547 bytes .../__pycache__/loadGlmLib.cpython-36.pyc | Bin 0 -> 901 bytes .../__pycache__/lognet.cpython-36.pyc | Bin 0 -> 5536 bytes .../__pycache__/mrelnet.cpython-36.pyc | Bin 0 -> 4260 bytes .../__pycache__/printDict.cpython-36.pyc | Bin 0 -> 488 bytes .../__pycache__/structtype.cpython-36.pyc | Bin 0 -> 400 bytes .../__pycache__/wtmean.cpython-36.pyc | Bin 0 -> 1105 bytes glmnet_python/coxnet.py | 65 +- glmnet_python/cvcompute.py | 16 +- glmnet_python/cvelnet.py | 18 +- glmnet_python/cvfishnet.py | 26 +- glmnet_python/cvglmnet.py | 76 +- glmnet_python/cvglmnetCoef.py | 4 +- glmnet_python/cvglmnetPlot.py | 32 +- glmnet_python/cvglmnetPredict.py | 12 +- glmnet_python/cvlognet.py | 88 +- glmnet_python/cvmrelnet.py | 20 +- glmnet_python/cvmultnet.py | 56 +- glmnet_python/elnet.py | 64 +- glmnet_python/fishnet.py | 66 +- glmnet_python/glmnet.py | 123 +- glmnet_python/glmnetCoef.py | 16 +- glmnet_python/glmnetControl.py | 20 +- glmnet_python/glmnetPlot.py | 32 +- glmnet_python/glmnetPredict.py | 113 +- glmnet_python/glmnetPrint.py | 4 +- glmnet_python/glmnetSet.py | 58 +- glmnet_python/lognet.py | 112 +- glmnet_python/mrelnet.py | 92 +- glmnet_python/wtmean.py | 10 +- .../glmnet_examples-checkpoint.ipynb | 378 ++- test/example_binomial.py | 8 +- test/example_cox.py | 8 +- test/example_gaussian.py | 32 +- test/example_glmnet.py | 26 +- test/example_mgaussian.py | 8 +- test/example_multinomial.py | 6 +- test/example_poisson.py | 12 +- test/glmnet_examples.ipynb | 378 ++- test/misc/example_elnet.py | 58 +- test/misc/example_elnet2.py | 6 +- test/misc/temp.py | 91 +- 105 files changed, 8410 insertions(+), 1056 deletions(-) create mode 100755 build/lib/glmnet_python/GLMnet.so create mode 100644 build/lib/glmnet_python/__init__.py create mode 100644 build/lib/glmnet_python/coxnet.py create mode 100644 build/lib/glmnet_python/cvcompute.py create mode 100644 build/lib/glmnet_python/cvelnet.py create mode 100644 build/lib/glmnet_python/cvfishnet.py create mode 100644 build/lib/glmnet_python/cvglmnet.py create mode 100644 build/lib/glmnet_python/cvglmnetCoef.py create mode 100644 build/lib/glmnet_python/cvglmnetPlot.py create mode 100644 build/lib/glmnet_python/cvglmnetPredict.py create mode 100644 build/lib/glmnet_python/cvlognet.py create mode 100644 build/lib/glmnet_python/cvmrelnet.py create mode 100644 build/lib/glmnet_python/cvmultnet.py create mode 100644 build/lib/glmnet_python/dataprocess.py create mode 100644 build/lib/glmnet_python/elnet.py create mode 100644 build/lib/glmnet_python/fishnet.py create mode 100644 build/lib/glmnet_python/glmnet.py create mode 100644 build/lib/glmnet_python/glmnetCoef.py create mode 100644 build/lib/glmnet_python/glmnetControl.py create mode 100644 build/lib/glmnet_python/glmnetPlot.py create mode 100644 build/lib/glmnet_python/glmnetPredict.py create mode 100644 build/lib/glmnet_python/glmnetPrint.py create mode 100644 build/lib/glmnet_python/glmnetSet.py create mode 100644 build/lib/glmnet_python/loadGlmLib.py create mode 100644 build/lib/glmnet_python/lognet.py create mode 100644 build/lib/glmnet_python/mrelnet.py create mode 100644 build/lib/glmnet_python/printDict.py create mode 100644 build/lib/glmnet_python/structtype.py create mode 100644 build/lib/glmnet_python/wtmean.py create mode 100644 dist/glmnet_python-0.2.0-py3.6.egg create mode 100644 docs/.ipynb_checkpoints/glmnet_vignette-checkpoint.ipynb create mode 100644 glmnet_python.egg-info/PKG-INFO create mode 100644 glmnet_python.egg-info/SOURCES.txt create mode 100644 glmnet_python.egg-info/dependency_links.txt create mode 100644 glmnet_python.egg-info/requires.txt create mode 100644 glmnet_python.egg-info/top_level.txt create mode 100644 glmnet_python/.ipynb_checkpoints/Untitled-checkpoint.ipynb create mode 100644 glmnet_python/Untitled.ipynb create mode 100644 glmnet_python/__pycache__/__init__.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/coxnet.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/cvcompute.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/cvelnet.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/cvfishnet.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/cvglmnet.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/cvglmnetCoef.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/cvglmnetPlot.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/cvglmnetPredict.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/cvlognet.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/cvmrelnet.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/cvmultnet.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/dataprocess.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/elnet.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/fishnet.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/glmnet.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/glmnetCoef.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/glmnetControl.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/glmnetPlot.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/glmnetPredict.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/glmnetPrint.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/glmnetSet.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/loadGlmLib.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/lognet.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/mrelnet.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/printDict.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/structtype.cpython-36.pyc create mode 100644 glmnet_python/__pycache__/wtmean.cpython-36.pyc diff --git a/FAQ.readme b/FAQ.readme index 16b313d..461c808 100644 --- a/FAQ.readme +++ b/FAQ.readme @@ -11,10 +11,10 @@ contributed by Rachael Mansbach: I've been using the glmnet python package (great code by the way!) and I've discovered that when trying to run this code with more up-to-date versions of numpy it errors out on line 260 of cvglmnet.py: - ma = scipy.tile(scipy.arange(nfolds), [1, int(scipy.floor(nobs/nfolds))]) + ma = np.tile(np.arange(nfolds), [1, int(np.floor(nobs/nfolds))]) Due to computation of nobs/nfolds as float division rather than int division. This is easily solved by changing the line to - ma = scipy.tile(scipy.arange(nfolds), [1, int(scipy.floor(int(nobs/nfolds)))]) + ma = np.tile(np.arange(nfolds), [1, int(np.floor(int(nobs/nfolds)))]) but I did have to install from source to get it to work. It might be worth a note in the installation section or a code update? diff --git a/build/lib/glmnet_python/GLMnet.so b/build/lib/glmnet_python/GLMnet.so new file mode 100755 index 0000000000000000000000000000000000000000..8f1cc76aeeb4a98ff6462bbe956a931c017c7ed7 GIT binary patch literal 454320 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%0A_l$1o1!-2f0_hU(osDS zy`mn7v=p-pad4p_r5Q^8mF&kJnv;|!ax79FbC{4)prNr!Fpj3DApr=(e*FYi(=-wS zrAr9m51N+7BxMB}&rx{+=>Y-$wvqB*r1IkF_X{a0O~FLsU`Cs}C)WVbkg}F(a;dx+ zlaw7uz2|iBHr6Fq2RD&pape~d5mE}YQT9G6DLYf7>{e2)bwYYYz5IB&vH{8V9ImWm zU2>7qM2)!7Bh^I=Dq(9OgM87`5>^UQ)IJcF*bH&8$loSfZg^;n)IxDlI&h8?4w;gvSVC$>j#A3okeHV+oOdxj~{7T{dMKFuGaZ z?_O>gg**m@Ty9_yvy?QJ_giG2d7VK^Z>}>Oc0j7V^m-}z(Y?+fuzH>0zyni|N*lBJ z+YhB+a;#Tf0$LX0xS4kws=1`+VQOJ%*#CR8oX^u^l?QpGU8FFM3WAwM z;Q51=h#R@f<369A?ZBQ$Dk0NV3E^HE+x&*6Iy!16Z?Xe7^Ec( z8%DsB#uE~*JmFXFkq{V20i??l$9QRG9ur>Z5;>3(y;odycj-gX4&{VG`3{`IWtGrZ7s;kKH!JXxc{7c?Ma7Li_88 zl8@3hT6)tqivuW)(dmxL5>blV2EzU2B5A1r`mqcjh1h>-Nb z$%lSdM5nx0gx@@w6qCZ>T^>HCm}Is&gqe|T=F*XKbE8NaGJnllIh+f1B!9RU z+KeIs-3d0zSUhNFqTB$#H^4zV{~)fS?guLBmNQD~;SqI*RmH+bBBGsXEdN$~E$3JH z)@=dz4{T6|~xD?~xZCF>5{&xJI^ z`ni;>{EvZK??yIO?Bk$;Tw5i%cp2r`0wIR|KZNl% zLIgW114Yvx@L4Sz{7GoIp=K)%yh4JsrUpl8o8=yO>qP3Vu~hhWqGiB4-E3%mykUAc zBeD&I35Lt$sGncig{?%Hw;*ETx(~Lw?Zd#ccPoU?&GiJ61!w;fb9% z(m|<6OnlO!xZ0y}T@45XqL?I{x~VGqQn)2$e52c2+vU(+$rhU2sRyHJ2)oLck6oIHHs{LXV_ z^Vf)<{KId`U{j5eXJ$;Pq0b*Ww%_RJ^BgJN-l5{Smo`HkppYCt;gZ-Ya$fn2Re?L% zmpS#Eix7SED3xEoBJ39-zgj|Mom$mI;O6>M+B2oClm+Hl~W__=oB%_xy`RhBdPaIBJO zDgeQo28DRH;%W8!Kv~Z)XIHOsba^@#NLTrjpGQ60z#h)r!*D>6JV`)!{te%dp-uXY zGofD=Or_B4xESNes!+tJtg6d4cg9~Lad(%(L7^((5cOe#dX~x3(I--5MEC!Lm=J+& zWFT>5lYzvhGSK2zb{Qy9n)BEbPGV#;<5*DAdG;C&3TZ^v1~QP2snjSFPA$EWfv@Kw z39dUZCGNY!Nt1yRt}^iNd!-=p!UB-43_K64tK(VWw6Ombj7q`6htn1a;0B?kyIyqf zp_&z1H-@dC$iX!Ik#^5C2IiOuA6?DkaW|Gab{-5IcBWGwT>)(`Opol1~Rsw{X8Ii18D33Yq|`N%}e z^Ab1|v}~wk!jzxGIhddB;55+MAsGUzSM#E_l(GedOU}g@&7KlM_$BV1!W>+zshv^4%REy8hnIvs9qb5x;d2$UqK4iHtaNQ*cx$q zYUzL(iYRitDV_(}xfkPV6{m-4s+S`_J0kZLY?i)!{fY_EL^N`T)JLCjBW)buC^r7| zUP2q9Io^=8xMSR|=PX9!qnMKco3)Nsn%o1)-_r*ScOco89_|blZ)zZ6_ryR#f$)E1 zAPE-tc}8brhcZ~$hZc=-YKxw-6+Ft>2zL3z4^4op^gRSPz$}(EL4yI{ocxfl={(;H zY#y~2f;GhIH6+k#FoS1YQ**TXI09qatB7qwm&A=GTyQ`a#{+%}8H~8_l!w|sTiRlR$iX+hWe5x zm?)z}y&nY<=1v~S2#42^pScp|Oo2j}0y#?5zr+&Hz}RgxZ_g;TMT7eCw7@bJD5XCA zQ!EMawzsjnj35*?07s-AukQ3X^%o{*qOm9qoo(RBpZto@DZ5}3N=^d=QdFaVtMn3D zv!LB1nRa`6NkOxXTqG93+`t4R1X7853KLk1bhAQnN(1%Ne`6RVPWHamz0MGH8fEKnCSMl}T5V2Kke&o&?$|tPaaUxi1>hJ%Y{6(AALM zidQ{`xVk~tfTS%wl&QYJ=ZjGZ409Z{u~3;JHI(rfGewTa(7XXa@M*7T+%pr`P7DyN zJ;sV|d?IqK6N2@LMzm?fYB>CXX#~`mUgLu2Zyw|cfMv{zfjo02>>}q}7P)fX%b%I& z_BUC`M&e-YoFKSFJKZk)1wy4bb`Q(RQ2Uf$;La(n?GZ$4|x~O^? zjF5$WJc}wk_3X-IC2Z+oQPl-r1^;)Ip?$ywfD`WVEUGl2v#281j$k&=qUwA*?=xJ% zhhv{0$5#NYtfU@8pWR$lKNR*qj9y)g%|p+^>c?JAafdKSAU^xr>Wy@VEJQwm$S1s! zZc5BEH-mqN$m%$`A?rEpiOi3rID7~~&TJFU6gwzDNTt4bNN5iJyIMKzNTr*-fxW{W z3tvDi#zL8|IaU@pT}xS6SZlh_bi1TCB(idP`8)_qXDME!irG|liAsJW>ik=bt(WHt z*oj)5LDI~nU>98%<*jB>&H>bka~I_ZqD%wlP^P(V33Wnx9!N3a-57CWn5S*)Ebrf``orU@MugW83yhQ<1t&c)D>AV4aWgHGoj7C=Tw{>lZHhDb!8YCG zohZdB{W~^zci<1Frk@Z6{^%ayz07JJ;-$D0U$jBDw@Q&~VJc`gHAAnIW3?n zwuj)-$Hv^SPNmuG*}7&Ll0AE0D1yf8Tye4LytLDjZN>H|M(}8Ht2-OeZ8lCLfEy9A=*&?C>CV{l z5ds#8W+^n6xU4$3iqp6dg;8_%HW{xz?zLIin#`w}q2+}6EEEKq)^zFCMNxujmF@`s zAhjbH7Nuwe!YOtxdD8%aVWvdQ_@t;&r3bL3;NJpy(@KegJAfuqcs5p;E^i1|M>rYM z7Vrz&+Qd;q1XCez9w&#hRLZOj%r*rh0|;mMj^B9+|$K3VPb>_&*$9NERa+4aFAZ@R+euLN$TRB|P&?1*Ac zxXwQ776b~lz>7@Hz*86~MF&xwz~Wo1`b|8;;V#(*tA2ghKge$}S+fBLJbSAIiBup3 zs4Gmi-m1q)(GNML@3(R8lNYBl`6TSXqFs7AgQq^sbrUv<>ABWRcN6 zp1BVkWL)#)JC?pBoVnFGD0UHVomoA`#%}Y0WU{rlntWFJP7S+n05F!6P=KVt>jxdRhgp z1xB-#?i@Wi``xba<0`M#NJ2eN9w`o;F`i4v+=C59Q&Bf&cGO*@;zzMrm^M%aSYUqZ zvrp-aj?+M@yo@yS!&kokrUS9nv9mwA9$^Criw2V)JqUv>yaH=fzVq8NeVlIJ&4Hme z)Jze8xnpx`?s%)r44d7Vp^O#O_1@}jy=iO;guXjptl##3ZoYWzXZNW2;@3W-^TkKu zVq)?d=8C(_eDM)>6`2bB2hJCthI(7nFZ=xS-O1a#lec##Z|_dt{*5PZEtsAp=j_y( zo4K95XV25FhrLjpca1Se`)&|(wB)6nl_vLpVZ_{YAIwdi=`c5Fe%ho1F82!Jm=tE6 zRu*u|$XK{*IC19TToY2lJ@7ukka1z|;y=Fb+-!Ho&5&cWaT0?)Gt#ADfAs)-)4M?34U#z$Y&= zq8K&I*xbA9gFZssyS#+=F7@8HyjWgN5E}X9gcs^Gjpj=#Rg|dl+`Htuya9MPHGWI? zE>rq3Ly1)J)tu*d{_r|UDpg9mJiD1{6g6CL_OE%?g&cA3@>eJ#poLswXiuA{hwTQ^ z7WR^PZd{RK9@02B^JojmHO>+y#}3TQm^M>UY=~_F`q7cRw5@wOHLpXM*W@7bBD-0V zXX)R})*bI>ZW{dK!0V&k&pZ|^%Pm8+m5}Al-Otp^C3?>S#T_O?=;aYw{>7den0$&j za+wSuwF;7u`sp2B=)6QA$j$vDfK;ea0Yy5i5LI#9Y29u=06w>b7N*M770sQU96BG}{HJszf+CfV_AU zguLF4)8{SVSr$@x_74`y1e1j*mt^C;6eR|vt(`10E9cfx!>2w;1;Nk}o58!LM#{U} zeoG@tQ_A4djmhEU~7F?BdLlS0X5G zxdsokEX7p2H?$H>g&PUFbk+-y-qZipjP;!U%e5UGPDimBpLTi6JxE4@aJ?(-l9o4) zh2_4xn7nHit}sVO-cxME111CnHSMOPm zUssHJ{Ms_?53H;Ki05p~y`D2IJ^U?Q&!GUwJd*s6zvoFl_UuiHz0P;gUAwHL58z6HF_s!BV7)D}%Wry8{=4)HQhD#(PJ(+oH^+9M~JXdI2UPQg0$Qk|cf zC{#KKG?*Uk@o*qIMC&C^M(s@0=}$(D*3oEMN|Peu0Xi6zapFC(=pPXwDB}OV?^@sG z+>#V=tU{ir{m%F8wb$Nz?X}ll`}S@ix8)i>&AmEU+s${^`W_J;oEcK31Y1RL*{$|* z>3SKmix#w^4PKc+#jzuDbyx)qw|->`9)e2Y-8H$4ndm;73Pp0mW>oj+p?fy4q%^6w z(OEn&@huO+&$e>o_d)LYeg^jG;sgQhZiD8)sYu*97j-XKi?EHfR9@Rq$GPxeH$Aqc zhB?Iom$uhVD7(lhLeA0-%*2(eV98Pc>%fiLy8L|?Qj>YjO#&g~nM=`6AzIaLY0FD< zU40aF;@bXL{b1hy@!nVIz>>*5wk<7o(aq9crBX{BJ^XQM;~K6$GUde8?`7ICky{xs z`-G1tsSNS01RhGy()LJHjLP+FOysFon?^05yb~9nT!l25FTkCnNO);ZU+v7nZ>Y(P zSlx~m)h$+Mg5 z!q*rKS?FYnNv$z?wK2KwO+ilHVob~~ab0#!IU~-i+!K>$F3hETp&i}RI)EbjFhfG!) z6On>Rn=#?5GtnZx=j64PlP|qNGWpYx$*qSZ6On>RoiX97GwF-vkd7 zRD5-+*%+06gR0-C`07-u2hbY z_G#fB_XSy6Bn5IRM-MHj`-9!LTUv5mKuQg^*1~vK?kMX0-l1IT&cl!H1)IbF*@xf7 zSLpx&aWhT}t%f1SmcV8`?B0c}Zkhlv>PmdXH9AR#0Z|MOF8~WuD8YcNAr;P< zp2Gyv2cv_z)Ms&qj{on>bqw2ixlTm!?F}67GN)hRe`#*JyAQh?=(j+)>pV~y&Yv9| zmt#E{-5UPV?gnOhX)jf?imgQl zN)J|UEm1MAEh(mrt#P5t2AuVA0r>3!rgPG%>!?$KIJP{SaNFS#wE*}W-nv(DeeYdj((sK{eTQbc0`6E+b@fd#kn1J0GYHNZY?zFTG?E; zpdZgK6Bbg@gy=oosm3TU+)<+$Pozh;&@Ov**h+wCye5-gbIgH?ZwX=TBJb z!;!+amAKJ$C9c&-stKNA?Hn4Sp3o*v#{%5 z)V&qYM6k4|u^hP`wY+6Go$VS*+emEJ^#_#{ykTvSu)Dzm9+h;LHAp&YvGZ#*@Dj0fj9aXA#u`eWZS zL1#K9A*!1&E3BmHQ@s^myN2ac;m1z4A3G>>eI;D^X>R(++6kQONI|2R{s}#71E1{~ zh5Izjj{t(e!=$1XgfDDz#j*)~m^ihXq_vV_>ZoPJc&p`FV<@H$S{?RNdp20-$Oa#A zQfSy9vuv9w)lzdhh2+tsg{F)p(fTafPCPtXEMsg2uIgblSb#*^9K@&ui&9xl^6VTc zsS2g`*h0HF*ZuL+b8jqD)5 zhue_#1uLfb$vhe3Pv zH1I)|rJ7cH;6kE2?>{9=LC51{ZdgZ&=U3PX=J+tPDq)BnE3Y$6u9U?G$9}D(&hl z#yuxT7l-1-d_!lU#R+DyLQX3~ds^-t*6zQbA2~hyQl7nC`~p# zeKv`iOPkV4LZ$)kxz4rXJr1gjg`8jy1@?7lhp!UIjj#YNW1P`dQ3EJD@{A^~r&&z} zRabJ!EuETX7VZ!?@t}rTJABx_(@%W%0imIP4BMhGaktr4!e${+Y){$@RYI(8ligO! zK_4DSaknM0V)sTc^I9iirCMhctM#4yRk_v`gympTtXc@!oK#-xiWjpd&cc?YK!#e6 z<$NA6L(9F_`l*l$Cvuq^Ojh7gRO|X~weI?%FD9$7)&pd7)_S~_Gn83W(?m9>G?AVK z;Hq^HOkW1g3*l5*du;9iFw(>B&jY{^-oPH~m{5lVm(U`{cPaq?Er0h*)Qm$+ZmT@a za-@LCeflyjf>p2ZKfVg?{Pbcg_(d^QD5>B^HtQHBw^cMNz%jXfww$ZX53c%_tn5$= z1_<|64#Le=iOuL#H~^H!bQ={tI$?Ht)LNwugGe)Dwm1ag?xS*RPn+6MWe{!!&DSjB zAl&50W{JZfiZ^ewjAwlw5N^x9H_HzWFSgeDqWX1VMIhXtLKY20J41^Ixfu@kr7w=o ze^7wc&wnt~akyFMXB1H9c6F_AxC6EZ#r>yX%cCCWiG9h*qPhQDbkw7h`H4Ysx1+MX zBak49DjXew)m(Kb?rxdzz^-S|b0NFlJ)G}n_=DR_@|J?Zds~%bkEbbscLJHM)EVHI z;Q>Z@Oys~?9|3H%B9z#<{{JYlbHU93G{9$FB^uWUAyIJxWiQDY0yn_5OMyh z+~?4E()jYRV4p)O?{gF{=6E>^^*PLMakl5_b1e6++@rgt-1-I(aqubXbM)Q%oX=bv zQJP^1`<&p$23PD@x3jLK+X059K)G!_YNVi=wX078UoN)m^V!j^&j6HL?gZ+jWIHc! zf>?fhS{;tza$9fXxZE=bAjA+Q5{9vQeS5ECLMnGA3#>N7iRZ6Bgev~#r=p6RzlsYn zWhklQXB783TE2wL<52OFzq`7{;UCx(w8GRNI<;mRfZPbz0ML*+^%z~pN8p`$7Z_ci z(_dq8I0ue6jTT39QrdSzQ)}uyr05E3L;@lf9;bG-~|Wb>|-g^_W5WweIPD@+8#tc z{p$)2!P0o)hvm1uz|JpRcp2UVgX*EnxXZtyZxTXnVlZAR@*61;smUXTIwav|2A=EZsBB*Vx zd zDDq3pn!!M7E9y$$iuyr(H)HFUO^vdx;4qps%=|_w9^a(H}MX zmdS1CVC$2?JqYLK&wwsyn+gh8UyRg=(?5%uof$=pLy-vA`(WVrXN=J_5*S$TozGo`Uir z_VPb_zM5_21}aG|0R<=*2^l>pzAFTqk64ByZHcYO?6gGru>>;OD6C!dsa^Qy1wTpG zlG+|@T2JV(S8>D1b!;z%jK+sxU%N}5kkLhQ^*G2T>S@Ll-xF==^8Zi;dQ4e`qnuF>I()u zXv**^rtk#;(|GU?=4_ez5JlEtCk`3ih%jf~jGxYYHDlNnzQxRw7O)Zz{`uBbgN#;K zZnTLc5oENogBd^OYH^U!YC;u_*cVwsUyuW6K-_q^Iin1U%$Wv-km*+D$_9RJ&R$Y( z&KizYFVPNjcFMW=vy+H0hI~^W9zf+EgjuuOgi67Ozea0rDGcEenlzcQUYO&VGaxP4 zu#9yP`A$H4>URvQ4PVT9Scm3{4p$6Wkh%w;zw4LA#E_R5Oj$$F-{%+wwF_pL+U4r( zmvkUsesq;XsQxv`9Lj2z-vA2$;mCrdw$t*TTPi9b@&=+R(DFAxECG~m{c1F;Kx~-T zjqSars%Tcw!9u4Mvt zVS&sw3*JAdEH4hbmhmI(TIR5RVeHyUMTeAyU0XQ}<%Xe?nizI1D<`r2R&Go6O;?pw zYlGhefLkoRBKRx?lC2`3MFYv=R--j)ai*`qXi92}dBtuEQ?tiTF<{5ap=ldBtcWqF7z^{+Re0NwVnuDSnRB;AeaOwNaxu)=^nAbAlETKu3HChAUEu zwPGW-;sMws4Av12z=A7Mk)0=MVS zUW$w9`Gs4HlUUS38-llZRqg2Jlrmq0LhK=0|B$b)IIU8t%JQG(BE~mK*CZKfLlgcRQ7xVJ|$*?*+- zPTzW8Wa8$Zce)w=2n6Ix!biK~A$7{&#pa#rX$H+YPR7lk@Q^6$X#UBu5>~K{5Dy8B z!y4e|9_hUd1aU3&rWHH5z7{r8z(-VLp4B+-nuh^7`&F5Jh~gJC3ZA%6V9Msk!aq)R zmtqr-p;ZB!_#dBS=Mv}fcWsChIJ*KU4xHT>O7XX`Y?w<$D8*{EL@C}5u~qe4{tzA9 z(LX<`9Nbfo9XhygP`1jzb_Zqg%KZ30d^tH%z-8 zzW(LguZ%3r{I=*VxFY(G(7(L+6gYKq8RzpYpNcVA-^@S%0!?S;6F)8+vV9jGBgZ+K z)U?rgFas3K2}s3!)SVkp8_x>O4l@LDm$L&k^wY5o7G5)!sX1B-cdO<5@CLtlWJ2>> zD@HbwmQ!+BpRfQPyFt;m3nRq#VaBEiLO^43vN?jC{8f35KtYSy!^SxRa^xJrZ?%W5 zWR8HP$9$H}5!{xQ>gik2)>1Q}`fhUsH|9c07h$xA?RsPpb*%|At+!j1jIw8fXbsT# zQ@HU8z{1$}d5UJiD=r#yO-iA$4Q(f2Qgy|EhFaJQPd|Cbyt~^@)3{vI0V?)`+uin{H-}JGkYOKdr_!L^2I&&)!)TEH z+;>H$aegCuvT1V3AietL5J^(XDlO%$Rn<3#a5`s$UzBS=!#<0n(R8BsxtL1A&BAB~ zA)=$L+Q-+7cQQ0~cWu8$zXTe_=r_K3DO`SpUJGcrhNFBe{oxT0Soei(x%?NOXcSh2$%f=UrqEN%wtiUGx% zo>rPr8!aH8m{6NkuJf~e93fC_u=}tQDD04z5=(>th2>tM5EM3z)(8nCmtXNzs$g|c z*isV`2ZfDQgn`0p+le;Nn}A~*Pbz}K?r>1p=IWrZR)zo+mSu>8!g^?BP}nePu(^vC zXc=ll7N`gmHb$Dv&l*Vp3j3pPscrZoQ1QfQo_mFhz+j*5+k%PFgY*Chi_NOgRH}wu zWp_IoI_sVO53yi78U&s?`8Z*GUV%6It2NXA56hzgDZm{YufQu-Y!H*d2oKwbjYO9n1~ciUS>@A>P%!uoXHuAedhiZlF0=jlW%R4OhgJM^~Qv+&SaR4&6&K; zaO!(?dwASP~ z`JiH-`HQ5A^O2BAy)h9fm^{yz@YR|0#EP@gax!d8)`v{SFPBV23MO-Wjls!8$IYp1 ze_~Aj&X_cWOx|HkI+-4re8!mYl{w))6IM5bA}CS)2HBNH##hg<>!hdxrF(->@ztqV z>j5wQ2Cp?n#aE{)#HjQeR8KZ4zB-kJ=lRlaP~Cl*WWZOaQo)=mDCA8>6%-O>lnk9p zzrkzBsQBuIV`RIWslM4%-bj4GxjuJob`wEDS56>4=kKx^x(T3^}P z)%ptH_pD53F9UScmOj9l?Esuv55VuX(kNxM$cH|?&p@zvkxUr^>P8M}0WN@tWjmyX zJ5mgPit#6Ry@HxHAhZ>(RIf}lp=T>;S^5bY@fNnq3{~72I zauCRTdz@F|+6e&gJz9&`?JYNNJLM(3b{06F0w(1e+*o_Q6_)+79)4-y7sn*UD)raQ zJFUv?+3~n1jK_J4lVgK|6K|;>gKr)z@udc%!V(;G5ORVmxuWhqLJHEqqAcz+B1;9~ z$YK57uw--X`G&tlElsr59`pjz5ZndcENM`{l5%j^b#1zzL_6F zY_KWSYUcV9>EjNkux9?*B#upHi<419k&NmoZC^sCj3SXBH^OV5M;a?1v@|x9Nh7XB zR}pn_fqE~}B9-D`ToY9HQMtYrmCGPGe-AbNY}PbUJXcmj@x0&)u%4wz=CfMIkl&NS_)W|}z5$%KH}g@;)T+)x|ff0o)PN96-9P)Hrm z%rK1FaFJ2V3iuZ6o5Bbodswa1P@Fn~7R4q~&jVU!YOt6n!cC0HVJGNz7Sn}jjF&aB zc>@%3CC2QMEBLo%q1~w@JNWNj`~U_X7YzIS+2L(};gem6S667yZ{mC-?LB;0J*R8_ z(N00&y5LmPx!Hy(?HJfky#=c4V0aqh6a&WWXDuRf!wvq+qjW@56N?m7}4#l;iOhse$9H)cmO8d>Is$&@_>pDYZSd)JQNQ;vUHtbFf z!cwAjVHeMMYNvi1#wI@X5XBnBLoWmjRA?K)4^|zJXPa)B-F7m*_dtO-+@2udXt2>; z0`pp2hdZ=@w#s{QJHZNFNlhR%!bW4Npr$2`T|R{m%q`G@IkW8$=9Y6z+u%krpo?2~ z{1#+Pm6EIf5BAR`g%bWP@|&*xnLL4@e8fc0pOHs8$cct#M$scYZk#!R%V4GbI$+AZ zv~w(N2THqzrJeN@^U8wjAdi~_r46x;qhi-h2*B#l0 zVG88%H_^p+(MZ8Jy%}SV+m>MXliMQu^SBEiz#Za;tg4uLz&HiQxRve}+yRP}A2*q+e>XCc%+`Nece*2IAHek2p_(lT4+;J_v~QL(uG&)E$>P z=jJWod^g%&fWBVNlBSFI3#I6NV9t_lBb%D+y=<~3an%mU2X`>AtyGT5-PVkmM9acS zr25_qCTkh>qGJw^ql}X^L?NDBl{%E`I21@YR&^&qWC*V`hK#rgwL=fI=)i>xK88in4GFU1 z*?P*Kwe%)?ZaF<9ugZh-#?}XP9paA8KVPU0B>-81U%TsbXHR8I@bdH(cTO&$aUPxK zQc`wgN{{|YJ@UN45Z%#)9(lW%GeZ*Zj$o`(JykmX7@ef#1udoy+kKo`U7{7am^w5i zaccFP<$%yIQ@V)}$V^F20;wdHWbFmP!t}G-7<>7M@h6k zi?%b07D>rQtJXJ#(XzJ!y%`%#2b4)nyhf>{nM!sNeSrMJFp5DH_gG3hf|TyP6-<a3bz#h~4w@_)A7N?{ zdNZR%1!^R%p*QnqNbl&)mPR^A!_b?HIjpqQ_$Z0pY_V4dv7=Oz7Ke|LIE@yksXWdy zi^E4roTSBB8N|WC@?egx2$Xp?n7Oe{Jks3QWk^`}iwMGbrPvKph!)IA*^;?)*cg3H zMn9)8BkTm69QL1_Pxqgl{u5Zvornf3=SE~ZozHK;TRPw0q&J=3Oy}*uieWi(o=RBG zg*Rai%(0xgZ5y4$lKasE!-LjoDF2oxUxrPGVaes+*KgfnXz2oS8hm*s9u08{vP9GT zePTZMAvaZV<~(pAoVnLfKv}=PF}QVU9{l2Aq-id-?dX8H3ceW9DU^?PihiYGJ~u+_ zM~}>?epO}WfeXp(q|K69Mj-!y`CNyGi;kGjeAPJ@ z%2Jrm8;>gWqb;Z^N)KE}lv8hzC`BF3(N~Ah?hceKJFu0>SA&FIP?TdZEk}=5()?8w zr3Wq~%Kq0&l%mGzDRG=nD+{1-tt7-FM9Iwt`U1ZNKl!&9t(*m|i*oY!Zxq?7R28KM zE+ooxUnfzD+AnIw8di0!tce=f)J)*P~u3Hk<>|2}o+>bN&gkn1<*l>g^ z?3cBE>3xp}i0J99gcXTF^{fS8(D?LcUn^0H)kAhY!(y~@<5AVXJLhZQ9=MPw-vmX3 z*CT3lJK{K>R(6BJwQ?(o(d`6Zuo8%${9BADo1-55D6o}u;j1=q4_ru;fASiMQq&LS zRRat5;5Ep+CV9hgTfeVT9*7GDvQ9DZUyxmR`5^$|t$(qC^ zp1~LNKu6$L7C`Hwe5i*t4?>h2LRJ-}2QDPa9UCM{QR8g1IL_C=r$FJNoF?(OcB6T> zGl4IQZQz5TJ$gjh$Ffw@N)KE}l+XJciBi^ekIgHBoxtLZZBDy)|&MLIW4a`Lr?_xIWo|mH5d99(+LqNA$&t zvJYL<(KFiVVHa9WlpeT{DF1DpL@8=)SrW(jL^%iw*UBLhLluKBfFs7w#fq{3u^&C6 z9Fq=J@hd%WAyIC4mDx(Nf~^$C`9wJdiojNq7`8I_V#pbb6=gS!!O_!$Z=|uRrj;JJ zkSJHYQlb>KD)D|-UVm>t-`xw8%Hok=< zyj(&nXQ-RtehF^yD!O(+=&QDs1b4_B!j^qd++qeC7QBJqPrzb#AL629o1s9GPJ7GPwln{6)FzMd_WVB}6T!_@Wtzq`P1CmWS7l985Ed9ov7n}r$~8^#V$+?@LYl@h zL(}*`_84g%aPdx30Z-`!R^G;!Nq_VWi$Vx0(lmWHO?##3q`nxKYN%;dF0|MXNYHB> zH#hI zdOE)zL5@;Yu^xjP5O{i& z99fSzJ*s%IRTF2SdSpp(9F`B{kCEaxAe5XQ_3Yc}(VZ_sb2K!!Stka;Hq zG7mW4_=YbhwdLyeyOn~T%34kT3|T;Tk&zB2O1lhTNqvf>%nbI_%)t#KGu4Sq!H-BT|Huz0a2yjAZu$->n?e_Xn?50L#;?ojN*Cd# zzX*JTqjip(ZuM>TKK;PCWw`0w`s1x9!cFHcx47^7JxF1rysr@s1W>jfJw`Q9sOT-T z&mb54lZVb1V0&Xrbw(Q|a?E-Fn!aCUiXV1H^iF+T;HHMuM#ys+sCR@hKE zVjG)ZcS>oyc1CBG4J~~q8lkqOr5el8(mUlKjGB7osa~)N9K2(fcZ8Nc3}uI<9>ilo zwDf{Cj0$M!jZy-^(sP%ube{*3bKkQbj;cH%Ro)q)rKgFO-U*)Lwzn8U!%ItQFe>Kr zpHhOBP9pEz6#bmwFemikou_}RJ-MI z2+A};+7_^q0p4hd&h8t!f*MGn25d8FB4cRjC~JV(-58>!$3AkGc_p;;N&*8ZQN2rI z9|2lAWGl3E&{k92WKj*q!__V`CqV+f~ zTD%3dWfj97hk1cHGr;sp35I~_*MztNJFuDdvB)%9)J8;yUEZt`$q2wMug05Dyy3Cd zpvh@&W?UeOEGjy`m28igg~UT&&;eM$ENTt`b9nF%J&H&jfst21{XF2@9C2O~@X2P< z#(8z{CFI;_0Zn-Dj|RSmNaAUvp|IR2BVotl+}d3Im+@73$&E6T{F*!C%jllk@@Jpc zw&`a@y_5!ZpFzQ=NSYfpF?yHRUtp1N!=fG~W8Umq^f+d1b2YYkmd3UibzF83#-a}# zye(qTftMDx$NXDOv;P%1wY?gjzHN^K$rBa%pu_u}@A5nTTYPUQ zwT{7CtxusynV{stk zjL&l)`35>CEXzV5aP{gCns{pXlE*-Hso})-8G~7@Qh5}$up11~y$>?4&YDmw zKyp9~zn-B926R3CC54GwMF)-qX`FhD^mp)qjnPtDsWZ{0Eo_g4tx?!WK_3T-oP^zq zZcYO7wu^;A#&TGe8#CLUT1As8m=dVQv(6^G@F{u3=HvC z<(UBm0g;~+6=w#5As%N2NM*)#K=ESh63#+111uv3GJHT_j5H6@cn_&CFvSedH>NLt zzJ_@EhCR6m@);hR8PIo|8Mvr5qRhzy3$dq(G%ooGdzuv$B8^j)hBVGPijc-Be#Fu^ z-;l-&4EIK}4k{BR?uSR^H|&D=(VkQ4{AQIWFE+KZ?)a`Jk_DT z70u^aZR@+$_B%~4^d%>8hP6$^Z&hD$Z3jr>UXO+}PD!IKDY5?A*;mI??-nDUC=F8 zG>SuscWt*mR^y>0NJDhx!FwmOILfJEBanTb-k@0{jiRdb>&Q#cqxZ2UgC4yv>d|iz zv~qY}N-h#golWihW9Y^I{qNNXozRUYy4PiH>G4tnNmv&G%?b8+;uY(bDU4%6+9pL`H^t!$Y93wVtp z888xC*~9hg@&=0+1hpQ6Ob<+%DH-TvOb))>&Cd%?wgz7vPPUI;Ud#{tLtYSk*XdFr z6{%=tr))v+GE+8ER$CB^7VE4^bE2wkUgDnUq zRl}pKXry5af^%Q91;J*eRRSmb)l(N-5d595K`f=bd-pfHGs!iGi%tk%PD%~N{meH( z_i@br!<@^4Ls@B}mQ#uDGi$D}Uyd&!O0VIntu#A{iT@Zx z={0350x^ivqQQRgiU8sT_oog^X&%xQ0iT8Cioid9)l{4lA`__9YO}Qyej%{nRyjjd z$0-xdIYXKTQCdkHAw;Rknh>R!wsnZo4+Em~uYkvWcxm6vUpOwejhjMz(jx8JOAv?N z%Q)M69cs>JdojPMsXSd)i$lMtdY|82gP%4iUGyw0R4`5V1n0c@aAZ=hXb_pys-hc@ zGGx+5#TxM$+u2;hr#ZP@`%CP`sr9*8%suw^Am5aAh)k-*5`hu)At)FYhD#`!Aw|%7 zNeDhVm`z5_ehgz!OqurC8k)@FgI{@mHrg0hp1IX+lI<+zIl)3;u$nvQMZl!t;8_{2 zwk587D#VQ8XD1YcL)7JuK1j79?C7xw31EvW8H6oB`WmFD64&;}j@I=8Y`7Pza)?gY{69Q5PP|k^pM7B56{GuPKI$kL$&n+RP`vFHb>p63|-p^uDVJ)6rN1D1sV2 zu^ei&D@on44IOu&tietn0gb+Ttga@VKl2~H%*XRO@unq(>35!tI(1TPF8DlOV@Kbk zbG|16#N`}g@@!-Bn2<@UF-cO(z~rsQgs+e)sy;lHNha_9igNOUQRULaEzQ5S$oLgwT{D#w|BV@%Et znY`7Qh!jjdW=#0%Ogh<|oymoYedZI5$-Q7{#d(e~5h<9QZ%p_aFo_lCbC#2vza*J_ zI%F~pAT@}ulcZpByfcZ4(-X_d>Bi(rV{$>rexrB2q9p*O>6tnb2GXf}JuZqhFLv zJ`yrHv`R7&DVQuVCVX`!GIpL5MuXaKH74srCRZC1k%Gw>Ut`b>(SC61$p&L`x-n@8 znVjo6@!EO2F&T?$XJf25|D@Pw{`5apoUcPPCX*$`M5M^cbBzgKy*TQ0y*TTwc0OTD z-W@U-Ym!Vv3MN0}D`2>zoXo~@@+4#OI%ARwnY`VYh!jlz-I(x|IiW#uy%%6s+iIZo92p2zma5%QSsFaKNX|WZ%{qnsQBtsNh_Ur={Kl;@@L8y zU!BTpLsWsd$Bil`?!Fi={RXdpF)F?~udx`FeuL`mM#WdBnvGHEH>kRdimy)P6|8&( zHTdU76{|tnfD#bf+}$2 zA0U&`>?5=JHT;Nqbvzt0X$<}TSR5KA1keK=IXYb#k{X80&E!^u{}_uf48{xMKgLrS zLWClOHKdTV6jtKlB8_Ez5D|*tAQ7R)A}os{#Ii)lwIWAl;Z+yt5ZVZN4g8jts3pYK+ z?^A%wlx&zN{i5MZ3eH}#V-g;p(hg~mH^N}T3&x-*{Ayn?@WEn-T@g+gIApZ&ZtTlF zjboD-t?;bCzP^Y7Gh<0lhO|NQV1{jsNU;}Xop~Gth>CM1A5TqyKm6K>XipAd5_4S> zTmufa(Wq*;A!lE0wyOt$Wg*%AOToA(#H*?fdz~WsF4h`H)~q(kNVj~ZCd-JpFLV7^ z{IfQ51kt@#lO2$?u_yq1GM8sIvRyZ}bf7|mJzU>qg?8PjOcUEr_snA?h1*N~KHoe) z(+f^E+*S6e?k?n{v`+2Hc*L_x?NX%{$Hk{)-Cbd=)tkHx*Y7Fp;LBC_LrKzFnrZltyAyJ7PZDT%y zJPoID#42%ZDuDVP1AI4*)Hu#$TlSVVLVbh0658Y?4jI^uddBw7y5Y>&<>%SzV#gi} zOI*9JBVTun_L;V~Ol&*(-2B-n<(8eSnFmnK2h%zRv89h{!VlWGV`!#v_C0KEvx4;d zN7hSUm1-dJ)p+acvQ6aRnULgS-XNefoxCbS)%pqpyFjy9KL2+Qu zAlOa)+dlBx1!qq1EFI@_v7QK0u3%`YcB@`=#89S z4z_iY1Y_rH3Pb6S=ei2n)S;HHLx~R?%Pr3ZP-bA1Q$4WA!HaZ~jSX{0ahuY6!J*p2 zqp+T`<;;bY7(^);XH0waUI2@jQXOG-Vp(xL0d3Lt>W#94h3la1Hru~UZ+Z2ln1#ig zYdHI$$#|m)Wrc)ebY+dJEj!lw1yP`v=$)xS=no9I` zun!C97s#Zz{+5{x1>&WLz{9+j3oy~U8?_w9Ss;H8i4b21&AHpMluOO>M^xhCIulhC z*fqhOBXxb;)qTM%U~3gwZE5~WxcKW8XtSvabQPtdF)bX^#__w6glBY7vb^}Kpg$`$ zo4D%9RP@yBNoWqAJZB=f(eu3M=C$(=f9Fk~w%?S33KH82tL;JIOM`I&UXAuh$avq~-l??DCO4 ze)-5A8E+hgU*Pf)^tc_v)h-{Ya^1)$s83a{8|g)u`7m8$PE&e~NYTX~^IvMgo?r-< zdW^MY3*v^8Ny(0(ka2j6M@PPX+5FddEdJt(YWeNj~UHIjUVz z@*;D*%iM@SlZoEEn%nBKqtn5 z=3~UDn?VL@K0@jcuXm3zXNu0eiR1>^%b#HsK=wvnp^$oq%Q8lDhNSoirztapFl$TT*hqg3Omg|#d(;(9tn^D-4kZVJVpVFp7aZAmc~ z%3wnDg3;#Bklrw(8!cN+LAJp7-h$mKE3pa~qn~S{pULRw6c)3cZ(sCt z7B#(~Ezx#;I=dI34aIEI_ukjmvj6g>8si_X7y02Odek0hOI&+n zI(tKy?1|XF{x&BKXxg(=x)enAh8ah$G~_KHRU7*rSHL9tQWfa%W763PoLsry>QZ3X zjBw2uFfHeRX}R=^g0EZ)aSU>roH6awsk)O)`IKLg5}@Vx9*ap(z}}NKjIw2kqGZ0M z!xv*~kDCLVwa}tqLcTpaLSz+u*@Fjsh8p~w^q=k7-Bb7poP`2uu%1h`%?hL%Z=6NS zt_1xcDzUWYT-^6S+&Hhc|LCqY!1JhV9hrL;Ut?6=YBlCz^Vis^%T;5dg=~#o)fyW{ zIO_*BwuhvEFYqt;IS~f#F5o9>Y>YHvjqSu+cHqNiCs=QU#OA9GWT+yOV6zd`Tw0M2 zpC;HzC9l#1J#798-S`+)sAzq89V@KWnqW7QLrt(kw=(6}@fCom;fvL_?ZeFO>LE>7 zq1?x@hzf0lt@a9?Lfg&Nz^4B3w@mg>)hg1%=C8>2AE$~GZM0XVT17S^Id7S(nQ{># zeL4)>-HD%QnQKTBR^&>&Em)Cx124$u(^P`|$p0aW{OC@+0gr5r9(LkQH#THe<4Y$7 zH*M%*vbfOdm+jfx+Oz*Nomhr)`2`N7;X%@qKF)1ZhMmzz1A&b#uojNWHz}>b#SH2E z3!|PGcP}N{CMtEI5c{@DU1&OcQ~E!x%l-{I&)eR%R0ppPFHvWhKjRqkXPx;R@kL9m z176Bra_wVw}yvHR^|-4_&P<549_y0ukB>46K0 zvT2E#8xy5PnopF?Ae0Vf2ekJS1}FG}D=_ere~Zz|9@r7>TMdWAzfaWXZd$c!n2{d1 zkSPEAScy{9SkV#3`9#?V3K!*05~Jr0z8HMuVnvyRIW4uBGGXb=w_q%ufHqHH2DR5AEsSlWvf7v}sGVg$#}Kl*jdw`9%G2dZ5z<;(M!VVbVR6=n`Pj%2 z9k9S){1FA&UXfX6q)WcpuVVQ73c=L{8+Qf~r+}f2zjIEO{m0r|6K;8?c-OXEup`

6JE!#?oTw>do5Pyf{14a?8KYiu_cc~oh@qGlTdbyM#ABVtSSVu;O2#_h z@~2+l93=K^Y-LI=|99~TH;jrGHlz;H)5-M@=@G2JY{L5ej`SuhB4-K=NL;%YWwhO6 zX#;R>SmvUwyG@(Kra^1G^5lgxS?Nu8fw9NGEnQ2bN#sNavcilew!a%$CU{?zkFvDe z^Upj6>?uc|=R|=t-#LBxuYUa-A%32ltpi5lLRmmO11j-4=@<;Q93o?>L2XFbQ9JWL z$V`zqpF&AM2~3>R%YsyKZ#XoqUk*`jgpLge>HI*E^fX%H>XxcAq;LCwC}g@x0(R%!W33m(&`hWhK$`MMUo?`yA}VkLm@3ViI{ zE4;D(ZrZ-w2)kjV(5J`fPCiWkDnRvm4cSb%H*=e&0;o*X)-Og|hwzf9CCG`>SCDA4 z-bPmI%^QU&G8;mHg`}jAU7{Q1>JC5=JE0I%L_VjxeqoBZSK7-6Ysd=`+VTx`?JYmw zmOz0Y-ayI9SZ);^6>l=i zGlD0+>f7AWM?R}=Z_9oymYH93{W4zy+mMn0QOqrdw`E^kb*vEV?uDrgC{GcgtjT{YKmYbGAae zV)?>iTGm!gwq>t}Jii7$v76CSlzTVGF)B3#q^s_Zd_p_iMehPg*!K|9*el>R9=q6n zPe_TzLMH7k-`mF3D^&=R5YJkgD2 z-U|Kco2fmHT~EiAkvdLL6uE(wG;XjY;Dz13xzv^EO>^FG8N?6R*LKD+zBgs>wx=Tx zL#$#M=Y~gNe`X`w6*fJxX`&h34vGROWVF;Yjmxp4Oa+Bx^tOoS?c1JP%yVhT6HON@ zh+|mpdlcKMeP4l_)|t-rJW4wAEab8eC6M?7rCemg?STx`ZM_HwCafnIF*~KDJY?1E z)F>Mv@%oRq%}L)#*K!LwtkH_Po7D|{cji9uVm@g3z)cacFa(q8ex(|6w!fQ3Hk;q7 zM`p83ZjiR(uDT1Nr9zF7lPNeSa?$<`@|9jLq9Hw;r8D$;=+TFzao0gaO|s#+Eh}kf zCGmb%hh4D2?jGRP*d3e3WOVkfboK!l&gm~RHYT`{Y$vnSavjbF1&N!RoPqzzp5U8~Ww z=CAtxKK6^b-JBRem&}npB5?HY7ivh2?LrOGa6#-E^!pRIVj#rN5xJZT%@tGzQdE$$ zHroqFA=*ik-WR`6gB;DJ*rj-}=?7;aM}pZc&h$hLf#Mtc@eYA^lSAq>VY`S&h?y7|?whzo<9nX@Fv0ft} zy3K3drTidx6~H04+P&YF%VK_S20e~@6qY*&?dadAyvnfBh5|&zfP-U}lY`&TRATVk zaH?BJn##K4+G`8Jupl@$1j~rQuPmdTU>lSd^k(xCESoEXY@Qd(<`YqoD904au{PJ} z1Cg~YuaCJ*Gbo92$}YxoIXX__2#~8J9wCQClBpVLUXTo!?kVeVGc$fsIDX-RIkW6lF!O^|sMV4ZdHD$EL&tB+FQm0VZ7S)0&OTlseR z76kQp&_$b}Tz&8>U`Dv32E)N&J^J_1*~sO&4F}#pfsdBkaV-+OABMokWQX0Jy`jD3 zmTgah=Y1LqvSe~Q=O$J_Q8^U+zWV9$86NXtUMEqawYimcs*cTbZHun$ihSR__=<54 z%?_Mf)j%^&m!J&WKTsBw83R8a_Q|wE7#7X9+UvxI2jdt5&OB?@NEl!66kG}`ljOTCZx=w6eI8?VU#lABzt9+#=P zq8=w9dQMZ>?ki4HDG0?PMTL4y?~4PllZv&+yWtoC`=yY!zBmij8A}28&I%*e?fH$c z|8;~{D4me<+*^(P`a7xzeZxjI@G0^n_1$Xh=T^7+V&anrmWGvhacr@YOx{ zR+-IHVWWbkG$Og8$`q|t=Ci&VQJTcU%EYiBoO!^ES}+`l*I(T@yXdfOGDwZmt2Vj( z>zA;5+;9V$vth5ttC+(A^TnFtzSwU1U6C*Ld`$I+PC&6Q_N20)BlX3MahbQ)&=;ks z;0QIsamzPX2U8;{dv;lv058f(zam{d}+>2X-pHzlo zFD^|#3ph3&SlNqfBvIhSHSq<2hkDp8m0a*Z4JG^8@m9{_HKa`tzkCh=YVtRQwMezHL;xET)O4cHm{gqtrGPUj6JaR)6fJ?8VVC^?^7 z$|fiOs6wW&kO@aK@Pz*zy@d_c4&P%wF;2i)A2^=sq2ggi7uwyD>WSK1vR$Rnty8?J z%RFTiWyu3?Ge7#`6LP7ZaB#F)qJYG3|JUDwCvZJ`DqIbAjtBYGU^`I)i*pJC+)K2p z!PwqvBCF6Mzdiz&5za+e6?RQkv+f8>Y`=nKDhb1&I(}8yYw^l-;=X1MvqP*|UM+}V z+!j`W$Ko#x^MS|gR15;x@ymAWL;;;-B26KW);Q)GIwkYZ+lwx#DiPJEblWfpwP!Nm*RmuL&5ng zo4E-8kEgct6N+1qirM5xxG2lst7uX7&OhfegfHJ~H-fx;tTY7+uNdr}ja>ka1Dan) zBN434_OOlG+N_M(9Mrw;07lV}AtywLTYzq2P)%7YOXycPDue4QMxsPB0}^gzse>K^ zu54*HfoTzz4yB^Cgow_Ey=>S%UCBs|Q1K8Tj zXTX1oCC&9u3`7;>lBwW>CT`|9vUA-1VIU}J38G)n)&|!LVuM9U5T^QWwtFK^U-b0?=L%<{` z%)Xi1P^GdVo2@A*(uHRrl_mf17TOAIJwibjVskaw824y;#&(@BI@m356uS-i>g?$6 zQHe2+8J9dujJmH>4g{4`Yw8u9r>!1`lSRQ4XE@mM9Zn6$x>Ta+Q&_X0)HV{aD^$W7 z2(u|a4I^~=X@P8&C;aC6=%7+NLZVt5wEaZuk2pzPYmJ+lJ&nfQa zmX*MK=7*?W!3<;V1QeZ1F%@;eOrOp3AO($ZkvFd=~ zbzsBI3m}GK|IZq_Z{lgdaz1w8NJooi79;2E3*cbwKF@X^6J(&9;iPk>3C%i^3Z_*< zsr3K8r9$`IrE=f4b1F#X3{J8hS3wk*WW|0ZEp9Zx(!~}xK8voXPbM+HlcEW_qA`AB zS40yQDjuwuIwZM1KGhw}$cAB~?qP0aKwKM1-G3}7UVEI%^Tbq8Wz^IxHP(gbiCHMnAnzoV-&8ETDw zb>uRwZ5gE-6FJg9cyxKAm!pHLB7;W%S0fXEm%>o*ku$P z#RhCEk76Mx^F69;qL8ix`L!O8y-f}Jp+^S5u;x{lQ+_`K;L%~2d6>67vi3dzCVpi! z0Oq(CZKVNAfpw==Ff5UcrD@2_p(~7(C_ch9$AJzO*yTxwMk#zyT7{B0p~VQ6N&?=C zYN>GrtcT0>Aas`AK#)u8?Przaq;7KOY2D{-)|edYO+k~9SHf|K4d!huWt-EdEpmoW z^eqM;d-jp#Eb#9R%&dYB5jEBD3fVPCno>>{yxskCM;K1jG z<%`zpYv6PF>}nD}Sxv>x^-4NrIK%0Im1lWpF((nu^3L%k*RP0}k!O4k<8OhgzJ91; zCYnLxnONiL6lWq$CPzHg9I9)PPuPI@Q0{{G-`TX_8x(F!T>VcFZJGakAb0jV@KN#u z5E+XZ&ObNuEjB6b^Ut%8BR2bQ!sh>J%{IWFT)!WkX30*66JVF=Yo5O^y=mMJ3czZ_ zW~XOfhpw?iNTHWo@_i7wXTo4gS9HCs6xQw7r&@2t-zbVXygufMsV$}(N?3YQb`849 zsu>cbqK+G0v~|`>tt4(qc7joI5W%KZh0}{qVHZNd?cMGTt=OD8EQ*&TohYdX4*urJBpMbGT)}hPy6EIJnQl)k1YWoSu zn-;BTKY@77yEYv!n3tgPaS6@p1ji*_b6u6yX*(_qhfm`tXy-D;J)9jEm>tI{f_Ft4fET@5SVQC6D9? z1$qR-&qqc%CEKFQ40=h&IEYRYRrJUx2i`NzkRGUgSd4PyR?Ykyx6g1)!nvDA1~w1T zz~=QF*z9`v4s71}xoEgjwC%QRU~}o7i1H{M*j$X$S2j>tU{LcEteyAGJnQFZQ8Vx3 zJ-XrS!KL-KV1}7)%w-PYp%u(oFs?At?=&)PmEl4s$$Za^PYCc}Ea&WXKV9*VP1E`~ zZ*q!8W^a46Z5ZPCsdw~J42p1fcs<^N!4;QC8Q3z)U(wh~gScQp)h5HnKo*Xzj&zP& zyGrKYO;ollSI>RaUdkhM7Z}yt(`MUUGI3#jB#Fb14L1_jq11iYl--CY=7!DJ-_4~a zc>V>OyC|KYDMZy~Cv}o%Be~#sn~wCok&|+M9^20U+X-Uwue7yZDQP$MBq=KI##RtC zh7=2KttS;L7F+8TF9vMnEVQ+rCB+;tA1oE$s&B0yCRH$b@zGDKb0bCBnsaPb8Y{#s8fLvHGn*H-d2^Nc=-3^-sMhHdC)jU+ zWA|7t^Y`E5%y+nJUrx2GRT=+h77b*)bf=Pp?P~2YZ>%g1N_eaJM~qYl``Tl+4<0FbB~eYo=hl zs}Hsf&-1`H*}s~-#wr}uJHV4|8!>Os8UEuq-(L^!ZXMQ9=i7UY(0z&bZdpzVdVbJ?Gp-FOp-PMp;OUf25SJV~ zqco)?(Sb8`xX$fi%P+X$ZJ2V;W;6|LJ2&t)i7;fYz_3tz z3Kqe&XF_j&7_k_JNhlrE`W|Whid|!%#ry89_P%=$-fd%8NA^G)&MU6^c3burI<9yl z(p$p?0qt5QCettzI%|O0O=478~0!?yL4Sle2L2Br1`o+p8)6@Qd6QSwMS!(!oO zgh_+ZY{=-IDvX{1Ml2p8?P4U>e;9%y{gNl`UubB^BrsgQD^hO3pGKuM2PQ)9!eiyCg!yJ0!!^L9Yy*I!5XLiY(H z5A$Rl>`9nSNOMZV4F`MLN3bV?35^RAC|M8x+p*`q3tcHdNg{wN?%H|ETF&^{eE?}W z(Mko|3pmU{KR&6)08>F?%mG{|3lrQF)D)XGK)MR&{Ba`If$Z`c7`1#8r<;@?Yz+0I zQ|OES5*fs~D)dKDi2;cK$6U@CnCvklW42~=5^qRH7j^TzHNfHOo7tJ&AQ-DVW8UTN zQtz_l;NJDvkg|C1GR2)%5h}*Te{U5rY8ByPa7aN_MCd}e9BP5QvX^xtFh9T?fL}dM zzd7hwd7aRrP@FR_f%lL7SMJr>Q41;|^l=TA&NVg|*NPB6^6Tp0D?PwkoOG%GF9g6a zcCEp&Ff7k%9+6w2u$ilO`dC=JCau9M{}4T^*b~H(#07s@~DUf)(5RhXMqLg_|AUrVuVTyOHEKy z0f5~;{UT5b#}fRcd)4v3#1r^m{|erArUh9x_4Nj{i{*yCTb+(t*a+1=5XMBH<6(8I zx~(mH7tjf)kXO1T_BUkfV>$ z**+uCjztb;P%yTa(!mVM6n!q)`|>;5e*-Pj#vOFmQWZbyIlxLPDe53}6VmzLowW`} zD1V2XN)xg3j5$T^R6pzEr#|a>CVajTiVlPN5_>dCi5juhaeT-j?X4`BqG5;j+eAZ- zXQ8$+>k(htM0sc|VVh|zVL^xW=ED&=ZIE`yu*~#c;?kUm(i}tmW~|Ky#!Pp{1F>F<>@1qh#!$8cw_yQ<^X0GaW)_IBTF0s=aLuxQR{eWE;TN zwak9kci(M&rRU{kUN?|p9&oeTPkHrQi6EM1rsM* z$t)N}a1V>QKgct-^jcDXC_|LuvZw@=_pnHS!8Fi^VD?bA`Zm9(^PZ1JlrBH)VR<3M zB;l9sVUZ-YhlT18dOD|ThR6;=*}fHAQ7^}&8r<|gSPFtFU;qI1<`Fn3d$S$^Iv{ll zQ#!10s4evsR=%LR9k6&hI){2^JdH9Y^#5E(_PVxJx29>(XORydWe~sVnCNvJ06(?q zv-+9Lw&$R^oW|nR^St(x+x-L}N9)IEzn7KG4EznkqdFPpFPcq0jH4C3mu<%l(cj^( zU|RPkoyyShjp~Ptx4a2uA5_@|pd3FR?1x>SS9(O)54!^7y4uNN_n+!+hz^?^eisZ( zcpQ}l509hrrRX^7)3A{T#1u4C$(o{r?>ba)34%=$91uZ`FTmGb9D)r8d=Fy;o1c7G zZ7@mAE`rdog&BRfamn{S5>lcmFd&X#!#Xn44@^{wG~8>3UWK)Tz#~Smv5H?Df(_Gn zSRmM(^&!=R_5v0yr5P4tY>(in0}nE{h?` z1Pj`}tG;9&#|KtgL9dE(bGTVM+&EZWL$W7?m>4XBj+EOqR z-t=7R-)UQ-@L$ZoOKjJ^?8<;9-K9QW6q`Ld&|~aFfP#`MaI&atg}UFP?dQ4DI&qS{mjI9|mPt-J@}VPl{^ZCOk$~5s?(W=~kP3;*ehx zX!F8`U_4L;KZ?5sc*6xY#A8B*x#g@Euj$CwVfZQ(_a63wxq*%93>z@b#;Lzdw_eXa zCO93m4M2h=GY|(HSfm~R`M6FT@Vpu{9YivFP*e`hafJXNrp7RivDqrkK-zF7$_%hy z>W^U#bt%sp%TBXrhr~GM%~K|IIF^|i4mo2c88kqkbrh2GVkjhYpt6`D2u3vwVVfxlZ0%-{#I^h3rVa8- zR+1KyIo2qdHnD|*i7!wwUR#bp? z^2&jkzk!tn!zs|`l0kdzinUkX^a9>1MVDu$+Ol6I&djD+woc4kGf2QQ?bx@aqnGV1 z6WgA_?QNij#hU2AtYA9V(RkMj&~x}Q(pc?b-0V`ajAZyVc5g*{zW#Ks4}k~bM^}L1 zu9T25=2ngqWAMdo)q62jegnQ?F_m|vAVHj{{+Skb?5>ojBdeT@=tlK(`_hT&{1a9@ zy$)9L%paV{$MYVGH>z;W^!<6LV=zZJKK-1l@Cqah#AGl+WH+735@RxGOb$LRVDfom zBGT;m^fX_`71Nn$ho3XqhiJ&j-x!naA(OWn6On?+$BYSIor%T<&g7MiV)8^|^8Ap= zbBu{d!Q^~n!dGXa@uM?2%W`t_pGYRZ1WS|2^p%o{4K>H7k2fZKbtZl66`jd16#L98 zjmb#JP$3c=uBR2#rcFWxdkjuCS&iGOhgJMKjSOZ-etlT z=!$|%cKkQUZZNW#Cb;NC70Bk}M#Wdp5tSIl5|w^~*X2gVSEpJNqtb6sturdVI#qX! zO20vMno;r9sfJ@z`VFdjqvESmv0ViD(r-}xFl#j%Q6){sEcg5ksxhNtP>`<}Rku@p z(5U$8R9-jY6$t+#qY8u%c^6{5^cyL@#Hje{yj)qtE6|1}ql#&R+b>ZC2I?52iW#Uu zQ#{KTeEGnw5Y3{MOf;cU@OH`-9e3wZ5{otMwJ>>}5mg?3TfF zwrgiP+tJsaP3>sUcJ!b-8_Lz7lh5-0u~Z>`O9@t8TEAi?Newy?x`fn3G130k(GsFD z5RJu&uh+~4;E zj$6?aCCBUjLkV#`?1$qi`pW1-$ay?<2R((Bt~(O{yf^W=gPDVg3~3RoCwJU=8EUl%>i7`5kLMCQrdWuJXP_Uw1&whUv; zklivYpLVi#<_+vldy)T{zv8c4YPh5VUy;7z&PkRfJF3O?>zBX@Vu{lYfo`anZf~o-2XuB1CoY+!yModT8#+YGEG}0R zMo2$%0ZG(5HV{0M@4$Pef4w5baU`>jaCpUKf_iM2o!+@)wmc40DY*ZJS2!~QycOCy zl?zupT0M85p1GwGCKMR6chE=eX6Y$}T-P1hhG9zd@HY^%U((8rxO|vTURsua!ph@e zwb6#wy;F8pQP~h|S=h^?5kn|b3le2rUn!~K*j#cVJ!)Q?mT?vs5O`T;41L9A|ADlBYw#6fk+ocEpj`DXHmjPhNcE z>=K4EO3Enl+A+=H#{$$l##05he%Q8!i^b&oE`C%mq8z>nZLxr{NH(>7(Q$WN7{raq zA^Mr55T?-I!?)%%53gP`0MMsrK@6D;i@F&J1!f8X=Z%H7>e=PCYQtA~Ncr{fy>K`=vRy>sMh@2t zyO`XO#D)wxQ;c{q2~K&Cl?0Uo5utucD~Bizi;^`96G|{Ob_w-G(o6yO^IyQl%5~W= z%QfNUn!^SsSwHmz2&o4&wUsOXl!eNL)S`0XMdiwDR6zk`Dp8)2n!4}=@b%9tQYtox zt=Qz2v*VP*_S2HIZYXvEUk*otv$$|1CQ(DUWw)S5|AZd-F+AW%?9n4X%#WD&!o&TEGCu)x zB!i?H&kWzN!yr$-osV=)*y7TH_ViMB~h@^Hs_F=u$6lklxlJ450`8h}-S_j&KF zh_%&X#n_|2OZ64U2wl;5Hgc0IRKX1;aN)6;uE$iHpr52Ww? z6~;H)mVTL?)ZuzfNFQEe*pPwv+c!-)o9~0oeoWG&aZOAKoBMFz>g7wN&4=qnet3x< zwb%v9N$=|z?>{Z!-<+6kx%q8N&Gp} z-Ici|xRs`kdq?3`Q37b8iEBXl%j_r>0eM>1`sMdM9_1iVty6^GPH$DIqB}{};@;)) z>7lp7{{jXQ`C)5>*p6*^lrc)dQ|BFwV~>%lVSxHPNWU3G6jyt8H|+|(u>0Z{{7i>| zyE++|9iVs9p7rUsRB~;$8Dz7_ur~09D!XY?;zA8ULnN$9LS|i65OO+uQ(U&UmB<#` zmoncD+mP?YY-;OrW}U8v>v!CWFhgnQv?;Q=+O& z-^0+y0Gk`$A(}u}tXvoh01x`bVcc2_B5jD&ax<^*Y=0($s2phpNjF+ZWuSGq##M4yKp0qb5L$VpkbSavsmVNPuX^c5*a> z46nrvJ^3W1gWFC|V7p9ijoKwPHzA0o4Y!Zq!rRBKbz@s5j%Pf|6i=~>YPD5Ht)u0K ziL3vOjT3YCs5wk9AHb};3_9lKtuC1(OzQJ805(@hZy#t>maHzKXdR{4+FJg5+bcoC zSZ(=N;9g*?8H$5Y>{wE4XoN7<@fWXB%l3ETC%Z;Ir{DaxV6S>kHtXDM-EZ1@udhA4 ztBp_g4`%e(N_C2zwrA2 z3UqIK?M=uBT@s!*fCunh#GOK}uz<++mg_)VyIN#L-9#@^Kiu2r%_lVh+DQ^&MQ}{n zI&UnD9|z}IKo*Y$YZjf#60Ko^MrZka4#zl zV1tV#RqqAlg)2*?>X^v(rY_iR$kJjveMhFLH(2URQkvG#SM zCw8h^YG)4cBbOtat5^GFX)aV&xxS4ntI!zDt}5)cHIl=%%wc9SBpO3eH`Atk>-SqOtONXs-Xup8S>5r# z?;snHeB6*c3Y3yk@_%DU1PUbI;?GDJMf*J#DU3bX-xq>K6&94QQO2Oc8hzwu?ibzV`+Su^cpwAl@_ z%-_mvR9-k~mfl?=0czb^R6p>PZUQ2#4jyh~@Fdq|Yi4<-@{E^-Y+aUZP04IcmW_|1 zZ0(jURWch{1WMzhC|j##TOMXhB6t`$W`Rgwl&8t^G>3U~Xz#Kuv7-1W%9gNf%SvXe zvTS@5WvjAmOG;*&12aLx^r$X8v~c&YAs5g24hTDK*0S*tmKKgfk)&W8a(TDiWrnX& z7QZPLMRFnOY`$_+tZ5v=V=#fR)2I)|Mc!8n1N`wxI7%hW+17%h$=2|Nj}T2bj76HL z*hy7W#qu?Tw_+!)SYFlEaMZqBHn9-~F5oDQkD}aTmYbKdZ7_$89kV=q6y+JVJiN4B zlxL6S;iD+ekmcFs^Nh`z@$o#=HMb#S@^o8;;BIBR-ib=10!$&T!|u_rIw_;)=1^9uTd zAq(~Tloanwp1-bv{b zxbr=Z4lvw4>v`P!Mix(#XgxE0Y7G0|IqZLr{i?RVt1y;an*VgB&IxUK=HX#dT7-AL zSGyI#hFLb(3JZ4LZtFXT3arA+nROkW&W_BnWXvTzC{^Qi3C0v(pvx8r>-jq)+s5JOfzM}X6S`AE4Ok3BX!*2e}O6cm$ zJO=&S{*LU;hxatZ)qgb^^PW$21u}GHJ8}%^Hp@mP2s*BN zt!@hPHmjS0(|AQkP7)^UNSYolq9eNj_M6v{T!6}Tq)V&Zkte-d9Vu97H4I(Zj@*cJ z*O9tG2zk|gL7(=8iM#vpijM5XBkIUC__bh11_QIq6v$vT6^#5`zeXoG#e;!%Jrq=# z_OPiSvm9T#IoC!<9gY1r!Ce%H9qw*P$l45dMQo6*2NO|KsL`p$JWD~|p zqjDAyj+E51j@Jpb&G@)@vBZvV@Y(j_iL%1!G;NTAwW1%?jkUT zqW=PM7q5#Y9OcQ`27Ufno~DK+}-v z!zY4%)X=)$4KlXyMghC9TjA|k_nVtrN*QwU)X(OwYP+I8vL|>1pX~T_lt*naw6l}@ zKB_=-gS~tNXGIqZn|UY-!^&pVqwxU!LE^_U{NNd@k30^Ghr3wctyW)84*izN@C#8+ z(BFQF_THwBoB4~i&OCSsxd0{TEe6^A@;KxbgoG)@Bqdt!DKp%{&#?`v;i`(Mue0YVMYGMji%ETN#yb^J+&e`Rar*Q)1~$X4!+6!O|J=99@$DWJSw^ zV{SEygY(4!SKQt3`sndb&SXJx)O9dc*Ln4W4>l+OLOU7jaOw5(t1zbJaS`S#4=!9T zYOL$qp7Nc$cz*5bp4_!9*ep_hIz_2FnR__SKTL5nph=5KIGahTLwvBi4Z;Pe6pDjbE(L!hDETwn$M*F_+S48#{!!#c4WfU z;wklPKm|RW;^-j~!r2(paMhJ*ERGJx^u@c=WCF}`mN8tl8wBDFf%$+=yYK)-$MnlouYStdxaBmN1adcS8IvKEgBQZ0 z3(+sT(1yfbjaz1zBxbaaceB%NkJ2q{%?moRY22%3Jj8zkh#Kh*sNqI|t;=TGji<25 z>_V2I1%9xLHom_^3vQC30VCUA9&OVSr ztW4CMRk4T>d@JqaT)p97TX5G*z?l~vw-PtIrXUEWaK*%M zht{Gkfz{qU`HQ=>+UXnONFa%V5v=yiC7Hh4^yU? zlSL0W5afZIIz$cxyNu}+1;HdWNG~Z_lZy*;Wn}v2I!lCY!jxOxo1MG`bfMT+||$ z%7*3WQI>*6GCN%fI-K|R;2wM&=dmG9OkEs$j$u(a#!P)!Rs-%zak}Cj{HLmCUWrzM2tVQFUzfc)E{F2>p9{RM-cGtk)&?nA5ZNmV0)yBX8oDaQK1%o89cD`DI% z5O<3?Cw8+qJJ8NCk_}RN$Tx9Rw(_<-f)Y53XUSu2bkooqlOJLzvq6r;1LeUS$-cns z=)D?lH-T==V&FO6e3J_i@M87_Rq{`da4ql1-Yb8>chV) zN8EnnI<{b^gExb+ay6sTnH%I_O9d;SarP{c{wu4(L3bKPRht`WiqdkNJQ2gfjb3VT zHv~iM9-9h-6uw+dLv9$brm-r_rh^V&g_wK>A2_ip?8jU>Hmm|Hr7uKdlM>euD5kL* zKPax9%&0M{4?SwaEzR27BKZyVqNAE3=>g3oA>I1mY6(Ve^vq0Hns`bGNmh;dXq2Dd zo|YeWWU-)n^6i5|4opq|bAM;>YB~iW%AWJy6x5uBLdmI8@L`LeD>{O8FbvKPh)+SZ z<}?4N7kClIMH$G}+)wWv2S+g zO(EoSvM&7?0}_5}cCNwHs@(MhY&s;TUOh(oNC*sJJ_5O`(J&6S@+)EN(6#flqWyKR^eN2 zxf6Zcu8s-4yb$fg39H?J5n^CSbroYJ58aUtE}%$}iE&QuY(rLwovmVOkvleuJ2FxN zxg+)jerF5Lh@GuCqnVl8p6ZWHM6hbYZeJ35+oiE;o`jA>JBHB?d0EpgWL4YcF?osM zR8-TbmZQBSB|MUue8bTt?j40jsQ>8yLpEThw1t{2M+eBak&~+m{C{z8pBohc7^xyR z;?N&64?S88mE*AhBDZ0SbE;CF`00B!(0_kr`=6-^~X2+BH;3psFRc zBs$&;!3R=}uRI#CMvJ^PrUC7WTy1?~`e<}CJmp=j!YI91Dt7Y=*w(vy2=1|ZP3{ET ztj4a6i`>#S;PpFvUa~}sSZNl*Xa3=&Ur(~hJ-7o4veAM!G#g)L8j%4S4#hXa*sj}| zer{xmZJ(QL``lc1`)onmfrlMBO?-UER!@cyIaa)F-_{j;6+@9w$V%_03(n%j2Z;C7~9j)9jAUB$(kg42qc@jl z91CT6P8IDYjOGh3h2nT4^J(+}+(Sw%(0~bb=%{Ta1VJ(h3fP0r{O}XP_&Tk3l~z`ZI9YQ zy0b8i3mBD4o>zi1L8CmI&fb)6xh>stM+a`JWbeQW3U(_eRK|5Y>To~zW92*=atK0v zuu47e#Nu?kt$}!Zv16Qy_i+?fNXeAoq;I_i4ZVy!>ckJ<&0)BXZd~wt?QO{RdO)&j z;<-2bX>jGsB-#w5&k0o2@g&u|kz4*oYTt!7SBv@^c<vzC;KmIea&G z85uy(E~XYbgxPy#Jx)ad1rAp=lQ;`}4p8o9sCnTb4t}#)e3`#BsxaF8Zc{$`-fZ)D z2tC9x&CUqNG=CI~>3@*&T%a5YYX;bUI>C5d$g?|@E!4J^S!J*;izZIfJ${cOlr=mQr& zoq(>WLfYqh0lhmWpr1SmVUTLtWhhSqI)Z7BskNM+FN(2~(+~vWGE6pqq`Hm8bi#{Vm(|@I>sg7#WR`8(LHS;5sIkM?n<|mPL=Y-L%voJ& zQ7Dw7%yT(T*MAQr=qF;Zh+G0M#^|IMN9(n zvVYA`H5c$iJ`zW&4`6cz1C;GI0LYxT6mPGx+EG~=bdJTz;qD95I5vcEfV>2Q2R-f1 z)4RYeAv&xP(;V1HcB^^B9BQlRKEm1gtd8j)=RgC3`;GM&R41IESUNd*|66aY_kupvrht(50r7E2gOCVa zyw|UQtHn8<@f=R>#(m-VHFqHW7%MRZ>-K6J?Z>#ml-Nl(WSTha5nF=eAs28IIo4)8 zx2PD3{V2wE?&P`Z!eENiI;`CqA!UbyWtRp?)bQ+X45$K*0=5|N8NN%hdkpoE%x0EYzU(J2)=!qUQGtfL&2p)@Jz zz*uW3j*@78%gJ7(G+of^@W15DyQ;^jN__DF(xv?-g zOv|v(Xt4**q)8DB7<(HfdyA|LR(8E5g{T>*X&0U(Wmji*GXKfnK?S$n+zNK6R?N3F zXiyXG&u3o)$hf7!NoQ(-6|KC^+1YEv7eOqLT}DpMaR|S*yagNeQEB1wQM5qb3(E}d z+x=1**ispc@muvQa1HbAH)5&$%<0hrSb3@JXGft!V)VsQ`6iG_bmLNav?JUI7f-U) z{YVw1!}CW@*H~yp+2oSh;DB)$Icm?_4-J5=#NcD<+MN0nV|}YS8pkF3dS1r8H{cuh z)4S7&$V7j#RQ=F-C=O5Vqn2ITg(XNd?ZPp5W9Hv2$UJpRl=&+7J{R6P;;kLEB<<-B z-r_jyME$m5I~K8pzA0SjFOMzs&l5Ev>#?)uC&fEYMNsL0}6-DMzn+L&G z4$^o=q9wk1<`s{iI@_-9t*XD_gy&28(>W@pS8_-F$DX$B-83^NNOry;tkX3o;;7>B zsVpQw^F)%Ex#Cq2jqo#s9pcccDz(S7syQ`VW)temX88>!e@AC|zpK3?zlEDaHKnE> zhTHgBJa}0s({!XKh$H(-@|fpfUwOr8(GpmBv0VSk2=d6j63YWj_Nf{4s=z}zusyP` ze6IJEqhC9+uhbskS>0E5b2VRRU%7@tf^E^UI{&)&m360*Z5=-QN>YdWN|I9h%5z?Z z3Rc`#euWTlK6BXUx^C#yx(Fs*lw}%Qn{QR^_=f3AA%{{A@3_k zk*Vyyau|uWulz^6&EHq{#xfV}D=)XCdHc#Uj_fO`wQ{ClNA{IR_LbowZ@GQtHrq|j z40Bfpg;2DY+j3@nZ&qO+xASD|<7Qq*1T(ij7;X-CouKu?Hg%?m3@s$6-zu<>Xs#ph zB2ImEgivfHF^ifGbI%ex97fA=gs>JySZAnBR~-u@CGHxxUENnzpLu}$N10G~`?jlN z_MkU2HL?d)0Bvm&xq+lcS4x=Zbb1mMkN`v#I&LS0Vv7!hsm7~p*)cCm9ggU&{voOY z<(4ciX;c$*L$e~i9X9)Fp8{CHobhy2729ifc}zYTaH!p^!?MwKJ2R`;4kVL=~ruZ2XlfBSWL=KSHCLv{i|Ws>>QH@xndT{3R@{ zrBj4e{bl=P%`~Nh(r7S!YEir?PA6OrEgC(T9N;TaXh`Ox1J%yqaD9QD?68b* zSAjL+z|--YfP)A7vv!Rzo3FW18*c-arm2Y%ckTiw!}C%gO$;n2hi$bVw6(fG_v0v?& zOPB(a_=O2FrN=Y5>u<+pxKR8J;GQH+?64ID>h#AIALF0@1Mm93FClIzLRY?1`K}W} zNDL)rpjk=bU4O1g9H=sw)5+r$4$w%=`DbKqhTxFw%TZ5T-};_b4_QwGggqVg4aX~f zxl>II+iYeCC82U0*%8hicJS#&PrrVR*yt%7HoEY`QNKf@zF}t{D_)=2-EY5l_u{vm zWprlucfesp%MUuT|Cyq{h}-9lp{*?FoIy6e{svyaBLu(6D*_uTN@48JLM9rqvKmH6 zLd>eyfo^OK4h*e{plLR<5nqr?&-{Z+c^@vJ9GF}C!=|6S57+oAdM!jE|SSij5a{AiL0})y^msbp~QqW#e`R9 z+8~b-D3TgLjAIJpR4KeDC07UIvYbrRL1K1paUQ@>8N!H(d~a~@E@L*s4D*~RN%_uK z#UL@G0G3Ka9;L|v21aJUjJp2=Zsh#xm{mmEeLbgJ9pIa1ikzv2#x}19|HrW*mLN#^ zu8}x(pR{weD{B2V^UkbS*eo4e%r*St#ey`w0jk~0CD)LmR z`Xfv52(RFH)1?FMLe#-e^K{OLw2+1S6~Ej?M-BthR_p73lZ%e5Gy8K<7ad(6%B<1d zKU^IX?@xnxANHgf#cKCiJ%Outh_+q7oraIG4M5W0P@FFO?r$Nw<4i^PE#4S}HnQw+ zFYo_`8B%hxcX7^^GpMZF7o&E@SvZ(b%=yl|UiPIeN*vfp$prRy%6LK1%{jZE=z15Z zXvSVT$(g77>xl<2SM7S@hhYJLsrejUPxK7Oj{G4{6yHzdiF!C-%iK?^-_E- zpz&zhCPC%Xq@OE}a>g@v_nZUlg?rllx+sjxaWK|FKpmKTYr(q}G#N%yx!;0Es{Pdm zF&*4~UJI$Jgv;b!hlUjrW|z9!ih`@GI<(Ar2v!xC*_u+ z?b4W6ia8ENStN(PGs=0TsDr84e^76@w|?7~l})a_Lc1Q`UFKzv1rdo|z%r;oclFTZ zA?+1{U3jR;lc;{U8Ke$SPQ*f;p>x$0P^5K9vNNLH(BAxPt+}Y^Mw>y4&LPi_P+)RM zTmxRe9>;7ku7MDbPxl*9&A?}jZ3~TmqKm|tDI@?RFTUE<`5{8CzAl^K*Ig(lIYg$1 z+D{lLNbBw)d!EOZDGeBqc#b?h)L&PN8J33QYk7qG|WxWJqm(<3vbht#*wboSXKSk5gELXz`WAfG<$eivrA z3$H7`M%5_1O%bI22ChYD15@bckj)`lC?C?*xYp{7e$CNb{f#$cueFi*vf=^qje~6^ z%jR`E?d`aww413NIo=b?jgs>4cy$hPu}jcSJ@aoq+B}Y6flD@BkZqimmFkUjVl{IK z+u`ObZhF{!T^*aR-%!Oz)m|8|0&hq5Hco=|vz(panoQEHNMq*6sxjR*(erX_47LIq zO`O1OtK(C-&ZbAs!!qkcfB1BrLcv1-i9~;!T;>T47T>Rfd`}#_erM*A@B;$Zdm&=n z+d58&ffw;w_QLhv0eoA+8ED@d@EuB5=X&o{R23u4R7|*Jb4n^W@%m5VKs7k~ouA<2 z+^6u1Yid>ggHQillp(*)j^{tepRpKh=s?V4-qazIYYoY78ImuBNX{}O0tJ%G4GDj; z4Aev?C=SUR49Qf#YVxNclK=RHY9de|X)+}I>5z1BC^;nm_2+8NCk@G~LnNOwBmxDJ z@A79X<{Ww=hUA|O$sZb$f5k7O$>oMbpg{6zL&Be~CNhn5HTg&7KKnRB^1nkQO@>6E zKyslW;ZKL8AFsYSueF-oe1m9mX^7;z|0S9T6iDg}34b~yO|j<8s$0(PF(k`EB%d}U z0tJ$B{zSy;SaV`s{E#*0^@ijwpfs9XXh^h?1CnbE34gkpXj|xL@>%6R`#-N&bFL4O z)EN?i0?E0Cgg+gU$rw$#4au+}=?IaG|6DW?D3HwYC%lM8NV;Opd8r|JuOX=kkz8v? z1PUZyFeLoxYSPOI;hOW5(d3neolG&$Fh2oy-(XGr*yNH_x>7DbQsVCNTtMe|fp zrra3Mzs#Wc)75C&Y9uJVqsXV8Qsep4LAe1TDBt7XF{oINyQw57KUZ!vDE@S~hHP*N zO7AE!Yf${@pxk5-lppQu4JtO;*~y@%p!5!0=Nc4$I$Yf`D7^#fg$Bi+4yr!}rFTF* z{G=$spAKp=2BmjE-DXhy>1%I;#cI!YKF~x^cYlp%*1e!ZxPp8gW^wL zuNc&%gL<8-mxl^2pDGhh7}12sfCx858L$^_ed(+dH?bIMq+oeG zj;C;n`*&2}ZQc=P_3qf407iH0!owdW+_5L8m>qZ&zuvve-I|fhhnr6#+`MxnD68Ke#*axB;F3ut^T8>^zQ1iXY;yzR< z3mZJ_DhGQ7*48d^+IzxxnMCjptwZPOZS#fJjppzJNCr5#jNr|8;x`;Y^7mzOkb;$Q2)Vz>|dySMQDZ6K_yH1s;{TWtgV+9S#ULZ-K zNpzWZGdC4&$(#L*+T4*_eRDLMnxSsad~5R=@s9)T$cw^j;MK{4q9~$WjRDwDb6^|L z9{gPYOdFVgzbD_OrMUqT5^StBo9ORPedOjbl)ZA@%1c*Xw({+l-n2TE{qf3+R=#cJ z>XmQBHOe($ylV)b9pM<`l~Fwc77xZt-UG(l%8%Fw;o%r6#(#1$&M3KkArvl*;(;>B z^kNwx*(WE8G9)a+vXU9V;*tdcy5p>!b#^t`1GqhL#E93ra&&$Lh5ss%3IN=#`WIfUO$;-;wLwMYmP9xi@2auT!=Jg}-Q(IcqhM>DmuwM6Tcn=fTn3h5afG?@UP z`6z^r)*lw{pt+&~nvX*0Xv4xw%Fr} zvu4?-umxYX%@y)A&(FgHWfVngp7}*-wFmX)XB)F@6Ja*qsZ~+Sta^MDRZn^X3r;w{ zD9H&hPMDu<$cow(7L|z+V~LffM|FWHfmZih&K+USkRDZ*jgPRB*}GEp9aBπTJ? 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 A}4nxIM#FW%i`ZXYaWq2d-%IC=poRz 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

X{AJ4+fej7Vi{Zd0zo8L2 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

WJJu8kiSl=gQ&F0T<7bh7$CBTgR?OH$Z8! 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

V%qLVQZ=3~8# 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 0): + raise ValueError("Fatal glmnet error in library call : error code = ", jerr_r.value) + elif (jerr_r.value < 0): + print("Warning: Non-fatal error in glmnet library call: error code = ", jerr_r.value) + print("Check results for accuracy. Partial or no results returned.") + + # clip output to correct sizes + lmu = lmu_r.value + ca = ca[0:nx, 0:lmu] + ia = ia[0:nx] + nin = nin[0:lmu] + dev = dev[0:lmu] + alm = alm[0:lmu] + + # ninmax + ninmax = max(nin) + # fix first value of alm (from inf to correct value) + if ulam[0] == 0.0: + t1 = np.log(alm[1]) + t2 = np.log(alm[2]) + alm[0] = np.exp(2*t1 - t2) + # create return fit dictionary + if ninmax > 0: + ca = ca[0:ninmax, :] + df = np.sum(np.absolute(ca) > 0, axis=0) + ja = ia[0:ninmax] - 1 # ia is 1-indexed in fortran + oja = np.argsort(ja) + ja1 = ja[oja] + beta = np.zeros([nvars, lmu], dtype = np.float64) + beta[ja1, :] = ca[oja, :] + else: + beta = np.zeros([nvars, lmu], dtype = np.float64) + df = np.zeros([1, lmu], dtype = np.float64) + + fit = dict() + fit['beta'] = beta + fit['dev'] = dev + fit['nulldev'] = dev0_r.value + fit['df']= df + fit['lambdau'] = alm + fit['npasses'] = nlp_r.value + fit['jerr'] = jerr_r.value + fit['dim'] = np.array([nvars, lmu], dtype = np.integer) + fit['offset'] = is_offset + fit['class'] = 'coxnet' + + # ################################### + # return to caller + # ################################### + + return fit +#----------------------------------------- +# end of method coxnet +#----------------------------------------- + diff --git a/build/lib/glmnet_python/cvcompute.py b/build/lib/glmnet_python/cvcompute.py new file mode 100644 index 0000000..eef8e4b --- /dev/null +++ b/build/lib/glmnet_python/cvcompute.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +""" +Internal glmnet function. See also cvglmnet. + +Compute the weighted mean and SD within folds, and hence the SE of the mean +""" +import numpy as np +from wtmean import wtmean + +def cvcompute(mat, weights, foldid, nlams): + if len(weights.shape) > 1: + weights = np.reshape(weights, [weights.shape[0], ]) + wisum = np.bincount(foldid, weights = weights) + nfolds = np.amax(foldid) + 1 + outmat = np.ones([nfolds, mat.shape[1]])*np.NaN + good = np.zeros([nfolds, mat.shape[1]]) + mat[np.isinf(mat)] = np.NaN + for i in range(nfolds): + tf = foldid == i + mati = mat[tf, ] + wi = weights[tf, ] + outmat[i, :] = wtmean(mati, wi) + good[i, 0:nlams[i]] = 1 + N = np.sum(good, axis = 0) + cvcpt = dict() + cvcpt['cvraw'] = outmat + cvcpt['weights'] = wisum + cvcpt['N'] = N + + return(cvcpt) + +# end of cvcompute +#========================= + diff --git a/build/lib/glmnet_python/cvelnet.py b/build/lib/glmnet_python/cvelnet.py new file mode 100644 index 0000000..f4d6533 --- /dev/null +++ b/build/lib/glmnet_python/cvelnet.py @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- +""" +Internal cvglmnet function. See also cvglmnet. + +""" +import numpy as np +from glmnetPredict import glmnetPredict +from wtmean import wtmean +from cvcompute import cvcompute + +def cvelnet(fit, \ + lambdau, \ + x, \ + y, \ + weights, \ + offset, \ + foldid, \ + ptype, \ + grouped, \ + keep = False): + + typenames = {'deviance':'Mean-Squared Error', 'mse':'Mean-Squared Error', + 'mae':'Mean Absolute Error'} + if ptype == 'default': + ptype = 'mse' + + ptypeList = ['mse', 'mae', 'deviance'] + if not ptype in ptypeList: + print('Warning: only ', ptypeList, 'available for Gaussian models; ''mse'' used') + ptype = 'mse' + if len(offset) > 0: + y = y - offset + + predmat = np.ones([y.size, lambdau.size])*np.NAN + nfolds = np.amax(foldid) + 1 + nlams = [] + for i in range(nfolds): + which = foldid == i + fitobj = fit[i].copy() + fitobj['offset'] = False + preds = glmnetPredict(fitobj, x[which, ]) + nlami = np.size(fit[i]['lambdau']) + predmat[which, 0:nlami] = preds + nlams.append(nlami) + # convert nlams to scipy array + nlams = np.array(nlams, dtype = np.integer) + + N = y.shape[0] - np.sum(np.isnan(predmat), axis = 0) + yy = np.tile(y, [1, lambdau.size]) + + if ptype == 'mse': + cvraw = (yy - predmat)**2 + elif ptype == 'deviance': + cvraw = (yy - predmat)**2 + elif ptype == 'mae': + cvraw = np.absolute(yy - predmat) + + if y.size/nfolds < 3 and grouped == True: + print('Option grouped=false enforced in cv.glmnet, since < 3 observations per fold') + grouped = False + + if grouped == True: + cvob = cvcompute(cvraw, weights, foldid, nlams) + cvraw = cvob['cvraw'] + weights = cvob['weights'] + N = cvob['N'] + + cvm = wtmean(cvraw, weights) + sqccv = (cvraw - cvm)**2 + cvsd = np.sqrt(wtmean(sqccv, weights)/(N-1)) + + result = dict() + result['cvm'] = cvm + result['cvsd'] = cvsd + result['name'] = typenames[ptype] + + if keep: + result['fit_preval'] = predmat + + return(result) + +# end of cvelnet +#========================= diff --git a/build/lib/glmnet_python/cvfishnet.py b/build/lib/glmnet_python/cvfishnet.py new file mode 100644 index 0000000..4bf7ef7 --- /dev/null +++ b/build/lib/glmnet_python/cvfishnet.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +""" +Internal cvglmnet function. See also cvglmnet. + +""" +import numpy as np +from glmnetPredict import glmnetPredict +from wtmean import wtmean +from cvcompute import cvcompute + +def cvfishnet(fit, \ + lambdau, \ + x, \ + y, \ + weights, \ + offset, \ + foldid, \ + ptype, \ + grouped, \ + keep = False): + + typenames = {'deviance':'Poisson Deviance', 'mse':'Mean-Squared Error', + 'mae':'Mean Absolute Error'} + if ptype == 'default': + ptype = 'deviance' + + ptypeList = ['mse', 'mae', 'deviance'] + if not ptype in ptypeList: + print('Warning: only ', ptypeList, 'available for Poisson models; ''deviance'' used') + ptype = 'deviance' + + if len(offset) > 0: + is_offset = True + else: + is_offset = False + + predmat = np.ones([y.size, lambdau.size])*np.NAN + nfolds = np.amax(foldid) + 1 + nlams = [] + for i in range(nfolds): + which = foldid == i + fitobj = fit[i].copy() + if is_offset: + off_sub = offset[which] + else: + off_sub = np.empty([0]) + preds = glmnetPredict(fitobj, x[which, ], offset = off_sub) + nlami = np.size(fit[i]['lambdau']) + predmat[which, 0:nlami] = preds + nlams.append(nlami) + # convert nlams to np array + nlams = np.array(nlams, dtype = np.integer) + + N = y.shape[0] - np.sum(np.isnan(predmat), axis = 0) + yy = np.tile(y, [1, lambdau.size]) + + if ptype == 'mse': + cvraw = (yy - predmat)**2 + elif ptype == 'deviance': + cvraw = devi(yy, predmat) + elif ptype == 'mae': + cvraw = np.absolute(yy - predmat) + + if y.size/nfolds < 3 and grouped == True: + print('Option grouped=false enforced in cvglmnet, since < 3 observations per fold') + grouped = False + + if grouped == True: + cvob = cvcompute(cvraw, weights, foldid, nlams) + cvraw = cvob['cvraw'] + weights = cvob['weights'] + N = cvob['N'] + + cvm = wtmean(cvraw, weights) + sqccv = (cvraw - cvm)**2 + cvsd = np.sqrt(wtmean(sqccv, weights)/(N-1)) + + result = dict() + result['cvm'] = cvm + result['cvsd'] = cvsd + result['name'] = typenames[ptype] + + if keep: + result['fit_preval'] = predmat + + return(result) + +# end of cvfishnet +#========================= +def devi(yy, eta): + deveta = yy*eta - np.exp(eta) + devy = yy*np.log(yy) - yy + devy[yy == 0] = 0 + result = 2*(devy - deveta) + return(result) + + + + diff --git a/build/lib/glmnet_python/cvglmnet.py b/build/lib/glmnet_python/cvglmnet.py new file mode 100644 index 0000000..6fd4d0f --- /dev/null +++ b/build/lib/glmnet_python/cvglmnet.py @@ -0,0 +1,355 @@ +# -*- coding: utf-8 -*- +""" +-------------------------------------------------------------------------- + cvglmnet.m: cross-validation for glmnet +-------------------------------------------------------------------------- + + DESCRIPTION: + Does k-fold cross-validation for glmnet, produces a plot, and returns + a value for lambdau. Cross-validation is not implemented for Cox model yet. + + USAGE: + + Note that like glmnet, all arguments are keyword-only: + + CVerr = cvglmnet(x, y, family, options, type, nfolds, foldid, + parallel, keep, grouped); + + Fewer input arguments(more often) are allowed in the call. Default values + for the arguments are used unless specified by the user. + +======================= +INPUT ARGUMENTS + x nobs x nvar np 2D array of x parameters (as in glmnet). + y nobs x nc np Response y as in glmnet. + family Response type as family in glmnet. + options Options as in glmnet. + ptype loss to use for cross-validation. Currently five options, not + all available for all models. The default is ptype='deviance', which uses + squared-error for Gaussian models (a.k.a ptype='mse' there), deviance for + logistic and Poisson regression, and partial-likelihood for the Cox + model (Note that CV for cox model is not implemented yet). + ptype='class' applies to binomial and multinomial logistic + regression only, and gives misclassification error. ptype='auc' is for + two-class logistic regression only, and gives area under the ROC curve. + ptype='mse' or ptype='mae' (mean absolute error) can be used by all models + except the 'cox'; they measure the deviation from the fitted mean to the + response. + nfolds number of folds - default is 10. Although nfolds can be as + large as the sample size (leave-one-out CV), it is not recommended for + large datasets. Smallest value allowable is nfolds=3. + foldid an optional vector of values between 0 and nfold-1 identifying + what fold each observation is in. If supplied, nfold can be + missing. + parallel Number of CPU cores used to fit each fold . If given a value of -1, + all cores are used. + keep If keep=True, a prevalidated array is returned containing + fitted values for each observation and each value of lambda. + This means these fits are computed with this observation and + the rest of its fold omitted. The foldid vector is also + returned. Default is keep=False. + grouped This is an experimental argument, with default true, and can + be ignored by most users. For all models except the 'cox', + this refers to computing nfolds separate statistics, and then + using their mean and estimated standard error to describe the + CV curve. If grouped=false, an error matrix is built up at + the observation level from the predictions from the nfold + fits, and then summarized (does not apply to + type='auc'). For the 'cox' family, grouped=true obtains the + CV partial likelihood for the Kth fold by subtraction; by + subtracting the log partial likelihood evaluated on the full + dataset from that evaluated on the on the (K-1)/K dataset. + This makes more efficient use of risk sets. With + grouped=FALSE the log partial likelihood is computed only on + the Kth fold. + +======================= +OUTPUT ARGUMENTS: + A dict() is returned with the following fields. + lambdau the values of lambda used in the fits. + cvm the mean cross-validated error - a vector of length + length(lambdau). + cvsd estimate of standard error of cvm. + cvup upper curve = cvm+cvsd. + cvlo lower curve = cvm-cvsd. + nzero number of non-zero coefficients at each lambda. + name a text string indicating type of measure (for plotting + purposes). + glmnet_fit a fitted glmnet object for the full data. + lambda_min value of lambda that gives minimum cvm. + lambda_1se largest value of lambda such that error is within 1 standard + error of the minimum. + class Type of regression - internal usage. + fit_preval if keep=true, this is the array of prevalidated fits. Some + entries can be NA, if that and subsequent values of lambda + are not reached for that fold. + foldid if keep=true, the fold assignments used. + + DETAILS: + The function runs glmnet nfolds+1 times; the first to get the lambda + sequence, and then the remainder to compute the fit with each of the + folds omitted. The error is accumulated, and the average error and + standard deviation over the folds is computed. Note that cvglmnet + does NOT search for values for alpha. A specific value should be + supplied, else alpha=1 is assumed by default. If users would like to + cross-validate alpha as well, they should call cvglmnet with a + pre-computed vector foldid, and then use this same fold vector in + separate calls to cvglmnet with different values of alpha. + + LICENSE: GPL-2 + + AUTHORS: + Algorithm was designed by Jerome Friedman, Trevor Hastie and Rob Tibshirani + Fortran code was written by Jerome Friedman + R wrapper (from which the MATLAB wrapper was adapted) was written by Trevor Hasite + The original MATLAB wrapper was written by Hui Jiang, + and is updated and maintained by Junyang Qian. + This Python wrapper (adapted from the Matlab and R wrappers) is written by Balakumar B.J., + Department of Statistics, Stanford University, Stanford, California, USA. + + REFERENCES: + Friedman, J., Hastie, T. and Tibshirani, R. (2008) Regularization Paths for Generalized Linear Models via Coordinate Descent, + http://www.jstatsoft.org/v33/i01/ + Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010 + + Simon, N., Friedman, J., Hastie, T., Tibshirani, R. (2011) Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent, + http://www.jstatsoft.org/v39/i05/ + Journal of Statistical Software, Vol. 39(5) 1-13 + + Tibshirani, Robert., Bien, J., Friedman, J.,Hastie, T.,Simon, N.,Taylor, J. and Tibshirani, Ryan. (2010) Strong Rules for Discarding Predictors in Lasso-type Problems, + http://www-stat.stanford.edu/~tibs/ftp/strong.pdf + Stanford Statistics Technical Report + + SEE ALSO: + cvglmnetPlot, cvglmnetCoef, cvglmnetPredict, and glmnet. + + EXAMPLES: + + # Gaussian + x = np.random.rand(100, 10) + y = np.random.rand(100, 1) + cvfit = cvglmnet(x = x, y = y) + cvglmnetPlot(cvfit) + print( cvglmnetCoef(cvfit) ) + print( cvglmnetPredict(cvfit, x[0:5, :], 'lambda_min') ) + cvfit1 = cvglmnet(x = x, y = y, ptype = 'mae') + cvglmnetPlot(cvfit1) + + # Binomial + x = np.random.rand(100, 10) + y = np.random.rand(100,1) + y = (y > 0.5)*1.0 + fit = cvglmnet(x = x, y = y, family = 'binomial', ptype = 'class') + cvglmnetPlot(fit) + + # poisson + x = np.random.rand(100,10) + y = np.random.poisson(size = [100, 1])*1.0 + cvfit = cvglmnet(x = x, y = y, family = 'poisson') + cvglmnetPlot(cvfit) + + # Multivariate Gaussian: + x = np.random.rand(100, 10) + y = np.random.rand(100,3) + cvfit = cvglmnet(x = x, y = y, family = 'mgaussian') + cvglmnetPlot(cvfit) + + # Multinomial + x = np.random.rand(100,10) + y = np.random.rand(100,1) + y[y < 0.3] = 1.0 + y[y < 0.6] = 2.0 + y[y < 1.0] = 3.0 + cvfit = cvglmnet(x = x, y = y, family = 'multinomial') + cvglmnetPlot(cvfit) + + #cox + Not implemented for cvglmnet.py + + + + % Cox + n=1000;p=30; + nzc=p/3; + x=randn(n,p); + beta=randn(nzc,1); + fx=x(:,1:nzc)*beta/3; + hx=exp(fx); + ty=exprnd(1./hx,n,1); + tcens=binornd(1,0.3,n,1); + y=cat(2,ty,1-tcens); + foldid=randsample(10,n,true); + fit1_cv=cvglmnet(x,y,'cox',[],[],[],foldid); + cvglmnetPlot(fit1_cv); + + % Parallel + matlabpool; + x=randn(1e3,100); + y=randn(1e3,1); + tic; + cvglmnet(x,y); + toc; + tic; + cvglmnet(x,y,[],[],[],[],[],true); + toc; + +""" +import sys +import joblib +import multiprocessing +from glmnetSet import glmnetSet +from glmnetPredict import glmnetPredict +import numpy as np +from glmnet import glmnet +from cvelnet import cvelnet +from cvlognet import cvlognet +from cvmultnet import cvmultnet +from cvmrelnet import cvmrelnet +from cvfishnet import cvfishnet + +def cvglmnet(*, x, + y, + family = 'gaussian', + ptype = 'default', + nfolds = 10, + foldid = np.empty([0]), + parallel = 1, + keep = False, + grouped = True, + **options): + + options = glmnetSet(options) + + if 0 < len(options['lambdau']) < 2: + raise ValueError('Need more than one value of lambda for cv.glmnet') + + nobs = x.shape[0] + + # we should not really need this. user must supply the right shape + # if y.shape[0] != nobs: + # y = np.transpose(y) + + # convert 1d python array of size nobs to 2d python array of size nobs x 1 + if len(y.shape) == 1: + y = np.reshape(y, [y.size, 1]) + + # we should not really need this. user must supply the right shape + # if (len(options['offset']) > 0) and (options['offset'].shape[0] != nobs): + # options['offset'] = np.transpose(options['offset']) + + if len(options['weights']) == 0: + options['weights'] = np.ones([nobs, 1], dtype = np.float64) + + # main call to glmnet + glmfit = glmnet(x = x, y = y, family = family, **options) + + is_offset = glmfit['offset'] + options['lambdau'] = glmfit['lambdau'] + + nz = glmnetPredict(glmfit, np.empty([0]), np.empty([0]), 'nonzero') + if glmfit['class'] == 'multnet': + nnz = np.zeros([len(options['lambdau']), len(nz)]) + for i in range(len(nz)): + nnz[:, i] = np.transpose(np.sum(nz[i], axis = 0)) + nz = np.ceil(np.median(nnz, axis = 1)) + elif glmfit['class'] == 'mrelnet': + nz = np.transpose(np.sum(nz[0], axis = 0)) + else: + nz = np.transpose(np.sum(nz, axis = 0)) + + if len(foldid) == 0: + ma = np.tile(np.arange(nfolds), [1, int(np.floor(nobs/nfolds))]) + mb = np.arange(np.mod(nobs, nfolds)) + mb = np.reshape(mb, [1, mb.size]) + population = np.append(ma, mb, axis = 1) + mc = np.random.permutation(len(population)) + mc = mc[0:nobs] + foldid = population[mc] + foldid = np.reshape(foldid, [foldid.size,]) + else: + nfolds = np.amax(foldid) + 1 + + if nfolds < 3: + raise ValueError('nfolds must be bigger than 3; nfolds = 10 recommended') + + cpredmat = list() + foldid = np.reshape(foldid, [foldid.size, ]) + if parallel != 1: + if parallel == -1: + num_cores = multiprocessing.cpu_count() + else: + num_cores = parallel + sys.stderr.write("[status]\tParallel glmnet cv with " + str(num_cores) + " cores\n") + cpredmat = joblib.Parallel(n_jobs=num_cores)(joblib.delayed(doCV)(i, x, y, family, foldid, nfolds, is_offset, **options) for i in range(nfolds)) + else: + for i in range(nfolds): + newFit = doCV(i, x, y, family, foldid, nfolds, is_offset, **options) + cpredmat.append(newFit) + + if cpredmat[0]['class'] == 'elnet': + cvstuff = cvelnet( cpredmat, options['lambdau'], x, y \ + , options['weights'], options['offset'] \ + , foldid, ptype, grouped, keep) + elif cpredmat[0]['class'] == 'lognet': + cvstuff = cvlognet(cpredmat, options['lambdau'], x, y \ + , options['weights'], options['offset'] \ + , foldid, ptype, grouped, keep) + elif cpredmat[0]['class'] == 'multnet': + cvstuff = cvmultnet(cpredmat, options['lambdau'], x, y \ + , options['weights'], options['offset'] \ + , foldid, ptype, grouped, keep) + elif cpredmat[0]['class'] == 'mrelnet': + cvstuff = cvmrelnet(cpredmat, options['lambdau'], x, y \ + , options['weights'], options['offset'] \ + , foldid, ptype, grouped, keep) + elif cpredmat[0]['class'] == 'fishnet': + cvstuff = cvfishnet(cpredmat, options['lambdau'], x, y \ + , options['weights'], options['offset'] \ + , foldid, ptype, grouped, keep) + elif cpredmat[0]['class'] == 'coxnet': + raise NotImplementedError('Cross-validation for coxnet not implemented yet.') + #cvstuff = cvcoxnet(cpredmat, options['lambdau'], x, y \ + # , options['weights'], options['offset'] \ + # , foldid, ptype, grouped, keep) + + cvm = cvstuff['cvm'] + cvsd = cvstuff['cvsd'] + cvname = cvstuff['name'] + + CVerr = dict() + CVerr['lambdau'] = options['lambdau'] + CVerr['cvm'] = np.transpose(cvm) + CVerr['cvsd'] = np.transpose(cvsd) + CVerr['cvup'] = np.transpose(cvm + cvsd) + CVerr['cvlo'] = np.transpose(cvm - cvsd) + CVerr['nzero'] = nz + CVerr['name'] = cvname + CVerr['glmnet_fit'] = glmfit + if keep: + CVerr['fit_preval'] = cvstuff['fit_preval'] + CVerr['foldid'] = foldid + if ptype == 'auc': + cvm = -cvm + CVerr['lambda_min'] = np.amax(options['lambdau'][cvm <= np.amin(cvm)]).reshape([1]) + idmin = options['lambdau'] == CVerr['lambda_min'] + semin = cvm[idmin] + cvsd[idmin] + CVerr['lambda_1se'] = np.amax(options['lambdau'][cvm <= semin]).reshape([1]) + CVerr['class'] = 'cvglmnet' + + return(CVerr) + +# end of cvglmnet +#========================== +def doCV(i, x, y, family, foldid, nfolds, is_offset, **options): + which = foldid == i + opts = options.copy() + opts['weights'] = opts['weights'][~which, ] + opts['lambdau'] = options['lambdau'] + if is_offset: + if opts['offset'].size > 0: + opts['offset'] = opts['offset'][~which, ] + xr = x[~which, ] + yr = y[~which, ] + newFit = glmnet(x = xr, y = yr, family = family, **opts) + return(newFit) + diff --git a/build/lib/glmnet_python/cvglmnetCoef.py b/build/lib/glmnet_python/cvglmnetCoef.py new file mode 100644 index 0000000..711ce2f --- /dev/null +++ b/build/lib/glmnet_python/cvglmnetCoef.py @@ -0,0 +1,95 @@ +# -*- coding: utf-8 -*- +""" +-------------------------------------------------------------------------- + cvglmnetCoef computes coefficients from a "cvglmnet" object. +-------------------------------------------------------------------------- + + DESCRIPTION: + This function extracts coefficients at certain lambdas if they are + in the lambda sequence of a "cvglmnet" object or make predictions + if they are not. + + USAGE: + mcoef=cvglmnetCoef(object); + ncoef=cvglmnetCoef(object, s); + + INPUT ARGUMENTS: + obj Fitted "cvglmnet" model object. + s Value(s) of the penalty parameter lambdau at which computation + is required. Default is the value s='lambda_1se' stored on + the CV object. Alternatively s='lambda_min' can be used. If s + is numeric, it is taken as the value(s) of lambda to be used. + + OUTPUT ARGUMENTS: + result If s is 'lambda_1se' or 'lambda_min', the coefficients at + that s is returned. If s is numeric, a (nvars+1) x length(s) + matrix is returned with each column being the coefficients + at an s. Note that the first row are the intercepts (0 if no + intercept in the original model). + + DETAILS: + The function uses linear interpolation to make predictions for values + of s that do not coincide with those used in the fitting algorithm. + Exact prediction is not supported currently. + + LICENSE: GPL-2 + + AUTHORS: + Algorithm was designed by Jerome Friedman, Trevor Hastie and Rob Tibshirani + Fortran code was written by Jerome Friedman + R wrapper (from which the MATLAB wrapper was adapted) was written by Trevor Hasite + The original MATLAB wrapper was written by Hui Jiang, + and is updated and maintained by Junyang Qian. + This Python wrapper (adapted from the Matlab and R wrappers) + is written by Balakumar B.J., bbalasub@stanford.edu + Department of Statistics, Stanford University, Stanford, California, USA. + + + REFERENCES: + Friedman, J., Hastie, T. and Tibshirani, R. (2008) Regularization Paths for Generalized Linear Models via Coordinate Descent, + http://www.jstatsoft.org/v33/i01/ + Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010 + + Simon, N., Friedman, J., Hastie, T., Tibshirani, R. (2011) Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent, + http://www.jstatsoft.org/v39/i05/ + Journal of Statistical Software, Vol. 39(5) 1-13 + + Tibshirani, Robert., Bien, J., Friedman, J.,Hastie, T.,Simon, N.,Taylor, J. and Tibshirani, Ryan. (2010) Strong Rules for Discarding Predictors in Lasso-type Problems, + http://www-stat.stanford.edu/~tibs/ftp/strong.pdf + Stanford Statistics Technical Report + + SEE ALSO: + cvglmnet, cvglmnetPrint, and cvglmnetPredict. + + EXAMPLES: + x=randn(100,20); + y=randn(100,1); + cvfit=cvglmnet(x,y); + ncoef=cvglmnetCoef(cvfit,'lambda_min'); + +""" + +import numpy as np +from glmnetCoef import glmnetCoef + +def cvglmnetCoef(obj, s = None): + + if s is None or len(s) == 0: + s = obj['lambda_1se'] + + if isinstance(s, np.ndarray): + lambdau = s + elif isinstance(s, str): + sbase = ['lambda_1se', 'lambda_min'] + indxtf = [x.startswith(s.lower()) for x in sbase] # find index of family in fambase + sind= [i for i in range(len(indxtf)) if indxtf[i] == True] + s = sbase[sind[0]] + lambdau = obj[s] + else: + raise ValueError('Invalid form of s') + + result = glmnetCoef(obj['glmnet_fit'], lambdau) + + return(result) + + \ No newline at end of file diff --git a/build/lib/glmnet_python/cvglmnetPlot.py b/build/lib/glmnet_python/cvglmnetPlot.py new file mode 100644 index 0000000..9392293 --- /dev/null +++ b/build/lib/glmnet_python/cvglmnetPlot.py @@ -0,0 +1,129 @@ +# -*- coding: utf-8 -*- +""" +-------------------------------------------------------------------------- + cvglmnetPlot.m: plot the cross-validation curve produced by cvglmnet +-------------------------------------------------------------------------- + + DESCRIPTION: + Plots the cross-validation curve, and upper and lower standard + deviation curves, as a function of the lambda values used. + + USAGE: + cvglmnetPlot(cvfit); + cvglmnetPlot(cvfit, sign_lambda) + cvglmnetPlot(cvfit, sign_lambda, options) + + INPUT ARGUMENTS: + cvobject fitted "cvglmnet" object + sign_lambda Either plot against log(lambda) (default) or its negative if + sign_lambda=-1. + varargin Other errorbar parameters. + + DETAILS: + A plot is produced, and nothing is returned. + + LICENSE: GPL-2 + + AUTHORS: + Algorithm was designed by Jerome Friedman, Trevor Hastie and Rob Tibshirani + Fortran code was written by Jerome Friedman + R wrapper (from which the MATLAB wrapper was adapted) was written by Trevor Hasite + The original MATLAB wrapper was written by Hui Jiang, + and is updated and maintained by Junyang Qian. + This Python wrapper (adapted from the Matlab and R wrappers) + is written by Balakumar B.J., bbalasub@stanford.edu + Department of Statistics, Stanford University, Stanford, California, USA. + + REFERENCES: + Friedman, J., Hastie, T. and Tibshirani, R. (2008) Regularization Paths for Generalized Linear Models via Coordinate Descent, + http://www.jstatsoft.org/v33/i01/ + Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010 + + SEE ALSO: + cvglmnet and glmnet. + + EXAMPLES: + + np.random.seed(1) + x=np.random.normal(size = (100,20)) + y=np.random.normal(size = (100,1)) + g2=np.random.choice(2,size = (100,1))*1.0 + g4=np.random.choice(4,size = (100,1))*1.0 + + plt.figure() + fit1=cvglmnet(x = x.copy(),y = y.copy()) + cvglmnetPlot(fit1) + + plt.figure() + fit2=cvglmnet(x = x.copy(),y = g2.copy(), family = 'binomial') + cvglmnetPlot(fit2) + + plt.figure() + fit3=cvglmnet(x = x.copy(),y = g2.copy(), family = 'binomial', ptype = 'class') + cvglmnetPlot(fit3) + +""" + +import numpy as np + + +def cvglmnetPlot(cvobject, sign_lambda = 1.0, **options): + import matplotlib.pyplot as plt + + sloglam = sign_lambda*np.log(cvobject['lambdau']) + + fig = plt.gcf() + ax1 = plt.gca() + #fig, ax1 = plt.subplots() + + plt.errorbar(sloglam, cvobject['cvm'], cvobject['cvsd'], \ + ecolor = (0.5, 0.5, 0.5), \ + **options + ) + #plt.hold(True) + plt.plot(sloglam, cvobject['cvm'], linestyle = 'dashed',\ + marker = 'o', markerfacecolor = 'r') + + xlim1 = ax1.get_xlim() + ylim1 = ax1.get_ylim() + + xval = sign_lambda*np.log(np.array([cvobject['lambda_min'], cvobject['lambda_min']])) + plt.plot(xval, ylim1, color = 'b', linestyle = 'dashed', \ + linewidth = 1) + + if cvobject['lambda_min'] != cvobject['lambda_1se']: + xval = sign_lambda*np.log([cvobject['lambda_1se'], cvobject['lambda_1se']]) + plt.plot(xval, ylim1, color = 'b', linestyle = 'dashed', \ + linewidth = 1) + + ax2 = ax1.twiny() + ax2.xaxis.tick_top() + + atdf = ax1.get_xticks() + indat = np.ones(atdf.shape, dtype = np.integer) + if sloglam[-1] >= sloglam[1]: + for j in range(len(sloglam)-1, -1, -1): + indat[atdf <= sloglam[j]] = j + else: + for j in range(len(sloglam)): + indat[atdf <= sloglam[j]] = j + + prettydf = cvobject['nzero'][indat] + + ax2.set(XLim=xlim1, XTicks = atdf, XTickLabels = prettydf) + ax2.grid() + ax1.yaxis.grid() + + ax2.set_xlabel('Degrees of Freedom') + + # plt.plot(xlim1, [ylim1[1], ylim1[1]], 'b') + # plt.plot([xlim1[1], xlim1[1]], ylim1, 'b') + + if sign_lambda < 0: + ax1.set_xlabel('-log(Lambda)') + else: + ax1.set_xlabel('log(Lambda)') + + ax1.set_ylabel(cvobject['name']) + + #plt.show() diff --git a/build/lib/glmnet_python/cvglmnetPredict.py b/build/lib/glmnet_python/cvglmnetPredict.py new file mode 100644 index 0000000..df2ee52 --- /dev/null +++ b/build/lib/glmnet_python/cvglmnetPredict.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +""" +-------------------------------------------------------------------------- + cvglmnetPredict makes predictions from a "cvglmnet" object. +-------------------------------------------------------------------------- + + DESCRIPTION: + This function makes predictions from a cross-validated glmnet model, + using the stored "glmnet_fit" object, and the optimal value chosen for + lambda. + + USAGE: + pred = cvglmnetPredict(cvfit) + pred = cvglmnetPredict(cvfit, newx) + pred = cvglmnetPredict(cvfit, newx, s) + pred = cvglmnetPredict(cvfit, newx, s, ...) + + INPUT ARGUMENTS: + object Fitted "glmnet" model object. + newx 2D array of new values for x at which predictions are to be + made. Must be a 2D array; can be sparse. See documentation for + glmnetPredict. + s Value(s) of the penalty parameter lambda at which predictions + are required. Default is the value s='lambda_1se' stored on + the CV object. Alternatively s='lambda_min' can be used. If s + is numeric, it is taken as the value(s) of lambda to be used. + If s is numeric, it must be a scipy 1D array. + options Other arguments to predict (see glmnetPredict). + + OUTPUT ARGUMENTS: + If only the cvglmnet object is provided, the function returns the + coefficients at the default s = 'lambda_1se'. Otherwise, the object + returned depends on the ... argument which is passed on to the + glmnetPredict for glmnet objects. + + + DETAILS: + This function makes it easier to use the results of cross-validation + to make a prediction. + + LICENSE: GPL-2 + + AUTHORS: + Algorithm was designed by Jerome Friedman, Trevor Hastie and Rob Tibshirani + Fortran code was written by Jerome Friedman + R wrapper (from which the MATLAB wrapper was adapted) was written by Trevor Hasite + The original MATLAB wrapper was written by Hui Jiang, + and is updated and maintained by Junyang Qian. + This Python wrapper (adapted from the Matlab and R wrappers) + is written by Balakumar B.J., bbalasub@stanford.edu + Department of Statistics, Stanford University, Stanford, California, USA. + + REFERENCES: + Friedman, J., Hastie, T. and Tibshirani, R. (2008) Regularization Paths for Generalized Linear Models via Coordinate Descent, + http://www.jstatsoft.org/v33/i01/ + Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010 + + Simon, N., Friedman, J., Hastie, T., Tibshirani, R. (2011) Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent, + http://www.jstatsoft.org/v39/i05/ + Journal of Statistical Software, Vol. 39(5) 1-13 + + Tibshirani, Robert., Bien, J., Friedman, J.,Hastie, T.,Simon, N.,Taylor, J. and Tibshirani, Ryan. (2010) Strong Rules for Discarding Predictors in Lasso-type Problems, + http://www-stat.stanford.edu/~tibs/ftp/strong.pdf + Stanford Statistics Technical Report + + SEE ALSO: + cvglmnet and glmnetPredict. + + EXAMPLES: + x = np.random.rand(100, 10) + y = np.random.rand(100, 1) + cvfit = cvglmnet(x = x, y = y) + cvglmnetPredict(cvfit, x[0:5, :], 'lambda_min') + cvglmnetPredict(cvfit, x[0:5, :], np.array([0.0866, 0.2323])) + +""" +from cvglmnetCoef import cvglmnetCoef +from glmnetPredict import glmnetPredict +import numpy as np + +def cvglmnetPredict(obj, newx = None, s = 'lambda_1se', **options): + if newx is None: + CVpred = cvglmnetCoef(obj) + return(CVpred) + + if type(s) == np.ndarray and s.dtype == 'float64': + lambdau = s + elif s in ['lambda_1se', 'lambda_min']: + lambdau = obj[s] + else: + raise ValueError('Invalid form for s') + + CVpred = glmnetPredict(obj['glmnet_fit'], newx, lambdau, **options) + + return(CVpred) + \ No newline at end of file diff --git a/build/lib/glmnet_python/cvlognet.py b/build/lib/glmnet_python/cvlognet.py new file mode 100644 index 0000000..1b90cdb --- /dev/null +++ b/build/lib/glmnet_python/cvlognet.py @@ -0,0 +1,173 @@ +# -*- coding: utf-8 -*- +""" +Internal function called by cvglmnet. See also cvglmnet + +""" +import numpy as np +from glmnetPredict import glmnetPredict +from wtmean import wtmean +from cvcompute import cvcompute + +def cvlognet(fit, \ + lambdau, \ + x, \ + y, \ + weights, \ + offset, \ + foldid, \ + ptype, \ + grouped, \ + keep = False): + + typenames = {'deviance':'Binomial Deviance', 'mse':'Mean-Squared Error', + 'mae':'Mean Absolute Error', 'auc':'AUC', 'class':'Misclassification Error'} + if ptype == 'default': + ptype = 'deviance' + + ptypeList = ['mse', 'mae', 'deviance', 'auc', 'class'] + if not ptype in ptypeList: + print('Warning: only ', ptypeList, 'available for binomial models; ''deviance'' used') + ptype = 'deviance' + + prob_min = 1.0e-5 + prob_max = 1 - prob_min + nc = y.shape[1] + if nc == 1: + classes, sy = np.unique(y, return_inverse = True) + nc = len(classes) + indexes = np.eye(nc, nc) + y = indexes[sy, :] + else: + classes = np.arange(nc) + 1 # 1:nc + + N = y.size + nfolds = np.amax(foldid) + 1 + if (N/nfolds < 10) and (type == 'auc'): + print('Warning: Too few (<10) observations per fold for type.measure=auc in cvlognet') + print('Warning: changed to type.measure = deviance. Alternately, use smaller value ') + print('Warning: for nfolds') + ptype = 'deviance' + + if (N/nfolds < 3) and grouped: + print('Warning: option grouped = False enforced in cvglmnet as there are < 3 observations per fold') + grouped = False + + is_offset = not(len(offset) == 0) + predmat = np.ones([y.shape[0], lambdau.size])*np.NAN + nfolds = np.amax(foldid) + 1 + nlams = [] + for i in range(nfolds): + which = foldid == i + fitobj = fit[i].copy() + if is_offset: + off_sub = offset[which, ] + else: + off_sub = np.empty([0]) + preds = glmnetPredict(fitobj, x[which, ], np.empty([0]), 'response', False, off_sub) + nlami = np.size(fit[i]['lambdau']) + predmat[which, 0:nlami] = preds + nlams.append(nlami) + # convert nlams to np array + nlams = np.array(nlams, dtype = np.integer) + + if ptype == 'auc': + cvraw = np.zeros([nfolds, lambdau.size])*np.NaN + good = np.zeros([nfolds, lambdau.size]) + for i in range(nfolds): + good[i, 0:nlams[i]] = 1 + which = foldid == i + for j in range(nlams[i]): + cvraw[i,j] = auc_mat(y[which,], predmat[which,j], weights[which]) + N = np.sum(good, axis = 0) + sweights = np.zeros([nfolds, 1]) + for i in range(nfolds): + sweights[i]= np.sum(weights[foldid == i], axis = 0) + weights = sweights + else: + ywt = np.sum(y, axis = 1, keepdims = True) + y = y/np.tile(ywt, [1, y.shape[1]]) + weights = weights*ywt + N = y.shape[0] - np.sum(np.isnan(predmat), axis = 0, keepdims = True) + yy1 = np.tile(y[:,0:1], [1, lambdau.size]) + yy2 = np.tile(y[:,1:2], [1, lambdau.size]) + + if ptype == 'mse': + cvraw = (yy1 - (1 - predmat))**2 + (yy2 - (1 - predmat))**2 + elif ptype == 'deviance': + predmat = np.minimum(np.maximum(predmat, prob_min), prob_max) + lp = yy1*np.log(1-predmat) + yy2*np.log(predmat) + ly = np.log(y) + ly[y == 0] = 0 + ly = np.dot(y*ly, np.array([1.0, 1.0]).reshape([2,1])) + cvraw = 2*(np.tile(ly, [1, lambdau.size]) - lp) + elif ptype == 'mae': + cvraw = np.absolute(yy1 - (1 - predmat)) + np.absolute(yy2 - (1 - predmat)) + elif ptype == 'class': + cvraw = yy1*(predmat > 0.5) + yy2*(predmat <= 0.5) + + if y.size/nfolds < 3 and grouped == True: + print('Option grouped=false enforced in cv.glmnet, since < 3 observations per fold') + grouped = False + + if grouped == True: + cvob = cvcompute(cvraw, weights, foldid, nlams) + cvraw = cvob['cvraw'] + weights = cvob['weights'] + N = cvob['N'] + + cvm = wtmean(cvraw, weights) + sqccv = (cvraw - cvm)**2 + cvsd = np.sqrt(wtmean(sqccv, weights)/(N-1)) + + result = dict() + result['cvm'] = cvm + result['cvsd'] = cvsd + result['name'] = typenames[ptype] + + if keep: + result['fit_preval'] = predmat + + return(result) + +# end of cvelnet +#========================= +# +#========================= +# Helper functions +#========================= +def auc_mat(y, prob, weights = None): + if weights == None or len(weights) == 0: + weights = np.ones([y.shape[0], 1]) + wweights = weights*y + wweights = wweights.flatten() + wweights = np.reshape(wweights, [1, wweights.size]) + ny= y.shape[0] + a = np.zeros([ny, 1]) + b = np.ones([ny, 1]) + yy = np.vstack((a, b)) + pprob = np.vstack((prob,prob)) + result = auc(yy, pprob, wweights) + return(result) +#========================= +def auc(y, prob, w): + if len(w) == 0: + mindiff = np.amin(np.diff(np.unique(prob))) + pert = np.random.uniform(0, mindiff/3, prob.size) + t, rprob = np.unique(prob + pert, return_inverse = True) + n1 = np.sum(y, keepdims = True) + n0 = y.shape[0] - n1 + u = np.sum(rprob[y == 1]) - n1*(n1 + 1)/2 + result = u/(n1*n0) + else: + op = np.argsort(prob) + y = y[op] + w = w[op] + cw = np.cumsum(w) + w1 = w[y == 1] + cw1 = np.cumsum(w1) + wauc = np.sum(w1*(cw[y == 1] - cw1)) + sumw = cw1[-1] + sumw = sumw*(c1[-1] - sumw) + result = wauc/sumw + return(result) +#========================= diff --git a/build/lib/glmnet_python/cvmrelnet.py b/build/lib/glmnet_python/cvmrelnet.py new file mode 100644 index 0000000..c3fe8f8 --- /dev/null +++ b/build/lib/glmnet_python/cvmrelnet.py @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- +""" +Internal function called by cvglmnet. See also cvglmnet + +""" +import numpy as np +from glmnetPredict import glmnetPredict +from wtmean import wtmean +from cvcompute import cvcompute + +def cvmrelnet(fit, \ + lambdau, \ + x, \ + y, \ + weights, \ + offset, \ + foldid, \ + ptype, \ + grouped, \ + keep = False): + + typenames = {'deviance':'Mean-Squared Error', 'mse':'Mean-Squared Error', + 'mae':'Mean Absolute Error'} + if ptype == 'default': + ptype = 'mse' + + ptypeList = ['mse', 'mae', 'deviance'] + if not ptype in ptypeList: + print('Warning: only ', ptypeList, 'available for Gaussian models; ''mse'' used') + ptype = 'mse' + + nobs, nc = y.shape + + if len(offset) > 0: + y = y - offset + + predmat = np.ones([nobs, nc, lambdau.size])*np.NAN + nfolds = np.amax(foldid) + 1 + nlams = [] + for i in range(nfolds): + which = foldid == i + fitobj = fit[i].copy() + fitobj['offset'] = False + preds = glmnetPredict(fitobj, x[which, ]) + nlami = np.size(fit[i]['lambdau']) + predmat[which, 0:nlami] = preds + nlams.append(nlami) + # convert nlams to scipy array + nlams = np.array(nlams, dtype = np.integer) + + N = nobs - np.reshape(np.sum(np.isnan(predmat[:, 1, :]), axis = 0), (1, -1)) + bigY = np.tile(y[:, :, None], [1, 1, lambdau.size]) + + if ptype == 'mse': + cvraw = np.sum((bigY - predmat)**2, axis = 1).squeeze() + elif ptype == 'mae': + cvraw = np.sum(np.absolute(bigY - predmat), axis = 1).squeeze() + + if y.size/nfolds < 3 and grouped == True: + print('Option grouped=false enforced in cv.glmnet, since < 3 observations per fold') + grouped = False + + if grouped == True: + cvob = cvcompute(cvraw, weights, foldid, nlams) + cvraw = cvob['cvraw'] + weights = cvob['weights'] + N = cvob['N'] + + cvm = wtmean(cvraw, weights) + sqccv = (cvraw - cvm)**2 + cvsd = np.sqrt(wtmean(sqccv, weights)/(N-1)) + + result = dict() + result['cvm'] = cvm + result['cvsd'] = cvsd + result['name'] = typenames[ptype] + + if keep: + result['fit_preval'] = predmat + + return(result) + +# end of cvelnet +#========================= diff --git a/build/lib/glmnet_python/cvmultnet.py b/build/lib/glmnet_python/cvmultnet.py new file mode 100644 index 0000000..f14a2ba --- /dev/null +++ b/build/lib/glmnet_python/cvmultnet.py @@ -0,0 +1,135 @@ +# -*- coding: utf-8 -*- +""" +Internal function called by cvglmnet. See also cvglmnet + +""" +import numpy as np +from glmnetPredict import glmnetPredict +from wtmean import wtmean +from cvcompute import cvcompute + +def cvmultnet(fit, \ + lambdau, \ + x, \ + y, \ + weights, \ + offset, \ + foldid, \ + ptype, \ + grouped, \ + keep = False): + + typenames = {'deviance':'Multinomial Deviance', 'mse':'Mean-Squared Error', + 'mae':'Mean Absolute Error', 'class':'Misclassification Error'} + if ptype == 'default': + ptype = 'deviance' + + ptypeList = ['mse', 'mae', 'deviance', 'class'] + if not ptype in ptypeList: + print('Warning: only ', ptypeList, 'available for multinomial models; ''deviance'' used') + ptype = 'deviance' + + prob_min = 1.0e-5 + prob_max = 1 - prob_min + nc = y.shape + if nc[1] == 1: + classes, sy = np.unique(y, return_inverse = True) + nc = len(classes) + indexes = np.eye(nc, nc) + y = indexes[sy, :] + else: + nc = nc[1] + + is_offset = not(len(offset) == 0) + predmat = np.ones([y.shape[0], nc, lambdau.size])*np.NAN + nfolds = np.amax(foldid) + 1 + nlams = [] + for i in range(nfolds): + which = foldid == i + fitobj = fit[i].copy() + if is_offset: + off_sub = offset[which, ] + else: + off_sub = np.empty([0]) + preds = glmnetPredict(fitobj, x[which, ], np.empty([0]), 'response', False, off_sub) + nlami = np.size(fit[i]['lambdau']) + predmat[which, 0:nlami] = preds + nlams.append(nlami) + # convert nlams to np array + nlams = np.array(nlams, dtype = np.integer) + + ywt = np.sum(y, axis = 1, keepdims = True) + y = y/np.tile(ywt, [1, y.shape[1]]) + weights = weights*ywt + N = y.shape[0] - np.sum(np.isnan(predmat[:,1,:]), axis = 0, keepdims = True) + bigY = np.tile(y[:, :, None], [1, 1, lambdau.size]) + + if ptype == 'mse': + cvraw = np.sum((bigY - predmat)**2, axis = 1).squeeze() + elif ptype == 'deviance': + predmat = np.minimum(np.maximum(predmat, prob_min), prob_max) + lp = bigY*np.log(predmat) + ly = bigY*np.log(bigY) + ly[y == 0] = 0 + cvraw = np.sum(2*(ly - lp), axis = 1).squeeze() + elif ptype == 'mae': + cvraw = np.sum(np.absolute(bigY - predmat), axis = 1).squeeze() + elif ptype == 'class': + classid = np.zeros([y.shape[0], lambdau.size])*np.NaN + for i in range(lambdau.size): + classid[:, i] = glmnet_softmax(predmat[:,:,i]) + classid = classid.reshape([classid.size,1]) + yperm = bigY.transpose((0,2,1)) + yperm = yperm.reshape([yperm.size, 1]) + idx = sub2ind(yperm.shape, range(len(classid)), classid.transpose()) + cvraw = np.reshape(1 - yperm[idx], [-1, lambdau.size]); + + if grouped == True: + cvob = cvcompute(cvraw, weights, foldid, nlams) + cvraw = cvob['cvraw'] + weights = cvob['weights'] + N = cvob['N'] + + cvm = wtmean(cvraw, weights) + sqccv = (cvraw - cvm)**2 + cvsd = np.sqrt(wtmean(sqccv, weights)/(N-1)) + + result = dict() + result['cvm'] = cvm + result['cvsd'] = cvsd + result['name'] = typenames[ptype] + + if keep: + result['fit_preval'] = predmat + + return(result) + +# end of cvelnet +#========================= +# +#========================= +# Helper functions +#========================= +def sub2ind(array_shape, rows, cols): + return rows*array_shape[1] + cols +#========================= +def glmnet_softmax(x): + d = x.shape + nas = np.any(np.isnan(x), axis = 1) + if np.any(nas): + pclass = np.zeros([d[0], 1])*np.NaN + if np.sum(nas) < d[0]: + pclass2 = glmnet_softmax(x[~nas, :]) + pclass[~nas] = pclass2 + result = pclass + else: + maxdist = x[:, 1] + pclass = np.ones([d[0], 1]) + for i in range(1, d[1], 1): + t = x[:, i] > maxdist + pclass[t] = i + maxdist[t] = x[t, i] + result = pclass + + return(result) +#========================= diff --git a/build/lib/glmnet_python/dataprocess.py b/build/lib/glmnet_python/dataprocess.py new file mode 100644 index 0000000..d207c55 --- /dev/null +++ b/build/lib/glmnet_python/dataprocess.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python + +# ---------------------------------------- +# glmnet-python +# ---------------------------------------- +# a module for data processing +# ---------------------------------------- +# author: Han Fang +# contact: hanfang.cshl@gmail.com +# website: hanfang.github.io +# date: 3/1/2017 +# ---------------------------------------- + +import sys +import os +import numpy as np +from scipy import sparse + +class dataprocess(object): + """ + data process module + """ + def __init__(self): + """ + """ + pass + + def sparseDf(self, df, matrixType="csc"): + """ + convert a pandas sparse df to numpy sparse array + :param df: pandas sparse df + :param matrixType: csc or csr + :return: numpy sparse array + """ + columns = df.columns + dat, rows = map(list, zip( + *[(df[col].sp_values - df[col].fill_value, df[col].sp_index.to_int_index().indices) for col in columns])) + cols = [np.ones_like(a) * i for (i, a) in enumerate(dat)] + datF, rowsF, colsF = np.concatenate(dat), np.concatenate(rows), np.concatenate(cols) + arr = sparse.coo_matrix((datF, (rowsF, colsF)), df.shape, dtype=np.float64) + if matrixType == "csc": + return arr.tocsc() + elif matrixType == "csr": + return arr.tocsc() + else: + raise ValueError("Only accept csc or csr") + +def main(): + dataprocess.sparseDf() + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/build/lib/glmnet_python/elnet.py b/build/lib/glmnet_python/elnet.py new file mode 100644 index 0000000..d0aba5c --- /dev/null +++ b/build/lib/glmnet_python/elnet.py @@ -0,0 +1,226 @@ +# -*- coding: utf-8 -*- +""" +Internal function called by glmnet. See also glmnet, cvglmnet +""" + + +# import packages/methods +import numpy as np +import ctypes +from loadGlmLib import loadGlmLib + +def elnet(x, is_sparse, irs, pcs, y, weights, offset, gtype, parm, lempty, + nvars, jd, vp, cl, ne, nx, nlam, flmin, ulam, thresh, isd, intr, + maxit, family): + + # load shared fortran library + glmlib = loadGlmLib() + + # pre-process data + ybar = np.dot(np.transpose(y), weights) + ybar = ybar/sum(weights) + nulldev = (y - ybar)**2 * weights + # ka + lst = ['covariance', 'naive'] + ka = [i for i in range(len(lst)) if lst[i] == gtype] + if len(ka) == 0: + raise ValueError('unrecognized type for ka'); + else: + ka = ka[0] + 1 # convert from 0-based to 1-based index for fortran + # offset + if len(offset) == 0: + offset = y*0 + is_offset = False + else: + is_offset = True + + # remove offset from y + y = y - offset + + # now convert types and allocate memory before calling + # glmnet fortran library + ###################################### + # --------- PROCESS INPUTS ----------- + ###################################### + # force inputs into fortran order and into the correct scipy datatype + copyFlag = False + x = x.astype(dtype = np.float64, order = 'F', copy = copyFlag) + irs = irs.astype(dtype = np.int32, order = 'F', copy = copyFlag) + pcs = pcs.astype(dtype = np.int32, order = 'F', copy = copyFlag) + y = y.astype(dtype = np.float64, order = 'F', copy = copyFlag) + weights = weights.astype(dtype = np.float64, order = 'F', copy = copyFlag) + jd = jd.astype(dtype = np.int32, order = 'F', copy = copyFlag) + vp = vp.astype(dtype = np.float64, order = 'F', copy = copyFlag) + cl = cl.astype(dtype = np.float64, order = 'F', copy = copyFlag) + ulam = ulam.astype(dtype = np.float64, order = 'F', copy = copyFlag) + + ###################################### + # --------- ALLOCATE OUTPUTS --------- + ###################################### + # lmu + lmu = -1 + lmu_r = ctypes.c_int(lmu) + # a0 + a0 = np.zeros([nlam], dtype = np.float64) + a0 = a0.astype(dtype = np.float64, order = 'F', copy = False) + a0_r = a0.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + # ca + ca = np.zeros([nx, nlam], dtype = np.float64) + ca = ca.astype(dtype = np.float64, order = 'F', copy = False) + ca_r = ca.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + # ia + ia = -1*np.ones([nx], dtype = np.int32) + ia = ia.astype(dtype = np.int32, order = 'F', copy = False) + ia_r = ia.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) + # nin + nin = -1*np.ones([nlam], dtype = np.int32) + nin = nin.astype(dtype = np.int32, order = 'F', copy = False) + nin_r = nin.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) + # rsq + rsq = -1*np.ones([nlam], dtype = np.float64) + rsq = rsq.astype(dtype = np.float64, order = 'F', copy = False) + rsq_r = rsq.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + # alm + alm = -1*np.ones([nlam], dtype = np.float64) + alm = alm.astype(dtype = np.float64, order = 'F', copy = False) + alm_r = alm.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + # nlp + nlp = -1 + nlp_r = ctypes.c_int(nlp) + # jerr + jerr = -1 + jerr_r = ctypes.c_int(jerr) + + + # ################################### + # main glmnet fortran caller + # ################################### + if is_sparse: + # sparse elnet + glmlib.spelnet_( + ctypes.byref(ctypes.c_int(ka)), + ctypes.byref(ctypes.c_double(parm)), + ctypes.byref(ctypes.c_int(len(weights))), + ctypes.byref(ctypes.c_int(nvars)), + x.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + pcs.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), + irs.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), + y.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + weights.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + jd.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), + vp.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + cl.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + ctypes.byref(ctypes.c_int(ne)), + ctypes.byref(ctypes.c_int(nx)), + ctypes.byref(ctypes.c_int(nlam)), + ctypes.byref(ctypes.c_double(flmin)), + ulam.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + ctypes.byref(ctypes.c_double(thresh)), + ctypes.byref(ctypes.c_int(isd)), + ctypes.byref(ctypes.c_int(intr)), + ctypes.byref(ctypes.c_int(maxit)), + ctypes.byref(lmu_r), + a0_r, + ca_r, + ia_r, + nin_r, + rsq_r, + alm_r, + ctypes.byref(nlp_r), + ctypes.byref(jerr_r) + ) + else: + # call fortran elnet routine + glmlib.elnet_( + ctypes.byref(ctypes.c_int(ka)), + ctypes.byref(ctypes.c_double(parm)), + ctypes.byref(ctypes.c_int(len(weights))), + ctypes.byref(ctypes.c_int(nvars)), + x.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + y.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + weights.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + jd.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), + vp.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + cl.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + ctypes.byref(ctypes.c_int(ne)), + ctypes.byref(ctypes.c_int(nx)), + ctypes.byref(ctypes.c_int(nlam)), + ctypes.byref(ctypes.c_double(flmin)), + ulam.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + ctypes.byref(ctypes.c_double(thresh)), + ctypes.byref(ctypes.c_int(isd)), + ctypes.byref(ctypes.c_int(intr)), + ctypes.byref(ctypes.c_int(maxit)), + ctypes.byref(lmu_r), + a0_r, + ca_r, + ia_r, + nin_r, + rsq_r, + alm_r, + ctypes.byref(nlp_r), + ctypes.byref(jerr_r) + ) + + # ################################### + # post process results + # ################################### + + # check for error + if (jerr_r.value > 0): + raise ValueError("Fatal glmnet error in library call : error code = ", jerr_r.value) + elif (jerr_r.value < 0): + print("Warning: Non-fatal error in glmnet library call: error code = ", jerr_r.value) + print("Check results for accuracy. Partial or no results returned.") + + # clip output to correct sizes + lmu = lmu_r.value + a0 = a0[0:lmu] + ca = ca[0:nx, 0:lmu] + ia = ia[0:nx] + nin = nin[0:lmu] + rsq = rsq[0:lmu] + alm = alm[0:lmu] + + # ninmax + ninmax = max(nin) + # fix first value of alm (from inf to correct value) + if lempty: + t1 = np.log(alm[1]) + t2 = np.log(alm[2]) + alm[0] = np.exp(2*t1 - t2) + # create return fit dictionary + if ninmax > 0: + ca = ca[0:ninmax, :] + df = np.sum(np.absolute(ca) > 0, axis=0) + ja = ia[0:ninmax] - 1 # ia is 1-indexed in fortran + oja = np.argsort(ja) + ja1 = ja[oja] + beta = np.zeros([nvars, lmu], dtype = np.float64) + beta[ja1, :] = ca[oja, :] + else: + beta = np.zeros([nvars, lmu], dtype = np.float64) + df = np.zeros([1, lmu], dtype = np.float64) + + fit = dict() + fit['a0'] = a0 + fit['beta'] = beta + fit['dev'] = rsq + fit['nulldev'] = nulldev + fit['df']= df + fit['lambdau'] = alm + fit['npasses'] = nlp_r.value + fit['jerr'] = jerr_r.value + fit['dim'] = np.array([nvars, lmu], dtype = np.integer) + fit['offset'] = is_offset + fit['class'] = 'elnet' + + # ################################### + # return to caller + # ################################### + + return fit +#----------------------------------------- +# end of method elmnet +#----------------------------------------- + diff --git a/build/lib/glmnet_python/fishnet.py b/build/lib/glmnet_python/fishnet.py new file mode 100644 index 0000000..e71b8fd --- /dev/null +++ b/build/lib/glmnet_python/fishnet.py @@ -0,0 +1,218 @@ +# -*- coding: utf-8 -*- +""" +Internal function called by glmnet. See also glmnet, cvglmnet +""" +# import packages/methods +import numpy as np +import ctypes +from loadGlmLib import loadGlmLib + +def fishnet(x, is_sparse, irs, pcs, y, weights, offset, parm, + nobs, nvars, jd, vp, cl, ne, nx, nlam, flmin, ulam, + thresh, isd, intr, maxit, family): + + # load shared fortran library + glmlib = loadGlmLib() + + if np.any( y < 0): + raise ValueError('negative responses not permitted for Poisson family') + + if len(offset) == 0: + offset = y*0 + is_offset = False + else: + is_offset = True + + # now convert types and allocate memory before calling + # glmnet fortran library + ###################################### + # --------- PROCESS INPUTS ----------- + ###################################### + # force inputs into fortran order and scipy float64 + copyFlag = False + x = x.astype(dtype = np.float64, order = 'F', copy = copyFlag) + irs = irs.astype(dtype = np.int32, order = 'F', copy = copyFlag) + pcs = pcs.astype(dtype = np.int32, order = 'F', copy = copyFlag) + y = y.astype(dtype = np.float64, order = 'F', copy = copyFlag) + weights = weights.astype(dtype = np.float64, order = 'F', copy = copyFlag) + offset = offset.astype(dtype = np.float64, order = 'F', copy = copyFlag) + jd = jd.astype(dtype = np.int32, order = 'F', copy = copyFlag) + vp = vp.astype(dtype = np.float64, order = 'F', copy = copyFlag) + cl = cl.astype(dtype = np.float64, order = 'F', copy = copyFlag) + ulam = ulam.astype(dtype = np.float64, order = 'F', copy = copyFlag) + + ###################################### + # --------- ALLOCATE OUTPUTS --------- + ###################################### + # lmu + lmu = -1 + lmu_r = ctypes.c_int(lmu) + # a0 + a0 = np.zeros([nlam], dtype = np.float64) + a0 = a0.astype(dtype = np.float64, order = 'F', copy = False) + a0_r = a0.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + # ca + ca = np.zeros([nx, nlam], dtype = np.float64) + ca = ca.astype(dtype = np.float64, order = 'F', copy = False) + ca_r = ca.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + # ia + ia = -1*np.ones([nx], dtype = np.int32) + ia = ia.astype(dtype = np.int32, order = 'F', copy = False) + ia_r = ia.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) + # nin + nin = -1*np.ones([nlam], dtype = np.int32) + nin = nin.astype(dtype = np.int32, order = 'F', copy = False) + nin_r = nin.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) + # dev + dev = -1*np.ones([nlam], dtype = np.float64) + dev = dev.astype(dtype = np.float64, order = 'F', copy = False) + dev_r = dev.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + # alm + alm = -1*np.ones([nlam], dtype = np.float64) + alm = alm.astype(dtype = np.float64, order = 'F', copy = False) + alm_r = alm.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + # nlp + nlp = -1 + nlp_r = ctypes.c_int(nlp) + # jerr + jerr = -1 + jerr_r = ctypes.c_int(jerr) + # dev0 + dev0 = -1 + dev0_r = ctypes.c_double(dev0) + + # ################################### + # main glmnet fortran caller + # ################################### + if is_sparse: + # sparse lognet + glmlib.spfishnet_( + ctypes.byref(ctypes.c_double(parm)), + ctypes.byref(ctypes.c_int(nobs)), + ctypes.byref(ctypes.c_int(nvars)), + x.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + pcs.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), + irs.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), + y.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + offset.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + weights.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + jd.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), + vp.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + cl.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + ctypes.byref(ctypes.c_int(ne)), + ctypes.byref(ctypes.c_int(nx)), + ctypes.byref(ctypes.c_int(nlam)), + ctypes.byref(ctypes.c_double(flmin)), + ulam.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + ctypes.byref(ctypes.c_double(thresh)), + ctypes.byref(ctypes.c_int(isd)), + ctypes.byref(ctypes.c_int(intr)), + ctypes.byref(ctypes.c_int(maxit)), + ctypes.byref(lmu_r), + a0_r, + ca_r, + ia_r, + nin_r, + ctypes.byref(dev0_r), + dev_r, + alm_r, + ctypes.byref(nlp_r), + ctypes.byref(jerr_r) + ) + else: + glmlib.fishnet_( + ctypes.byref(ctypes.c_double(parm)), + ctypes.byref(ctypes.c_int(nobs)), + ctypes.byref(ctypes.c_int(nvars)), + x.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + y.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + offset.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + weights.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + jd.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), + vp.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + cl.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + ctypes.byref(ctypes.c_int(ne)), + ctypes.byref(ctypes.c_int(nx)), + ctypes.byref(ctypes.c_int(nlam)), + ctypes.byref(ctypes.c_double(flmin)), + ulam.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + ctypes.byref(ctypes.c_double(thresh)), + ctypes.byref(ctypes.c_int(isd)), + ctypes.byref(ctypes.c_int(intr)), + ctypes.byref(ctypes.c_int(maxit)), + ctypes.byref(lmu_r), + a0_r, + ca_r, + ia_r, + nin_r, + ctypes.byref(dev0_r), + dev_r, + alm_r, + ctypes.byref(nlp_r), + ctypes.byref(jerr_r) + ) + + # ################################### + # post process results + # ################################### + + # check for error + if (jerr_r.value > 0): + raise ValueError("Fatal glmnet error in library call : error code = ", jerr_r.value) + elif (jerr_r.value < 0): + print("Warning: Non-fatal error in glmnet library call: error code = ", jerr_r.value) + print("Check results for accuracy. Partial or no results returned.") + + # clip output to correct sizes + lmu = lmu_r.value + a0 = a0[0:lmu] + ca = ca[0:nx, 0:lmu] + ia = ia[0:nx] + nin = nin[0:lmu] + dev = dev[0:lmu] + alm = alm[0:lmu] + + # ninmax + ninmax = max(nin) + # fix first value of alm (from inf to correct value) + if ulam[0] == 0.0: + t1 = np.log(alm[1]) + t2 = np.log(alm[2]) + alm[0] = np.exp(2*t1 - t2) + # create return fit dictionary + dd = np.array([nvars, lmu], dtype = np.integer) + if ninmax > 0: + ca = ca[0:ninmax, :] + df = np.sum(np.absolute(ca) > 0, axis = 0) + ja = ia[0:ninmax] - 1 # ia is 1-indexed in fortran + oja = np.argsort(ja) + ja1 = ja[oja] + beta = np.zeros([nvars, lmu], dtype = np.float64) + beta[ja1, :] = ca[oja, :] + else: + beta = np.zeros([nvars, lmu], dtype = np.float64) + df = np.zeros([1, lmu], dtype = np.float64) + + fit = dict() + fit['a0'] = a0 + fit['beta'] = beta + fit['dev'] = dev + fit['nulldev'] = dev0_r.value + fit['df'] = df + fit['lambdau'] = alm + fit['npasses'] = nlp_r.value + fit['jerr'] = jerr_r.value + fit['dim'] = dd + fit['offset'] = is_offset + fit['class'] = 'fishnet' + + + # ################################### + # return to caller + # ################################### + + return fit +#----------------------------------------- +# end of method lognet +#----------------------------------------- + diff --git a/build/lib/glmnet_python/glmnet.py b/build/lib/glmnet_python/glmnet.py new file mode 100644 index 0000000..a293ab2 --- /dev/null +++ b/build/lib/glmnet_python/glmnet.py @@ -0,0 +1,484 @@ +# -*- coding: utf-8 -*- +""" +-------------------------------------------------------------------------- +glmnet.py: + Fit a GLM with lasso or elastic-net regularization. + glmnet.py provides a wrapper to the glmnet fortran routines. All + variables in the arguments are keyword-only. (see examples below). +-------------------------------------------------------------------------- + +DESCRIPTION: +----------- + Fit a generalized linear model via penalized maximum likelihood. The + regularization path is computed for the lasso or elasticnet penalty + at a grid of values for the regularization parameter lambda. Can deal + with all shapes of data, including very large sparse data matrices. + Fits linear, logistic and multinomial, Poisson, and Cox regression + models. + +EXTERNAL FUNCTIONS: +------------------ + options = glmnetSet() # provided with this (glmnet python) package + +INPUT ARGUMENTS: +--------------- + x Input np 2D array of nobs x nvars (required). Each row is an + observation vector. Can be in sparse matrix format. Must be in + np csc_matrix format + + y Response variable (np 2D array of size nobs x 1, nobs x nc, etc). (required) + For family = 'gaussian', Quantitative column vector + For family = 'poisson' (non-negative counts), Quantitative column vector + For family = 'binomial', should be either a column vector with two + levels or a two column matrix of counts of proportions. + For family = 'multinomial', can be a column vector of nc >= 2 levels + or a matrix with nc columns of counts or proportions. + For family = 'cox', y should be a two-column array with the first column + for time and the second for status. The latter is a binary variable, + with 1 indicating death and 0 indicating right censored. + For family = 'mgaussian', y is an array of quantitative responses. + (see examples for illustrations) + + family Response type. Default is 'gaussian'. (optional) + Currently, 'gaussian', 'poisson', 'binomial', 'multinomial', 'mgaussian' + and 'cox' are supported + + options optional parameters that can be set and altered by glmnetSet() + Default values for some often used parameters: + alpha = 1.0 (elastic-net mixing parameter) + nlambda = 100 (number of lambda values) + lambdau depends on data, nlambda and lambda_min (user supplied lambda sequence) + standardize = True (variable standardization) + weights = all ones np vector (observation weights) + For more details see help for glmnetSet + +OUTPUT ARGUMENTS: +---------------- +fit glmnet(...) outputs a dict() of fit parameters with the following keys: + +a0 Intercept sequence of length len(fit['lambdau']) + +beta For 'elnet' and 'lognet' models, nvars x len(lambdau) array of coefficients + For 'multnet', a list of nc such matrices, one for each class + +lambdau The actual sequence of lambdau values used + +dev The fraction of (null) deviance explained (for 'elnet', this is the R-squared) + +nulldev Null deviance (per observation) + +df The number of nonzero coefficients for each value of lambdau. + For 'multnet', this is the number of variables with a nonezero + coefficient for any class + +dfmat For 'multnet' only: A 2D array consisting of the number of nonzero + coefficients per class + +dim Dimension of coefficient matrix (ices) + +npasses Total passes over the data summed over all lambdau values + +offset A logical variable indicating whether an offset was included in the model + +jerr Error flag, for warnings and errors (largely for internal debugging) + +class Type of regression - internal usage + +EXAMPLES: +-------- + # Gaussian + x = np.random.rand(100, 10) + y = np.random.rand(100, 1) + fit = glmnet(x = x, y = y) + fit = glmnet(x = x, y = y, alpha = 0.5) + glmnetPrint(fit) + glmnetPredict(fit, np.empty([0]), np.array([0.01]), 'coef') # extract coefficients at a single value of lambdau + glmnetPredict(fit, x[0:10,:], np.array([0.01, 0.005])) # make predictions + + # Multivariate Gaussian: + x = np.random.rand(100, 10) + y = np.random.rand(100,3) + fit = glmnet(x, y, 'mgaussian') + glmnetPlot(fit, 'norm', False, '2norm') + + # Binomial + x = np.random.rand(100, 10) + y = np.random.rand(100,1) + y = (y > 0.5)*1.0 + fit = glmnet(x = x, y = y, family = 'binomial', alpha = 0.5) + + # Multinomial + x = np.random.rand(100,10) + y = np.random.rand(100,1) + y[y < 0.3] = 1.0 + y[y < 0.6] = 2.0 + y[y < 1.0] = 3.0 + fit = glmnet(x = x, y = y, family = 'multinomial', mtype = 'grouped') + + # poisson + x = np.random.rand(100,10) + y = np.random.poisson(size = [100, 1])*1.0 + fit = glmnet(x = x, y = y, family = 'poisson') + + # cox + N = 1000; p = 30; + nzc = p/3; + x = np.random.normal(size = [N, p]) + beta = np.random.normal(size = [nzc, 1]) + fx = np.dot(x[:, 0:nzc], beta/3) + hx = np.exp(fx) + ty = np.random.exponential(scale = 1/hx, size = [N, 1]) + tcens = np.random.binomial(1, 0.3, size = [N, 1]) + tcens = 1 - tcens + y = np.column_stack((ty, tcens)) + fit = glmnet(x = x.copy(), y = y.copy(), family = 'cox') + glmnetPlot(fit) + + # sparse example + N = 1000000; + x = np.random.normal(size = [N,10]) + x[x < 3.0] = 0.0 + xs = scipy.sparse.csc_matrix(x, dtype = np.float64) + y = np.random.binomial(1, 0.5, size =[N,1]) + y = y*1.0 + st = time.time() + fit = glmnet.glmnet(x = xs, y = y, family = 'binomial') + en = time.time() + print("time elapsed (sparse) = ", en - st) + print("nbytes = ", xs.data.nbytes) + # non-sparse (same as sparse case) + st = time.time() + fit = glmnet.glmnet(x = x, y = y, family = 'binomial') + en = time.time() + print("time elapsed (full) = ", en - st) + print("nbytes = ", x.data.nbytes) + +DETAILS: +------- + The sequence of models implied by lambda is fit by coordinate descent. + For family='gaussian' this is the lasso sequence if alpha=1, else it + is the elasticnet sequence. For the other families, this is a lasso or + elasticnet regularization path for fitting the generalized linear + regression paths, by maximizing the appropriate penalized + log-likelihood (partial likelihood for the 'cox' model). Sometimes the + sequence is truncated before nlambda values of lambda have been used, + because of instabilities in the inverse link functions near a + saturated fit. glmnet(...,family='binomial') fits a traditional + logistic regression model for the log-odds. + glmnet(...,family='multinomial') fits a symmetric multinomial model, + where each class is represented by a linear model (on the log-scale). + The penalties take care of redundancies. A two-class 'multinomial' + model will produce the same fit as the corresponding 'binomial' model, + except the pair of coefficient matrices will be equal in magnitude and + opposite in sign, and half the 'binomial' values. Note that the + objective function for 'gaussian' is + + 1/2 RSS / nobs + lambda * penalty, + + and for the logistic models it is + + -loglik / nobs + lambda * penalty. + + Note also that for 'gaussian', glmnet standardizes y to have unit + variance before computing its lambda sequence (and then unstandardizes + the resulting coefficients); if you wish to reproduce/compare results + with other software, best to supply a standardized y. The latest two + features in glmnet are the family='mgaussian' family and the + mtype='grouped' in options for multinomial fitting. The former + allows a multi-response gaussian model to be fit, using a "group + -lasso" penalty on the coefficients for each variable. Tying the + responses together like this is called "multi-task" learning in some + domains. The grouped multinomial allows the same penalty for the + family='multinomial' model, which is also multi-responsed. For both of + these the penalty on the coefficient vector for variable j is + + (1-alpha)/2 * ||beta_j||_2^2 + alpha * ||beta_j||_2 + + When alpha=1 this is a group-lasso penalty, and otherwise it mixes + with quadratic just like elasticnet. + +LICENSE: +------- + GPL-2 + +AUTHORS: +------- + Algorithm was designed by Jerome Friedman, Trevor Hastie and Rob Tibshirani + Fortran code was written by Jerome Friedman + R wrapper (from which the MATLAB wrapper was adapted) was written by Trevor Hasite + The original MATLAB wrapper was written by Hui Jiang, + and is updated and maintained by Junyang Qian. + This Python wrapper (adapted from the Matlab and R wrappers) + is written by Balakumar B.J., bbalasub@stanford.edu + Department of Statistics, Stanford University, Stanford, California, USA. + +REFERENCES: +---------- + Friedman, J., Hastie, T. and Tibshirani, R. (2008) Regularization Paths for Generalized Linear Models via Coordinate Descent, + http://www.jstatsoft.org/v33/i01/ + Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010 + + Simon, N., Friedman, J., Hastie, T., Tibshirani, R. (2011) Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent, + http://www.jstatsoft.org/v39/i05/ + Journal of Statistical Software, Vol. 39(5) 1-13 + + Tibshirani, Robert., Bien, J., Friedman, J.,Hastie, T.,Simon, N.,Taylor, J. and Tibshirani, Ryan. (2010) Strong Rules for Discarding Predictors in Lasso-type Problems, + http://www-stat.stanford.edu/~tibs/ftp/strong.pdf + Stanford Statistics Technical Report + +SEE ALSO: +-------- + glmnetPrint, glmnetPlot, glmnetCoef, glmnetPredict, + glmnetSet, glmnetControl and cvglmnet. + +""" + +# import packages/methods +from glmnetSet import glmnetSet +from glmnetControl import glmnetControl +import numpy as np +import scipy.sparse +from elnet import elnet +from lognet import lognet +from coxnet import coxnet +from mrelnet import mrelnet +from fishnet import fishnet + +def glmnet(*, x, y, family='gaussian', **options): + + # check inputs: make sure x and y are np, float64 arrays + # fortran order is not checked as we force a convert later + if not( isinstance(x, scipy.sparse.csc.csc_matrix) ): + if not( isinstance(x, np.ndarray) and x.dtype == 'float64'): + raise ValueError('x input must be a np float64 ndarray') + else: + if not (x.dtype == 'float64'): + raise ValueError('x input must be a float64 array') + + if not( isinstance(y, np.ndarray) and y.dtype == 'float64'): + raise ValueError('y input must be a np float64 ndarray') + + # create options + if options is None: + options = glmnetSet(); + + ## match the family, abbreviation allowed + fambase = ['gaussian','binomial','poisson','multinomial','cox','mgaussian']; + # find index of family in fambase + indxtf = [x.startswith(family.lower()) for x in fambase] # find index of family in fambase + famind = [i for i in range(len(indxtf)) if indxtf[i] == True] + if len(famind) == 0: + raise ValueError('Family should be one of ''gaussian'', ''binomial'', ''poisson'', ''multinomial'', ''cox'', ''mgaussian''') + elif len(famind) > 1: + raise ValueError('Family could not be uniquely determined : Use a longer description of the family string.') + else: + family = fambase[famind[0]] + + ## prepare options + options = glmnetSet(options) + #print('glmnet.py options:') + #print(options) + + ## error check options parameters + alpha = np.float64(options['alpha']) + if alpha > 1.0 : + print('Warning: alpha > 1.0; setting to 1.0') + options['alpha'] = np.float64(1.0) + + if alpha < 0.0 : + print('Warning: alpha < 0.0; setting to 0.0') + options['alpha'] = np.float64(0.0) + + parm = np.float64(options['alpha']) + nlam = np.int32(options['nlambda']) + nobs, nvars = x.shape + + # check weights length + weights = options['weights'].copy() + if len(weights) == 0: + weights = np.ones([nobs, 1], dtype = np.float64) + elif len(weights) != nobs: + raise ValueError('Error: Number of elements in ''weights'' not equal to number of rows of ''x''') + # check if weights are np nd array + if not( isinstance(weights, np.ndarray) and weights.dtype == 'float64'): + raise ValueError('weights input must be a np float64 ndarray') + + # check y length + nrowy = y.shape[0] + if nrowy != nobs: + raise ValueError('Error: Number of elements in ''y'' not equal to number of rows of ''x''') + + # check ne + ne = options['dfmax'] + if len(ne) == 0: + ne = nvars + 1 + + # check nx + nx = options['pmax'] + if len(nx) == 0: + nx = min(ne*2 + 20, nvars) + + # check jd + exclude = options['exclude'] + # TBD: test this + if not (len(exclude) == 0): + exclude = np.unique(exclude) + if np.any(exclude < 0) or np.any(exclude >= nvars): + raise ValueError('Error: Some excluded variables are out of range') + else: + jd = np.append(len(exclude), exclude + 1) # indices are 1-based in fortran + else: + jd = np.zeros([1,1], dtype = np.integer) + + # check vp + vp = options['penalty_factor'] + if len(vp) == 0: + vp = np.ones([1, nvars]) + + # inparms + inparms = glmnetControl() + + # cl + cl = options['cl'] + if any(cl[0,:] > 0): + raise ValueError('Error: The lower bound on cl must be non-positive') + + if any(cl[1,:] < 0): + raise ValueError('Error: The lower bound on cl must be non-negative') + + cl[0, cl[0, :] == np.float64('-inf')] = -1.0*inparms['big'] + cl[1, cl[1, :] == np.float64('inf')] = 1.0*inparms['big'] + + if cl.shape[1] < nvars: + if cl.shape[1] == 1: + cl = cl*np.ones([1, nvars]) + else: + raise ValueError('Error: Require length 1 or nvars lower and upper limits') + else: + cl = cl[:, 0:nvars] + + + exit_rec = 0 + if np.any(cl == 0.0): + fdev = inparms['fdev'] + if fdev != 0: + optset = dict() + optset['fdev'] = 0 + glmnetControl(optset) + exit_rec = 1 + + isd = np.int32(options['standardize']) + intr = np.int32(options['intr']) + if (intr == True) and (family == 'cox'): + print('Warning: Cox model has no intercept!') + + jsd = np.int32(options['standardize_resp']) + thresh = options['thresh'] + lambdau = options['lambdau'] + lambda_min = options['lambda_min'] + + if len(lambda_min) == 0: + if nobs < nvars: + lambda_min = 0.01 + else: + lambda_min = 1e-4 + + lempty = (len(lambdau) == 0) + if lempty: + if (lambda_min >= 1): + raise ValueError('ERROR: lambda_min should be less than 1') + flmin = lambda_min + ulam = np.zeros([1,1], dtype = np.float64) + else: + flmin = 1.0 + if any(lambdau < 0): + raise ValueError('ERROR: lambdas should be non-negative') + + ulam = -np.sort(-lambdau) # reverse sort + nlam = lambdau.size + + maxit = np.int32(options['maxit']) + gtype = options['gtype'] + if len(gtype) == 0: + if (nvars < 500): + gtype = 'covariance' + else: + gtype = 'naive' + + # ltype + ltype = options['ltype'] + ltypelist = ['newton', 'modified.newton'] + indxtf = [x.startswith(ltype.lower()) for x in ltypelist] + indl = [i for i in range(len(indxtf)) if indxtf[i] == True] + if len(indl) != 1: + raise ValueError('ERROR: ltype should be one of ''Newton'' or ''modified.Newton''') + else: + kopt = indl[0] + + if family == 'multinomial': + mtype = options['mtype'] + mtypelist = ['ungrouped', 'grouped'] + indxtf = [x.startswith(mtype.lower()) for x in mtypelist] + indm = [i for i in range(len(indxtf)) if indxtf[i] == True] + if len(indm) == 0: + raise ValueError('Error: mtype should be one of ''ungrouped'' or ''grouped''') + elif (indm == 2): + kopt = 2 + # + offset = options['offset'] + # sparse (if is_sparse, convert to compressed sparse row format) + is_sparse = False + if scipy.sparse.issparse(x): + is_sparse = True + tx = scipy.sparse.csc_matrix(x, dtype = np.float64) + x = tx.data; x = x.reshape([len(x), 1]) + irs = tx.indices + 1 + pcs = tx.indptr + 1 + irs = np.reshape(irs, [len(irs),]) + pcs = np.reshape(pcs, [len(pcs),]) + else: + irs = np.empty([0]) + pcs = np.empty([0]) + + if scipy.sparse.issparse(y): + y = y.todense() + + ## finally call the appropriate fit code + if family == 'gaussian': + # call elnet + fit = elnet(x, is_sparse, irs, pcs, y, weights, offset, gtype, parm, + lempty, nvars, jd, vp, cl, ne, nx, nlam, flmin, ulam, + thresh, isd, intr, maxit, family) + elif (family == 'binomial') or (family == 'multinomial'): + # call lognet + fit = lognet(x, is_sparse, irs, pcs, y, weights, offset, parm, + nobs, nvars, jd, vp, cl, ne, nx, nlam, flmin, ulam, + thresh, isd, intr, maxit, kopt, family) + elif family == 'cox': + # call coxnet + fit = coxnet(x, is_sparse, irs, pcs, y, weights, offset, parm, + nobs, nvars, jd, vp, cl, ne, nx, nlam, flmin, ulam, + thresh, isd, maxit, family) + elif family == 'mgaussian': + # call mrelnet + fit = mrelnet(x, is_sparse, irs, pcs, y, weights, offset, parm, + nobs, nvars, jd, vp, cl, ne, nx, nlam, flmin, ulam, + thresh, isd, jsd, intr, maxit, family) + elif family == 'poisson': + # call fishnet + fit = fishnet(x, is_sparse, irs, pcs, y, weights, offset, parm, + nobs, nvars, jd, vp, cl, ne, nx, nlam, flmin, ulam, + thresh, isd, intr, maxit, family); + else: + raise ValueError('calling a family of fits that has not been implemented yet') + + if exit_rec == 1: + optset['fdev'] = fdev + #TODO: Call glmnetControl(optset) to set persistent parameters + + # return fit + return fit + +#----------------------------------------- +# end of method glmnet +#----------------------------------------- diff --git a/build/lib/glmnet_python/glmnetCoef.py b/build/lib/glmnet_python/glmnetCoef.py new file mode 100644 index 0000000..9fa0907 --- /dev/null +++ b/build/lib/glmnet_python/glmnetCoef.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- +""" +-------------------------------------------------------------------------- + glmnetCoef computes coefficients from a "glmnet" object. +-------------------------------------------------------------------------- + + DESCRIPTION: + This function extracts coefficients at certain lambdas if they are + in the lambda sequence of a "glmnet" object or make predictions + if they are not in that sequence. + + USAGE: + glmnetCoef(object, s, exact) + + Fewer input arguments (more often) are allowed in the call, but must + come in the order listed above. To set default values on the way, use + np.empty([0]). + For example, ncoef = glmnetCoef(fit,np.empty([0]),False). + + INPUT ARGUMENTS: + obj Fitted "glmnet" model object. + s Value(s) of the penalty parameter lambda at which computation + is required. Default is the entire sequence used to create + the model. + exact If exact = False (default), then the function uses + linear interpolation to make predictions for values of s + that do not coincide with those used in the fitting + algorithm. Note that exact = True is not implemented. + + OUTPUT ARGUMENTS: + result A (nvars+1) x length(s) np 2D array with each column being the + coefficients at an s. Note that the first row are the + intercepts (0 if no intercept in the original model). + + LICENSE: GPL-2 + + AUTHORS: + Algorithm was designed by Jerome Friedman, Trevor Hastie and Rob Tibshirani + Fortran code was written by Jerome Friedman + R wrapper (from which the MATLAB wrapper was adapted) was written by Trevor Hasite + The original MATLAB wrapper was written by Hui Jiang, + and is updated and maintained by Junyang Qian. + This Python wrapper (adapted from the Matlab and R wrappers) + is written by Balakumar B.J., bbalasub@stanford.edu + Department of Statistics, Stanford University, Stanford, California, USA. + + REFERENCES: + Friedman, J., Hastie, T. and Tibshirani, R. (2008) Regularization Paths for Generalized Linear Models via Coordinate Descent, + http://www.jstatsoft.org/v33/i01/ + Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010 + + Simon, N., Friedman, J., Hastie, T., Tibshirani, R. (2011) Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent, + http://www.jstatsoft.org/v39/i05/ + Journal of Statistical Software, Vol. 39(5) 1-13 + + Tibshirani, Robert., Bien, J., Friedman, J.,Hastie, T.,Simon, N.,Taylor, J. and Tibshirani, Ryan. (2010) Strong Rules for Discarding Predictors in Lasso-type Problems, + http://www-stat.stanford.edu/~tibs/ftp/strong.pdf + Stanford Statistics Technical Report + + SEE ALSO: + glmnet, glmnetPrint, glmnetPredict, and cvglmnet. + + EXAMPLES: + x = np.random.rand(100,20); + y = np.random.rand(100,1); + fit = glmnet(x = x.copy(),y = y.copy()); + ncoef = glmnetCoef(fit,np.array([0.01, 0.001])); + +""" + +import numpy as np +from glmnetPredict import glmnetPredict + +def glmnetCoef(obj, s = None, exact = False): + + if s is None: + s = obj['lambdau'] + + if exact and len(s) > 0: + raise NotImplementedError('exact = True not implemented in glmnetCoef') + + result = glmnetPredict(obj, np.empty([0]), s, 'coefficients') + + return(result) + + \ No newline at end of file diff --git a/build/lib/glmnet_python/glmnetControl.py b/build/lib/glmnet_python/glmnetControl.py new file mode 100644 index 0000000..f9681a3 --- /dev/null +++ b/build/lib/glmnet_python/glmnetControl.py @@ -0,0 +1,113 @@ +# -*- coding: utf-8 -*- +""" + DESCRIPTION: + View and/or change the factory default parameters in glmnet. Currently, only + fdev and big are used in the glmnet libraries. + + USAGE: + glmnetControl; (with no input or output arguments) + displays all inner parameters and their current values. + glmnetControl(pars); + sets the internal parameters that appear in the fields of pars to the + new values. + + ARGUMENTS: + pars is a structure with the following fields. + fdev minimum fractional change in deviance for stopping path; + factory default = 1.0e-5. + devmax maximum fraction of explained deviance for stopping path; + factory default = 0.999. + eps minimum value of lambda.min.ratio (see glmnet); factory + default= 1.0e-6. + big large floating point number; factory default = 9.9e35. Inf in + definition of upper.limit is set to big. + mnlam minimum number of path points (lambda values) allowed; + factory default = 5. + pmin minimum null probability for any class. factory default = + 1.0e-5. + exmx maximum allowed exponent. factory default = 250.0. + prec convergence threshold for multi response bounds adjustment + solution. factory default = 1.0e-10. + mxit maximum iterations for multiresponse bounds adjustment + solution. factory default = 100. + factory If true, reset all the parameters to the factory default; + default is false. + + DETAILS: + If called with no arguments, glmnetControl() returns a structure with + the current settings of these parameters. Any arguments included in the + fields of the input structure sets those parameters to the new values, + and then silently returns. The values set are persistent for the + duration of the Matlab session. + + LICENSE: GPL-2 + + AUTHORS: + Algorithm was designed by Jerome Friedman, Trevor Hastie and Rob Tibshirani + Fortran code was written by Jerome Friedman + R wrapper (from which the MATLAB wrapper was adapted) was written by Trevor Hasite + The original MATLAB wrapper was written by Hui Jiang, + and is updated and maintained by Junyang Qian. + This Python wrapper (adapted from the Matlab and R wrappers) + is written by Balakumar B.J., bbalasub@stanford.edu + Department of Statistics, Stanford University, Stanford, California, USA. + + REFERENCES: + Friedman, J., Hastie, T. and Tibshirani, R. (2008) Regularization Paths for Generalized Linear Models via Coordinate Descent, + http://www.jstatsoft.org/v33/i01/ + Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010 + + Simon, N., Friedman, J., Hastie, T., Tibshirani, R. (2011) Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent, + http://www.jstatsoft.org/v39/i05/ + Journal of Statistical Software, Vol. 39(5) 1-13 + + Tibshirani, Robert., Bien, J., Friedman, J.,Hastie, T.,Simon, N.,Taylor, J. and Tibshirani, Ryan. (2010) Strong Rules for Discarding Predictors in Lasso-type Problems, + http://www-stat.stanford.edu/~tibs/ftp/strong.pdf + Stanford Statistics Technical Report + + SEE ALSO: + glmnet. +""" + +def glmnetControl(pars = None): + import numpy as np + + # default options + ivals = dict(); + ivals["fdev"] = np.float64(1e-5) + ivals["devmax"] = np.float64(0.999) + ivals["eps"] = np.float64(1e-6) + ivals["big"] = np.float64(9.9e35) + ivals["mnlam"] = np.float64(5) + ivals["pmin"] = np.float64(1e-5) + ivals["exmx"] = np.float64(250) + ivals["prec"] = np.float64(1e-10) + ivals["mxit"] = np.float64(100) + + # quick return if no user opts + if pars == None: + return ivals + + # if options are passed in by user, update options with values from opts + parsInIvals = set(pars.keys()) - set(ivals.keys()); + if len(parsInIvals) > 0: # assert 'opts' keys are subsets of 'options' keys + raise ValueError('attempting to set glmnet controls that are not known to glmnetControl') + else: + ivals = merge_dicts(ivals, pars) + + return ivals + +def merge_dicts(*dict_args): + """ + Given any number of dicts, shallow copy and merge into a new dict, + precedence goes to key value pairs in latter dicts. + """ + result = {} + for dictionary in dict_args: + result.update(dictionary) + return result + +# end of glmnetControl() + + + diff --git a/build/lib/glmnet_python/glmnetPlot.py b/build/lib/glmnet_python/glmnetPlot.py new file mode 100644 index 0000000..bbaad9e --- /dev/null +++ b/build/lib/glmnet_python/glmnetPlot.py @@ -0,0 +1,241 @@ +# -*- coding: utf-8 -*- +""" +-------------------------------------------------------------------------- + glmnetPlot.m: plot coefficients from a "glmnet" object +-------------------------------------------------------------------------- + + DESCRIPTION: + Produces a coefficient profile plot fo the coefficient paths for a + fitted "glmnet" object. + + USAGE: + glmnetPlot(fit); + glmnetPlot(fit, xvar = 'norm'); + glmnetPlot(fit, xvar = 'norm', label = False); + glmnetPlot(fit, xvar = 'norm', label = False, ptype = 'coef'); + glmnetPlot(fit, xvar = 'norm', label = False, ptype = 'coef', ...); + + INPUT ARGUMENTS: + x fitted "glmnet" model. + xvar What is on the X-axis. 'norm' plots against the L1-norm of + the coefficients, 'lambda' against the log-lambda sequence, + and 'dev' against the percent deviance explained. + label If true, label the curves with variable sequence numbers. + type If type='2norm' then a single curve per variable, else + if type='coef', a coefficient plot per response. + varargin Other graphical parameters to plot. + + DETAILS: + A coefficient profile plot is produced. If x is a multinomial model, a + coefficient plot is produced for each class. + + LICENSE: + GPL-2 + + AUTHORS: + Algorithm was designed by Jerome Friedman, Trevor Hastie and Rob Tibshirani + Fortran code was written by Jerome Friedman + R wrapper (from which the MATLAB wrapper was adapted) was written by Trevor Hasite + The original MATLAB wrapper was written by Hui Jiang, + and is updated and maintained by Junyang Qian. + This Python wrapper (adapted from the Matlab and R wrappers) is written by Balakumar B.J., + Department of Statistics, Stanford University, Stanford, California, USA. + + REFERENCES: + Friedman, J., Hastie, T. and Tibshirani, R. (2008) Regularization Paths for Generalized Linear Models via Coordinate Descent, + http://www.jstatsoft.org/v33/i01/ + Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010 + + Simon, N., Friedman, J., Hastie, T., Tibshirani, R. (2011) Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent, + http://www.jstatsoft.org/v39/i05/ + Journal of Statistical Software, Vol. 39(5) 1-13 + + Tibshirani, Robert., Bien, J., Friedman, J.,Hastie, T.,Simon, N.,Taylor, J. and Tibshirani, Ryan. (2010) Strong Rules for Discarding Predictors in Lasso-type Problems, + http://www-stat.stanford.edu/~tibs/ftp/strong.pdf + Stanford Statistics Technical Report + + SEE ALSO: + glmnet, glmnetSet, glmnetPrint, glmnetPredict and glmnetCoef. + + EXAMPLES: + import matplotlib.pyplot as plt + np.random.seed(1) + x=np.random.normal(size = (100,20)) + y=np.random.normal(size = (100,1)) + g4=np.random.choice(4,size = (100,1))*1.0 + fit1=glmnet(x = x.copy(),y = y.copy()) + glmnetPlot(fit1) + plt.figure() + glmnetPlot(fit1, 'lambda', True); + fit3=glmnet(x = x.copy(),y = g4.copy(), family = 'multinomial') + plt.figure() + glmnetPlot(fit3) +""" +import numpy as np + + +def glmnetPlot(x, xvar = 'norm', label = False, ptype = 'coef', **options): + import matplotlib.pyplot as plt + + # process inputs + xvar = getFromList(xvar, ['norm', 'lambda', 'dev'], 'xvar should be one of ''norm'', ''lambda'', ''dev'' ') + ptype = getFromList(ptype, ['coef', '2norm'], 'ptype should be one of ''coef'', ''2norm'' ') + + if x['class'] in ['elnet', 'lognet', 'coxnet', 'fishnet']: + handle = plotCoef(x['beta'], [], x['lambdau'], x['df'], x['dev'], + label, xvar, '', 'Coefficients', **options) + + elif x['class'] in ['multnet', 'mrelnet']: + beta = x['beta'] + if xvar == 'norm': + norm = 0 + nzbeta = beta + for i in range(len(beta)): + which = nonzeroCoef(beta[i]) + nzbeta[i] = beta[i][which, :] + norm = norm + np.sum(np.absolute(nzbeta[i]), axis = 0) + else: + norm = 0 + + if ptype == 'coef': + ncl = x['dfmat'].shape[0] + if x['class'] == 'multnet': + for i in range(ncl): + mstr = 'Coefficients: Class %d' % (i) + handle = plotCoef(beta[i], norm, x['lambdau'], x['dfmat'][i,:], + x['dev'], label, xvar, '', mstr, **options) + if i < ncl - 1: + plt.figure() + else: + for i in range(ncl): + mstr = 'Coefficients: Response %d' % (i) + handle = plotCoef(beta[i], norm, x['lambdau'], x['dfmat'][i,:], + x['dev'], label, xvar, '', mstr, **options) + if i < ncl - 1: + plt.figure() + else: + dfseq = np.round_(np.mean(x['dfmat'], axis = 0)) + coefnorm = beta[1]*0 + for i in range(len(beta)): + coefnorm = coefnorm + np.absolute(beta[i])**2 + coefnorm = np.sqrt(coefnorm) + if x['class'] == 'multnet': + mstr = 'Coefficient 2Norms' + handle = plotCoef(coefnorm, norm, x['lambdau'], dfseq, x['dev'], + label, xvar, '',mstr, **options); + else: + mstr = 'Coefficient 2Norms' + handle = plotCoef(coefnorm, norm, x['lambdau'], x['dfmat'][0,:], x['dev'], + label, xvar, '', mstr, **options); + + return(handle) +# end of glmnetplot +# ========================================= +# +# ========================================= +# helper functions +# ========================================= +def getFromList(xvar, xvarbase, errMsg): + indxtf = [x.startswith(xvar.lower()) for x in xvarbase] # find index + xvarind = [i for i in range(len(indxtf)) if indxtf[i] == True] + if len(xvarind) == 0: + raise ValueError(errMsg) + else: + xvar = xvarbase[xvarind[0]] + return xvar +# end of getFromList() +# ========================================= +def nonzeroCoef(beta, bystep = False): + result = np.absolute(beta) > 0 + if len(result.shape) == 1: + result = np.reshape(result, [result.shape[0], 1]) + if not bystep: + result = np.any(result, axis = 1) + + return(result) +# end of nonzeroCoef() +# ========================================= +def plotCoef(beta, norm, lambdau, df, dev, label, xvar, xlab, ylab, **options): + import matplotlib.pyplot as plt + + which = nonzeroCoef(beta) + idwhich = [i for i in range(len(which)) if which[i] == True] + nwhich = len(idwhich) + if nwhich == 0: + raise ValueError('No plot produced since all coefficients are zero') + elif nwhich == 1: + raise ValueError('1 or less nonzero coefficients; glmnet plot is not meaningful') + + beta = beta[which, :] + if xvar == 'norm': + if len(norm) == 0: + index = np.sum(np.absolute(beta), axis = 0) + else: + index = norm + iname = 'L1 Norm' + elif xvar == 'lambda': + index = np.log(lambdau) + iname = 'Log Lambda' + elif xvar == 'dev': + index = dev + iname = 'Fraction Deviance Explained' + + if len(xlab) == 0: + xlab = iname + + # draw the figures + #fig, ax1 = plt.subplots() + fig = plt.gcf() + ax1 = plt.gca() + + # plot x vs y + beta = np.transpose(beta) + ax1.plot(index, beta, **options) + + ax2 = ax1.twiny() + ax2.xaxis.tick_top() + + xlim1 = ax1.get_xlim() + ylim1 = ax1.get_ylim() + + atdf = ax1.get_xticks() + indat = np.ones(atdf.shape, dtype = np.integer) + if index[-1] >= index[1]: + for j in range(len(index)-1, -1, -1): + indat[atdf <= index[j]] = j + else: + for j in range(len(index)): + indat[atdf <= index[j]] = j + prettydf = df[indat] + prettydf[-1] = df[-1] + + ax2.set(XLim=[min(index), max(index)], XTicks = atdf, XTickLabels = prettydf) + ax2.grid() + ax1.yaxis.grid() + + ax2.set_xlabel('Degrees of Freedom') + ax1.set_xlabel(xlab) + ax1.set_ylabel(ylab) + + # put the labels + if label: + xpos = max(index) + adjpos = 1 + if xvar == 'lambda': + xpos = min(index) + adjpos = 0 + bsize = beta.shape + for i in range(beta.shape[1]): + str = '%d' % idwhich[i] + ax1.text(1/2*xpos + 1/2*xlim1[adjpos], beta[bsize[0]-1, i], str) + + plt.show() + + handle = dict() + handle['fig'] = fig + handle['ax1'] = ax1 + handle['ax2'] = ax2 + return(handle) + +# end of plotCoef +# ========================================= diff --git a/build/lib/glmnet_python/glmnetPredict.py b/build/lib/glmnet_python/glmnetPredict.py new file mode 100644 index 0000000..e5ee403 --- /dev/null +++ b/build/lib/glmnet_python/glmnetPredict.py @@ -0,0 +1,367 @@ +# -*- coding: utf-8 -*- +""" +-------------------------------------------------------------------------- + glmnetPredict.m: make predictions from a "glmnet" object. +-------------------------------------------------------------------------- + + DESCRIPTION: + Similar to other predict methods, this functions predicts fitted + values, logits, coefficients and more from a fitted "glmnet" object. + + USAGE: + glmnetPredict(object, newx, s, type, exact, offset) + + Fewer input arguments(more often) are allowed in the call, but must + come in the order listed above. To set default values on the way, use + empty matrix []. + For example, pred=glmnetPredict(fit,[],[],'coefficients'). + + To make EXACT prediction, the input arguments originally passed to + "glmnet" MUST be VARIABLES (instead of expressions, or fields + extracted from some struct objects). Alternatively, users should + manually revise the "call" field in "object" (expressions or variable + names) to match the original call to glmnet in the parent environment. + + INPUT ARGUMENTS: + object Fitted "glmnet" model object. + s Value(s) of the penalty parameter lambda at which predictions + are required. Default is the entire sequence used to create + the model. + newx scipy 2D array of new values for x at which predictions are to be + made. Must be a 2D array; can be sparse. This argument is not + used for type='coefficients' or type='nonzero'. + ptype Type of prediction required. Type 'link' gives the linear + predictors for 'binomial', 'multinomial', 'poisson' or 'cox' + models; for 'gaussian' models it gives the fitted values. + Type 'response' gives the fitted probabilities for 'binomial' + or 'multinomial', fitted mean for 'poisson' and the fitted + relative-risk for 'cox'; for 'gaussian' type 'response' is + equivalent to type 'link'. Type 'coefficients' computes the + coefficients at the requested values for s. Note that for + 'binomial' models, results are returned only for the class + corresponding to the second level of the factor response. + Type 'class' applies only to 'binomial' or 'multinomial' + models, and produces the class label corresponding to the + maximum probability. Type 'nonzero' returns a matrix of + logical values with each column for each value of s, + indicating if the corresponding coefficient is nonzero or not. + exact If exact=false (default), then the predict function + uses linear interpolation to make predictions for values of s + that do not coincide with those used in the fitting + algorithm. exact = True is not implemented. + offset If an offset is used in the fit, then one must be supplied + for making predictions (except for type='coefficients' or + type='nonzero') + + DETAILS: + The shape of the objects returned are different for "multinomial" + objects. glmnetCoef(fit, ...) is equivalent to + glmnetPredict(fit,np.empty([]),np.empty([]),'coefficients"). + + LICENSE: GPL-2 + + AUTHORS: + Algorithm was designed by Jerome Friedman, Trevor Hastie and Rob Tibshirani + Fortran code was written by Jerome Friedman + R wrapper (from which the MATLAB wrapper was adapted) was written by Trevor Hasite + The original MATLAB wrapper was written by Hui Jiang (14 Jul 2009), + and was updated and maintained by Junyang Qian (30 Aug 2013) junyangq@stanford.edu, + Department of Statistics, Stanford University, Stanford, California, USA. + + REFERENCES: + Friedman, J., Hastie, T. and Tibshirani, R. (2008) Regularization Paths for Generalized Linear Models via Coordinate Descent, + http://www.jstatsoft.org/v33/i01/ + Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010 + + Simon, N., Friedman, J., Hastie, T., Tibshirani, R. (2011) Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent, + http://www.jstatsoft.org/v39/i05/ + Journal of Statistical Software, Vol. 39(5) 1-13 + + Tibshirani, Robert., Bien, J., Friedman, J.,Hastie, T.,Simon, N.,Taylor, J. and Tibshirani, Ryan. (2010) Strong Rules for Discarding Predictors in Lasso-type Problems, + http://www-stat.stanford.edu/~tibs/ftp/strong.pdf + Stanford Statistics Technical Report + + SEE ALSO: + glmnet, glmnetPrint, glmnetCoef, and cvglmnet. + +EXAMPLES: + + x = np.random.normal(size = [100,20]) + y = np.random.normal(size = [100,1]) + g2 = np.random.choice(2, size = [100, 1])*1.0 # must be float64 + g4 = np.random.choice(4, size = [100, 1])*1.0 # must be float64 + + fit1 = glmnet(x = x.copy(),y = y.copy()); + print( glmnetPredict(fit1,x[0:5,:],np.array([0.01,0.005])) ) + print( glmnetPredict(fit1, np.empty([0]), np.empty([0]), 'coefficients') ) + + fit2 = glmnet(x = x.copy(), y = g2.copy(), family = 'binomial'); + print(glmnetPredict(fit2, x[2:5,:],np.empty([0]), 'response')) + print(glmnetPredict(fit2, np.empty([0]), np.empty([0]), 'nonzero')) + + fit3 = glmnet(x = x.copy(), y = g4.copy(), family = 'multinomial'); + print(glmnetPredict(fit3, x[0:3,:], np.array([0.01, 0.5]), 'response')) + +""" +import numpy as np +import scipy.sparse +import scipy.interpolate + +def glmnetPredict(fit,\ + newx = np.empty([0]), \ + s = np.empty([0]), \ + ptype = 'link', \ + exact = False, \ + offset = np.empty([0])): + + typebase = ['link', 'response', 'coefficients', 'nonzero', 'class'] + indxtf = [x.startswith(ptype.lower()) for x in typebase] + indl = [i for i in range(len(indxtf)) if indxtf[i] == True] + ptype = typebase[indl[0]] + + if newx.shape[0] == 0 and ptype != 'coefficients' and ptype != 'nonzero': + raise ValueError('You need to supply a value for ''newx''') + + # python 1D arrays are not the same as matlab 1xn arrays + # check for this. newx = x[0:1, :] is a python 2D array and would work; + # but newx = x[0, :] is a python 1D array and should not be passed into + # glmnetPredict + if len(newx.shape) == 1 and newx.shape[0] > 0: + raise ValueError('newx must be a 2D (not a 1D) python array') + + if exact == True and len(s) > 0: + # It is very messy to go back into the caller namespace + # and call glmnet again. The user should really do this at their end + # by calling glmnet again using the correct array of lambda values that + # includes the lambda for which prediction is sought + raise NotImplementedError('exact = True option is not implemented in python') + + # we convert newx to full here since sparse and full operations do not seem to + # be overloaded completely in np. + if scipy.sparse.issparse(newx): + newx = newx.todense() + + # elnet + if fit['class'] in ['elnet', 'fishnet', 'lognet']: + if fit['class'] == 'lognet': + a0 = fit['a0'] + else: + a0 = np.transpose(fit['a0']) + + a0 = np.reshape(a0, [1, a0.size]) # convert to 1 x N for appending + nbeta = np.row_stack( (a0, fit['beta']) ) + if np.size(s) > 0: + lambdau = fit['lambdau'] + lamlist = lambda_interp(lambdau, s) + nbeta = nbeta[:, lamlist['left']]*np.tile(np.transpose(lamlist['frac']), [nbeta.shape[0], 1]) \ + + nbeta[:, lamlist['right']]*( 1 - np.tile(np.transpose(lamlist['frac']), [nbeta.shape[0], 1])) + + if ptype == 'coefficients': + result = nbeta + return(result) + + if ptype == 'nonzero': + result = nonzeroCoef(nbeta[1:nbeta.shape[0], :], True) + return(result) + # use scipy.sparse.hstack instead of column_stack for sparse matrices + result = np.dot(np.column_stack( (np.ones([newx.shape[0], 1]) , newx) ) , nbeta) + + if fit['offset']: + if len(offset) == 0: + raise ValueError('No offset provided for prediction, yet used in fit of glmnet') + if offset.shape[1] == 2: + offset = offset[:, 1] + + result = result + np.tile(offset, [1, result.shape[1]]) + + # fishnet + if fit['class'] == 'fishnet' and ptype == 'response': + result = np.exp(result) + + # lognet + if fit['class'] == 'lognet': + if ptype == 'response': + pp = np.exp(-result) + result = 1/(1 + pp) + elif ptype == 'class': + result = (result > 0)*1 + (result <= 0)*0 + result = fit['label'][result] + + # multnet / mrelnet + if fit['class'] == 'mrelnet' or fit['class'] == 'multnet': + if fit['class'] == 'mrelnet': + if type == 'response': + ptype = 'link' + fit['grouped'] = True + + a0 = fit['a0'] + nbeta = fit['beta'].copy() + nclass = a0.shape[0] + nlambda = s.size + + if len(s) > 0: + lambdau = fit['lambdau'] + lamlist = lambda_interp(lambdau, s) + for i in range(nclass): + kbeta = np.row_stack( (a0[i, :], nbeta[i]) ) + kbeta = kbeta[:, lamlist['left']]*np.tile(np.transpose(lamlist['frac']), [kbeta.shape[0], 1]) \ + + kbeta[:, lamlist['right']]*( 1 - np.tile(np.transpose(lamlist['frac']), [kbeta.shape[0], 1])) + nbeta[i] = kbeta + else: + for i in range(nclass): + nbeta[i] = np.row_stack( (a0[i, :], nbeta[i]) ) + nlambda = len(fit['lambdau']) + + if ptype == 'coefficients': + result = nbeta + return(result) + + if ptype == 'nonzero': + if fit['grouped']: + result = list() + tn = nbeta[0].shape[0] + result.append(nonzeroCoef(nbeta[0][1:tn, :], True)) + else: + result = list() + for i in range(nclass): + tn = nbeta[0].shape[0] + result.append(nonzeroCoef(nbeta[0][1:tn, :], True)) + return(result) + + npred = newx.shape[0] + dp = np.zeros([nclass, nlambda, npred], dtype = np.float64) + for i in range(nclass): + qq = np.column_stack( (np.ones([newx.shape[0], 1]), newx) ) + fitk = np.dot( qq, nbeta[i] ) + dp[i, :, :] = dp[i, :, :] + np.reshape(np.transpose(fitk), [1, nlambda, npred]) + + if fit['offset']: + if len(offset) == 0: + raise ValueError('No offset provided for prediction, yet used in fit of glmnet') + if offset.shape[1] != nclass: + raise ValueError('Offset should be dimension %d x %d' % (npred, nclass)) + toff = np.transpose(offset) + for i in range(nlambda): + dp[:, i, :] = dp[:, i, :] + toff + + if ptype == 'response': + pp = np.exp(dp) + psum = np.sum(pp, axis = 0, keepdims = True) + result = np.transpose(pp/np.tile(psum, [nclass, 1, 1]), [2, 0, 1]) + if ptype == 'link': + result = np.transpose(dp, [2, 0, 1]) + if ptype == 'class': + dp = np.transpose(dp, [2, 0, 1]) + result = list() + for i in range(dp.shape[2]): + t = softmax(dp[:, :, i]) + result = np.append(result, fit['label'][t['pclass']]) + + # coxnet + if fit['class'] == 'coxnet': + nbeta = fit['beta'] + if len(s) > 0: + lambdau = fit['lambdau'] + lamlist = lambda_interp(lambdau, s) + nbeta = nbeta[:, lamlist['left']]*np.tile(np.transpose(lamlist['frac']), [nbeta.shape[0], 1]) \ + + nbeta[:, lamlist['right']]*( 1 - np.tile(np.transpose(lamlist['frac']), [nbeta.shape[0], 1])) + + if ptype == 'coefficients': + result = nbeta + return(result) + + if ptype == 'nonzero': + result = nonzeroCoef(nbeta, True) + return(result) + + result = np.dot(newx, nbeta) + + if fit['offset']: + if len(offset) == 0: + raise ValueError('No offset provided for prediction, yet used in fit of glmnet') + + result = result + np.tile(offset, [1, result.shape[1]]) + + if ptype == 'response': + result = np.exp(result) + + return(result) + +# end of glmnetPredict +# ========================================= + + +# ========================================= +# helper functions +# ========================================= +def lambda_interp(lambdau, s): +# lambda is the index sequence that is produced by the model +# s is the new vector at which evaluations are required. +# the value is a vector of left and right indices, and a vector of fractions. +# the new values are interpolated bewteen the two using the fraction +# Note: lambda decreases. you take: +# sfrac*left+(1-sfrac*right) + if len(lambdau) == 1: + nums = len(s) + left = np.zeros([nums, 1], dtype = np.integer) + right = left + sfrac = np.zeros([nums, 1], dtype = np.float64) + else: + s[s > np.amax(lambdau)] = np.amax(lambdau) + s[s < np.amin(lambdau)] = np.amin(lambdau) + k = len(lambdau) + sfrac = (lambdau[0] - s)/(lambdau[0] - lambdau[k - 1]) + lambdau = (lambdau[0] - lambdau)/(lambdau[0] - lambdau[k - 1]) + coord = scipy.interpolate.interp1d(lambdau, range(k))(sfrac) + left = np.floor(coord).astype(np.integer, copy = False) + right = np.ceil(coord).astype(np.integer, copy = False) + # + tf = left != right + sfrac[tf] = (sfrac[tf] - lambdau[right[tf]])/(lambdau[left[tf]] - lambdau[right[tf]]) + sfrac[~tf] = 1.0 + #if left != right: + # sfrac = (sfrac - lambdau[right])/(lambdau[left] - lambdau[right]) + #else: + # sfrac[left == right] = 1.0 + + result = dict() + result['left'] = left + result['right'] = right + result['frac'] = sfrac + + return(result) +# end of lambda_interp +# ========================================= +def softmax(x, gap = False): + d = x.shape + maxdist = x[:, 0] + pclass = np.zeros([d[0], 1], dtype = np.integer) + for i in range(1, d[1], 1): + l = x[:, i] > maxdist + pclass[l] = i + maxdist[l] = x[l, i] + if gap == True: + x = np.absolute(maxdist - x) + x[0:d[0], pclass] = x*np.ones([d[1], d[1]]) + #gaps = pmin(x)# not sure what this means; gap is never called with True + raise ValueError('gap = True is not implemented yet') + + result = dict() + if gap == True: + result['pclass'] = pclass + #result['gaps'] = gaps + raise ValueError('gap = True is not implemented yet') + else: + result['pclass'] = pclass; + + return(result) +# end of softmax +# ========================================= +def nonzeroCoef(beta, bystep = False): + result = np.absolute(beta) > 0 + if not bystep: + result = np.any(result, axis = 1) + return(result) +# end of nonzeroCoef +# ========================================= + diff --git a/build/lib/glmnet_python/glmnetPrint.py b/build/lib/glmnet_python/glmnetPrint.py new file mode 100644 index 0000000..5e867dd --- /dev/null +++ b/build/lib/glmnet_python/glmnetPrint.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +""" + +-------------------------------------------------------------------------- + glmnetPrint.m: print a glmnet object +-------------------------------------------------------------------------- + + DESCRIPTION: + Print a summary of the glmnet path at each step along the path. + + USAGE: + glmnetPrint(fit) + + INPUT ARGUMENTS: + fit fitted glmnet object + + DETAILS: + Three-column matrix with columns Df, %Dev and Lambda is printed. The Df + column is the number of nonzero coefficients (Df is a reasonable name + only for lasso fits). %Dev is the percent deviance explained (relative + to the null deviance). + + LICENSE: GPL-2 + + AUTHORS: + Algorithm was designed by Jerome Friedman, Trevor Hastie and Rob Tibshirani + Fortran code was written by Jerome Friedman + R wrapper (from which the MATLAB wrapper was adapted) was written by Trevor Hasite + The original MATLAB wrapper was written by Hui Jiang, + and is updated and maintained by Junyang Qian. + This Python wrapper (adapted from the Matlab and R wrappers) + is written by Balakumar B.J., bbalasub@stanford.edu + Department of Statistics, Stanford University, Stanford, California, USA. + + REFERENCES: + Friedman, J., Hastie, T. and Tibshirani, R. (2008) Regularization Paths for Generalized Linear Models via Coordinate Descent, + http://www.jstatsoft.org/v33/i01/ + Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010 + + SEE ALSO: + glmnet, glmnetSet, glmnetPredict and glmnetCoef methods. + + EXAMPLES: + x = np.random.normal(size=[100,20]) + y = np.random.normal(size=[100,1]) + fit=glmnet(x = x,y = y); + glmnetPrint(fit); + +""" + +def glmnetPrint(fit): + + print('\t df \t %dev \t lambdau\n') + N = fit['lambdau'].size + for i in range(N): + line_p = '%d \t %f \t %f \t %f' % (i, fit['df'][i], fit['dev'][i], fit['lambdau'][i]) + print(line_p) + + diff --git a/build/lib/glmnet_python/glmnetSet.py b/build/lib/glmnet_python/glmnetSet.py new file mode 100644 index 0000000..ee026f1 --- /dev/null +++ b/build/lib/glmnet_python/glmnetSet.py @@ -0,0 +1,239 @@ +# -*- coding: utf-8 -*- +""" + +Sets parameters for glmnet. Returns a default dictionary of parameters +if nothing is passed in. The user is allowed to pass a partial dictionary +of parameters. Parameter values not in the user input are replaced by +default values. + +Note: The input 'opts' dictionary is expected to contain keys that are a subset +of the keys in the 'options' dictionary below. This check is enforced to make +sure that typos in the keynames do not modify behavior of code (as an example, a typo +that results in the passing of 'alpha' as 'alhpa' should not result in the +default value of 'alpha' getting passed on silently) + +INPUT ARGUMENTS: +----------------- + opts : dictionary of parameters + +OUTPUT ARGUMENTS: +---------------- + options : dictionary of parameters + +USAGE: +----- + # return default values as a dict() in options + options = glmnetSet() + # set default values for all parameters except + # for alpha, intr, maxit, offset parameters. Set + # given values for these parameters. + options = glmnetSet( alpha = 0.1, \ + intr = False, \ + maxit = np.int32(1e6), \ + offset = np.empty([0]) ) + # same as previous case, except we pass in a + # dict() object instead + opts = dict(); opts['alpha'] = 0.5; + options = glmnetSet(opts) + +.................................................................. +Parameter Default value + Description +.................................................................. +alpha + The elasticnet mixing parameter, with 0 < alpha <= 1. + The penalty is defined as + (1-alpha)/2(||beta||_2)^2+alpha||beta||_1. + Default is alpha = 1, which is the lasso penalty; + Currently alpha = 0 the ridge penalty. + +nlambda + The number of lambda values - default is + +lambdau + A user supplied lambda sequence. Typical usage is to + have the program compute its own lambda sequence + based on nlambda and lambda_min. Supplying a value of + lambda override this. WARNING: Use with care. Do not + supply a single value for lambda (for predictions + after CV use cvglmnetPredict() instead). Supply a + decreasing sequence of lambda values. glmnet relies + on its warm starts for speed, and it's often faster + to fit a whole path than compute a single fit. + +standardize + Logical flag for x variable standardization, prior to + fitting the model sequence. The coefficients are + always returned on the original scale. Default is + standardize = true. If variables are in the same + units already, you might not wish to standardize. See + details below for y standardization with + family='gaussian'. + +weights + Observation weights. Can be total counts if responses + are proportion matrices. Default is 1 for each + observation. + +intr + Should intercept(s) be fitted (default=true) or set + to zero (false). + +offset + A vector of length nobs that is included in the + linear predictor (a nobs x nc matrix for the + "multinomial" family). Useful for the "poisson" + family (e.g. log of exposure time), or for refining a + model by starting at a current fit. Default is []. If + supplied, then values must also be supplied to the + predict function. + +lambda_min + Smallest value for lambda, as a fraction of + lambda_max, the (data derived) entry value (i.e., the + smallest value for which all coefficients are zero). + The default depends on the sample size nobs relative + to the number of variables nvars. If nobs > nvars, + the default is 0.0001, close to zero. If nobs < + nvars, the defaults is 0.01. A very small value of + lambda_min will lead to a saturated fit. This is + undefined for "binomial" and "multinomial" models, + and glmnet will exit gracefully when the percentage + deviance explained is almost 1. + +thresh + Convergence threshold for coordinate descent. Each + inner coordinate-descent loop continues until the + maximum change in the objective after any coefficient + update is less than thresh times the null deviance. + Defaults value is 1E-4. + +dfmax + Limit the maximum number of variables in the model. + Useful for very large nvars, if a partial path is + desired. Default is nvars + 1. + +pmax + Limit the maximum number of variables ever to be + nonzero. Default is min(dfmax * 2 + 20, nvars). + +exclude + Indices of variables to be excluded from the model. + Default is none. Equivalent to an infinite penalty + factor (next item). + +penalty_factor + Separate penalty factors can be applied to each + coefficient. This is a number that multiplies lambda + to allow differential shrinkage. Can be 0 for some + variables, which implies no shrinkage, and that + variable is always included in the model. Default is + 1 for all variables (and implicitly infinity for + variables listed in exclude). Note: the penalty + factors are internally rescaled to sum to nvars, and + the lambda sequence will reflect this change. + +maxit + Maximum number of passes over the data for all lambda + values; default is 10^5. + +cl + Two-row matrix with the first row being the lower + limits for each coefficient and the second the upper + limits. Can be presented as a single column (which + will then be replicated), else a matrix of nvars + columns. Default [-Inf;Inf]. + +gtype + Two algorithm types are supported for (only) + family = 'gaussian'. The default when nvar<500 is + options.gtype = 'covariance', and saves all + inner-products ever computed. This can be much faster + than options.gtype='naive', which loops through nobs + every time an inner-product is computed. The latter + can be far more efficient for nvar >> nobs + situations, or when nvar > 500. + +ltype + If 'Newton' then the exact hessian is used (default), + while 'modified.Newton' uses an upper-bound on the + hessian, and can be faster. + +standardize_resp + This is for the family='mgaussian' family, and allows + the user to standardize the response variables. + +mtype + If 'grouped' then a grouped lasso penalty is used on + the multinomial coefficients for a variable. This + ensures they are all in our out together. The default + is 'ungrouped'. + +LICENSE: +------- + GPL-2 + +AUTHORS: +------- + Algorithm was designed by Jerome Friedman, Trevor Hastie and Rob Tibshirani + Fortran code was written by Jerome Friedman + R wrapper (from which the MATLAB wrapper was adapted) was written by Trevor Hasite + The original MATLAB wrapper was written by Hui Jiang, + and is updated and maintained by Junyang Qian. + This Python wrapper (adapted from the Matlab and R wrappers) + is written by Balakumar B.J., bbalasub@stanford.edu + Department of Statistics, Stanford University, Stanford, California, USA. + +""" + +def glmnetSet(opts = None): + import numpy as np + + # default options + options = { + "weights" : np.empty([0]), + "offset" : np.empty([0]), + "alpha" : np.float64(1.0), + "nlambda" : np.int32(100), + "lambda_min" : np.empty([0]), + "lambdau" : np.empty([0]), + "standardize" : True, + "intr" : True, + "thresh" : np.float64(1e-7), + "dfmax" : np.empty([0]), + "pmax" : np.empty([0]), + "exclude" : np.empty([0], dtype = np.integer), + "penalty_factor" : np.empty([0]), + "cl" : np.array([[np.float64(-np.inf)], [np.float64(np.inf)]]), + "maxit" : np.int32(1e5), + "gtype" : [], + "ltype" : 'Newton', + "standardize_resp" : False, + "mtype" : 'ungrouped' + } + + # quick return if no user opts + if opts == None: + print('pdco default options:') + print(options) + return options + + # if options are passed in by user, update options with values from opts + optsInOptions = set(opts.keys()) - set(options.keys()); + if len(optsInOptions) > 0: # assert 'opts' keys are subsets of 'options' keys + print(optsInOptions, ' : unknown option for glmnetSet') + raise ValueError('attempting to set glmnet options that are not known to glmnetSet') + else: + options = merge_dicts(options, opts) + + return options + +def merge_dicts(*dict_args): + """ + Given any number of dicts, shallow copy and merge into a new dict, + precedence goes to key value pairs in latter dicts. + """ + result = {} + for dictionary in dict_args: + result.update(dictionary) + return result diff --git a/build/lib/glmnet_python/loadGlmLib.py b/build/lib/glmnet_python/loadGlmLib.py new file mode 100644 index 0000000..bfe2df4 --- /dev/null +++ b/build/lib/glmnet_python/loadGlmLib.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +""" +def loadGlmLib(): +======================= +INPUT ARGUMENTS: + + NONE + +======================= +OUTPUT ARGUMENTS: + +glmlib Returns a glmlib object with methods that are equivalent + to the fortran functions in GLMnet.f +======================= +""" +import ctypes +import os + +glmnet_so = os.path.dirname(__file__) + '/GLMnet.so' +glmnet_dll = os.path.dirname(__file__) + '/GLMnet.dll' + +def loadGlmLib(): + if os.name == 'posix': + glmlib = ctypes.cdll.LoadLibrary(glmnet_so) + return(glmlib) + elif os.name == 'nt': + # this does not currently work + raise ValueError('loadGlmlib does not currently work for windows') + # glmlib = ctypes.windll.LoadLibrary(glmnet_dll) + else: + raise ValueError('loadGlmLib not yet implemented for non-posix OS') + diff --git a/build/lib/glmnet_python/lognet.py b/build/lib/glmnet_python/lognet.py new file mode 100644 index 0000000..284cdd9 --- /dev/null +++ b/build/lib/glmnet_python/lognet.py @@ -0,0 +1,337 @@ +# -*- coding: utf-8 -*- +""" +Internal function called by glmnet. See also glmnet, cvglmnet + +""" +# import packages/methods +import numpy as np +import ctypes +from loadGlmLib import loadGlmLib + +def lognet(x, is_sparse, irs, pcs, y, weights, offset, parm, + nobs, nvars, jd, vp, cl, ne, nx, nlam, flmin, ulam, + thresh, isd, intr, maxit, kopt, family): + + # load shared fortran library + glmlib = loadGlmLib() + + # + noo = y.shape[0] + if len(y.shape) > 1: + nc = y.shape[1] + else: + nc = 1 + + if (noo != nobs): + raise ValueError('x and y have different number of rows in call to glmnet') + + if nc == 1: + classes, sy = np.unique(y, return_inverse = True) + nc = len(classes) + indexes = np.eye(nc, nc) + y = indexes[sy, :] + else: + classes = np.arange(nc) + 1 # 1:nc + # + if family == 'binomial': + if nc > 2: + raise ValueError('More than two classes in y. use multinomial family instead') + else: + nc = 1 + y = y[:, [1, 0]] + # + if (len(weights) != 0): + t = weights > 0 + if ~np.all(t): + t = np.reshape(t, (len(y), )) + y = y[t, :] + x = x[t, :] + weights = weights[t] + nobs = np.sum(t) + else: + t = np.empty([0], dtype = np.integer) + # + if len(y.shape) == 1: + mv = len(y) + ny = 1 + else: + mv, ny = y.shape + + y = y*np.tile(weights, (1, ny)) + + # + if len(offset) == 0: + offset = y*0 + is_offset = False + else: + if len(t) != 0: + offset = offset[t, :] + do = offset.shape + if do[0] != nobs: + raise ValueError('offset should have the same number of values as observations in binominal/multinomial call to glmnet') + if nc == 1: + if do[1] == 1: + offset = np.column_stack((offset, -offset), 1) + if do[1] > 2: + raise ValueError('offset should have 1 or 2 columns in binomial call to glmnet') + if (family == 'multinomial') and (do[1] != nc): + raise ValueError('offset should have same shape as y in multinomial call to glmnet') + is_offset = True + + # now convert types and allocate memory before calling + # glmnet fortran library + ###################################### + # --------- PROCESS INPUTS ----------- + ###################################### + # force inputs into fortran order and scipy float64 + copyFlag = False + x = x.astype(dtype = np.float64, order = 'F', copy = copyFlag) + irs = irs.astype(dtype = np.int32, order = 'F', copy = copyFlag) + pcs = pcs.astype(dtype = np.int32, order = 'F', copy = copyFlag) + y = y.astype(dtype = np.float64, order = 'F', copy = copyFlag) + weights = weights.astype(dtype = np.float64, order = 'F', copy = copyFlag) + offset = offset.astype(dtype = np.float64, order = 'F', copy = copyFlag) + jd = jd.astype(dtype = np.int32, order = 'F', copy = copyFlag) + vp = vp.astype(dtype = np.float64, order = 'F', copy = copyFlag) + cl = cl.astype(dtype = np.float64, order = 'F', copy = copyFlag) + ulam = ulam.astype(dtype = np.float64, order = 'F', copy = copyFlag) + + ###################################### + # --------- ALLOCATE OUTPUTS --------- + ###################################### + # lmu + lmu = -1 + lmu_r = ctypes.c_int(lmu) + # a0, ca + if nc == 1: + a0 = np.zeros([nlam], dtype = np.float64) + ca = np.zeros([nx, nlam], dtype = np.float64) + else: + a0 = np.zeros([nc, nlam], dtype = np.float64) + ca = np.zeros([nx, nc, nlam], dtype = np.float64) + # a0 + a0 = a0.astype(dtype = np.float64, order = 'F', copy = False) + a0_r = a0.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + # ca + ca = ca.astype(dtype = np.float64, order = 'F', copy = False) + ca_r = ca.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + # ia + ia = -1*np.ones([nx], dtype = np.int32) + ia = ia.astype(dtype = np.int32, order = 'F', copy = False) + ia_r = ia.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) + # nin + nin = -1*np.ones([nlam], dtype = np.int32) + nin = nin.astype(dtype = np.int32, order = 'F', copy = False) + nin_r = nin.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) + # dev + dev = -1*np.ones([nlam], dtype = np.float64) + dev = dev.astype(dtype = np.float64, order = 'F', copy = False) + dev_r = dev.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + # alm + alm = -1*np.ones([nlam], dtype = np.float64) + alm = alm.astype(dtype = np.float64, order = 'F', copy = False) + alm_r = alm.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + # nlp + nlp = -1 + nlp_r = ctypes.c_int(nlp) + # jerr + jerr = -1 + jerr_r = ctypes.c_int(jerr) + # dev0 + dev0 = -1 + dev0_r = ctypes.c_double(dev0) + + # ################################### + # main glmnet fortran caller + # ################################### + if is_sparse: + # sparse lognet + glmlib.splognet_( + ctypes.byref(ctypes.c_double(parm)), + ctypes.byref(ctypes.c_int(nobs)), + ctypes.byref(ctypes.c_int(nvars)), + ctypes.byref(ctypes.c_int(nc)), + x.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + pcs.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), + irs.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), + y.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + offset.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + jd.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), + vp.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + cl.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + ctypes.byref(ctypes.c_int(ne)), + ctypes.byref(ctypes.c_int(nx)), + ctypes.byref(ctypes.c_int(nlam)), + ctypes.byref(ctypes.c_double(flmin)), + ulam.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + ctypes.byref(ctypes.c_double(thresh)), + ctypes.byref(ctypes.c_int(isd)), + ctypes.byref(ctypes.c_int(intr)), + ctypes.byref(ctypes.c_int(maxit)), + ctypes.byref(ctypes.c_int(kopt)), + ctypes.byref(lmu_r), + a0_r, + ca_r, + ia_r, + nin_r, + ctypes.byref(dev0_r), + dev_r, + alm_r, + ctypes.byref(nlp_r), + ctypes.byref(jerr_r) + ) + else: + # call fortran lognet routine + glmlib.lognet_( + ctypes.byref(ctypes.c_double(parm)), + ctypes.byref(ctypes.c_int(nobs)), + ctypes.byref(ctypes.c_int(nvars)), + ctypes.byref(ctypes.c_int(nc)), + x.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + y.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + offset.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + jd.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), + vp.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + cl.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + ctypes.byref(ctypes.c_int(ne)), + ctypes.byref(ctypes.c_int(nx)), + ctypes.byref(ctypes.c_int(nlam)), + ctypes.byref(ctypes.c_double(flmin)), + ulam.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + ctypes.byref(ctypes.c_double(thresh)), + ctypes.byref(ctypes.c_int(isd)), + ctypes.byref(ctypes.c_int(intr)), + ctypes.byref(ctypes.c_int(maxit)), + ctypes.byref(ctypes.c_int(kopt)), + ctypes.byref(lmu_r), + a0_r, + ca_r, + ia_r, + nin_r, + ctypes.byref(dev0_r), + dev_r, + alm_r, + ctypes.byref(nlp_r), + ctypes.byref(jerr_r) + ) + + # ################################### + # post process results + # ################################### + + # check for error + if (jerr_r.value > 0): + raise ValueError("Fatal glmnet error in library call : error code = ", jerr_r.value) + elif (jerr_r.value < 0): + print("Warning: Non-fatal error in glmnet library call: error code = ", jerr_r.value) + print("Check results for accuracy. Partial or no results returned.") + + # clip output to correct sizes + lmu = lmu_r.value + if nc == 1: + a0 = a0[0:lmu] + ca = ca[0:nx, 0:lmu] + else: + a0 = a0[0:nc, 0:lmu] + ca = ca[0:nx, 0:nc, 0:lmu] + ia = ia[0:nx] + nin = nin[0:lmu] + dev = dev[0:lmu] + alm = alm[0:lmu] + + # ninmax + ninmax = max(nin) + # fix first value of alm (from inf to correct value) + if ulam[0] == 0.0: + t1 = np.log(alm[1]) + t2 = np.log(alm[2]) + alm[0] = np.exp(2*t1 - t2) + # create return fit dictionary + + if family == 'multinomial': + a0 = a0 - np.tile(np.mean(a0), (nc, 1)) + dfmat = a0.copy() + dd = np.array([nvars, lmu], dtype = np.integer) + beta_list = list() + if ninmax > 0: + # TODO: is the reshape here done right? + ca = np.reshape(ca, (nx, nc, lmu)) + ca = ca[0:ninmax, :, :] + ja = ia[0:ninmax] - 1 # ia is 1-indexed in fortran + oja = np.argsort(ja) + ja1 = ja[oja] + df = np.any(np.absolute(ca) > 0, axis=1) + df = np.sum(df) + df = np.reshape(df, (1, df.size)) + for k in range(0, nc): + ca1 = np.reshape(ca[:,k,:], (ninmax, lmu)) + cak = ca1[oja,:] + dfmat[k, :] = np.sum(np.absolute(cak) > 0, axis = 0) + beta = np.zeros([nvars, lmu], dtype = np.float64) + beta[ja1, :] = cak + beta_list.append(beta) + else: + for k in range(0, nc): + dfmat[k, :] = np.zeros([1, lmu], dtype = np.float64) + beta_list.append(np.zeros([nvars, lmu], dtype = np.float64)) + # + df = np.zeros([1, lmu], dtype = np.float64) + # + if kopt == 2: + grouped = True + else: + grouped = False + # + fit = dict() + fit['a0'] = a0 + fit['label'] = classes + fit['beta'] = beta_list + fit['dev'] = dev + fit['nulldev'] = dev0_r.value + fit['dfmat']= dfmat + fit['df'] = df + fit['lambdau'] = alm + fit['npasses'] = nlp_r.value + fit['jerr'] = jerr_r.value + fit['dim'] = dd + fit['grouped'] = grouped + fit['offset'] = is_offset + fit['class'] = 'multnet' + else: + dd = np.array([nvars, lmu], dtype = np.integer) + if ninmax > 0: + ca = ca[0:ninmax,:]; + df = np.sum(np.absolute(ca) > 0, axis = 0); + ja = ia[0:ninmax] - 1; # ia is 1-indexes in fortran + oja = np.argsort(ja) + ja1 = ja[oja] + beta = np.zeros([nvars, lmu], dtype = np.float64); + beta[ja1, :] = ca[oja, :]; + else: + beta = np.zeros([nvars,lmu], dtype = np.float64); + df = np.zeros([1,lmu], dtype = np.float64); + # + fit = dict() + fit['a0'] = a0 + fit['label'] = classes + fit['beta'] = beta + fit['dev'] = dev + fit['nulldev'] = dev0_r.value + fit['df'] = df + fit['lambdau'] = alm + fit['npasses'] = nlp_r.value + fit['jerr'] = jerr_r.value + fit['dim'] = dd + fit['offset'] = is_offset + fit['class'] = 'lognet' + + + # ################################### + # return to caller + # ################################### + + return fit +#----------------------------------------- +# end of method lognet +#----------------------------------------- + diff --git a/build/lib/glmnet_python/mrelnet.py b/build/lib/glmnet_python/mrelnet.py new file mode 100644 index 0000000..006a97f --- /dev/null +++ b/build/lib/glmnet_python/mrelnet.py @@ -0,0 +1,254 @@ +# -*- coding: utf-8 -*- +""" +Internal function called by glmnet. See also glmnet, cvglmnet + +""" +# import packages/methods +import numpy as np +import ctypes +from wtmean import wtmean +from loadGlmLib import loadGlmLib + +def mrelnet(x, is_sparse, irs, pcs, y, weights, offset, parm, + nobs, nvars, jd, vp, cl, ne, nx, nlam, flmin, ulam, + thresh, isd, jsd, intr, maxit, family): + + # load shared fortran library + glmlib = loadGlmLib() + + # + nr = y.shape[1] + wym = wtmean(y, weights) + wym = np.reshape(wym, (1, wym.size)) + yt2 = (y - np.tile(wym, (y.shape[0], 1)))**2 + nulldev = np.sum(wtmean(yt2,weights)*np.sum(weights)) + + if len(offset) == 0: + offset = y*0 + is_offset = False + else: + if offset.shape != y.shape: + raise ValueError('Offset must match dimension of y') + is_offset = True + # + y = y - offset + # now convert types and allocate memory before calling + # glmnet fortran library + ###################################### + # --------- PROCESS INPUTS ----------- + ###################################### + # force inputs into fortran order and scipy float64 + copyFlag = False + x = x.astype(dtype = np.float64, order = 'F', copy = copyFlag) + irs = irs.astype(dtype = np.int32, order = 'F', copy = copyFlag) + pcs = pcs.astype(dtype = np.int32, order = 'F', copy = copyFlag) + y = y.astype(dtype = np.float64, order = 'F', copy = copyFlag) + weights = weights.astype(dtype = np.float64, order = 'F', copy = copyFlag) + jd = jd.astype(dtype = np.int32, order = 'F', copy = copyFlag) + vp = vp.astype(dtype = np.float64, order = 'F', copy = copyFlag) + cl = cl.astype(dtype = np.float64, order = 'F', copy = copyFlag) + ulam = ulam.astype(dtype = np.float64, order = 'F', copy = copyFlag) + + ###################################### + # --------- ALLOCATE OUTPUTS --------- + ###################################### + # lmu + lmu = -1 + lmu_r = ctypes.c_int(lmu) + # a0 + a0 = np.zeros([nr, nlam], dtype = np.float64) + a0 = a0.astype(dtype = np.float64, order = 'F', copy = False) + a0_r = a0.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + # ca + ca = np.zeros([nx, nr, nlam], dtype = np.float64) + ca = ca.astype(dtype = np.float64, order = 'F', copy = False) + ca_r = ca.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + # ia + ia = -1*np.ones([nx], dtype = np.int32) + ia = ia.astype(dtype = np.int32, order = 'F', copy = False) + ia_r = ia.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) + # nin + nin = -1*np.ones([nlam], dtype = np.int32) + nin = nin.astype(dtype = np.int32, order = 'F', copy = False) + nin_r = nin.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) + # rsq + rsq = -1*np.ones([nlam], dtype = np.float64) + rsq = rsq.astype(dtype = np.float64, order = 'F', copy = False) + rsq_r = rsq.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + # alm + alm = -1*np.ones([nlam], dtype = np.float64) + alm = alm.astype(dtype = np.float64, order = 'F', copy = False) + alm_r = alm.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + # nlp + nlp = -1 + nlp_r = ctypes.c_int(nlp) + # jerr + jerr = -1 + jerr_r = ctypes.c_int(jerr) + + # ################################### + # main glmnet fortran caller + # ################################### + if is_sparse: + # sparse multnet + glmlib.multspelnet_( + ctypes.byref(ctypes.c_double(parm)), + ctypes.byref(ctypes.c_int(nobs)), + ctypes.byref(ctypes.c_int(nvars)), + ctypes.byref(ctypes.c_int(nr)), + x.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + pcs.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), + irs.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), + y.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + weights.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + jd.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), + vp.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + cl.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + ctypes.byref(ctypes.c_int(ne)), + ctypes.byref(ctypes.c_int(nx)), + ctypes.byref(ctypes.c_int(nlam)), + ctypes.byref(ctypes.c_double(flmin)), + ulam.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + ctypes.byref(ctypes.c_double(thresh)), + ctypes.byref(ctypes.c_int(isd)), + ctypes.byref(ctypes.c_int(jsd)), + ctypes.byref(ctypes.c_int(intr)), + ctypes.byref(ctypes.c_int(maxit)), + ctypes.byref(lmu_r), + a0_r, + ca_r, + ia_r, + nin_r, + rsq_r, + alm_r, + ctypes.byref(nlp_r), + ctypes.byref(jerr_r) + ) + else: + # call fortran multnet routine + glmlib.multelnet_( + ctypes.byref(ctypes.c_double(parm)), + ctypes.byref(ctypes.c_int(nobs)), + ctypes.byref(ctypes.c_int(nvars)), + ctypes.byref(ctypes.c_int(nr)), + x.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + y.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + weights.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + jd.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), + vp.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + cl.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + ctypes.byref(ctypes.c_int(ne)), + ctypes.byref(ctypes.c_int(nx)), + ctypes.byref(ctypes.c_int(nlam)), + ctypes.byref(ctypes.c_double(flmin)), + ulam.ctypes.data_as(ctypes.POINTER(ctypes.c_double)), + ctypes.byref(ctypes.c_double(thresh)), + ctypes.byref(ctypes.c_int(isd)), + ctypes.byref(ctypes.c_int(jsd)), + ctypes.byref(ctypes.c_int(intr)), + ctypes.byref(ctypes.c_int(maxit)), + ctypes.byref(lmu_r), + a0_r, + ca_r, + ia_r, + nin_r, + rsq_r, + alm_r, + ctypes.byref(nlp_r), + ctypes.byref(jerr_r) + ) + + # ################################### + # post process results + # ################################### + + # check for error + if (jerr_r.value > 0): + raise ValueError("Fatal glmnet error in library call : error code = ", jerr_r.value) + elif (jerr_r.value < 0): + print("Warning: Non-fatal error in glmnet library call: error code = ", jerr_r.value) + print("Check results for accuracy. Partial or no results returned.") + + # clip output to correct sizes + lmu = lmu_r.value + a0 = a0[0:nr, 0:lmu] + ca = ca[0:nx, 0:nr, 0:lmu] + ia = ia[0:nx] + nin = nin[0:lmu] + rsq = rsq[0:lmu] + alm = alm[0:lmu] + + # ninmax + ninmax = max(nin) + # fix first value of alm (from inf to correct value) + if ulam[0] == 0.0: + t1 = np.log(alm[1]) + t2 = np.log(alm[2]) + alm[0] = np.exp(2*t1 - t2) + # create return fit dictionary + if nr > 1: + dfmat = a0.copy() + dd = np.array([nvars, lmu], dtype = np.integer) + beta_list = list() + if ninmax > 0: + # TODO: is the reshape here done right? + ca = np.reshape(ca, (nx, nr, lmu)) + ca = ca[0:ninmax, :, :] + ja = ia[0:ninmax] - 1 # ia is 1-indexed in fortran + oja = np.argsort(ja) + ja1 = ja[oja] + df = np.any(np.absolute(ca) > 0, axis=1) + df = np.sum(df, axis = 0) + df = np.reshape(df, (1, df.size)) + for k in range(0, nr): + ca1 = np.reshape(ca[:,k,:], (ninmax, lmu)) + cak = ca1[oja,:] + dfmat[k, :] = np.sum(np.absolute(cak) > 0, axis = 0) + beta = np.zeros([nvars, lmu], dtype = np.float64) + beta[ja1, :] = cak + beta_list.append(beta) + else: + for k in range(0, nr): + dfmat[k, :] = np.zeros([1, lmu], dtype = np.float64) + beta_list.append(np.zeros([nvars, lmu], dtype = np.float64)) + # + df = np.zeros([1, lmu], dtype = np.float64) + # + fit = dict() + fit['beta'] = beta_list + fit['dfmat']= dfmat + else: + dd = np.array([nvars, lmu], dtype = np.integer) + if ninmax > 0: + ca = ca[0:ninmax,:]; + df = np.sum(np.absolute(ca) > 0, axis = 0); + ja = ia[0:ninmax] - 1; # ia is 1-indexes in fortran + oja = np.argsort(ja) + ja1 = ja[oja] + beta = np.zeros([nvars, lmu], dtype = np.float64); + beta[ja1, :] = ca[oja, :]; + else: + beta = np.zeros([nvars,lmu], dtype = np.float64); + df = np.zeros([1,lmu], dtype = np.float64); + fit['beta'] = beta + + fit['a0'] = a0 + fit['dev'] = rsq + fit['nulldev'] = nulldev + fit['df'] = df + fit['lambdau'] = alm + fit['npasses'] = nlp_r.value + fit['jerr'] = jerr_r.value + fit['dim'] = dd + fit['offset'] = is_offset + fit['class'] = 'mrelnet' + + # ################################### + # return to caller + # ################################### + + return fit +#----------------------------------------- +# end of method mrelnet +#----------------------------------------- + diff --git a/build/lib/glmnet_python/printDict.py b/build/lib/glmnet_python/printDict.py new file mode 100644 index 0000000..26d4922 --- /dev/null +++ b/build/lib/glmnet_python/printDict.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +""" +Prints some info about a dictionary object. Used for troubleshooting. + +""" + +def printDict(s): + for keys in s.keys(): + try: + print('%10s %20s %20s' % (keys, type(s[keys]), s[keys].shape)) + except: + print('%10s %20s' % (keys, type(s[keys])), ' ', s[keys]) + \ No newline at end of file diff --git a/build/lib/glmnet_python/structtype.py b/build/lib/glmnet_python/structtype.py new file mode 100644 index 0000000..60d37dc --- /dev/null +++ b/build/lib/glmnet_python/structtype.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +""" +This is a dummy class that allows the declaration of a struct similar to matlab + +@author: bbalasub +""" +class structtype(): + pass + diff --git a/build/lib/glmnet_python/wtmean.py b/build/lib/glmnet_python/wtmean.py new file mode 100644 index 0000000..ad831fc --- /dev/null +++ b/build/lib/glmnet_python/wtmean.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +""" +Calculate nan-removed weighted mean. The mean is +computed in the axis=0 direction along each column. + +INPUT ARGUMENTS: +--------------- + mat: must be a 2D scipy array of size N x K + weights: must be a 2D scipy array of size N x 1 or a 1-D array of size N + +OUTPUT ARGUMENTS: +---------------- + returns nan-removed weighted mean as a 1D array of size K + +""" +import numpy as np + +def wtmean(mat,weights): + if len(weights.shape) == 1: + weights = np.reshape(weights, [np.size(weights), 1]) + wmat = isfinite(mat)*weights + mat[isnan(mat)] = 0 + swmat = mat*wmat + tf = weights != 0 + tf = tf[:,0] + y = np.sum(swmat[tf, :], axis = 0)/np.sum(wmat, axis = 0) + return y +# end of wtmean + +def isnan(x): + return ~np.isfinite(x) +# end of isnan + +def isfinite(x): + return np.isfinite(x) +# end of isfinite + diff --git a/dist/glmnet_python-0.2.0-py3.6.egg b/dist/glmnet_python-0.2.0-py3.6.egg new file mode 100644 index 0000000000000000000000000000000000000000..b5e2b803e4ff1a6f48f9808aefc546509a7a704d GIT binary patch literal 233843 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

stYtIIDYawx_Ev5B_Qt{C^Hz#~D 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�*JdhC7KF3UX=^bKidm1d^C-&|V~# z)JW`+chrWcHhe{5Nl9YAc~9Fq;f5r!6G-vI=Lsl`%_rut%gBoc`+4wQ+VhgG&R?xn zSdS7@g#-{01b{D2G$R4Plo!QTQz+~~@AeyL5-Vzm;50_WG}8LYSLNT2Qsv*XMEUpP zL8o%|OOawbw_$9%X?Wh(1c>tAU(fCE&SDZ3jYQzKz>uBOk!;&vAnn)W=h0 z#y&Qkaw%o;Oj?vSud^_bu^&ZW!nCL>=7oPTA)=W)ZNd9h%w#9)mY_L9iN_kE zS-Kj%C*AHd82`$=d0f{I_@|$biqx%zW+g5<*b6Wii6JkNXvOu`T%mT_voKbtDE4-d4AHsiZQNzAh-BWp z1|rB~SzCETQqP@(Xfe?P2~M~k3=3y`2Mh}>Rl=}vh4yI-=-qGiTb$K}+|Pl034!d5 zK(3cS4n-i)l>s>mfk^F~64^MA_r422)>QzIX%fimZ}v;+jscm7K%~CV9HDVJ0;xtI zJ>L^R?nWTOL%-wAev5~`9v5*j0yz3E}G9(4>z{~P^!kU*_s{4mWR;r~VKRy}B)L`*YC zy&ihQI!jJT5^tqf4q89n6jf37hV|>5qAE^!!-~jSt(TaytT(K4<`h-&kJqh)+N<>v z2xk~H6opQ@LIZW#>adP0cI6-SA z;GDd-?T*i01>@{4&v{<93gNx2mx*)t-nRHg7scL#5EbtdagH9+>W%K++hzDnx&0Y; z?`>NOKlzNi_qNqoHU#f&Qu*+ooZH`bVZhmu+oLAhr`HQd?oX}{47(;;TR=K;hxTPF zn#0S$(X`0XOeKc7TX1^(aT?HDazK~M0lh>6`m)n=H-yYrX;?3aVO_6=)p8gc){T>G z{^hhxMvZ^@04OG&a_}#IiWC!1@#n3IiFY?^zFL}p`BSKv_*5t+`iAIV&XG4S7B>5r z_w9MLqRGG9iZkV3?uoOeSNa|O%iVD1)4#kqs!(V0-Q^do{^cW$%FpUwZbfCMKk~c$ zW#wzC`cdt4h!_02>QCLIZM5#L`Z@lz-FZ>2L>rc?KBct-5iF&v zek;1_54gGN_YTcfzd`zLH=7*bt2Ewcw7KfrM(V>=Kl3@iuKMF%@a3xS(+FZAi{0X? zkE zjM;0Sk63!`t9j$gU-#h$C;E7T&rUS<51S9a(>d#K#zKsM`H1EJG#~y8Ck7my_|bk- zEDlfIHU)C);SVsh(DB&L6(K8s3sf-d7!vZlSBlXFY#z}G&Y@Pl~ zpkZwhPiR3r2Ba=(CbKH>7~mP5s0bD%GLGYRp8%yUdOk9L2P|!?k*LM`p^)=aUeuBj zRTHYvWVB|`9_jGtC7>C;`+U$0hc6YH;orBLA|2jp_lk6Afv0Djg+M+m6F|P*Zi;mH zdAnDn!-k6i$V3G4fCO@QyD8G4q}>`PpvO0~mjaLuXimCR0(on_DZU}pZV6n_3Jm3I z;5H+;8xh=BCAeAymrvkUuLp2KH&v^kfF4+M`?QT_IgLvdtvNN%xlD-0CO!R<5{3tWA_Q7`Vh}Y^f9DF zpCb2;bHW|A#k|Z|l2>rtb?Bb3QRLlW;t}k?!9JOPr=&r=qe8yJxquJfp)((TNkK0O zA?Pv!&GYp{gS}E04Rv}DI=`F9s?o_Vkuiox&!Id>G80ELS^O_}rr!Vy=Q~LV;kacj zCp8aB#I$ll2=S@#ro?=OT(LggC{YrD7QoX)M9^fXS1lH(k?7SL;X$=i^Tf*;EM6a` zOI1(NfY@v)I^|XwW)q5eIIoxoT^o&cTOvHDu8sb_Wmwn7Y%G!V%|XaoHfpT%;(3zN z7ipA!A7@55jX*}jvG7PV*v*eNMltJXL(XPQ!x#rrDhNdx9f{}HvgZLk!L8=!(P#k_ z*NU@`lo3ZdK`bH1OXT-Z8^);u34YB067=2)bAv#Cxc4=Okp9w<{sKsUAPr(hDf5ou z6h>s(vMl?YLl_ZB(OVrKa0(-8!v{LlxfgP$C}j`~c~aEN8kkz5Zkr8GNsUM`U0A=T z&4w6@O-_)kHiT*-Sxev$86A-r#Vh5=h7vo(jWH*GGvI8^2^e119L`6fHD}y6114*Z z={af5p{q7)4mr<(DQC`jH05Z1_k^!e<9Bb>Q!2lEPd(-Stx(T!W9FCw>G5$7Y4MB zE~Q;#NTiF#i`Zt`Ob&)7gr#s06id>XA4ytxU)=(H(t5TdRq z5?n7sg^%O7Ri1dUHLTw&g^7$1v0wIY-=KTl^(AHEMVW{aDim-(yi(z8S3{w@;FrgJ z>z1A~MBh3W6iny7b-%3#ofr+D=EX= zjj`LDpYdRKs?aY9oWWzL!(i-A64{+3vODOPL~)V)o*%!YP|}?(GO-~^cWy{`I?~F8Al)9#-Xap#3z)__$Lvt@NkvbZowzah`cmoDy1 zqVQvdlAuy%aMTN8Mtu4wiD&%#C!wDP{p?E0pH1p#wfb3{RJ`45X9S%6hCE6=K6Qp* z?4CR$Fzix~JmEh14IL@`hF(6y!fEbrHDRo_jV3Hd^GnNU)I)MKA&1diuSNqr<}b)y zs4XdZOj;3pG|D*X!DG_RR6J($A27-ox9X;3Dju^_YJb7}N754Um@QJ@3&=xvA-;o> zyHNTF<7^o2LLo1{JmilrzvU6YSqQ&0l#(wGE1otF+0IAWFKqYYsT`9>gpir4^NX00jvODP?m9?V^mDOIT ztoDb>4}XsliHOSTl&EY_E4dL@a=k+3vLT?dY*eAL*b9}#{!rPl3Q$>$s4Py2$_jcOE(vI=wbQ~8yfk-)b&+oxc$Xpl^pGEzfsW4(# z8T0a!CO@GFjy_Ks^kiYg9A)ZD;+P^h3b5YT{e*IGsCj6^OW`ME8YwC~;~@8Y`w8Iz z4Sqrmnx7EgMWR$%4<#bfV$k+t(_(=39kdv*r#NddNFfh>Q))3hwkZMuT8wVzkveNJ zaP*|bNIt0cO?56vEe2diEygDgX*(?3aC8V!Y}ye0gb;A6_6?CZezYi)xRO4TJl$ZA z(EWt47ge4FtwR)j#zxLhs7Y4uYsTt*=$wRP(d0rFpgsn&08Yo5EVe3esma2Fc_I)% z7A?*rbta1@oh<&|sJJ=BtxB?JQe^SQgBsrlH%8EXj5J#aT>lQ?Q0Af8qC93bl)%j@ z9Ds7`59B9=FKE>fCH>8Cx@+)WGbta?(lrD>p+qr)!Be#rYqqXL*mYXeqvPgmE2t)1 zUb-6lo$IN=+VJ)q!b7Q*pDM%f97<77jXZ}|;#ULb5f#gr_}x}oNBHq8Db^Q19@QPf zfdkw>(2r<1mDJFuXztl_&q`fN4HJW68MTk0j9Pp5fsOs5E}nj}-m#GUijdI2uZRyr z^DDwXp@te%Px9qj1ZBy%YY}<@i-|?oBDe;wMTpr1pFYjC2=2Qb%?`(MO#|N0PG$bj zhig$zQo0s#a2D61`hcfv5#H8ai>mCdMSSj@U5k*MfVUj6PiEg?VnkB779m^GN^FV6 zwFo}XziUx#z{9nuHsIu1B;;$Zt~~!lP*={G0qV-jPm=jhf88%nC7%EE*ZsohGZ2vG zMgim^czVW;=>Q~00-1zB(CFIUeF_4R8X+ZWaUj>806_kLK>j*M0NL=Xe#tg5AOpYZ z7f#6pq*?=V4Lm(#0Rp*80$GYcstHIl0;yI&iZviL2qYJQoGF2vfB0 z1ys1ATcNp|8Zd_IQm-%AM%1MB64NkvuXP%_v|a*5Tkf@@h$ahqiP?DMUh`~to6*xz zuM8m_F|0@&tAmtKFvcY;tt?tfyyWa~CPCvDwy)zQ|SPkP9I?t^+rPC6uV69)FA$ZZP2 zv*uG$A$Xqol)myy=MX%%d`iAT@Hpl$$7cShLRi=fVPSs=+qD8yp(&Z!8)3>zZl%>r z4sGnHqquxIL@9^j1M0b{?$<+mFfR~IolTm`kwSK^yO5o$ zz@?U^JV<~*fHalvJW^+A3P(@U)X#pQXi}{?DNUh&C`eOxtkkF%ZhV#k3C^jf5O}lp z9m1aPE=?6wvug#_CJ%vp5~8vvC=Y=)=U}Z=9s*(`vwH~e7f-ICY}VsiW}tfjTFLlk z9IH7z$twl}Umb@(W*2DO_4mhv3Ja;b867hzXug$`FJ}J1v^zz)oM}s2&GC?lco4YT zCXOEmnJTm9XvxC!vcJd~!nu;jm_X7LRU8bZbqE}Of0Fo>x%BNIx#|gLbN(tW16%{l z__I`YQoqM5PlCxWN{coQHi0-i5}Dt}vk1Z6I_+|OycvvzP}8wV@yjCaXf9B3;gPGO zY=Om^tuaW9_@apnD(%<|%mValkQxVyrZELQF;4mu3wD|TJHhpYob`m9tX`*acBygp zI*-#DLgzM4r5WL}J@NBhi?1NLo{3YSVaj~C-6w zMlTnCqls_u58`|jP|x$c;$-3ce?^0vMVcf$i0i<|VJ&Ciqv)L*W%2{+w~!!t>Z>}u zalcNfm@=&_DYwS3%hp&dx5iTUt3!g}qTf*W#coFy`zsT64$&zr2Wax*N|@};e13-D9!{8EN&BV#17WM_O8ords1 z6oo?H6>rs68&}Js!UFHzZ@x#G9K6@8t2ARm-;skmTPrz2p+Jc`bWn^WzRCvxK~{;= z4B=A2x2qUR?lN>{Sh)=G7rDC(QIySA35XAu z1N!oMo{0;hZxUzoF0^%L@r*USvU`Z$8(qit>+{)0KADQT;P|0Wfci{b%YBKOk3nCe zkB)KhC0h1V@FfBmOg3gi&RxSje8TW|DTpHAHU`*xCfM@p|N%P#2@2Iw>T2i8}quUQ( z4$HsnBE^<^O0n-9Eu`49zigIbP0vXww$ww4EhZ`UeUf4|cZRAxFO-?w8LUE?a%b=q z%C5Y_*`2{nDD&mcz%hqXY>qLS5N2|vu_8>l(s&|l=Izd|G;Rp<=}L3|O@udYX6L^_ zmMsQZwispEOO-5(_Ko{ZX4vvkY%sQs)Q7?Nx#fNh#?RdD%V7MO(kLTv-S90W&*AvI z7n4Lg)*{i`P17kQTCu75@Ogjd2$Rn{2(_OKYC3&-7hB6UvGp87vjajdW{M*Nu@!Bj zb=qYn4xS^$!CEB_3eO{pIB4}kGK+&{QXH(7;@~nQBgzxeU>95UyatY9t9_hpYMhPSCM2l=g(P@K;k7Lseel3XEIX?zu(fEX-ULzzoS+n_BtQQSu=9L)DR zk>2qh?SEKtNEcGP0mXYKdR+4L*l3ZJqQu;Ym1Z)w+`x(>)nSc z$u;aLxrT8KH%dSqCdoBNNv@@ux+JuSy9yylbe%E4NN*N75c zZzJJVx9;AU4RYtpQ$X&#=nx@yez??R-JM$FV!8w%3lYd22qaqqd0?r@&b(!*$+D>p z#bhRJTI$D4`Xe(iCcNf(3$M$9AiScc2K6>E%Q0f2TeYOZ8zyD-*i6Xo&A8%_|hccGrFb-KI7z@Onk<5H`(|M zCk`TF?v}#Q>VNriG&bXZ`EpX_%Ry&`=5ocGnDXVUxN&Ita+Yk%XT(>E#8-^O7eV67 zN8-yv;tMM-!JQ|S8D}Izs+Uez`7d%MeQb_E4z6Ou%%7Sot}EuVR3kxdb5Z>YJIr7j z_{qw>`JPsw+9gX|7<&$*uR}VGsjh{6g|S^lvG*}UnD$m+NX;N6!_I&STG2?Q@-!X^ zf;5o%@S131s&b9~BKL`A`)zg41sm1vG6=8Q*)HQ3J8r2NF{bG(c7>UodJ zX?-BhzQWEY%rU`*0w`Ob@3DcGqx|PT;Z(ZePyP#et~Ff{ODX?_3^)1DlBB`1z8sP? zAb+pYVadb?{-i-|)b=C|@seU8tJOMLGwp(+OHu}q(%@C@qMv$M9c-gaK66OEV3Rgw z!iEZU9H$g1Qzu`r%YmtrFWBY4;vvg{<^)?MlU(F8k0cDUCkgp%)}+8lBw;u+&6Zk= z=yKGg)*5C>>!-fsoLcKMm9&nCvy~r)O4zLhk#UYHGe1@+; z{UoYCR8a^tAvf!`fzKFDmr_<^Qd+K2nWJR2>DPj+)`jO6~2;6vm;Ht_%)eV99*DMTND&9wMW*!?( z4QIiEz?Fe--x#>^s=$?32QIt(n!t4o#z!yp8-Hd0ZD9XB%Kp2D{dYV2??(3DW$Zuw zJu_y`@G)Mk|LnZuQ}_RNRp18m_sp0zV|wc67OMW!XC0Ti|Mvpl`)=SnHwG@fK5*rw z?5$Pm`S5Xhsh__hz;}epwQ)|LK67U3=PD}$mt7sWsv>Z8Mc}gU1g@{DAhJ<#jy=xD z{Cz9%t?L8q3j*K1K5+ef{rTf&&z_O``Rir>S<{d8F)wVO*OPy_{>L9XwC_0fcpvLX^`AA{2icp(f83D9pEtwDaBldH8jru> zYxtSvV;z0(d)D=S97F7o==Rv-hcpkYzmIWg>-xB3hqR84KhDp7rSEUEheY43|B&W+ z`pmo`t?TKtW()~G(|w&s+W8gsN7%Ceu|qspXZShq_5MTKS7*$aIkbKF*gRkT@n7#L zyMFuei$&imK85}^grpWQ{p(wdm;Y(t--qY_eCf$WTMoQ6pPqZ#+&@rl{`36&-=F^W z_p^Tg&r^=RZOW_9@AxOZuanv?Y6AkEc;Dj4!%zNv`|6Sc<*dDvwGXlO71ln>+9^NmH@30%Jl19~8MdCa zUuNyAtc|kvfF->B#5kDuu`T3EY+wOd)+%i2EH?%L3A z#{Q3WA){ZIIX)I;!gQx8@9%Aj6qC1UeS^M!f zb{e0scJp6%8aa$lzx$1yMufGmzPHo3hPC1CJB@nQF1~7)v6i(vuiIs8W9@S{>@u?U z4g|_y*=6LjcIlQ~MmcL2zqiY{leMRwIcT)8cGcs9#x~Yo)H-Nn?Gp%W8J{%rSzEAw z(zu4TJ5Nd)^{hSP^rX?o+T|A{jcu%b=KDz_J0lSI+)YU%kF|F%N*blCy*ZXNs#&|& zilp%nYu7xUG`6z#sC7vrZDJs>+^<@K8fM&0K>>-?YfzUaSm%gm~9xj%+M~M+V>xTD z>SiJ>Yd`qFFy7_Y|6v%R$w>KGv=D;dKPwQd3Iz|$n2=t}nBBwKwW;jCoH9mxj0OXf zLZ?m2{#xcf-%GC!oN~a4M;(9oVdD9D?7!^G`i*pL1?IB2jaXdluXGdf9!xhsgV9h_Q_A8^?Nb zICEIPm)G_i^MYExv8Mz%AP(n3cE4|3zwx~cM>z8{2+mU0@AMb@jYbokUjrPDoBP=P z7nnSH`WWqgk%pTYV_@vOZzt>X!7Kg72W~X?O1A8~YYgAh`i&E(yYxL`y2KgZ_a8rO zz$nqjFt&J%7-NLp-*)(b@m9zM*2a*8wUG6_XU2eWhUt61CcpPicK`XA14iN;7g$y2 zNLX#G?=kTKqt-N+aXFV={9Ww+1br@}at=P_bIISC&er(N>|98NWB$(Rtnbf$I$(Tc zdS|!9>pATH6?YC8o4@Wd{?%WX#o&jTT=XdvyrFS3B&eSh_G+<0Gbb0q7h4S6Stnbk? zcN$sa9BDo-XtNJB>y9 zd&gFd6Kk=XT|b+h&l{a_^28YW))1qUf3x%Zz2z?7+PPeQD=&HR`xkc_tDV2$Q9iaD zcIz_M@AQ{<8edJ<`V}r8J9c`yq?u)`&*iW0G|tO#dGA*znhJ zUB*-$=U=~lY$9#>xFzGqW(b@wW&N_A+hy#W=mPWoiSpZd*Y!%qiLMu_unJ-i7@Lo_YZ@{_ubaQ<%RP7oEN-f=b&-z zzAk;w-&f5)Yd1|y8jl_B()ZrO-)C{lSa84y`8P- zEr;>b2e%}R^WAVbPvJ1i`hNY{q;bPRE`2XONcOE_ed~IX#-)>7`bH)WXMHnP5VzhD@rxQ+KH zHQtw5-v_t&!$W|*JNc?%%ypxiV-($dnf2Z84a4|wf(zWu6HuV}-@pI;``^F+{rlg) z|M9If` z-Jfc?|L>%69XwAj9!J-kCSg0C{%%Xdc5nLoUK-y%^mjJ3beS=J_`WgXJ^>Q?%?Z?g zp4xDh`TDZ`%;RjNb}!5Ok_L`Hm--v@w-`q+{e9NH_;H{?E}<4M(uiPH&gpQ zwVzTuo(OCTwMS4pliJg$J(t=msJ(&OTdBQ^+6Sn8jN0|oZl?BqYColR{6X}7YLB3H zCbg$gdoHzCPE`8<7(-R*xH|$v7bh5CgiGF`>-SX;NH~sab z%UIvjPd)X7oZOOcRbIQWGH2Gb8PmdFIldD9I`-yc^QMKTABk53DgKRRyHZEc>G~MC zZu1}WxyZQRQa$h%J-_LQM8OwIxt{0rH ze@^b#=Ic|;^eC@?K5&iW^=#WUP9AB2j}7Z}ey)viz~>~o-f6jhC|wulsQ5Pv-l4`L z$niAzZO6|7f>UOJb0hS(9^qD^XSD-(Dkuh_;(2%fExh*lt3%k@L(dbwphZu5I2 z^bZ9VcG&6JssAj%pM70?4dB@6vy8@5VWGoo=(?3|Z-ndib-{Il`?C2eI)0q|oBz9w zuAg-R{=Jqw6zbr*{omL$>_6*Y`1ctE=fMD8KRyrtE~Wkt5d8fLv12V=f0(XM`Y965 zYJ&4PT^~0MITz4(^KsGj_pZemX`+MTWxD?VD!2L=yNW74-Ihv)hAwKO(P-U(2!@;P z_G7#Cqup({yN$bB-EOrQlkvWL@B8T9kLSJj?Y`ZL!H-yCX+e-c5L*L6fRe_f#zw3) zF(gt%TTTBUCN!lGttcr~A%uc;=APeq`|j*}Q736<=J(FmoH=LSy=UI;LY$vKYMukW z=ifyCX`GjTSNMt+>-sC!)qR)*+c>{3LC&fh$eur9+eQ`=zWOB5-;DU*3;J76k>0GX ztlH8Jjn6+n-_t?#&V7V$Kp>7n{@YKJ{N<4U4CMdx06FX!0<<6Y-+heecR|jFJ6i8! z5A>c~P4s`k1MXSq{l}Nco(quk8PJdQK_BFN3iS3LNX~2LI16e*88{^emL?L(eFWAZ2*4lZ^+Irtm`1;pEB0~`T z^&$`Iz;9ekj?C`WRJ#dyypz^-8~l6#_^Q__peFDF(!=}v7}@!5#M^q{T^C936WI67 zzz@Do^zTKUeirz1OG)oByqN4**xH{@A4CA=^{%YI&$m-7PfM{g%P ze~I($6@@Qr@tpGp=x;OhUWPv(#(DlO9A^uVUl;a^+`6s?zVjT-v)?JG_CesC>+^Qr z1pG&L(7HYZ|98QjU))9e$nP;LLI2Rfd^{gU9&Oz~_(A0FCqeH#LipeCB7O$)`(_Cb z;Gf||*mwK+%yS8s#Ya&^!gcWJWu{|TbFpXzKF}4Fwy0svfQ7la} zsVLJN>D-?H+1em$rB(7$MV88{9S4bIyxS^-Q5;C&)r0y``D$PjU$004KO3zRX*ssmuIX7Rf_f!YqwYRs@0RiY(Lp&l zwpmIw8yedo2ZsR;ZypzNXk^e97Pm`>W51wudX$BR4^^mO8RfnbvwDF1>7)zo01L*Y(Wj}NyJkGKqu6eu zq(YlAOb^CctQ?8NAf=2UccML=6pckd7e};#d5OeWvh_ad{-Ct*b*J&{^7lN19LNoY{^YaquV@$;iSjXbbZ#e}t}(&*nIqUN zNj=GO8Fz=VXjHSz`4aGQJm)zp$c0nJMNk|EVZ~IcQ=OCW)_m!QRd|^$CVy*cY}o25 zH^UkcBXhrr*_HE&*ipd~a*Ko4XqCgYvQ0E|YKl%Z>ufHZ%u%h>!P!Qapy&m!nKL&9 z_2f2gTQHH(x%?Oaleywnlbj0daall~0u)Uev_ePj8*6d*L;<73?+Ub~O2MkV4t7*8OjZ{ZzPEl#+y>s&Ee_v!ygTo3_wBkqe{~lNbI$8GdYX-7uKmfqs}HOLt&Wc0 z=$^e0|4q_DBEq&O=zCY+JNRfETwXK2;rm~?xlKLlUGBideiP66J5Q2MP#&nhxJWAT3o4O!Hq|LokQ>~ zH?^^UIv34eGrhFwjDOyKzP3*?$JxHa{Tyl6^Dmcu*$45({kt`L>hnGrNbwu-=LLhq zw}WW**1~t|&$ryKTydVUi}_-p%FWrYNac0CFI^)v=Q6&Qebk(#QTdh|wm%48eP~9W zqgW5$j<3VMX;EC_`i8w1YEEI(UtYgoE&`<FwPADoWZ65Fu?k!bqxfBOs9=iCof^xlS zt!P9W8z)R!HacP5Fq1MqZ|IjQnXG?Z&wdzb^+CP*sB-h21DWdjjTSoov6k}xn1`M{|<3q!u#8S<*IO87n3|NHbp``t{uRrTrTaovSASd z2q+f^2nh54hq9rq+YjbH7&ocw+OBiJ`AnA}t%a-vB}jUN3=pe9!ijidF;)()ZT z{6Y(_7!MPl%*@7<0w@-&4Wy;1M@cg>k-EYnRXXV;7Y68bEa~aF4ULTWM=&QCG0z02 zE4Yd&;vFU4RE{JOgGc$ypwIUhPw*Ut5iB^Vn}~>%lGnQhpkIo(0ip1V^C$b8Ad8C(84F8%oP=hG4n7p%6AH7m?=lKYu+W#=9X&M0 zC@y55h?e)hQl%D@0{j`!mC>JoQU)m6PExT03nSzx*{GEWSgOPY;mP2qm55X)O_9@R z@%*aNShG2tg|q!DhLu!+AHMAb$eaA1N+_2jKZHa^s}skR856BU;B{H{av4#K5LhOZ zhNA3M)V`OO5QO+b^_cCZ5Jth_=A-vYbCb)a$l=jVs`a&mh?ox;%_ej%9BU+&7%jF( zJ}6E|mf`lm0z&1|_?04fii6`KjoZpc;{B%JQh+Ma8P5Gb2gNxz&sFy$KVmk#JK8$i zJ4kbSw!C|KEU^n_cT00sCZJM8%vn37wkXpp0;w7mhw+jXVB!qFK0pumI!mj;wXNHn zKy@>i7MBDB408B=V@tscaBltKYC@0&`PWGo>!2)QLvOr*AsgR6Kk(7O{FL4mXJ|16A9@jjpZu<`f z0vJ;KgSNn~q;_PoW*^{&rpbgzn-_;$;XArsCC7S@x2BbjWt_WP&VV*g=-PgccKx+& z|5wzN0q9z1Er6%o);@ZMPv6q2&lB;pMQ}Kxx5M-X2xLt!E*h4Qn%S!FU5=#_s?#$a z7|JYIglh_p3WmKb-%ORy>!RA5$Rm%UIC1?vZ#I0jMw?Uea^myfyU!fVT8*_piLoBG zewX4^Q`Kv=9E(sRUq#0R4Z}R*T5R+deb>o`uy4vtDL)es}-!e>URwOGw}%llO3Y-mySw!(XSB94JK6=DEhP9ZI$W;fG1v}WQ#Z9;<{WlEqM@5ZE*Zbx@Ongu zZb=oqwBJLhlRzHQWgBk^zxlBX{7fVe@&hxl*89T;Pd?_N8VP|Ji2(;8euvAwhA%n3 zqXQ(7pWESs>}ScNE#mIo@Dx_+K@KXDaW{O(={0_ZRyAynbKkY$oN}C{(8n*h2~Da< zULN_^ynRuO?_R5ZtFc@0N)?aJ=Fw0uulMq!1Dt$?7qoB=HnPQMEc(|83lF$excX;t z;datM=cP65*MX&xpn5;2I|gNx8l0XZhs3>=$=oKC&AMmo_5km&pY_`j*?IO_)Hte! z4w6Z`jCe@I1@FA!X$s=Wk+S_)&g!&o0z{)2Ma1MGyGaIh#OdD#?T(TCxvuRmLNUL~ zCn#7v1=A;dd(7lG2M2(dF{R6*!Jjsqt;=;Q)jEVVB@I5=eIVAdG4zx@<;(C+D}Inh2d}d6UQ4ZO@})et6WesWHH@sE#^hIiI2Q8 zT(@@fuwjQyGe|i2KnsyWt#n~~X(>$@b~f<*?t%e$4Edkv8C^+EN8T4Y=q|;;ZOCbK zI41G!an5PrPZEx0j`BDd|5zI-k^MI1b)__%bJpC28o^JvoMHMC9i)p%=~0{g#t@Dg zsu$KQCDB?y%aR~;ZiG8#mV#uR5V|zrQzm9E_nSL(n^C{t><1*LfEREsw19e}9@mo& zZwuTImmKDwjc)W!uR)F(pnmJ~HcG%%l{e4E6TiisA;yU%79rse8Cf23);YBT>8vRb zIix_-$qx}8;;9KVnc!fjLS-AS{)K4UgfC%1n+}HMs|#1D=|E&7Z#F15Y^=bL?`%uA zX{!U8jOBEC{Fr&YN%c~!!Rx4x;Xu>BcDaR@5q#^I$p;}d?h618f6MNK(?gZT7-|ykDpHs+pgx`|4-gs_sCtYK6OSq8?RY`8 zfwv=g(B8NYN!yDgTadm2=8S2mchIZ~(IHj4>*c%;gJ2<+cG1{1!3Ztt#x-cPKp0bgH-U1pXNv`rW)1WwvqmTW!dJ%3v}-gU%FrENBJf z?bzljyL2Vnhf9DkBUJW3u)F@i9)~v-mG%SqHxv*M*8c#zvDJS?Kv^o1G5f+u-S4W2 zCI~i&GAAhwa|&g=i)Lz@-X z{4dsRz-;(k#H*BH`%W;Uk|^nfD`@mU&O=*TJF0-`9V#rO#Cgo&ogE3ZYW4JSminC>y0C8Eh`Y24&}iJOROd#b zvxgEz7|qcAW~I%M`lNO-p(xf8v5^S<+@DO)Q{8TSx9X019fD7>b)J{wL&A-aEMR$XRuScx3xr*9MXwmq-BDdvB<7P%#v55|C>? zVKyIlU7(ajrwgq>UFR5f%}>YU?8H$kUG92dlu-K72o4>D_1-4D$lN=gdM@k*P}gb* zu7&I~%!uEj+I6mDkDHZa0$C%L-rA|xLfxI<^I6Z0qc&@Y9}x>aMZ?C#0ne2&+n5+3 z>aMM^L+$V(SAr%J?J!g|eu&(QSz4SsR6)|2*XJ_Il z2zypngC@|I-ZJ>VYYvLTVHCB^H^vWt-Lt5;jp3W#b-3DM_a2CD$eOVy9or5WPyo^&2XQ_xii(G3mF+_2nPCWLWk5DnBl!aF;7bigz_J+mgMwadxNJndGlEaNx(V%OfKr0E zx=F-)aH5K@rx9%)mXDeY-GIgPD#DV>Vjv_TIcc(1^?TX;er_A+$&-JY%$f%E8f4bD z5AA2T{wsqP?muQsg|oj!?B&CD0uLmG*ek866Sh25^l)K5B@(SBN%?2Mr~cH;^U-(V z+0?;Ja*X69$>0?aEl9H2hGxHL_71+Um;?=d(NX_l^7>utbBhc;Hl!4M+Ljw5@W)(O zqpNCT%>^!&l_iCnkb=(x&e_wyqu^N{D!K6!(DyH&)=H}ZILb3(`Df4$?ZO_3pxfK*o`mYqZ^SPipkJo`<*ryY7V2i zNhf-w-a^s%V0P4r7cj-6>j>M4RZ%AhSSPTR2ySawPOn1V1C`o6!!NXxA};jK&E&AM zXnoeZm-?uxcN6pOvm2E^%OS59Enu0H48x1L@L?mB(R?hk6yhzInxJtfS03P znkv^THwv0YWRzfW{mkD1x|mSf^E~zyv`U7x#ySFDxzzS49rluP;dGI}a8CXWXpG|EEj>JKPw_I$7 zx3e_4<6tcDgm?5kqCVQBCS31W=H_Fm);{WmJlV{8SzRcymtRVDhBb3PolS>~wl zeKg*Z?C4B%xVe|7)%*<c}r=fwPxW-V$sZJp?}{%Rk-{1ZZ2!Bd#kfk8R!|Mc_Z& z8%WbD=J-{6_D^-EM``jCjS@(<{M2F(?0Zja-D__a*oF4~+wKBJ z*t*K=g74I%0y|;egK^VX;ko~mxo-V*F}pRA+_g{49t2B0i>{r^_9{y&lJOWO1!TJ` zo!AWKe2IG?8|)!u8ewjEwtNc=fu&Z2@$||MD4EEO8R(-%K;y`89 zPUeZ2SOx;Zoc&enzr_Rv?aQQr`z-jKrguU^b)s420Nx;t8QN|YB*8wm-vqg|FRdSd zS`Oty07mlBOu2rdv$|kos|j|Evn2@Q1nAX> zvp#82tTTUT-gcB;i7@VvR0_lpL0Jw>yi#2>f@54UcA&5bsnFA<^WnB}g3`f$*9;sV zCut~nc7R1NjFomXtb@CBK#0Uu)MD{3?@>b42SFQz2kcI097ddWH=m-ucJ-qX!$2hm z)X!u@w+99I-;l5g6u%C}l%kOknVV|85n5~}D`Qk`1+|sD9*G<6Ui`l{sB>AJ%iOar zh4Nj~N;(@OY3AT`;qna4DOK$Iq4Ptce3$ahoq%PK!Hn!Tnx0pk@?{dv=xbD6uM&+( zv0}4`((7DNe~}Ye%9DTPC#9U|RUy~h+DboxgT~O9suUsIqnV(K$FGE-(&J-k_ujm_!r4>}P@AfdVFg5;>6}YRtG`F;^C;Sb(Zr-^ zEx_BeJzE55B-s;8?}4Npxh8ev z11fc3v2@;eDu~HUGGlk_HBTi0&3&0={B8weYnmm-qm|84eumCyS*N$I7noaWDp2|KrDV&sQ9Tv$*UhWUd)k(cr zMr|af2Rjb&sF;|s5C-s63P3T(co@sKIg%YPC4w)c;hg7hp*pV3BKCmOy#OY%;)oWa zAk7*v@e&Q}+8PX7VlGGGA~F_H>Qc-vf(_ra(kr<3j|F9t)x)e@c9?()_g_4ucsEgY4!Jtjor^B1c}q@sw*L6k?|%n)%jshAMJ7VW~0s@7Js;79`( zJEN3Bf3q3d$P3j1eV(A~LcgnBg?kxCalzI>J-^}SlGh)pbG53#E|WW~Pnn;-^jg<} zNTg=BkD`j1i%DJ7Z5S7ABe6k9+#OAQbR)7h^RHrRbCou)joevH;OcLwfq|4rJ4(BZ z%p|qqf+(L#gNIATyJU)JLB!`NngV53|G68nE)A%1aZr{|5s9|QGA8L7q>!lQx0z3+ z?N{^(3dMy4eCvVQF1%9(frPwD;SDBLsAn#fC6)YU4VaYFo=;@D)K?5~U0PJbu4QLt z*j(>^>Unh+`?a|UiU>g0HY{>38Jhfz0n;Ma&-UMGE)oxuDXeQ_I_wDF12~NBfP|AW(QC^8$P(>`3|6x+R!?M;{%d08) zSInM|_|GMVF?jTCxCc{;L#V(7?nhC?Or5iAid!W#GvE(J7umNs{xp70% zcw{~ETW+sjs_Bub9Fwl(h{a@-=vJc35Eej>*m@!V92saT6iaA$1}WMn3_sE(gQA;G z?&&&`RBIR-B8LQd7_(IRq-g08kb zQ`M;#V!NH0rK^>dQ@TvJ6`f_9rc+F6ypG{uT2^O!k8Nj)qRBISF7Xy_;bb{_h zD*?*-y=*5T_bBB1Ql0iS?v+=)AJi5xP84CBoRm_E#GLMJ@yA^^-p|;Rk@m zAO(c^mT2AG)#LN&;oT&|4qRT2Ke2##FS)*TE~>|`Mp;V046%4>m+(yO6AN-x!a{Qo zcB~Y3y<|oWxLPDADM>QR8o25U*OdH;8SkZ5gfydRLrr6S>_%ITtWWUZs29%k6M<

HLHEZuC~%q-2%mb0RB;TE~az*8&d^NR7XyKLDKAHp)pEsqPpjB z$RxXSPjvsl>9@pj{d#kMvSF~lz0tb)PRHIs;;j|sdj}^cUtivLG>_2ax+)2sTKH8l zF)@3m7omCH6P8ny+R!_4J5R}hwzFKPH% zB3o!exMs$fE+UWO$51^!hI#z-WOBpg;=7@NdUgtCuKQcBv|g8mk4#v4|NZ;#^Ddod zbQMuHo18ubnh!$9p?4;=>qlPcxm|c+fD# zhK%1`)1618I?y9f=%GrkS5sSBw%2(@f~GEhbJK~wXXdU6qWsCa{F~Nox6=G*OMz*_=t4CgiQcnL$cbyi;Q)dxvmb%;$(8+*yzqbualpfH zn@1>>=gPkRvDRiNm`%q9j|HQ)H*K}3Q@zkTcY0|J@-w9qrzYQP0Swodbn_P3Z|&6% zk%#x7ZA1Ou0o%IDZGAO%%}4yovlk5CD)NoHZL`-`J#4*3uaEb~CHJb^)T;%4cl~>| zBZKMpxuZk-y5AhNRChh;>>R6jA2PaV_xq=?>Mtl$5e0_sD-+^?w3OFDF%^t(usLzC`XnU7Uy4AE(*k-XORiO1rbWL#Kv>(e%XfNb;?oA=UAX)OI@rdOQnU$L%+ zj;sR7=j?Y%FB3xuXI00nN!HPK5HqCXQhP_FP=TEO$Ig2l*Yokj`=g~VQnd@eypnnI z4w3qIy^_n$ScfLn1NS-1RVl)OsbcuYEahQayr&w{_6;2ZUXX=&x^E}9!+;N9kP9Gl z`Lrr~pRaH!JcbQaTuu3-yrUKH(A@N(t8Qt)U#yOk8B=GCoA-^%6N1Z} zxGcM>gsJ4ePM+f3XVzm4>tysE>n?e#43Mpt{_DC!N7XI1mqi3*76t&+h&%y_}ZdT}~vw&=iYsqSTWK>y4GOeBMrc{o_}0M^Ws5Ct*It zI!~D<@LRh<#Vs+MJ-LOhHfdXFHsVqlBcE(i5(oLVFi2_?NA#4eU;wb+A{5tLZrq>Z zxh0V{`7U1l1;DKVWk%&hITE=godY0w^=7@R&3#p0%*U{@7sVD1(9VOw!2vpo|I|Tp z<|-JRY?IPO%46B;(*o_cOfhDj__}!lNM^w?A?j26Zs*>y4ILt5N1E~1dGLcF z6u$*-2EABfQBcHQ{LFS6-s%|&)|V1SJ`K;9^nqzE)qQ8h8SH?+C&Oy?@GbiS$`mtO z!}6x|P!<2BMr%Ao*UAk;3zQ&9`qI=hz`s~6xPWuHhq{Whgivs&J|nYik_8W?_nh8L zjaHwo*PG~Fnd{XJLX*M>C&&8`J!YiICj6D1z_U-|*%`5MO^TxjixUEJKa8XJ+Us@o z)fSV$bWm*HX8N802~b|=;_EHn{4A*SM%U>9Y0&RJ zy{8U)C8^nJ1m(!cbNyO|csFPD!K{6ke>kX(ijwUhNhIx&^_T4l2K!kNiipyvSdmC& zNZ1Ilx66rD6)Q{Bdu-I3XZOLkPQw?Bu`r?K~HmxjMmsgD0 znwVKy*C5G{DSy%cE?skE$YIuy0ltPeY;9_9ko64B#{R?&GdTdY@Fd?Age8f<=OSp{ z%=Dr^VX`W*@hF#*8EtWK$$oqAyGA}u5XLe4@{5;wpv%!Ik(O2TEAZ(Jwr?gn#mwPp+U9#*XFiSk5feh#n)1L3B0^JR z0|6uBtd0Aa>N2;)%WTeYEzW<@xkZfkh3`M|b;FPP6qqDNhx}v50Y(4onEtP-$y3`uVf|wGp?hP380J(VB(Tx6#B=i@(+* zem+gb){}9IM}V9|3grifI8JGC5axbL;*y}la&iatlV8d<&T(*Xm^J#W)d0^LB%8#q zI}W1q(2v88!}Hz%kmGjdaKswNeEa%_9)K1eaAT}qSn$nz2lbqIJKb@%d3ZC~fPD7b zdIw;!)$;&1NsF}gp508a$jiyl&{X5aOe{nwwT|5o#cct7vM)N`5Ch-Tt&tq12Xr#I ztVS2yAzJrptqD=0WpV=42V1_!^4}Ia+LI$?I@;sK!!(}pLA zHQCpYi2HG(BB*vflKONp=UXP!N2hEEMuxc`fA!7#GKxju!rZ3FBrkCsiq(hcmW$B9 z!&)*U%yfpbkk=s=e6WC`{GriE17WjkNtznPT4A{$rLJcN{$ApELk&?k2K~jW=lia| z#eAb`C%)|jmtFo9Dm5Y$ni@zI(m#{N4xOq>KT5K%Aq)(44L2kSQsJ&#&md&8h=G{o z?M2W-+;kLN>c<_+@2aM+u%HdMA^z^(I*pYQi8+IzVKZ{^GM!6>DV3qyL8m4#b~rIL z`m9|VsZOWjOsNLL4LPNCGDkw%S1a4;Vu=a$ThLk>3USQgn)p&IkPV|zqy3;5otTLi zc^WxyHE$us0@1>)m`~VB?B#s%`}fmtXME69JJ{9 zAQE`hR+HonH*(q<4!1z2g2fI?^;Eym!X~_mvV~4Y937a$ZZ|(xKkm)Si#t^OMc`+0o(xL*rc+4dbkQDi#$GeM~^|7*j+ zDi@EwX~%xZ2*_{}bL2D~n}#D85S*9ZuO>CAWkwz}&>@U?6I2a!MU;}>?&}3QyNWpL zd&rsWI{(W`cUAbio3Hyk$C?inBSJm;L*u2%4aKdX zKm?BofUL`8rKC(Xr5(*7YUu{@3c4ctyKx9=EL{4uq9+)S&_t2#vE6!tO@!2ihs%)a zUB@WZ*mTz#tJf(Uwm9|6hBhHp#eQVJ-?npSh0r>&N1t3;*Y3!xvI{s`umH!PX#LLGA%@nlScM(Vsj5lYnCRqj z;}>}J+COA$N**qa9GsjeSyyol?aC{Lj4RIAH_m}Wl2%B-Uh?Kp6cm#-G`=?PFF&>x zv}o?l=n@$p(l{!kH(#mkef&;=_VrK9xnm3G(A7NjMRIS!oa$A?V#EE>p5f1)QlCF( zgx{Et(~~iDMq9tlUn;Bahtb^km&deQ~}e3YauYB<7!&M}5)vicTA6D5`38 zfRyo;?xmtke#dybzwey|nuh03- zVl9>5Xhg}AHYKQdu47CV+L{;1ma`!1?=FoN)&7s~EGZ4}XR7Yz=R;?~BcV{*)351A z&}r;i^JUT_MdD3!X8%|@uBBZ#mIM%M)JHW-l$As8zDk_asc!m9*1MMjrcR$cilRbq z6bSjr*K2U`^aBf5L^#gDPRu9`i+^dhQ0Go2F4Is@W_PcJ=vP}aDh6YkBDzE)xRB?J zArtQ>NsoAlh!L_7CUa8tKC>Ox%e?HmbC{y9GFEP#fG)I)aYqTe6cM0<8vY3cGPWTKbn(kP2jiuJF&wr0inO}36_Lt2KttgMJf*&i1Q|BefCrcll?JA4N8o54=*Ye3 zodwjQ?|ApX%gdRstG(m01&EJ}_4SVweJsG2R=SK)7Fl;cLFq+GSWgPfX%GhoMHzsk zW)x;y>ZN}n3dn{8n-Ta!W)u%WpeKx&(05oHS_GYPS%V?P+0)f;Cs5DmPHn}-M{)on z>&!7HP@>xMjHrke$v|im+%hk&n-V^qQ&!VRrlhPESWq=cO6gWr{2PmTLIUj<8L@tt zQmBks3X>oH4EQL?ArNLS(m`M_6l!uBomB5)iT-2dric;}KtOl|WwMLKrW8qQ0{Trz zMG75#&eD(m#L4bgIvNl{xLIl?R~e;l|00T}HVc??ni!I&u)dQsZ)X(u5FYEF=nbEoMojczjLC9rH*2sAq=MfED?DatfGKw>H#JRdcn|s>a_mYk;5pM zcxs(%Ur>Jl0k?%zb zbO`O2Nr@TIy`Y`A(};r5tK`s5dK|zhs(1<(c|su*5loQKkhY`02PK7eR37I`7{A6T z80NW6V-HJdHL=crbnHM#N%#odMw98(x9+DW^G%rKjxM4Op4WXj8}^?)QPcmK3kG_YL zgj5*Cv7-+m46suLa*Su#uRs+JEl${AAMubZQS_OR@aS>*+we}}F6gcmN>-($grai( zHbJDw+c$QGj{H5Mf!Y&d-!RY4Ip^*bE z!7tW6x9hfM|A zi(dyHWTw1Lo>$oi_RHsJbJw~OJ$#hb|K`QqVKGen*P`39H4d{@eyI}OlwLdGbsLAyr|!AbZlp88}#O>SODXU~$Cd#TJS|MNgUi zW+wgU-4%_c1j+clbl9~St9pV#rDEW_zw1U)#=~RwjGpha?8gvyoOVxET7CC zOdng#8p&(|Ye+G2ti#W|vn=#}&7BnUM2~3oBxNcuof`!CgFhOd9u~X68_Xlh)Uz3B z=9p7bexdZcCct|29$G2SU8h^C20obKAf78U6Y=hnHs>@@e7BZ?u{Y_hHWzvQww%nm zN9Ovqz!hiGYW-WJV6R2m+_1&}9fsi$R}L-Top`Mj`Kz(cBnoPhjxNP3O6=>uwGfQ| z@C?R_^(Mv-&uskUEJXjuoJG#T*vQ=Q|Dl>H)peV7j{lvubRsr`s&^Y{HtK+>4cpt; z(OYu&fe6UWpjbEjBtqh=_JmLCu3{3&2juG*r37oCI0(~eEG&565SImPU?fIfzkHP# z)(Iyhs&s0W*Lp6>1Zveqm`dJs=3>Ed4DN!c#WrwJwfYpov7ixY=RrgB! zR^8arbvCDKu52KG^_q5@xVeqdMYh<3D^Mk$nR?J@<|=A^SHHR>CT!)YAJw!;xyI3)GzB;xm0eR zBJzAQ4C3XMC36x%B4vp%DJ_O8h^FITM)5oM1RA*IV zn3MpY6vk#d1K8T}taHBV79Z_i@)YpLSBkQ;f3ofTRq?UkXAKGTvHm~>khZ}`xsYKp z?MLz8l`)&@(Cq@DW=}D(#e)+tLPF34fl}p-t(fvuVNK~SCfR$RFl@mVf+Sz$ri=z^ zO6OtuO*)2{ihtDCGgCSK!4NT{Myn-}8()~-9Qa@)!w2hQf`IVIUUM&JR{Sy;5XA9V z(%Z%bES4Qa*E*v@wQJS;s?(NMy#CBKq^eA>|I-cHV;s)avTDB+cOMB8jCN116gsu0 zr+&F=qHef@TvWLh{7oR$)RTTtb)x`Dy`sWFs3UD++aiD#j55f0;D$tPj+mfC%x9cf z{UDrdOqia&NogFn)6Hq)@C#>qY6!HoHK*~tmC-9zcT2kAK4exxtazEpim61fd}R#G zs4l=V96zSPt6_iZ2Z7u${1!!eXOH9ws~FZVc|Ri_tZ6>zTJyvYRF!IJ;sR4><{?)!J}i zsoc;|IU*A-0g&jhjoim`=y~zP|(Y?MMw)9P}TQw#`&avA$qrEa-oM3g+Q~O1@S+ zqPA7e%qLFG>s8;_qn2dJYnTp;t9XR2YAwrkD$5`hSkCmKK)R-8orA?!eFdRj9K1G9 z8Uzn(pS+p#;13;L)tffoX?1Eu^O{C)7`E5wb6s2Cu>@f$5ahvV&=}y}f>J35G;u3t zw686#J~3~ig#D84A)B!3+1BLZ2sd!!*~ z5irwjV41}IikPJftim}AsfmKGVd|5q0Bk%6s8-eaRj$y#fHj3#RYL5|G8kVDaZWxe zZV#puDDaJC?-J}z4<;IVD4|p5^(L*|iWeyT>r$hJ88auYwEC}W00XCbC#8Ka*SnLS z00x9!zY{RGJ<@Zze@{IoHS2?5=grI!o0=GHe)z`{hC1^v|3;^*HqignO!+d%ZuW5_ zLQE4RLWUD=2aQ~4Z+o4+Z6aQ8d(J$*4}b0-V?-w&xrSb9wdEjhwe=dHwv44Wl85LvE%Tl9qKN&JiAR0roZr@88Vnz|}`RytpZL zYs@&IY}Twz`%*eoz_@N((S7s_%~^0f5}Peg18{7#3b@f0#ZC^Pw+#4|wXP&*josy| zK##He`B9Y|Eufs2MV(ZKnRi{PZpbiqOfITqTe)C=JaZ*-O!WwScg7SnLAIJ^HKCnKo4Zv8GoF% zB{({0qs7y8qB*DCd&yY0=jl7{DQZ5$YmR(PsReCR+ z@PZzN=zaz3*2hbP)oYdWx%aV@1LYrn7gXL05~lI+AVD?d{#^wRnXTJJb`6hf!hZER zt_Mw1!Y5l|8p;k2vx+=rEe~*&cO8PooXW%$7#G2W=$TWYd|1xMgId86nSBeoi_eyX z5V0OzHEAn%R2kz-=nX=N)v4zR<#px%TieXbr-C#GD(>Rh{5e!GhgleZNm=Md0(w@P zFx{wc?vP#xJ)Nc>j_S&o1Ph^;1WFlhvJCrGW=fpfZmhi>E=o^dnS`}DZ9T0uF{U^w zY$nBlfXV48-wNt!rI$BifaD5tG6q$I!h>rf?e=Omc^g_XZJ7R8IvJ z{kHRgSd8k&K5ijYFZg#pv3v55TPKUbwRn9D6gnrgC?1JM{xb26qjrM7w)hKy@_B>N zr3kTRd~nm50S!@Z7k(pPwdDf%r=QSj`<9rIrAFZk5KDi!)+@`-*|!TJ^%_)s(9nh`i6Da@YE!eZY~`nZ}m9EdbWkDzFrRnYG@4smV~*v zWe?*t4HpfQ1+`guyd2?fqO40uPw2cXg0-L>YPJ{%MbjBG;cVb8!VRCK!H8Y_1ac|+ z({2KzUUGtA6ipay^!Cd951KLPW1)#)f^Rqh*NX;~;G}w*#}fkG8YbX~6wyTG?^meQ zR?$b}_?Zb*m!?|lJ$Jwh@LIvebZ%K&*&Ry4Jms&hFh%^%d31h2;Kj?1!P!N^E#4WD z;T>~(Xvy0Qn1+e_7;QPd67BE+C_U}5jHCoXOoT%yn zZ4Hk_E}zg>?8iQy8{H1fQZ;)S*iR}C)*2Np-Qi2{#rlU@EuW(pZIWgIUhGs|R zJe;lXp)y2NjFatlj3S_sQWY=AlqO|!XxCPvpb_0Lw@^%Z40z`at|W6O)y1^0g!e{K zeQke+lMfCL8!GU6T_cO=)cdmoT zSTd#d*a&#XOE16cwJ_Qfl^5lbum*)~-11^B$DS0Nw9W~2@&PFDH)!PWgWuC699nf% z)wk%I2Iy^6L-no1OI6A6y`4Ng5v@6eU1?|)lUG$NFi+fTW`PGlhG?>=Pd?9N2V#cd z>B5J9N{wy*F7XZiX(DI}q*_^1A`yd`ohF~5O%4T5^ih-qq}#Z)Ji(sg9qrgfjQ6kf zE3DA{FS_1=I}~VH){Sl3wr$&XvSQn|ZQC|itQFg~ZQbng#(C$Ai$5`Yc2(C`e{>k+ z=ioXS)%ay@{CyD`jOu&M5)%0}P=7l$-tnMNe@x54%dGZt`d|EL zxzKElyj!ZQm5c!L{S6RKNnYjExcZ~wa&2;@$Pc^Nw%a_f$g<=8LJ~`SbE?R`?i^Ah z!MkR*XZ~}qoT__^c0tfu&ZswcNi;=}oVQNLVwxPu?1YZjCTaW*+J~K++AeV5iR8h; zqk)>OQoa;T=QJ4q792EVHH^8lULmw=VJ)|ctqWL93jiW{!9+>jFFg`VCg>Q0jEDLxKOpV$-DbIFK3;Q{2jI-RCGOYI&SI?bg0ZER3 zmMLh^y8mudRminy2r5#=-JUbQl5*E#kk0QWD%l06L#NUoV&k-e_^~=JrfNqO(T^Vy zDN>d-w7bv!0e*`aboLj0ZSL}gp_q{~Yh=j)uS_RJ^OHQXv^?Ze7(BWqHi}(Kcrp!j zfx5UVhib7~grV0_59Qfs5EKrmIQUu}7`Le{=76XM8SbmGRspV4A9bLc@%j4iGGKW& zx9n+njdZjbUMH)T&&NrGaidsIXL0zK(TRh$-Hmm*`J=JyVlpy=L?0y2bz#@X8Y+0p zH(Yz0kzH9*@4-@xk08%D7FL?nhI5Ye#fVh{#04ZNa}o0ebxVLJv|eGbY<{i~(~<-a z>Zj^}O_P1CHH$y)OQt(1C?YF#tz_rZB{tJH_<1CFr!sHCA-sa3gcnQ{l@U2K0pUmNbh-e-SMF%NyN>~ zZBBl^Ftt0dF{J}lN@%(Y3Yz03-Yu;%)x7N%5YgRaktDLasT{k6cI-Edu?uF5oT9aa zVC}o05xzNK;6e)HO5Z9*CmwW*#^RAy)oDQ+`%e-<6g2fw%c>e8E@hzf)(j-7Z2zfa z_e$%t6YbHeA3Aa(iPfrsN;-&LQA!oHP(vDfgS{P1uh|m2yWtDGAprPOAZ6J2M)i9_ zP(rVW@W{_0AZM3p)E)mv=xNQ{-Ify-@$ZV(8AnJvo85Wsz#Dn(n>p;wjF@WeNdKpw z9qm7RFb*7lqqOcC>+U>%Fx_x0(WFx|Lz)O?dU@e=l;cDBg)<6&6;}WxM^}B2IUy~y zpXrvzWYxy=fL$_Wp<`ThRDN}dnAuxmyO;tAg(@KG2iPIL1PrYp(O>)1r($~1AtR}I zCzE{Jpn0-IXdDO-=@ky|gv9FvAS(b@n6mtp)h#4`N==f5277NIAyu3Bdsz8i0B!VT zRMksJELMxm|2DI?QJ@9nufHw>0Y%x2Tz|i+K)aSD9sO9KA5+=;J;^P7l@%1!#QN@z?jK%XGgIjv5EB}B5-CFt^Ux+T$hjJp2A1d7}@z=OS z>l!KHcvJf)B9Nvc;YAL-PwY^hGSu2Mu}%_sC$4HQXldYK&N01k3?=RHAL|iMGI)4> zxwp&28V_5<3S>h3>e_%eGk@KsP};`WJ6HcB_or`>8?b+V(E5OB!|e>ZpK+bTSyQ)G z2X&SGmkL~BKuF=!<56IQH?0Bjlo)~^qr}P!3T~SnSmp{J9vU=Zl;@HAe`@VaQ{2vF z^cHZ3y;J7j_%LsvW@-*g)2I2PzO=nF%h=rI-}ihB9kQKALs+0@St$ooI;F^m*k?Sp z6C@RscE$$pjBeS6XAjM6)&LH4P1D^jPdP7n&EZZ93Gn&9$AymJ)INpJC(S=pYOCT})Wk)&47rC8(XAL$@)FjD z7k3Bw-;V(3FIz&3IDh^8mmU&}@c(!OT&$h{zh8We`c>3{2*%HLuTlF~d~w?II;fy$ zt$luBz9@$vNh*_U>DHVvSyo2#RK)ic-%Pi0qVtO_`rZ1;*VBv4&6v?&f)1K?4jYN8 zxTv}WCa;I%sY~(#O=5G&*qSlcw7|n=8cjhs-0_*RMkE>faq$rd+LTL4=Ay|eEw;?? z)=F+6RK%yt)v-v841H|1TODL_RwAvAs9FqEy*}Tj?9c3pN?X>4$y|mk)Jq8cs@6pV zdOpXTM1C{lTlM*Kg;`grzjBaU$@YeykL63rG;!j?w%s@;nzu$$H7@E+ly{3`t)}da ze#~k~;P=2PsifG0Oh3ZNfod{<4|(MVW^$s_zi=Pu!^x0pj>ijbc{xcH%E6FxT0XuO z6e*d%c35iwc89Z{qNq>vhl7ISNL81^Mcu_xgjv)N3HTmzQ#u+6eldc+%@K)V;6Q-C zd4Dt;PyJYNp-Wz?Rw$uW2syt2sDKKn`#kNh}2Y-HZV#IsAjcPYnEYi#l9tJk$y&9#&C`s@EhX>8=3oB zoz4`CyscK5@omO7pnWL!zum1Ipg1QL1^XbV3}lJ%TSo~ears8FhP&M-fS+T7`eTP& z2VEv~7j$^ZFBq2fm{&xz&y~FXrAMYC(o#ad^ijMEgC?r>}s`Yhs)X6=^Nt zP1J^j2Da;6jXe^p6H=BeE=Bl;Q3;mLdh`%&*?eHAdSol4uB@$L*)&UP9dys5 z@?JSuF!W6gXzC#5ogQF^DQS&5Xn!%VMqi2*?zE~dbb>3sDZyp?R>P)(f%?~JcCk_r z)CT%FGTkz4>i}qrCm{)N-}k{%gFir`KtDEyx~^=UPtMY&Z3;GUqJ2qD!t@1n4R;N< zThhl59|{%56#$kPkGu{a{2hSb60%`^>)>MtDO32V^WM&%&7(skS946!N)hNtz=JvT zN8?qnB%Ki;zIcsI(+04yJLe^vHz$m%n*LpfOPpEU?}>sqvTizME

5Zc(GJaR9+` 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

u{vb;D~)bk`tvMJQFyV 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 k!2cF-0$ performs much like the lasso, but removes any degeneracies and wild behavior caused by extreme correlations.\n", + "\n", + "The glmnet algorithms use cyclical coordinate descent, which successively optimizes the objective function over each parameter with others fixed, and cycles repeatedly until convergence. The package also makes use of the strong rules for efficient restriction of the active set. Due to highly efficient updates and techniques such as warm starts and active-set convergence, our algorithms can compute the solution path very fast.\n", + "\n", + "The code can handle sparse input-matrix formats, as well as range constraints on coefficients. The core of glmnet is a set of fortran subroutines, which make for very fast execution.\n", + "\n", + "The package also includes methods for prediction and plotting, and a function that performs K-fold cross-validation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installation\n", + "\n", + "### Using pip (recommended, courtesy: Han Fan)\n", + "\n", + " pip install glmnet_py\n", + "\n", + "### Complied from source\n", + "\n", + " git clone https://github.com/bbalasub1/glmnet_python.git\n", + " cd glmnet_python\n", + " python setup.py install\n", + "\n", + "### Requirement\n", + "Python 3, Linux\n", + "\n", + "Currently, the checked-in version of GLMnet.so is compiled for the following config:\n", + "\n", + " **Linux:** Linux version 2.6.32-573.26.1.el6.x86_64 (gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC) ) \n", + " **OS:** CentOS 6.7 (Final) \n", + " **Hardware:** 8-core Intel(R) Core(TM) i7-2630QM \n", + " **gfortran:** version 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)\n", + "\n", + "\n", + "## Usage\n", + " import glmnet_python\n", + " from glmnet import glmnet\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Linear Regression\n", + "\n", + "Linear regression here refers to two families of models. One is `gaussian`, the Gaussian family, and the other is `mgaussian`, the multiresponse Gaussian family. We first discuss the ordinary Gaussian and the multiresponse one after that.\n", + "\n", + "### Linear Regression - Gaussian family\n", + "\n", + "`gaussian ` is the default family option in the function `glmnet`. Suppose we have observations $x_i \\in \\mathbb{R}^p$ and the responses $y_i \\in \\mathbb{R}, i = 1, \\ldots, N$. The objective function for the Gaussian family is\n", + "\n", + "$$\n", + "\\min_{(\\beta_0, \\beta) \\in \\mathbb{R}^{p+1}}\\frac{1}{2N} \\sum_{i=1}^N (y_i -\\beta_0-x_i^T \\beta)^2+\\lambda \\left[ (1-\\alpha)||\\beta||_2^2/2 + \\alpha||\\beta||_1\\right],\n", + "$$\n", + "\n", + "where \n", + "\n", + "$\\lambda \\geq 0$ is a complexity parameter and $0 \\leq \\alpha \\leq 1$ is a compromise between ridge ($\\alpha = 0$) and lasso ($\\alpha = 1$).\n", + "\n", + "Coordinate descent is applied to solve the problem. Specifically, suppose we have current estimates $\\tilde{\\beta_0}$ and $\\tilde{\\beta}_\\ell$ $\\forall j\\in 1,\\ldots,p$. By computing the gradient at $\\beta_j = \\tilde{\\beta}_j$ and simple calculus, the update is\n", + "$$\n", + "\\tilde{\\beta}_j \\leftarrow \\frac{S(\\frac{1}{N}\\sum_{i=1}^N x_{ij}(y_i-\\tilde{y}_i^{(j)}),\\lambda \\alpha)}{1+\\lambda(1-\\alpha)},\n", + "$$\n", + "\n", + "where \n", + "\n", + "$\\tilde{y}_i^{(j)} = \\tilde{\\beta}_0 + \\sum_{\\ell \\neq j} x_{i\\ell} \\tilde{\\beta}_\\ell$, and $S(z, \\gamma)$ is the soft-thresholding operator with value $\\text{sign}(z)(|z|-\\gamma)_+$.\n", + "\n", + "This formula above applies when the `x` variables are standardized to have unit variance (the default); it is slightly more complicated when they are not. Note that for \"family=gaussian\", `glmnet` standardizes $y$ to have unit variance before computing its lambda sequence (and then unstandardizes the resulting coefficients); if you wish to reproduce/compare results with other software, best to supply a standardized $y$ first (Using the \"1/N\" variance formula)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`glmnet` provides various options for users to customize the fit. We introduce some commonly used options here and they can be specified in the `glmnet` function.\n", + "\n", + "* `alpha` is for the elastic-net mixing parameter $\\alpha$, with range $\\alpha \\in [0,1]$. $\\alpha = 1$ is the lasso (default) and $\\alpha = 0$ is the ridge.\n", + "\n", + "* `weights` is for the observation weights. Default is 1 for each observation. (Note: `glmnet` rescales the weights to sum to N, the sample size.)\n", + "\n", + "* `nlambda` is the number of $\\lambda$ values in the sequence. Default is 100.\n", + "\n", + "* `lambda` can be provided, but is typically not and the program constructs a sequence. When automatically generated, the $\\lambda$ sequence is determined by `lambda.max` and `lambda.min.ratio`. The latter is the ratio of smallest value of the generated $\\lambda$ sequence (say `lambda.min`) to `lambda.max`. The program then generated `nlambda` values linear on the log scale from `lambda.max` down to `lambda.min`. `lambda.max` is not given, but easily computed from the input $x$ and $y$; it is the smallest value for `lambda` such that all the coefficients are zero. For `alpha=0` (ridge) `lambda.max` would be $\\infty$; hence for this case we pick a value corresponding to a small value for `alpha` close to zero.)\n", + "\n", + "* `standardize` is a logical flag for `x` variable standardization, prior to fitting the model sequence. The coefficients are always returned on the original scale. Default is `standardize=TRUE`.\n", + "\n", + "For more information, type `help(glmnet)` or simply `?glmnet`. Let us start by loading the data:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Jupyter setup to expand cell display to 100% width on your screen (optional)\n", + "from IPython.core.display import display, HTML\n", + "display(HTML(\"\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "# Import relevant modules and setup for calling glmnet\n", + "%reset -f\n", + "%matplotlib inline\n", + "\n", + "import sys\n", + "sys.path.append('../test')\n", + "sys.path.append('../lib')\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", + "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", + "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", + "from cvglmnetPlot import cvglmnetPlot; from cvglmnetPredict import cvglmnetPredict\n", + "\n", + "# parameters\n", + "baseDataDir= '../data/'\n", + "\n", + "# load data\n", + "x = np.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = np.float64)\n", + "y = np.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = np.float64)\n", + "\n", + "# create weights\n", + "t = np.ones((50, 1), dtype = np.float64)\n", + "wts = np.row_stack((t, 2*t))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As an example, we set $\\alpha = 0.2$ (more like a ridge regression), and give double weights to the latter half of the observations. To avoid too long a display here, we set `nlambda` to 20. In practice, however, the number of values of $\\lambda$ is recommended to be 100 (default) or more. In most cases, it does not come with extra cost because of the warm-starts used in the algorithm, and for nonlinear models leads to better convergence properties." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "# call glmnet\n", + "fit = glmnet(x = x.copy(), y = y.copy(), family = 'gaussian', \\\n", + " weights = wts, \\\n", + " alpha = 0.2, nlambda = 20\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can then print the `glmnet` object." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\t df \t %dev \t lambdau\n", + "\n", + "0 \t 0.000000 \t 0.000000 \t 7.939020\n", + "1 \t 4.000000 \t 0.178852 \t 4.889231\n", + "2 \t 7.000000 \t 0.444488 \t 3.011024\n", + "3 \t 7.000000 \t 0.656716 \t 1.854334\n", + "4 \t 8.000000 \t 0.784984 \t 1.141988\n", + "5 \t 9.000000 \t 0.853935 \t 0.703291\n", + "6 \t 10.000000 \t 0.886693 \t 0.433121\n", + "7 \t 11.000000 \t 0.902462 \t 0.266737\n", + "8 \t 14.000000 \t 0.910135 \t 0.164269\n", + "9 \t 17.000000 \t 0.913833 \t 0.101165\n", + "10 \t 17.000000 \t 0.915417 \t 0.062302\n", + "11 \t 17.000000 \t 0.916037 \t 0.038369\n", + "12 \t 19.000000 \t 0.916299 \t 0.023629\n", + "13 \t 20.000000 \t 0.916405 \t 0.014552\n", + "14 \t 20.000000 \t 0.916447 \t 0.008962\n", + "15 \t 20.000000 \t 0.916463 \t 0.005519\n", + "16 \t 20.000000 \t 0.916469 \t 0.003399\n" + ] + } + ], + "source": [ + "glmnetPrint(fit)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This displays the call that produced the object `fit` and a three-column matrix with columns `Df` (the number of nonzero coefficients), `%dev` (the percent deviance explained) and `Lambda` (the corresponding value of $\\lambda$).\n", + "\n", + "(Note that the `digits` option can used to specify significant digits in the printout.)\n", + "\n", + "Here the actual number of $\\lambda$'s here is less than specified in the call. The reason lies in the stopping criteria of the algorithm. According to the default internal settings, the computations stop if either the fractional change in deviance down the path is less than $10^{-5}$ or the fraction of explained deviance reaches $0.999$. From the last few lines , we see the fraction of deviance does not change much and therefore the computation ends when meeting the stopping criteria. We can change such internal parameters. For details, see the Appendix section or type `help(glmnet.control)`.\n", + "\n", + "We can plot the fitted object as in the previous section. There are more options in the `plot` function.\n", + "\n", + "Users can decide what is on the X-axis. `xvar` allows three measures: \"norm\" for the $\\ell_1$-norm of the coefficients (default), \"lambda\" for the log-lambda value and \"dev\" for %deviance explained.\n", + "\n", + "Users can also label the curves with variable sequence numbers simply by setting `label = TRUE`. Let's plot \"fit\" against the log-lambda value and with each curve labeled." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "image/png": "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\nBMgAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "glmnetPlot(fit, xvar = 'lambda', label = True);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now when we plot against %deviance we get a very different picture. This is percent deviance explained on the training data. What we see here is that toward the end of the path this value are not changing much, but the coefficients are \"blowing up\" a bit. This lets us focus attention on the parts of the fit that matter. This will especially be true for other models, such as logistic regression." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "glmnetPlot(fit, xvar = 'dev', label = True);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can extract the coefficients and make predictions at certain values of $\\lambda$. Two commonly used options are:\n", + "\n", + "* `s` specifies the value(s) of $\\lambda$ at which extraction is made.\n", + "\n", + "* `exact` indicates whether the exact values of coefficients are desired or not. That is, if `exact = TRUE`, and predictions are to be made at values of s not included in the original fit, these values of s are merged with `object$lambda`, and the model is refit before predictions are made. If `exact=FALSE` (default), then the predict function uses linear interpolation to make predictions for values of s that do not coincide with lambdas used in the fitting algorithm.\n", + "\n", + "A simple example is:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "any(fit['lambdau'] == 0.5)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.19909875],\n", + " [ 1.17465045],\n", + " [ 0. ],\n", + " [ 0.53193465],\n", + " [ 0. ],\n", + " [-0.76095948],\n", + " [ 0.46820941],\n", + " [ 0.06192676],\n", + " [ 0.38030149],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0.14326099],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [-0.91120737],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0.00919663],\n", + " [ 0. ],\n", + " [-0.86311705]])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "glmnetCoef(fit, s = np.float64([0.5]), exact = False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The output is for `False`.*(TBD) The exact = 'True' option is not yet implemented*. \n", + "\n", + "Users can make predictions from the fitted object. In addition to the options in `coef`, the primary argument is `newx`, a matrix of new values for `x`. The `type` option allows users to choose the type of prediction:\n", + "* \"link\" gives the fitted values\n", + "\n", + "* \"response\" the sames as \"link\" for \"gaussian\" family.\n", + "\n", + "* \"coefficients\" computes the coefficients at values of `s`\n", + "\n", + "* \"nonzero\" retuns a list of the indices of the nonzero coefficients for each value of `s`.\n", + "\n", + "For example," + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[-0.98025907]\n", + " [ 2.29924528]\n", + " [ 0.60108862]\n", + " [ 2.35726679]\n", + " [ 1.75204208]]\n" + ] + } + ], + "source": [ + "fc = glmnetPredict(fit, x[0:5,:], ptype = 'response', \\\n", + " s = np.float64([0.05]))\n", + "print(fc)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "gives the fitted values for the first 5 observations at $\\lambda = 0.05$. If multiple values of `s` are supplied, a matrix of predictions is produced.\n", + "\n", + "Users can customize K-fold cross-validation. In addition to all the `glmnet` parameters, `cvglmnet` has its special parameters including `nfolds` (the number of folds), `foldid` (user-supplied folds), `ptype`(the loss used for cross-validation):\n", + "\n", + "* \"deviance\" or \"mse\" uses squared loss\n", + "\n", + "* \"mae\" uses mean absolute error\n", + "\n", + "As an example," + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "warnings.filterwarnings('ignore') \n", + "cvfit = cvglmnet(x = x.copy(), y = y.copy(), ptype = 'mse', nfolds = 20)\n", + "warnings.filterwarnings('default')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "does 20-fold cross-validation, based on mean squared error criterion (default though).\n", + "\n", + "Parallel computing is also supported by `cvglmnet`. Parallel processing is turned off by default. It can be turned on using `parallel=True` in the `cvglmnet` call. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Parallel computing can significantly speed up the computation process, especially for large-scale problems. But for smaller problems, it could result in a reduction in speed due to the additional overhead. User discretion is advised.\n", + "\n", + "Functions `coef` and `predict` on cv.glmnet object are similar to those for a `glmnet` object, except that two special strings are also supported by `s` (the values of $\\lambda$ requested):\n", + "\n", + "* \"lambda.1se\": the largest $\\lambda$ at which the MSE is within one standard error of the minimal MSE.\n", + "\n", + "* \"lambda.min\": the $\\lambda$ at which the minimal MSE is achieved." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.07569327])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cvfit['lambda_min']" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.14867414],\n", + " [ 1.33377821],\n", + " [ 0. ],\n", + " [ 0.69787701],\n", + " [ 0. ],\n", + " [-0.83726751],\n", + " [ 0.54334327],\n", + " [ 0.02668633],\n", + " [ 0.33741131],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0.17105029],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [-1.0755268 ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [-1.05278699]])" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cvglmnetCoef(cvfit, s = 'lambda_min')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-1.36388479],\n", + " [ 2.57134278],\n", + " [ 0.57297855],\n", + " [ 1.98814222],\n", + " [ 1.51798822]])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cvglmnetPredict(cvfit, newx = x[0:5,], s='lambda_min')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Users can control the folds used. Here we use the same folds so we can also select a value for $\\alpha$." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [], + "source": [ + "foldid = np.random.choice(10, size = y.shape[0], replace = True)\n", + "cv1=cvglmnet(x = x.copy(),y = y.copy(),foldid=foldid,alpha=1)\n", + "cv0p5=cvglmnet(x = x.copy(),y = y.copy(),foldid=foldid,alpha=0.5)\n", + "cv0=cvglmnet(x = x.copy(),y = y.copy(),foldid=foldid,alpha=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are no built-in plot functions to put them all on the same plot, so we are on our own here:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAElCAYAAADtFjXiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXmYFNXVuN8zCyAgW0AQNTOACuLCEhfUqKOgkp8RFBPj\nEgUSl0+NgIa4RMgwavxMYkSDUaMxojFq4sYSPxEXBjQiijAii7jQMyAKYpBVBGbm/P64VT01Pb1U\nd1dP98zc93n66a7t3FvVp+reOvecc0VVsVgsFkvLIy/bFbBYLBZLdrANgMVisbRQbANgsVgsLRTb\nAFgsFksLxTYAFovF0kKxDYDFYrG0UGwDAIhIjYgsEZHlIrJURK4XEcl2vVJBRMaJyEoR+XvE+lNE\nZItznktFZG6Gyn9UREZlQrYleaxuB1p+s9PtgmxXIEfYqaqDAUSkK/AU0AGYkq5gEclT1dp05STB\nVcBQVf08yrYFqjoi1oEikq+qNZmrmiULWN3G6nYs7BtABKr6FXAF8AswSi4ivxeRRSJSISKXO+tF\nRO53eiQvi8iLbu9AREIicqeILAZ+JCK9ReQlEXlXROaLyKHOfl1F5FlH9iIROd5Zf4rTk1kiIu+J\nSLvIejo9uQ9EZJmIjHPWPQD0Bl4SkfFRTq9Bz8/p1TwgIm8DvxORtiLyiIi87ZQ9It51cLbdJyKr\nnJ7Xfp71Q51zeF9E/ioihZ7rc4dzju+IyCARmSMiH4vIlcn/axY/WN22ut0AVW3xH2BblHWbgW7A\n5cCvnXWtgHeBIuA84N/O+u7O/qOc5RAw0SPrVaCP8/tY4DXn9z+AE5zfBwErnd+zgOOd322BvIi6\nDQbeB9oA7YDlwABn2xqgc5TzOQXYAixxPjc76x8FZnn2+y1wkfO7I7Aa2CfOdTgXeNlZvz/wNTAK\naA2s9Zz3Y8A4z/W5wvl9N1DhnGdXYEO29aE5faxuW92O97EmoMScARwpIj92ljsAhwDfB54BUNWN\nIjIv4rh/Ajg9nBOAZ0TCttdC53sYcJhnfXsRaQv8B5gqIv8AnlfV9RGyvw+8oKrfOmU8D5yEuXGE\nKL0hh1ivyc9EnO/ZIvIrZ7kV8N041+FkjFkBVf1CRF5ztvcF1qjqp87yY8DVwJ+c5dnO9wdAO1X9\nBvhGRL4VkQ6qui3GOViCw+p2C9dt2wBEQUR6AzWquslR4GtV9ZWIfc5KIGan850HfK2OHTayKOA4\nVd0bsf53IvJv4CzgPyJyhqp+lPyZ+GZnxPJ5qvpxvYr6vw4S43cku53vWs9vAMXqZcawum1124sd\nAzCE/0wR6QY8AExzVr0MXC0iBc72Qzw9mR859tLuQEk0waq6HQiJyI88ZRzl/JwLjPesH+B891bV\nFar6e8zraL8IsW8A54hIG6cXdi6wIKUzb8jLwDhPnQZ61ke7DguAnzh21P2BU539VwNFzgMH4BKg\nPKA6WvxjdbsOq9sR5FRrlEXaiMgSzCvhXuBxVZ3qbPsrUAwscXoKXwLnAM8BpwErgHXAe8BW55jI\nFKsXAw+KyCTMNX8aWIa5Qf4sIu8D+RiFuxqYICKnAjWO/Je8wlR1qYhMx9xACjykqstilJ2IyP1v\nB+4RkWWYh0cIGBHrOqjqCyLiXoe1wFtOHXeLyFjgWRHJd+r6Fx91tOlpg8Xqdh1WtyMQZ7DCkgIi\n0k5Vd4pIF2ARcKKqfpntelks6WJ1u2Vg3wDS498i0gkz8HWrvUEszQir2y0A+wZgsVgsLRQ7CGyx\nWCwtFNsAWCwWSwslJxoAETlQRF4XkRViQsDd8O/OIjJXRFaLCUnvmKTcR0RkozPq7647SkTeEhPC\nPVNE2qdQ38aU+3sxoegVIvKciHRIVm5EGdeJSQy2TET+ISKt0pHnyDxU6sL7l4rIVvc/TFNuVL3I\nVbnJlJWKbgcsKzAdjiHraUcflohJj7DEj6wossc755r2/xSk7otIRxF5xrk3V4jIcSnKCUwXU5KV\n7VBkZwyiBzDQ+d0e42fbD/gdcIOz/kbgziTlfh8YCCzzrHsH+L7zewxmgCvZ+jam3GE44fLAncD/\npnGde2LC6Vs5y/8ELg34v8wDPgcOypRe5KrcZMpKRbcDlhWYDkeTFbH9LmBSCtfucIxLaWuMK+lc\noHeK/0Ogug9MB8Y6vwuADtnWxVRkBa7wQXyAGc6D70Ogu+fkPkxBVlGEkn/t+X0gsCLFOjaK3Iht\n5wB/T+O69gSqgM6O0s4GhgX8350BvJFBvRjaVOTGKSso3U5LVpA6nEBvw3lzkjy/HwEPe5Yn4clD\nlKSswHQfkyri0wzqRyC66EdWTpiAvIhIMaY38TZGqTcCqOoGPNn40mCFOFkAgfMxih4EmZLr5WdE\nBM4kg5o0un/E3JDrgS2q+mpAdXP5CU7+lCDx6MWipiA3QVlp63aG7pPAdVhETsIkQfs04c4NWQ6c\n5Ji42gL/D5NYLmkC1v1ewFdiso0uEZGHRGSfFGWFCVIX/crKqQbAsTk+C4xX1R00jJwLwmf1Z8A1\nIvIuJtvgngBkZlIuACJyC7BXVZ9MQ0YnYCSmt9YTk6DrooCqiJiUuCOon4ArCLmRepHTcn2WlbJu\nZ/A+yYQOX0iKHQJV/RBj3noF+D9gKSaCOGkC1v0CTNbSP6vJg/QNcFOKstz6BaaLycjKmQZATB6O\nZzEmjpnO6o1icpEgIj0wIdppoaofqeqZqnoMJmw9lZ5Jo8kFEJExmN5Pug/rYZgshpvVTI7xPCab\nY1D8AHhPVTcFJTCGXuSs3CTKSkm3M3mfBK3DYtIkjMLJHppinR5V1aNVtQST8jnVxHFB6v5nwDpV\nXewsP4tpEFIiSF1MVlbONADA3zA5w+/1rJuFGYwCGA2kcnHqpZAVkxALEcnD2BQfTKWyjSh3OPAr\nYISq7o55lD/WAkPEJNoSYCiwKk2ZXlLu7cUhml7ksly/ZaWq20HKClKHo6VqPh1YpdFn8PIntK5O\n38Ukhkv1DTgw3XfMbevEmfzGkbUyxXpBsLqYnKxMDGSkMFhxIubVrgLzmrcEGA50wUw4sRrjAdAp\nSblPYjxSdmMUYCwmG+BqzMDZHSnWtzHlfowZvHInu7g/zWtdilH8ZZg85oUB/YdtgU3AvpnWi1yV\nm2ndDlhWYDocTZaz/lGcyVHSuH4LMGMBS4GSNGUFpvvAAEwSuArM20THbOtiKrJsKgiLxWJpoWTU\nBBQjQCSt4C6LJRewum1pDmR6DOBR4MyIdTcBr6pqX+B14OYM18FiyQRWty1NnoybgESkCJitqkc5\nyx8Cp6iZa7QHUK6qkbMCWSw5j9VtS1MnG15A+2nwwV0WSy5gddvSpMgFN1A7Cm1prljdtuQ02ZgR\nbKOIdPe8JscMWhERewNZMoqqRvqup4PVbUvO4Ee3474BiEieiJyfZj0iA0SSClpJx+831mf06NFN\nQqZfuZCa3FSOay7XtqYmpYwCOanbQV6fXJPl6mgyshLpda6dYyZk+SVuA6CqtcANvqVFICJPAm8B\nh4rIWhEZi0lpfLqIrMZE0N2ZqvxUKS4ubhIyrdzMyczLS8/6mUu6HeT1sbKahyy/+DEBvSoiEzH5\nPHa6K1V1c6IDVTVW7pph/qpnsWQWq9uWloyfBuAnzvc1nnUK9A6+Oo1Dp06dmoRMK9efzMrKSior\nK8O/3Z5UcXGxn17VNTRx3Q7ymltZ2ZNVW1tLeXk5kJIep0TCBkBVe2Wk5CwycODAJiHTr9zS0tTk\npnKcH7mNLdN7g5SVlTFmzBjfspuDfgd5zXNNlqujychKpNe5do4up512GiUlJUDyepwqCQPBnBzv\nVwEnO6vKgb+o6t7MVs14SiQzoGGxlJWVUeqzZTNJIRmP1W1LjpGMHkdDRFAfXkB+TEAPAIXA/c7y\nJc66y1KuncWSO3wPq9uWLBLLhOn9nSn8uEIco6qjVfV15zMWOCajtcowrp0t12VaufFlVlZWUl5e\nTnl5OdOnT69nP/VLc9DtIK+5ldX4soqLi8Omn6qqqvDvxvAK8tMA1IhIH3dBRHqT4rRsFkuQuDdO\nSUlJyjeO1W1LS8aPCehXwDwRWYMJeinCTB7RZHEfFLku08rNnEwPTV63g7w+VlZ2Zc2fPz8weX5I\nGAkM7AIOwcwWdC3QV1XnNULdLD6ZMqVxj8tFtmzeTNlPf8qn06dT9tOfUhUKxd2/trbW/Wl1O4dJ\nRUebkl5HmjG3bN7M1cOG+dbjtPERUrw0qPDkFMKZNRPMmzevScj0KzeVyzRv3ryUjvMjt7FlVq5Z\no2M7d9YdoAq6A/SXffpo5Zo1cY9z9KvJ63aQ1zzXZLmXKRlZiS5trp2jy3mjRqWkx9Hwq9t+xgBe\nE5HznImULZacY/rkyUz7+mvaOcvtgLJPP2X65MkJj7W6bckFqkIh1rz8Mj2//pq7MJOAJ6PHqeIn\nDmC7U5dq4FuMrVRVtUPGalVXtiaqnwVETJehsY7LNpFuc0vuvZc/VVQ02K/01FMpe/31mHKc575i\ndTtnSUVHm5peV4VCTDv9dMo+/ZR2mJwkpRibZBGJ9TgafuMAEo0BCHC4quapaitV7aCq+wZxg4jI\ndSKyXESWicg/RKRVujItLQOv98/7S5eyfssWJgFlmJ4TmJsor2fPmDLch6/VbUu2mT55cvjhD07P\nH5hOYj1Ol0TZQBV4MehCRaQnpoEbrGY6vQLggqDLiYWNA2hacmPJrAqF2Pr3v/N4ZSW3AxOBacAq\noLRPH8bcdltMmZmy+mRDt3PNr93KSo7a9etphwlDd2kH7CWxHqeLHzfQJSJyjKq+G3DZ+UA7EakF\n2gKfByy/xZBqxHgmcgE1JlFt/8ClxcXc/corFPVKnObH6nZuk4qONgW99poxQ99+W5eK1mEnsCoJ\nPU4VP2MAHwIHY96ud1JnJz0qrYJFxgG/Bb4B5qrqJVH2sXZSS0xKTz2Vsig9ML82U+ctoAar25Ys\nctmYMWx89lkG7NxJIXA+8IfOnSl9772UH/5B5gI6M6UaxEFEOgEjMWMcW4FnReQiVX0y6LIszZe8\nAw5gJ4TfACAlm2mfxLv4x+q2JRmqQiFqZ83i6Z07wwPA17ZvT96IERnt+bvEbABE5DQ1+VGqRKSX\nqoY820ZRN96WCsOANepMvCEizwMnAA1ukjFjxoRD+zt16sTAgQPD0Xeu/S3ZZXddqsdHW46Una48\nd7miooIJEyYEJq8p1jeyzu72vmedxdnPzGH2nv/SDngJ+FP79jzo2Ewj97/nnnuoqKhAVelVd3Pl\nNXXdDvK/jJSZK7pwzz33BHLv59r1mv/XvzLt6695F6gAJgDTduzgBwsWUF5entT1qaioSD5/UKwA\nAWBJtN/RlpP9AMcCHwBtMK/d04FrouznP/IhCZpbIFhzlxtNZuWaNTrl4ov1tILB+v96FOuoAw7Q\nKRdfrBPGjUsob9CgQapqgmWag27namCTlZWY35SUmMg10HnOt4JeUlycllx8BoLFHAMQkaWqOijy\nd7TlVBCRUox3xF5gKXCZRuRht3ZSixd34GzDF1/w+vjxTN20qe612bGZTn/88YR51AcNGsTSpUvd\nMYAKq9uWxiIyhuWdJ57gD6+91sCMeemRR/LcsmUplxNEHIDG+B1tOWlUtUxVD1PVo9Sk5M34JBzN\nlZaSC8j1/1/94ovhhz+YMYBpX3/tO2IywgXU6nYO09xyAUXGsLRr145LaM1k6jwRSvv04bunntoo\n9YnXAPQWkVkiMtvz211u0tPoee13uSzTr9yystTkpnKcH7mZlun6TXtpB/x35UqKioood5JrxZoX\nYM2aNYwYMcJdbPK6HeQ1zzVZro4mIyuRXufCOboxLFNmzeJ5dnMTcFleHj869FCOvu02BgwalFCP\ngyCeF9BIz++7IrZFLlssjUYs75/v9O/vax7VmTNnAjB79myor+dgddvSCESLYbm+tpa/tm7NBRde\n2Gj1SBgHkE2sndQfLS0XUFUoxA0DBvK37dsajAEk4zrn106aCaxu+6O55gKKFcNyRb9+XPTAA4Ax\nF6U6K1iQcQAWS85QFQoxffJkNraBHxR0oVvbfejerx/9zziDUFUVoaqqtG4ciyUTeAd/F7/zDotX\nrWISZrL1MZigkZ3AAd/7Xti1s1Hw4yqUrQ/WDdTOB6CqTz31lM6bN0+fevJJvbxbt3r50sd27pxS\nvnRV/65ymfgEqdu55NYYtKzmNh9A1LkrQFeCDm/fPmVdjsSvbvuZD8CS4zT3XEA9evQIxPvH0vRo\nbrmAYuWvmlRcTLszzmiU6F8v8eIAZhPHJU5VR8TaFhTWTmrxkm7uH5ezzz4bEXEHgWdHbre6bckU\nsXR43KBBDB43Lmy6TNeMGcQYgOsNMQroATzhLF8IbEy5ZhZLigSU+4eJEycCYS+gXVjdtjQS6Xqw\nBU4iGxGw2M+6THywYwBWrkdm5Zo1enG77hkdA2iKup1rdnsrqz6hUCg8hnX+wIH6o7xCnQRaGaHD\nQdYrmm5H+/jxAmonIr1VdQ2AiPSCBnE4FkvguJ4TFRUVLH7nHdbMncummh6c3aGAzvsSiPeP1W1L\npikuLkZU+fdll/E3z7SP/1NQQNezzqJjURFFvXoRqkonB2Fq+JkPYDjwELAGk9yqCLhSVV/OeOWs\nndSCcf0s+973woNnqfr9R+KkhFiH1W1Lhin76U+Z+I9/NDD93HXxxXDIIQnzVyVLIHMCA6jqHOAQ\nYDwwDujbGDeIxT/NPRdQNM+JAL1/rG7nMM0lF1C66UsyRcIGQETaAr8CfqGq7wPfFZEfpluwiHQU\nkWdEZJWIrBCR49KV6RebC6hp5QJas3x51Jun9vNAZlps8rqdC7ltMiWrueQC2taxI5OBUozbp5v4\nzR38dYO/GjuA0c8YwKPAe8DxzvJ64Bng32mWfS/wf6r6YxEpwMydarE0QLp1C8T7JwZ7sLptyQDe\n9OXb33iD2yFswpwMrO/Qgd9ncMJ3P/gZA1isqkdHzA/wvqoOSLlQkQ7AUlWNOx2ftZP6o7nlAooM\nm18xcyZb336bw2truQzoSnBjAKoqVrdzl+aQCyiW/f+Cvn2Z/eGHGSkzyFxAe0RkH5ygMBHpA+xO\ns369gK9E5FFgALAYGK+qu9KUa2kGuN48VaEQj48axX2ewd//KShAjjmGo845J5DcP1a3LZkmlv1/\nf5GwCSlb+av8NAClwBzgIBH5B3AiJn9RuuUOxkyVt1hE7gFucsqqh50TOPG8qpB6fcvLc3dO4NIr\nruAnznypJcC7wEXV1bzTuzcTb7ih3s3jR16MeVObvG4HqXuRMrOtC65uN+U5gfMOOICXgH3CZ2Pm\nr95z4IH19p8xY0bK1yvwOYGd11MBDgK+A5wF/BDo6ifAIIHc7piJs93l7wOzo+yXahxEXJpbIFhp\naWpyUznOj9ygcOdL9c6VqqC/OfXUtGXX1ta6cwI3ed1uykFSiXB1NBlZifS6Mc+xcs0anThihJ4r\n+fWCv37Zp0+DAMZsBIL5GQP4QFWPTK5ZSYyIzAcuV9WPnDlU26rqjRH7aKL6WZonVaEQ1592GodV\nVjZImXvXxRdT+sQTcY/3Q6bmA7C63bKJN3f1/xQU8FXv3jw4Z05GE78FOQawRESOUdV3A6iXl3HA\nP0SkEBOIMzZg+ZYmRuSN87jnxikFfg78oXNnSgP0nLC6bQka155f9tOfNshe+2B1NVd16ZIzc1f4\nSQd9HLBQRD4VkWUi8oGIpD5dvYOqvq+qx6jqQFUdpapb05XpF6/9LpdltjS5sSZ9fxfjOz2xe3f6\n33QToaoqyoMLmmnyuh3kf2llBScr1uBvr332ocSZGN778M/UPRkPP28AZ2a8FhaLh1g3ztH9+zPx\nhhuCLi6uu6bFkipBZa/NJL7nBBaR/YA27rKqrs1UpTxlWjtpCyRe3pQgbP8unjgAq9uWQKkKhbhv\nwgTWzJ5Df90TaPyKHwLLBSQiI0TkYyAEzAcqMV5MlhyhOeUCqgqF2LF9O5fmFTCZupD5azt3ZkwG\noiatbuc2TSkXUGVlJeXl5Tz91FP89rjjmDJrFs/pHm4CJhUUcNXxx2fChJkeidyEgPcxrnJLneVT\ngUf8uBil+8G6gbaIOYG9+dIj5/z9aUGBnt6/v/7hd7/TefPm6bx58zQUCgVSV+rcQJu0buea62aQ\nsprinMBTLr44rMPq0eUpF1/caPUiwPkA9qrqf0UkT0TyVHWeE9xisQRCIq+Ja3r2zITtHwCr25ag\niTWGFVDywkDxEwfwKnAO8L8YM9aXwDGqekLGK2ftpL5oLrmAgprz1y/OfAD7YnU7Z2lquYAaI37F\nD4GNAQAjMfOmXocJm/8UODu96lks9akKhVheWckk6tLlQqN4TVjdtgRCVSjEtNNP5/HKSm4HJgLT\ngFXAdd260fess3LH9u/ix06UrQ92DKBFjAFUrlmjv+zTp57t/5egK0Ev79ZNJ0+aFKjt3wWfdtJM\nfILU7Vyz2wcpqymMAbhjWFcNHRrV9j+quNjXvNU5OQYgIttxsiUCrYBCYKeqdshMk2RJllRnkwt4\nFrqkcSN//3X77fzBmSsVjL20DLi0uJi7X3+dUFVVOOlV0IjINuen1e0cJBUdbWy9dsew5pWVRbX9\nH9GrV8bdPlPFdxwAgBij6UhgiKrelLFa1ZWnydTP0jRpbNu/i9dOanXbki6NFb/ihyDHAMI4bxcz\nsNHBlgBxIya9NHbEpNVtSzq48StjGil+JSj8BIKN8nx+JCJ3At8GUbjjfrdERGYFIc8vNhdQ7sgN\nB37RKuaNk8kcKc1Bt5tinpzmIuvpp5/m6aee4vff/z5TZs3imdrqlAO/cjUXkNcrohoTLTkyoPLH\nAysBa3NtQSRKlxs549eGDRsyWR1Xv61uW5KmR48ezP/rX/n95583iF+5y5m4KKfxM1KciQ9wIPAK\nZpKcWTH2SXcw3JLDpBoxGRRkyAvI6nbLwp24KPITxMRFqeJXt/14Af0pQQMyLsW2ZyrwK6Bjisdb\nHKZMST1nSjbzAeVCxGQ8/ba6nX1S0dHG1uttHTsyGWNPz8MEf3Ult7J+xsKPCagN0B/4p7P8Y8yr\n7cJUCxWRs4CNqlohIiWYqSejYucETjyvallZCVOmJF/fsjIoKcnOnMBVoRDzVq1iDXAw5qYJYaKy\n3Bsn6P8rxrypg2niuh2k7kXKbAxdiLfs6nYycwIbvY69PYjr9fTTT7NhwwY2//e/bH/jDc7AzPl7\nDDAZeL99e07s1Yvy8nKKi4vD9v9MXa+MzAls3iR4GyjwLBcCb/t5vYgj8w5gLWa2pC+AHcDjUfbL\nyOuRDQTLbiBYosCvp558sl7gV6auLSa+pcnrdq4FbwUpK9cDwUYPGxbVjDlxxIikZeXqnMCrgeNV\ndbOz3Nm5Sfom19TElH8K8EtVHRFlmyaqn6Xp5AKqF/j12msN/KXdwK/GCppxcgF9x+p27pLLuYCq\nQiGuGzKEI7/8Mmz6KXK2ZTqGJRFBzgl8J7BUROZhXmdPBqakVz1LSyRHIyatbluSxs378/cvv6w3\nb/W1GPv/prw8Kisrszrfrx8SxgGo6qOYeYFfAJ7DvA08FlQFVHV+tB5SJsmEv20mZDZHuakkfctU\nXR2avG4HeX2srPi4k7787vLLKfv0U9511rvpS/4KlPbpw40PP5z0wz/Deh6VmA2AiBSJSEcAVd0A\nbAOGAheJSKtGqp/FB00lF1CuZEusqqpi61YzT7vV7dwm13IBFRcXU1JSQreamqhvsVXdu3PtK6/k\nbO6fSGKOAYjIIuBcVf1cRAYCr2Lyph+FmSTmsoxXztpJmwW5Zvs/7rjjeOGFFzjggAMABmF125IE\nuZLzPx5BjAHso6quQ/ZPgb+p6h9FJA+oCKKSlpZBcXExosqGDz7g91BvwCwbtv9du3bRs87cZHXb\n4hvvW6zX9v9zYGq3bpzmvMW64125TrwxAG/rcRrwGoCq1ma0Ro2AHQNoXLneAbMy6kw/bt6fRAEz\nQdc1oufd5HU7V+zjzVlWpO3ffYt9F2P7n1RczC2LFnHBhRdSUlKS0sM/G2MA8d4AXheRf2F8mTsD\nrwOIyP7Ankaom6WZMH3y5Ho3jTtgdiewMQu9ptNOO43zzz/fXbS6bUlIrLdYyP2c//GINwYgwE+A\n/YF/qep6Z/0gYD9VfTnjlbN20iZNZWUlby9cyBPXXMP3vv66ga/0pd27c9vChY1+46gq//znP7nw\nwgsBDrS6bUmE+xbrdmQi3T5/NXQo50+alDOmH79jAMlGOf4wmf3T/WATZvmitLRxj/NLrIjfykZO\n+hYLPNGSVrdzk1R0NGi9DoVCesnxx+sk0N+ATvHo8CTQX/bp42vKx8YEn5HAySrtkmT2T/eTqZvE\npoLIbCqIRHOkToqR8iGezEwQ0QA0Wd3OtfQNQcrKhVQQlWvW6Ng2baJ2ZE7v3Dmwh39Ozgkc+WaR\n5P6WFkgir5+qLJl+EmB121IPr/vytG+/jTqGtU+vXoSqqlCRnDD9JEuycwIfq6rvZLA+keVpMvVr\nqeRaLqBE9tJc9JW2up2bZDsXULx8Pxe3acMdK1fmWkcG8D8G4KsBEJETgGI8XkOq+ng6FfSDvUn8\nkSsNgDvo+/frrmPQxo0NgmTCXj/33kuP/ffP+oCZkwzuRKxu5yzZaABcPX75vvv45p13OLS6mssw\nnRdvR2bKiBH8YebM1AvKIIFNCi8ifwfuAr6PSXd9DHB0mpU7UEReF5EVIvKBiKQ68UZK2DiAzMgV\nVV6YOJF/bdxYL9VDFXWmn1R8pTPsH93kdTvbPvLNTZaosnjyZO576y3+WW3m+J0GfEVdvp8bevbk\nexdcwNNPP91o9coEfsYAjgb6B9xdqQauVzNpRnvgPRGZq6ofBlhGiyHbuYC8Pf8uGzdyF3U9/zLM\nE3Yi0P6II3LRXnqi1e3cpbFzAXnTPETT41KcMaw336TImfClSZNolBh4Btjfz4hyqh9gBjA0yvp0\nBsItjUQ8d08FvSWHXeWsbltc3liwQK/u2TOmHv/GWXfV0KG+vNeyCQFOCDMPGAi8A+z2NByBpLkV\nkWKgHDhN6keOAAAgAElEQVRCVXdEbNNE9bNkj0Q2f7fnf3737lwydSpDjj8+l3r+7hjAFqxut3gq\nKyv5zUUXUbRwYYO5fV09vhPY1adPk8j2GVggGHBKtI+f1sWH7PbAYmBkjO0Bt4uG5hYHkA25lWvW\n6MQRI/SiNm10kicw5vwM9PwzPCVkk9ftXPPdb2qyXF3+sUg9XXZ7/7eAXlJYqJccf7w+9eST9Xr+\nuXqOBBUHoKrzfTY6SSEiBcCzwN9VNeZQeqYmhU/n+MZcrqioyKn6bPjiC97429/YvGABBXv2cDZw\nNsY2ejRmhvXpmB7Tq507c8aFF6Kmp531/yvaxNmZ0O9s6nYu3RtB6m5FRUXg5xupy6Oor8tDMQO+\nS7t353uXX07/ww/nggsuyMnrleqk8H5MQEMwg+CHAa2AfGCnqnZIqqSGch8HvlLV6+Pso4nqZ2kc\nqkIhfn/FFWxesICD9+yJ6hbnDpJNAr5tAq/KjgloMVa3WxRVoRD3TZjA53Pn0vvbb+Pqci77+scj\nMDdQ4D7gQuBjYB/gMuDPaVbuROBi4DQRWSoiS0RkeDoyWzJTpmTuuKpQiF+NHMmv+/eny6uvcuee\nPQ3c4qZj3DxrMbb/pd27c/Rtt4V7/jmO1e0cJhXdjnWMV5fbzJrFHd9+m1CXWw0e3FT0ODUS2YiA\nxc73Ms+6pX7sS+l+sGMAWcsFFMvGXy+ZW4R3xCTQkd/5jr6xYEHyFUpQ10zg6FeT1+1ctUPnUi6g\nN+fP17Pbt9dbQEeDrvShy1f37JlQl3Pterm4up3o4ycO4BtnntQKEfk9Zn4AP28OliZCVSjE9MmT\nqV2/nm86dGDbzp3s+M9/6P3tt9xB/ddjrz+020uqBa5u1Yo2J5/MBT/7Gd8/6aRsnUrSWN1unrg6\n/c2nn/LhunXUrF/PIMwr3krgEcwsXtOJrcu/fuihJmf6SRY/YwBFwEaMjfQ6oCNwv6p+kvHKxbCT\nev/cTzZsYL9Onfhyy5asfx/UvTudDz6YMbfd1qiKk2zou3v9pvzjCUYccCCyaRNHeuz6k4HxxLaL\nlgI3YNzi1jbhm8UZA9iHHNJtv7h27I1vv83Wmhr2tGlDcbduYX38fNMmCnbtolqkwTY/+ySzre+B\nB2ZM7/3oduTDftb6zxiWl89htbX8kjo9/jnmwe/V51qahy5HEnQuoH2A76rq6iAq55doN0msRGPu\nn5sL379r3ZqNXbtGveky8f18ZYhRxb187f/5pk3hB/7tKDuQmDdHKXX+/M3pwe/iNABtyRHd9ktV\nKMTdJSXcsXZt+B6YDOzAtGKR+vhwnG1+9vG7zav3QTUuc9Z/1kC3vfvsys+n7ZYt9Tow7VFWIuG6\n3UJ9f36vs4LQPHQ5kiDjAM4GVgMhZ3kgMMuPfSndD1GMeRNHjoyaY35KEt//l+T+fr5HRyxPcmyM\nK9P8nu5jP9CU5ILWs4FG2kLV89s9p0tbtdIrhg2L6dvflMZXAM0l3fZL5D0wz/P/xNLPeNu8+0Tq\nsZ/jJxFd7893vq8DvTyGLiba5ur2+T6Pr3SOiaybV6cvdbadIRJXl/3Q1McA/Ng7pwDHYiImUdUK\nIGvNZNutW8N5uV3cUXu/3/skub+fb41YzsPYy/+V5vc8H/vdzJSU5N7MlHpeD17vB1cxXLvotfvs\nw46RI7n1ww/5S467dyZJzui2X2LdA3nE1s9427z7ROqxn+PziK73Y5zv24DuRNfFRNtOcnR7jM/j\npwOlTGlQN1enw/rcvj2/KS9vbrqcNH4agL2qujViXdYcmPMOOICdEeu8f66f72OS3N/Pd+8o64No\nWIp87HcHZSnJdY+LvDkmY264ndQ9+EtXrGDqjBkJbxY3MCVIMiHTJZd02y+R90AJdf9dLP2Mt827\nTzQ9Tla2q2c/IPkGJPL7VEdHf5DE8b+irF7dajEmn/Mx+tx15EhKly3jxJNPTvLKNyRI3cyknsfC\nTwOwQkQuAvJF5BARmQa8leF6xWTolVdyQ8+e4RvAHQM4P8e+xxBsA5Op78ib48uhQ9GRI/nbqaea\niVt8PvibKrmk234ZeuWVTOjatd49MBnjqRFNH+Nt87NPMtvGkH4DkkrDFU2fJwMfFhay+IADqB4y\nhH+1AH1OFj9eQG0x4yhnYMZMXgZuU9VvM165BF5AOz/9lE83bKBbp05s2rLF9/fe/HwKa2qSPi7e\n9weffUa3bdvqDUYFMTh9JPBBAHKiyZ3nDNr1PeggOvfpE4gXR3l5eeA9mUzIhPAg8B3kkG77JewF\ntGgRn+7aRYd996WoW7ewPn6xaRMF335LNbCnTZt62+Lts/KLL+i///5xj/duizYI6+r9FOcTxACz\nKyvRIPTnHTuyb00NWlBA0ZAhTJg6tYFOB6lPuSorUC+gbJGpcPlMPaR6FRWl1TBF+3ZvyKAaqk1b\ntnBQjx5sad+esgx4PTS1BsDPTZIJgtTtbD+EonXIvti0ia+3b6dzYWHcBsTvNm+nLXKfZDsw2b5e\njSEr7QZARGbFO1ADSpkbD5svxZIJRowwqjt79myA2ZHbrW5bmjpB5AI6HjgQeAPjOvvHiE+zIT8/\nn8GDB3PEEUcwaNAg7r77bprSzenNffKnP/2J/v37c8kll9TbZ/78+XTq1InBgwczaNAgzjjjjJRz\nCMVj7NixPP/888ELDpCFCxfy2WefuYvNWrebOkHmArJEIZZ/KCYz4nDgMWApcDtwuB/f0qA+pOEr\nHY9If9t99903/HvTpk06bNgwLS0tTUumS01NTZK18yfXi/cy9evXT9evX99gn/Lycj377LPryY28\nvNXV1alWM8zw4cP1ueeeS1uOl6DjAKqrq/Wll15y4wCavG7nqi96LuUC8pJr55gJWaQbB6CqNao6\nR1VHA0OAT4ByEflFEA2PiAwXkQ9F5CMRuTEImX5xc4tHo2vXrjz00EPcd999ANTW1nLDDTdw3HHH\nMXDgQB5++GHANJxXX301/fv358wzz+Tqq68O93x79erFTTfdxNFHH82zzz7LmjVr+MEPfsAxxxzD\nKaecwkcffQTAV199xY9+9COOO+44jjvuOBYuXAiY3vqgQYMYPHgwl1xyCTt3Rjq+wt13382RRx7J\nUUcdBfwJgKuuuipc1r333tvgGPW81bjXYOzYsVx11VUMGTKEG2+8kW+++Yaf//znDBkyhO9973vM\nmjUr7nUA+MUvfsFhhx3GGWecQVVVVXj9a6+9xuDBgxkwYACXXXYZe/fuDV+fX//61wwaNIhjjz2W\npUuXMnz4cA455BD+8pe/JPV/pUJ+fj7Dh4cTdDZ53Q7y+lhZzUOWX+ImgxOR1sBZmJS5xZgnzQvp\nFioieZg000OBz4F3RWSmNtLE2Vu2bIm7vVevXtTW1rJp0yZmzJhBp06dWLRoEXv27OHEE0/kjDPO\nYPHixaxdu5aVK1eycePGBhMxdO3alcWLFwMwbNgw/vKXv9CnTx/eeecdrrrqKl577TXGjx/P9ddf\nzwknnMC6des488wzWblyJX/84x+5//77Of7447nlllvYZ5996slesmQJjz32GO+++y41NTW0b38c\n779/Cg888AAvv/wy5eXldO7cucF5vfHGGwwePBjA2T4BgPXr1/P2228DcMsttzB06FAeeeQRtm7d\nyrHHHsvpp5/OE088EfU6LFmyhI8//phVq1bxxRdf0Lt3bwB2797N2LFjmTdvHn369GH06NE88MAD\njBs3DoDi4mKWLl3K9ddfz9ixY3nrrbf45ptvOOKII7jyyiuT+r9SYffu8AyQT9DEdTvI62NlNQ9Z\nfonZADiTWhwB/B9QpqrLAyz3WOBjVa1yynoaGAk0SgOQDHPnzuWDDz7gmWeeAWDbtm18/PHHvPnm\nm/z4xz8GoHv37vSK8D74yU9+AsDOnTt56623+PGPfxzugbs94VdffZVVq1aF1+/YsYNvvvmGE088\nkeuuu46LL76YXbt2kZdX/0XtzTff5Nxzz6VNmzbOmlG88cYbDBgwwGtiaMDJJ58c7tFPmTKF1183\n693zcM939uzZ/OEPfwBgz549rF27NuZ1WLBgARdeeCEA+++/f/g6rF69mt69e9OnTx8ARo8ezf33\n3x9uAM4++2wAjjzySHbu3Enbtm1p27Ytbdq0Ydu2bXTokNacLHG59NJLWb48rM4tVrctlnhvAD/F\nxFaMB8ZJ3aQIgrEvpXOHHgCs8yx/hrlxGoXKysq429esWUN+fj7dunVDVZk2bRqnn356vX1efPHF\nesuRZpp27Uywfm1tLZ07d2bJkiUNylFVFi1aRGFhYb31N954Iz/84Q958cUXeeihh/if//kfDj30\nUL+n5wvvNXDr6vLcc89xyCGHNKhrstchVkME0Lp1awDy8vLCv8F4L1RXV8esaxA88cQT3nN+q6nr\ndpDXx8pqHrL8kpU4ABE5DzhTVa9wln8KHKuq4yL2azquOJYmiQYcB2B125Ir+NHtbE1+sR74rmf5\nQGddPVRVGuMDVGO8QVYAFcD1nm15mGjRD4DlwOtAB2f9A8AqYC7wCjDMOSYEfMcjoxiYA7zvlDHZ\nWd8V+CewzFn/gLN+mlPW+8CTQKsodb7O2ecDYJxnfb2yPetLgNlR1j8KnOdZ3gf4i+d8Z8e7Ds62\n+zAmjrnAi6484DTnui7DBG+2iqwjJnvAtET1z+B/HzQ5pdv203I/fpRVNDtvAPmYNLxDMbMwvQNc\nqKqrGr0yaSAi7VR1p4h0ARYBJ6rql9mulyV7NBfdtrQM/EwJGTiqWuO43M3F9CwfaaI3yL9FpBNQ\nCNxqH/6WZqTblhZAVt4ALBaLxZJ9msQE2CJyrYisEpEPROTOAOSVishnIrLE+QxPfFRS8n8pIrWO\naSgIebeKyPsislRE5ohIj4Dk/t65rhUi8pyIpO17KSI/EpHlIlIjIoMDkBd4UJWIPCIiG0VkWRDy\n0qhHIHqdCX0OQoeD1NsgdTUIHQ1SL4PSRxE5UEReF5EVjk6NS3iQNmL4eyofzODlXKDAWe4agMxS\nzEBvJup7IGbANwR0CUhme8/vazGDxUHIHQbkOb/vBP43AJl9gUMwg8SD05SVh4nSLcKY2SqAfgHU\n8fuY6R+XZUIHfNYhML0OWp+D0uEg9TZIXU1XR4PWy6D0EegBDHSvPWYsKm69cuINIFbLJSKdgaeB\nw4AXRaSjqn4VVLGJyhaRuSKyWkReFpGOPuVOBX6VsPAkylXVHZ5D3YmPUsYtG7gXeN8p+22gd4rn\nHEZVV6vqxzjXN1q5SVzrcFCVqu7F6MLIdM5ZRFZgvLdGJig701wF3Kmq1QAB6HWQHk2+dDgRQeqt\nqr6qqu7xb2MaqVRlxdRRnwSml0593gS+TvV4j5wNaqY1da/9KkxcSkxyogHAuGFer6qHY7KQXiMi\n/YCbgBqMC+FhwDIROTqgMn8hIhXA74DfxCj7VVXti+kp3JxIoIiMANap6gc+yo93zg3KFZHbRWQt\ncBHwmyTPNWHZwDiMC2hS55xuuQmudbSgqrgKnUTZlwKt45SdaQ4FThaRt0VkXgB6/QvHPPLXdBqx\nJHXYj7wg9dblZ8BLAclKhSD1MiOISDHmrWJRvP2y4gUUhb8D3aUuIrMHJgVFK2Ab0BnT6r6Nmf+5\ndyKBIvIKZr7o8CpM9sdbgPsxXjsqIrcDY4E3VXWHiKzC9C5GAqc4xz4GlAM3xZE7Cfg1cHrEtqio\n6gZgg/N7h/O2839AT2CNiFyCycjaAbhJVScBkxx747WYCZISkuA6VDhl12BeZQ8FLo8852RkqmqD\n/PpxzjnutfZzfn6JUvYnGDNAxspOoCsFQGdVHSIix5BAr5PU57sxE2alUi/fOpyoXqo6Oxm99aNX\nInILZp7yJ9OpV7xjmzoi0h54Fhgf8RbWkHRsTpn4YIKmKjE2rK8xD8VTnG2bMba37wRYXhGO7S2y\n7Ij9NieQcwTmAbMGYzvd68jaL9lzjlcucBDwQYDnPxH4FuiS7DknkDuPOPZVP+eMydQ5x7P+JuDG\ngHRsHSagLbBzTrIOYb12lgPRa68+p3BsyjrsQ3baeosJGvwP0Dqg/yCujsY5LnC9TOd/i5BTgBm/\nGe9n/1wxAQFRWy4FZmAiSsG04oWq+t80y/F6I4wClsco20tcf1lVXa6qPVS1t6r2wrwWDtIEsQF+\nyhWRgz3L52Bse2kjIucAtwGXqermaGWnW0SMcv1e63eBg0WkSERaARcAcWeqS1ihurJvdcoJ+pz9\nEtZrETmUNPQ6mj6nIidVHY5Tr8D0Voxn06+AEaq6O9H+yYhO4ZjA9dKpRxDjOH8DVqpqw3zw0Qii\nJQ2oNW7QclE3iPF35/cuPL2mNMp6HJOeoAJzI/aMUXZ353cPYFWSZawhgQdFnHOuVy7mgeXWdyaw\nf0DXeyfmrWqJ8/k6nXN2jjsH07vehYmEfSmVc/ZsG47xZvgYYwoLQsfew6Rq3o3p5Y5P55xTrEuh\no9cfAIvT0eso+tw9oDom1OEExwemt87/X+XR1fvTkBVXR33KCFIvn/To41pgbIpyTsSMmVZgUrAs\nAYbHOyZnAsHEpJ/+SlWv96z7HeaV/HeODbGzqgZqG85m2facG6/cbJdtseQiOdEAiMiJwAJMb8h9\nLf81Jo/KvzD2wyrgfFUNdNaEbJVtz7llnLPFksvkRANgsVgslsYno4PAEiXEOYuBNxZLoyAi451A\nN3/h+BZLlsi0F9CjwJkR67IVeGOxZBwRORzjg380JhDnhyKSMG7FYskGGW0ANHqI80hMwA3O9zmZ\nrIPF0sgcBixS1d2qWoMZdxiV5TpZLFHJRhzAfqq6EcLRmftloQ4WS6ZYDpzkmDrbAv8PM8BsseQc\nuZAKIuYotNh5Uy0ZRn1OnZeEvA8d19JXgB0Yf+yayP2sblsyjR/dzsYbwEYR6Q7hCMa4UYZ1QQ5B\nBLb422/06NFpl5XqJ1tlt8RzzhSq+qiqHq2qJcAW4KN4ut2Yn9LS0hZVbks9Z7/EbQBEJE9Ezk9G\n+aOJoX6I8yxMTg+A0ZgIQYslJwhC50Wkm/P9XeBcTKSnxZJzxG0A1OTfviFV4SLyJPAWcKiIrBWR\nsZjJHE4XEXfi7LRn+Aqa4uLiFld2SzznaKSr8w7PichyTOfmalXdFm/n4uJiRKRRPmVlZY1WlvvJ\npf+3Htu3w8KF5jvRrru3s3DdQrbvTrxvU8LPGMCrIjIR+CcmdwwAapKHxUVVL4qxaZi/6mWHkpKS\nFld2SzznOKSs885+JydTWFVVVVKv7U0NEck9/dq+HU46CVasgMMPhzfegH33jXr89t3bOenRk1ix\naQWHdzucN8a+wb6to++bsNwcw08D8BPn+xrPOsVHTn6LpYlidT5gcq4BWL7cPPyrq2HlSvN7yJCo\nxy//cjkrNq2guraalZtWsmLTCoYcGH3fhOXmGAkbADVpYbNOaWluyLAEz4YNG5gxYwYbNmxgy5Yt\n1NbWUlNTQ35+PrW1ZhbAvLw8ampqEBFUtd62goICqqurw79ra2tp1aoVXbt2pVOnTgwcODApM0RW\ndX77dvNwOuKI6D3SRNst/jjiCNPzX7kS+vc3v6Owffd2du7dSb/v9GP1f1fTv1t/Du8Wfd+mSMJc\nQCJSiJm/1H2tLQf+omYuzNQLFhkPXOYsPqyqf4qyjzbnV+OWQGVlJRUVFWzZsoWvvvqKPXv2kJeX\nF/OBXVVVFT62tLSUsrKyBr/jbYv8HQ+nMYk2d3FaOi8i12GigWsxyefGquqeiH3Cuu02agnNEkmY\nLVyuu+46pk6dWm/dY489xsCBAxkwYICf02nA3r17ueOOO9i6dSt33313wv3D55dLbN8OixaBCBx7\nbNTr6DX99PtOP+4Zfg/HHnCsL/NPtoml25H4MQE9gMldfr+zfImz7rKYRySunDdcvhp4SUT+rapr\nUpVpyS6VlZVUVlayZcsWPvnkEwoKCvjmm28AaNu2LdXV1ezcaczpo0eP5rHHTDD4pEmTKCsrY+/e\nvUycOLHeQz6LpKzzItITM/VhP1XdIyL/xEwY8njCUhOZJXyYLZYtW8aCBQv4+OOPmTp1KiJCVVUV\nEyZMYNSoUezdu5eCggKef/55HnzwQcaNG8fmzZt57733+OKLL/jf//3fsKxp06aF37IOPPBAzjvv\nPAAKCwspLS3l+uuvp0kSrSGNgtf0s/q/q2nXql2TePgng584gGNUdbSqvu58xgLHpFluTofLl5eX\nt7iyky23srKS8vJyZsyYwV133cWMGTN4++23+eSTT9i5cyfFxcXs3buXvXv3MmHChPDDHxp6/YRC\noQDOIFDS1fl8oJ2IFABtMZN9JMY1SxQWRjdLJNoO7Ny5k9atW7NlyxY+//zzcM974MCBXHLJJaxY\nsQKAc889lyuvvJLFixezfft22rVrx/Ll9ScS83ryRCPnevV+idaQRuGI/Y7g8G6HU5hX2OxMPy5+\n3gBqRKSPqn4K4CS2ahDZmCTLgdvFTIS+GxMu/26aMi0ZJNKUU11dTZs2bcI9+1NOOYX58+eze7eZ\nre+cc87h/fffz3KtUyZlnVfVz0Xkj5iZnb4B5qrqq75K3Xdf0xt1e6aRZolE2zFvAB07dqSmpoba\n2trww3vJkiVMmzaNvn37AmZMxQ0aWrFiBT179mTv3voWrl/84hcxq/rnP/+ZiooKFi5cyPHHH+/r\n9HIGn/b/fVvvyxtj3wh7/zS33j/4awB+BcwTkTWYgK4iYGw6harPcPlskXMeC1kq1/vQ37LFzJHS\nqVOncG/+pptuCptsSkpKmD9/fkpl9+qVE34GXlLWeRHphEl4WARsBZ4VkYtU1V8w2L77xvRG8bP9\nyiuvBOCCCy4A4O6776aqqoqhQ4dy7bXXNtjfOw5w4YUX+qoiwDXXXMM111yTeMdcxEdDCmYMYPmX\nyzlivyOa1MPfR1hDmLgNgIjkYebNPATo66xerQFMyqyqj2LSRSMiv8XM0dmAMWPGUFxcTHk5nHOO\n8ehwH1au2cLv8pgx5YwZ43//lri8YcMGevTowZYtW3j11Vdp3749PXr0YOvWrYRCIYYPH45LeXk5\noVAo/AB3TTmRyy7Rlr2mp0h5qciPlOc9v3vuuYeKioq4HkEB6PwwYI0bMyAizwMnECUaeMqUKT5F\npkdRURHjxtlpCeqRoCFN1fc/W5SXl1NeXs727fDoo/6P8+MFtFRVB6VZv2hyu6nqJidcfg4wJDJi\nsr6nBKRrcvQro7y8PGs98WyVXV5eTnFxMZWVlYDp/VdVVYVNOy5+vG+S3TZmzBh69eqVkowtmzdT\nUFnJp6+9xvbaWmTffcnfto2a/HwOHzaMCVOnUhTjDSOOF1DKOi8ixwKPYMYMdmM6Oe+q6p8j9mvo\nBdRMaYrnt3DdQk6efjLVtdUU5hWyYOwCX77/2cD1DP7Od+C002D9eoDgvIBeE5HzgOcD9sl8TkS6\nAHvxES5vyRyuqcf9XVxcHHbHTMe0E4uqUIhlzz1H682bGfnww3zx5ZesLyjgjPvvJ2/rVvZUV7O3\noID/3H8/+du2US0SdVve1q1U79lDf1WmAl2Bybt2sQO4Dnh45kx+u2QJt8yfH7MRiEHKOq+q74jI\nsxiz5l7n+yG/xycyOzRVs0TO4DOOwh0AXrlpZU4PAH/+OZxyCoRCkJ8Pe/YkPsaLnwbgSuB6oFpE\nvsXYRFVVOyRdWw/Jhss3Ji1lDMBr4weoqKhg69atdOrUKS25WzZv5lcjR4Z75d6H9578fF6+9Va+\nV1tLV+B8THf553v38rD34V1Tw/Yvv0Tc5XjbgN8CtwC3YZJL/cv9vW4d0ydPpvSJJ5I5hbR0XlXL\ngKT9WROZHVIxS2QiDmDHjh385je/oX379px33nlhOTNnzmTevHn07t07N01OScRR5PoAsBvGcOWV\nsMZxnq9JYRQ10RiAAIer6toU6mjJUVyffYAtW7ZQXFxcr5fv14Mnsie/+6uvzEO+pobBEL1XXlPD\ndoxtJPzwx/PAjvhNEtumA6UY3+ZaoJ37+3N/XpiQXZ1PlHLAT0qCxogDePXVVxk1ahQnnHACN998\nc7gBaNeuHR06dGDv3r2oakz30ayRRPqHXH7T8vb6vQ/9Vq2gthaKi+GTT/zJSpQNVIEXU69q06Q5\nxwF4H/6unR/8++K7D/2VDzzAmEMPpecHH9B3/XruXL+eI3bv5s81NRyLGUX9LfAV5gHdnbqHdQ/P\nchnwOyIe2J7fDR7mCbbtdL7zvL979vR9fbKp84n8zv34pTdWHIC7zrtt2LBh3HrrrfTu3Ttws2Eg\n+IijgLo3rZOnn8xJj56UUxlAP//cBC5/8kndwz8/Hw4+GD74wLzULFniX54fE9ASETlGVQP10/cT\nLu/F5gJKj8gHf6Sdf/r06VGPqwqFWPzUUxR+9hnbamrqmW+mYHrwsXryELtXjme5hvoP7ALPbyKW\n420DmAzht43JwI6DDuKW225L5lJBGjovIodisogqxnTUG5gcLdVJJInMDn7MEo0RBzBs2DBKS0uZ\nO3cuF110EatXr2b9+vXk5+ezaNEiKisr+e1vf5vwWjU6Pt0/U03+lmm2bzc9fzPIa+jdGx56KGY2\ni4T48QL6EDgYqMLca6499KjkiwvL7Am8Sf1w+RdV9fGI/WwuoACI1uv3evdEetiMufRSrh85koIv\nv2TjV19xZE1N2F7/MHUPWO9DfyJwF+ZBXIZ56LvcgGkQCpz93MbBXb4Q8xbglf0wsB3q2fnjbVsD\n/Ld1a/bp2DEIL6BAdN5xKf0MOE5V10VsazQvoKqqKmbOnJk1u3xT8wJy3wDcAeBccAHdvh2eegqu\nvrqu53/ggWYcINoLbpC5gM5Msq5+ccPla0kmXN6SNMXFxWHf90SBW+tCIa496iiO2rGDQhr28i/H\nOLS75hv3od8O4/JSSP0eOTTslXsf3lfk57M9P59x+fnIvvuSt3Ur1ziePu7DfJxIzG3jnQd9r6Ii\nBvm25iQAACAASURBVHXpklQyuDgEpfPDgE8jH/6NjY0DSI5cGwD22vwLC407e3ExzJ8f/eGfDDEb\nABE5zcmDUiUivVQ15Nk2CtM7Som0wuUbgeYSBxDN7BONqlCIOY88Qo+vvmLbrl0cjnnQd8X05N1e\nvvvA95pzvA/9ZZievPuQ30Rdr9z78G7ftSttgUldunD3zJmUlpWlHAcQbVuqZEDnfwI8lXbFLMHg\nwwXUO/ibbbNPNE8fEXjgAfjJT4LJBh5vEPguz+/nIrZNSqfQiHD5nkB7EYk1e5glBWIN9kayLhTi\nF0ccwcHr1jFw1y7uw/QK3AHcMszD3/vA9w6yLsO8HVyRn8+2wkKuyc9ncZs2tB85kl7jxjHs5puZ\nu3Ejx998M6dMnsywm2/mpc8+46jLL+eo885L1j8/0wSm805K6RHAM8kcl2iWwiRmMbR4cV1ATz7Z\nfEe5gLk0+OtW9wc/qHv4g+n5B/Xwh/gmIInxO9pysvgOl3dTQQDhyT1yKXVCJpZdUj3ejeitqKhg\nw4YN7LPPPoCZeMVNreD2+lutW8fJmDzHKzEmnymYP6IUGENdL/8l4HXgCIz5ZmReHts6dGDSQQeF\ne/JAuDc/ZswYvt66NXw+sVI3xEr9kIVUEEHq/A+A91R1U6wdIlNBZGA6gEaNA8hpfLiA5tLg76JF\npspeT59evYzZJ9p/7qaCSJZ4DYDG+B1tOVnWAkNEpA3GJXwoMbKBut4pU6bAhAn1t0WaShItl5eX\n4L3nkj2+KS0XFxdTUlJSzzRywQUXsHr16rCdf6hj5z8fmIZJYv836sw8RZh8BndjTDu3Aa3324//\nFhYyqUsXHpk5k+mPm3H7ol69GiR187PsHYuIHJeIXE5FnpcJEQoUxWwUpM5fSALzj9sAuPUIYDqA\nrMYB5DQ+MoDmQvSva/YZN67u4X/YYTBtWnxPn5KSknr67tckGq8B6C0is3Bc2ZzfOMtpvbenEi5f\nVgYRHaak8SujqY4BJLL5uy6dbVavZgCm1+/a+Y+kzmVzL3Xd3SsKCtjbpQuTunfnu6eeypP33htW\nrqDMN95efpYJROdFpC3mLfeKZApP9Izyk8U4URzAL3/5SwYMGMC5554LwOLFi+nWrVvcOIAY51jv\nO+fx4QKa7cFf7xueM2EeBQXm4T90aGbKjNcAjPT8vitiW+Ry0qQaLm+JTjSbv7cBcHv9A6L0+ssw\ns58XUWfXL8jLY9fBB/PgnDnhXn4LIBCdV9VvgG7JFh7AdABZiQNoMvjIAJrN6N9oZp/DDzc9/0wR\nswFQ1RwM5WscmmIuoFiunjNfeIFPXn45aq//59T1+g/EDO5eLsJ+Q4eyb//+dOrSpVEGaf30/h98\n8EFat24dnjD+jjvuID8/H4A777yz3u/CwkJatWrF9OnTk5oUPhd0Ps3pABplPoD27dvzxz/+0de+\nTYVsp3/evh2uuy45s08Q+IkDsOQw8cw+/1mwgFUPPsjRe/ZE7fW7Pvw7gXdEyD/kEPoNH85Uj5kn\nCGbMmAGYXDF79uxp8MB2f99xxx3k5eWFA4fuuOOO8MO8TZs29OvXz/fD3FKHjQMgoQtotgeAFy2C\nVavM70ybfbzYBiAKTWkMILLnP2bMGObPn8+6UIjbbr+do6urww9/N3J3OvVt/de2b0/hiSdybBpT\n+8V6yOfl5VFZWUm7du04+OCD6dSpU706p3LOFktS+HCfytYAcLRB3379Mmv28ZKVBiCVfCk2F1BD\nInv/AE8/9VR4oPcYGpp8XJ9+b6//wTlzwi6ciXBdzdq1a8c999xDYWFhuPx4D/mWhIh0BP6K8Zit\nBX6mqoti7V9UVNR0BlNToKioKLsV8OE+lY0B4FiDvvfck1mzj5d4kcCzieP6pqojUi1UVT8CBjnl\nuPlSXoh3TBCz5/mV0RTGAKIN+m7ZvJmFN93E02vX0g7zkC+lvsnH2+v/7nnncVCvXlFdOL3luHTs\n2JHKyko6duxIcXFxYA/6XOn9B6jz9wL/p6o/FpECTKqTmHivsSUDJHCfylb0bzYGfSOJ9wbgej2M\nwmTwdWfUuBDYGGAdciJfSlMj2qDvh3PmcPTatfwe48c/hroHv2vy8fb6Y3n3eHv5M2bMoHXr1hQU\nFNCpUyc6depESUlJc+3dp63zItIBOElVxwCoajVgZ7vLJnHcp7I1+JutQd9IEnoBicgfVfVoz6bZ\nIrI4wDrkXL6UXB4DiDbou2XzZj55+WXaf/QRAD+jzuxzLXUmn8UFBXz34ovDvX6vTNcXP1O9/Hjk\nyhhAQDrfC/hKRB4FBgCLgfGquivY2lp84R38jeI+lY3BXzezZzYGfSPxMwbQTkR6q+oaABHphUkL\nkzaefCk3xdonG6kgXLKRCqKiosL3/mPGjGH4mWey9e9/5+mvv+ZdzEQsrqfPUEwCm2LgisJCzvrD\nH3hv6dLw+bmpFNwGZdeuXeEHv3eCePf6N/Xr7SMVhEs6Ol8ADAauUdXFInIPRr8bjEB5U0FERnJa\nAiAHB3+9VXIzewZh9kk1FYSf+QCGY6J012DMx0XAlar6cvLVbCB7BGZC+OExttv5ADxEs/t/+vLL\nFC1cGJ4hawym9++afX4M7Dj00Abune58AB07dqRTp07hqSFb0gBunPkAUtZ5EekOLFTV3s7y94Eb\nVfXsiP2sbmeahQtN8rfqavO0XbAg6lvA9t3bG23w99VXYfhwY/opLIT77w82uZtLYPMBqOocETkE\n6Oes+lBVd6dbQYeE+VJcpkxJfyA4CBnZJNLuvy4U4stFi/gu5uHv9fN3zT7f9u3LkBgBPkVFRWF5\nLeWh74d0dF5VN4rIOhE51HF2GIrJs2dpbPzkzsB4ADXG4G+k3b9v38w8/JPBzxtAW+B6oEhVL3du\njL6q+u+0CjZyq4Deqho172r9WZMg3Q6TXxm5NgYQze4/84UX+PKBB3ho7956Hj8/py6l6q4+fag5\n6yw6dekC1PX6oz34c+2cG4M4bwBp6byIDMC4gRZi3iLGqurWiH3sG0BjsH173NwZjZn+wdv7LyiA\nOXMyZ/f3+wYQbz4Al0eBPYAbJbQeuD2NugEmX4qqdov18LfU4Wb2LCkpoaqqil5FRSx77DF67d3L\nXZhWtB11ufs/BBYfeijXvvJK+OHvYnv9vkhL51X1fVU9RlUHquqoyIe/pZFwB4DjPPwbK/9/ZO+/\nMYO94uGnAeijqr/HeBG6ia6ab9QKuR0HsGXzZqadfjqztm7ldsycutOoawT24ph9LroI9QQXucE4\n7kM/0pUzl885C7Q4nW92+JgAJpoHUKaqEun105jBXvHw4wW0R0T2wQmQEZE+mBz+lkYg0vzz4Zw5\nHP3pp1F9/ScCy9q35+AzzwzvD7bXnwJW55s6PqJ/G8MDKFNeP0Hh5w2gFJgDHCQi/wBeA25It2AR\n6Sgiz4jIKhFZISLHpSszKFJxp8pU2W5vvVdREc/deWc9X3+39/8Vpqt6RWEhN774Yj2zj9+Hfy6d\ncw6Qls6LSKWIvC8iS0XknUxV0hIHdwC4sDDmALCb/mHB2AUZCwBzo32rq43554EH/M3k1ljEfQMQ\nk6DkQ0xk5BDMa/B4Vf0qgLKTCpdvabmAvD3/xe+8Q+jee3n688+jpni4E1jYsSNHjR7NXmcGp0iT\nj+31+yMgna8FSlT16wxU0eIHH5MnZHoAOBe9fiLx4wX0gaoeGWihJlx+qar2SbCf9ZQAftC3L0d/\n9FFMX//z8/M54Jpr6NSlC6ecckq9tND24R+bOF5Aaem8iISAo1X1v3H2sbqdKRKkfobGSQHhDUPI\ntNdPJIHFAQBLROQYVY06Z2+K2HD5OET2/ruuWcNN0KD37/r67zr4YDN5i+31B0W6Oq/AKyJSAzyk\nqg8HWDdLPHxE/0LmU0Bs3w47dxpvn9WrjRUqV+z+Xvw0AMcBF4tIFeZ5I4Cq6lFplusrXD5bqSBK\nSkqylgpiwoQJFBcX8/RTT/Hkrbfy/6qruQvoi8lQ5pp9KoGf9ewZHvR1r1Mq5Ueee2Odr7fMHEoF\nka7On6iqX4hIN0xDsEpV34zcyaaCyAA+Bn8hswPA3jaoXz946aXMJ3nLZCqIqMm8VbUq6dLqZOZ0\nuHw2g6KefvppevTowYYvvuD18eOZumlTg55/EXUpHkZPmcLqjz5K29PHBoLVWx+YzotIKbBdVe+O\nWG9NQJnAffq60b9xRlwzlQIiMt1DjAwUGcWvCShhA+ARuB/Qxl1W1bWpVw9EZD5wuap+5NwkbVX1\nxoh9WuxNct0559B+5syodv+JwAV9+3L0hRdam38aJLpJUtF5J4o4T1V3iEg7YC5QpqpzI/Zrsbqd\ncbIY/bt9O5xwgnkRATMM8dZbjT/wG1gksIiMEJGPgRAwH2N5eCntGsI44B8iUoEZB7gj3s6NOSFM\ntqkKhdj68svchDH3RLp73uCYfRIFd1lSI02d7w68KSJLgbeB2ZEPf0sGyWL0by4HfMVEVeN+gPeB\n72C8dgBOBR5JdFwQH1M9g+dnyviVMW/evPQLS5JQKKTz5s3TqVOn6iVDhugOk7Yo/NkBOgn0tI4d\ntXLNGp0yZUqg5WfjnLNdtqNfWdF5glBoS322bVMdMEC1oMB8b9vWYJe31r6lBbcWKFPQwlsLdeG6\nhYEX3aZN3Co0CrF0O/LjJxBsrxp3tjwRyVPVecDRiQ6yJIfbgx84cOD/b+/M46Oszj3+fbKwBFkU\nkEUkAakSwCpeRVAUtNdbBJde7624VqnX5boh1d5alQra24teqyCtvcVakFZwobVuoEIFihWCCyhb\nrchMQoGAgCGBQCDhuX+c900mk5nJJPO+M5PJ+X4+88m7zXvOwFmf85zfw4GtW2tdPKdSJ/PweXY2\n37zhBgLFxeTn59cu/NiQgp5jy3xLJNICcBju4m9uVq6ni7/pvuErGvF4AZWJyDHAXzAmm12YNcmM\nJdkLkuFun+127eI+aKDy6bp7+pE/qwVUj1ZX5jOCOOWfn/iXJxCEYScM82QNoCVs+IpGPF5AHYBD\nGFe4a4HOwAsaY5NLXAmLBIF9GHf2I6rawEs2VXLQqaI4EOD7Q4cyYt8+cjELv/mYlufK9u05+eab\nOW3oULvg6xExvIASLvMikoXZ3/IPjRBM3i4C+0SMBWC/Nn8lU+Y5XjxbBFbVA6pao6rVqvq8qj6d\naOPv4G6XHxqp8U8lqdCmKQ4EmHnRRdwXReXzxH79fG38rRZQHR6V+YnYQDDJpZEFYD/UP9NV5jle\nGjUBiUgFjioi0AYT5OKAqnZKMG0hPjE6IDO1gEJNPzMnTWLQl1/yIrCahiqfvYYO5cYbb0xNRlsZ\niZZ5EekDjAX+GxNYxuI3KYr/u349/O1v5rhFeP2EEfc+AKgVyrocGK6qUQO5x/muLUAZEHW7fGuZ\nJhcHAjx08sn8X3V1g01fzwK7unfnwhkz6NmrlzX7eEg80+TmlHkReQXT+HcG7rUmoCSQgvi/FRVm\n8XfSpDq5h3RZ+PV8I1jYy9eo6tBm5azuHb00ZLs8cKeGbZfP5Erijv5Ld+zgt3fdxbA9exrY/acB\nH3TuzG/XrCG/X79UZjcjibeSOM/GVeZFZBxwsareKSKjMR3ApRGey9iynRIa2QHs9eavcLmH6dP9\nl3toCp6JwYnIFSGnWRh3uEMJ5A0AVd3h/P1KRF4FhgEN9FIyVQuooKCAVStX8up99/Hqnj10wOw0\nuhGYg+kEVmRlUTh+PIHiYgLFxZSWltKzZ09f8mO1gOpIsMyfC1wmImOB9kBHEZmrqt8Lf9BqAXmE\na/tfuBBKShqsAfix+Ou6fdbUmNF/hw6pbfz91AKaHXJajdkV+ayq7mpyanXvTOvt8snSpokk97AR\nswbgyj284RoYfcZqAdW77kmZF5FRWBOQv8Rh+1+5dSXnzzmf6qPV5Gbl8pcJf0lI+TNd5B5i4asJ\nKFFEpB/wKmahLQfjYjctwnMZWUmCwSCrVq5k0Y038szhwxHt/l/37k2/iRM503EpsLZ/72mKCaiZ\n77cdgN/EYft3ZwDu4m8iMwBX7uH229PL7TMczzoAEXk61n1VvbuJeYub0EoyZUriWj5evMMrpl53\nHfe98AIdQq65dv+irl35/syZdtHXZ2LMAHwv87YD8Ig41D8rqioo2laU8Oav0MlGTo7pc2KEHEgp\nXnYAs4BBwEvOpe9iLBUrAVT1+cSyGjPtlGwE88skEer2OeummzhlyxaOUmf+yQdGZ2Xx/ObNSV/0\ntSagetd9L/O2A/CQJG3+Cpd5fuaZ9N3x62VEsG8CI1W12nnx/wErVPW2BPPY6nBH88WBALJ1a0S5\nB+nXr3bR147+U4Yt8y2FRsI/ehX5qyXLPcQinhnA58AIVd3rnB8LrFLVU3zPXAZKQRQHAvzgwgsp\nDAYbuH1efcwxzPzsM+vymSRizAB8L/N2BuABcSwAe2X/T0e5h1h4OQOYBqwRkaWY3bvnA1MSy56h\nMb2UTMJd+F1x333M3b49YpSv3n37EiguRkXsyD+1NLvMi0hbjIhcG0z9WqCqU33KZ+umkfCPru//\nwmsWUlJe0uzNXy1d7iEW8WgBzcbESH0V+ANmZOSV3T8t9VL80KYpKCig6KWXOG77dh7HyDzsdv7O\nwXQGvYYOrX022VgtoDoSKfOqWgVc4GwaOx24WEQypLlIM1z1z9zcBuqfoYFfxs4bm1Dj3+KCvDSB\nqDMAJy5qmaruU9VSESkHvgMMEJFfqOrhRBJuql5KS9UCCt3xu2fhQn4KDUb/bpSv88aNo7S0NPmZ\ntADelXlVrXQO22LqmLX1eE0jm7+8sP2HWphyc40JefDgzBn9A9EjggFFQG/n+HTMgPVe4HngN9G+\nF+8HeMV57yjg9SjPaCYQ3LJFrygo0AdBp4AGw6J8XVFQoMEtW1KdzVYHYVGTvCrzmJn1GqAc+J8o\nzyT3x2YScUT+2rZvmw6YMUBzpuboab86TcsPNT001+LFqtnZJihfbq7qs8+mLsJXUwkv29E+sdYA\n2qvqduf4OuC3qvpzx26/NpFOx9FL2amqax29lKiLFamQgvDyvHTHDj6aPJm5wSAfAgcxMs93YQLO\nvp+Vxa0/+xmB4mJWFhX5JvVgz+OSgvCkzKvqUWCoiHQC/iQig1S1ganTSkE0kzhs/2PnjSW4L0jB\nsQUsvGZhk80/Lc3rp7lSELFGMetCjj8Bvh1y/lk8vUuMd/8MKAG2ADuA/cDcCM/50Tk2ilcxagOB\ngF4/YoQ+BPqTkNH/fud4P+h9l13mS9pNxcYE9qfMA5OBH0S4nrTfmXFs26Y6YEDUGUCicX/Ly1V/\n/eu60X9OjuqSJV7+AP8JL9vRPrFmAO+JyMtOA30s8B4YFU8gIfu/qj4APOC8z90u30Asq6UjquSs\nWcP9xLD7X3UVwWDQev2kBwmXeRHpholwt09E2gMXYbyKLF5QUQFjx0IwCAUFZg0gbFie3zmfgs4F\nBMuCTdb9374dRo2CQCCD7f4hRN0H4Oigjwd6AS+r6jbn+lDgeFV9x5MMZKheSjAY5CfXXEP+ypX1\nxN66YVqDjQUFPPnee9bnP4WE+0p7UeZF5FTMmoH73/6Sqv53hOdabNlOKY1o/4Tu/C3oUsDyG5bT\nu1PvuF5dUQFnnAGbN5vznBwT3D2dTT/RSHgfgFM6Xwx76SWq+qYH+QtNZzmwvLHnWpoWUKzR/99z\ncviuY/e3Pv/pgxdlXlXXAWd4nTcLpoU+cMA44rsRWMICv4d6/xSXFVNSXhJ3B1BUZEb+LgUFLbPx\nbwpxh2R0eMSXXMTBVA+20sT7jkT80oPBIC/On8/tI0bQ+9AhnqAuru9U4DdA37FjuerqqxntxAXw\nKu1EsPsAopKyMm8JwfXJvPhic75oUcSgLweOHGBg14HkZuXGbf6pqDA7fe++u27Rt39/WL48sxt/\niG8ncCi+SedmCqLKR5Mn8/LOnRF3+37Rpg3fsXb/loQt8+lAIxFYQk0/A7sOZNG1i+JS/gz19a+u\nNtdycmDWLOgd38ShRdPUmMDDVHV1wonGuV2+pWkBxbL7u8Hdp1x2Gf/72mv+ZcISN3HGBG5SmXc2\nOM4FegBHMYFkGshL2zWAJhBHBJYlW5Yw5vdjqNGaJgV9CdX4AcjONq9PR4nnpuClFhAicg5QAOSI\nyEAAVZ3b3MypapWIXKCqlSKSDfxVRBZ50bmkEuv1kzkkUOarMW6fa0XkGOBjEXlXVZMT2i0TKSqK\nqcVQUVXBpLcnUaOmFT+l6ymNmn7cgO6hZp/CQpg5M71i+/pNo2sAIvI7zAB2JHCW8zkz0YQ1jbfL\nN9UmHY/df1NBAf/1/vtcdfXVMRt/uwaQehIp86paqqprneP9wCbgBJ+ymvk0osRWUVXB/PXz2bTb\ndBA5WTlMHzM9puln+3bj7TNmTP1+ZeZMo/DZWhp/iG8GcCYwyOv5qrO78mPgJOCXqvphrOfTWQuo\nMbu/9fppcXhS5kWkACMpUeRBnlofjSixbS/fzqg5owiUBcjNzkVqhMHdBzPshMhO++6o/9ZbYcuW\nuuvZ2Znt6x+LeDqA9UBPzOYYz9A4t8uHSkFMn56YFMTo0ctYtsxjqYfSUhY+/TT5X37J7ZgVw6nO\n5w6MU7nr9bNs2bJ65p9o73dJplTC6NGjUy7VkAZSEC4Jl3nH/LMAmOjMBBpgpSBi0IgSW0VVBaPm\njGLz18ZpX2qEX13yK8YPHh9x9B+6wcudTIDx9pk1q+WbfZorBRFPQJilmFHMaqDKvR5p41ZzEZHJ\nwAFVfTLsetovlBUHAkwdNIiZhw5FDe5+3hNPMHzECDvyTzNiBIRJqMyLSA7wJrBIVWdEeSbty3ZK\naST+YuiiL8CAYwfwya2fRG38hw2DbdvqrmVnQ79+xtUzE7194l0EjkfLZFSkTzw6EzHe2Q3o7By3\nx3gEjY3wXHSxCx+JR5smEAjo/HnzdGyPHlFVPsf26KHz583TQCDgadp+YLWAvCvzGC+gJxt5Jnk/\ntCVRXm5kOAsLjRAPqA4ZUqv3U36oXBd/uVgLZxYqU1CmoP1n9Ndt+7ZFfVX//nWvAnO+ZEnLUfZs\nDtHKdvinUROQmp26XtMLeN5ZB3C3yy/0IR3f2FZSwrxbbmHo/v3kAldSp/KZD2xp145nVq60Ug8t\nkETKvIicC1wLrBORNRjnhgdU9W2v8pexRLLThNj9Q23+7sg/JyuHWZfMqt3t64YJ6NoVxo1raPLp\n08e4eGbiqL85xGMCGo5p2woxfvvZGHNNJ98zl6bT5PdXrODZb3+bZw4ebBDU/WWMv/+d55zDwy+8\nYM0+aUwME5DvZT5dy3bKiGanGTKEij8vpGjfRm5941a2lNWt3mZLNkOOH8KKCSvgcEeWLjUOQ8XF\n5quHD9d/VSabfMKJ1wQUTwfwEXAVJoDLmcD3gJNV9cdeZLSRtGsrSbpoATW22esIcOikk7hr8WI7\n+k9zYnQAvpd52wE4RHPNcVZntw86kVGvjKs36gfo36U/0y94Dt12FhzpwP331zkLhZMpC71NId4O\nIC4tIFXdDGSrao2aeKljEs1gU0kHLaDiQIBfTpzIoVWrAPg+ZrQ/ExM66giwpkcPznz0UVSapyBg\n9wGkB+lQ5jOeUIf80Ma/Tx8q/ryIJf2U816+mM2lpdRsHgVfXohUnEDvr65nco/V/Oiq0Vw+tgOX\nX96w8W/TxliPBgwwJp/W5t8fL/G4gVaKSBtgrYg8jnGNa6qIXD3i3S6fTix46SVmT5jA0IMHGUx9\nm/9UjMTzmvbt+fErrzDyvPNSmVVL4jS7zIvIc8AlmIh334w7RXckDEblcqPjEX322bUtV0VVBUXb\nzDODug1i4+6NtcfF+4oZcvyQZgU+TyYV2ytYv+Bv5Hfcw8YHfg+lfRnEfjYyiEo6wImd2DPzEh54\n/BF2HtiJdhJ4YQ183R+A7DbK9sNZTPhl9AFW//5GK27v3gahgi1hxGMCygd2Ymyhk4DOwDPOCKl5\niYr0BHpqyHZ54HIN2y6fLlpAjdn8HwauzMpi4tKlnHv++Yll0pI0YpiAml3mRWQkdRHuonYA9UxA\n4Vo3bdrUGbALC2HaNCpqKjnnix+z/mDQPEIOhzHqZW3JoZqj9OvUl7dO+gklVV9RecLx5G3bxaC8\nvmzsLlBczCDpzkZtxr28vmzMz4O8vNqOp/JIJXm5eQ06ovB7xTs2MiRQScecPLZ36sao0bkED34D\noYYjtHV+SxWHaYvZRaOQVQVHzT2yDjvHsWfUhYXw2GOQl9e6TD3R8GwNwHlZe6Cvqn7uReYivP9P\nwExV/XPY9ZR2AMFgkFUrV/K7SZMYunMnuRh7fz6mE3gCM335L+yib0skViVJpMw7HcgbcXcAoUFO\norCyD5w/AaqznQtKXZvoHivk1sCR7LrvtamGwzkNj5t1T+p3PFD/PPxeW3KorqmmXxm89BJcdv5w\ntv1xORxtE+UHEOE85MchDfpG2+hHxrM1ABG5FBMQ+23n/HQReT3xLNa+v4A02y7v7th947XX+N1N\nN9U2/q7Zx9X5OYLTAfTuzU3TpnnS+Ns1gNTjd5lvwJAhRuPGpU2bho/sgoG7Me2gmkbZPc6tobad\nPJJt/roft+EOP27WPeCw1u+kQs/D71VpNTXZsPk4OPsW2DZgPXTfaEb42YcwtecoZLnHGnZ+lDZt\nlJwc6N9feP1149a5ZIn5FBXBpZda+34ixLMGMAUYBiwDcMw2nri3xLNd3iWZWkClpaWs+/RT3rz3\nXs6qqalt/J/DmH3mYBZ/P8zKouDCC3lg1izr8ZNZTMGnMh+Rjh2NvPFqRwy3sNCsalZWwo9+BJs2\n0fEwfPAcrM7PhuoaCr+CTb3M8YllMO46CHaGbIWqREb5jdxryjtqZyPizFxy9sOE88guHUzNccWw\nuxAUcnp8SfWuk+BIe/p27c7U717NVyXdGdjtFP7pmx0oKalvy28NbpzJIp4OwA1wHXotYf811Qxi\nSgAADB5JREFUZ7v8AuB3qhpVID+ZWkAzn36at2bNotPWrewpL6czMAS4FGPnPxV4DOgD3HXMMVzy\n059y6mmn1Tb+XmnXuFgtIG/Pm6AF5EuZD6eBFtC3vlV3023lRo82HUNlJR3z8viW2zkAvUM6ik/a\nwIbjoe+OSjZVltTa8gvz+rLJseUXSnc2hdj5m3Rv5k+gZKvpeLpBZfss8g4drdcRhd87sQzGTcgl\n2KmGnKwcqqmh4NguvHXbM2yt+bp2raCwW2GtmmekIC62wW8cP7WAngP+DNwP/BtwN5Crqrc1PZv1\n3jsX2K2qP4jxTFJ8pYsDAR6/5Rb2LF/ON44c4T8wfv2TMat5D1Lfz39Njx5c/9RTVt+nhRNjETih\nMu+YNd9Q1VNjPNOy9gFUVNR2ROTl1c1SoP6MJexexemFbDhYQt9OfSkpL2Fw98Fp76mUCXi5ESwP\n0wb+C8YS+A7wqKoeSiBz52L0f9ZRa8lsuF3ez0pSHAgwZ/JkStesYdPnn3NqTQ3dMKaeKcDjmEZ/\nGmaa9DDwEI6r5zvv+ObquWzZspSoQqYq3VSmHaMDaHaZF5F5wGigK8aT6GFnH0H4cy2rA7C0KDyL\nCKYmcMuDzscTVPWvmO31Sac4EOCR669nzwcfIKoUAL/C2PddO/9YjJ3/Ycwq+VGM18+H2dncPHu2\n9fPPcBIp86p6jfc5slj8IeoMoDGvB/VQDjoaiYySigMBfnHPPexctYp9NTUczM6m/cGDHNi/n0Gq\n3Et9M88k6nR8Qt07pznvK2nfnktnz+bfx49P9GdZ0oTwUVIyy7ydAVj8JGETkIh8BWwF5mNcNOuv\niPmjEhqeBw1u2cIv7rmHd5eMpKD9YxzMziavqorKQ4egXTto25aO1dVUi3AwO5uO1dUcrK5mb3k5\nZ0GtWedZYDkP83um8iz1bfuumecoZlfvQ86PPQCUZGfT9YILrKdPBhKhA0hambcdgMVPvNgH0BN4\nAOMIMwO4CLNou9yLiiAiz4nIThH5LNZzT44ezZTXX+ezyh8yb88ehuzaxfH79jGjqooh+/aRv2sX\nXffuZZpzr+vevfy8vJxzMJE8XLPOzcAnTOFl4FGMBsUcjD9/FmZxNwvT6L8NFHXujF5+OT//4gt+\nnURhN7sPIKV4UuZFZIyI/E1E/i4iP/IprxZLwkTtABwRrLdV9QZgOLAZWCYid3qU9mzg24099LOS\nEjo4xx2oa7zdhrxn2Hmk46nOXzCjfLfRd237R4HPMJ3F7e3bM+T663m3rIyn/vSnpI/6165dm9T0\nUp1uqtMOxYsy78S4+AWmbA8GrhaRgbG/lTzsACPz020KMXcCi0hbEbkC+D0mxO3TwKteJKyq7wNf\nN/ZchwjnbuPtHoefRzo+4nzfHeU7exCZjHFF6lRYyMvXXssjGzZQ0L9/Qr8tEcrKylpVuqlOOxwP\nyvww4AtVLVbVI8CLwOXe57R5tMbGsDX+5niJ6gXk+OkPARYCU1V1fdJyFcIB6ncCbuOdE3JM2Hmk\nY9fOdCWm0Q8CB7t2ZeDIkcx46ilr37d4VeZPwKwjuPwD0ylYLGlHLDfQ6zBt50Tg7pBdkYKJN+l7\nRDCAe7p1Y/ru3eBkJtRrZzJQ4WRoUoR77vEtWVmUdekCe+HBHj3IHz6cp2I0+sFg0NffFItUpd0a\nf3ME0qLMWyzJIi41UN8Sb0Q1UUSsm4TFV+LxlGgKTjjJKao6xjm/3ySjj4U9Z8u2xVc82QjmM67+\nYES8rpwWSxL4EBjgDG52YEJLXh3+kC3blnQgocheieBsmf8AOFlESkRkQqryYrF4harWAHcC7wIb\ngBdVNUq0WosltaTUBGSxWCyW1JGyGUC8iMjjIrJJRNaKyB9ExNeFuFRs4hGRPiLynohsEJF1InJ3\nMtINy0OWiHzia+CThml2FpFXnP/fDSJydhLTniQi60XkMxF5wYkBnFRE5C7nt68TkWmNf8Pz9O8V\nkaMiclyS0sv4uuykm9L63JS6nPYdAGYqPVhVTwe+AH7sV0Ip3MRTDfxAVQcDI4A7UrB5aCKwMclp\nzgAWqmohcBqQFFOJiPQG7gLOcBwQcjC2+qQhIqMxoSZOdWSjn0hy+n0wO52Lk5hsa6jLkPr6HHdd\nTvsOQFWXqKrr7r8KE4/FL1KyiUdVS1V1rXO8H9MQnuB3ui5OYzAW+E0S0+wEnOdKJatqtaqWJyt9\njBptBycwUR6wPYlpA/wnME3VxFFU1d1JTv8p4IfJTLA11GVIbX1ual1O+w4gjO8Di3x8f6RNPElr\niCFlMZLdxiCZC0L9gN0iMtuZrs4SE4jdd1R1O/BzoATYBpSp6pJkpB3CycD5IrJKRJaKyJnJSlhE\nLgO2quq6ZKUZgYyvy5CS+tykupxqN1AARGQxRrqn9hLmBzyoqm84zzyICdU3LwVZTArShBjJHqY5\nDtjpxL0dTQy3XI/JAc4A7lDVj0RkOiYClwfRn2MjIl0wo8F8YB+wQESu8bpsxSjXD2F+/7GqOlxE\nzsLIVXmmQdJI2g9gzD+h9/xOt1XVZUh+fW5OXU6LDkBVL4p1X0RuxExrLvQ5K9uAviHnfZxrviNx\nxkj2gXOBy0RkLNAe6Cgic1X1ez6n+w/MKPQj53wBkKyFun8GtqjqXgAR+SNwDuBpgxSrXIvIbcAf\nnec+dBZju6rqHj/TFpEhQAHwqZitzn2Aj0VkmKru8ivdkPRvJMPrMqSsPje9LqtqWn+AMRh/6q5J\nSCsbowCZD7QB1gKFSfqdc4EnU/xvPQp4PYnpLQdOdo4fBh5LUrrDMBqA7TCjpDmYmUgy/61vwegN\ngTEHFafo/zyAmYkkI61WUZed9FNan+Oty2kxA2iEmZj/wMWONssqVb3dj4RUtcaR/n0Xsz7ynCZh\nE4+YGMnXAutEZA1RYiRnIHcDL4hILrAFSMpmQFVdLSILgDUYodg1wKxkpB3CbOC3IrIOE7rC7xlX\nNJTkmf0yvi5Dy6rPdiOYxWKxtFJamheQxWKxWDzCdgAWi8XSSrEdgMVisbRSbAdgsVgsrRTbAVgs\nFksrxXYAFovF0kqxHYAPiEhFgt9/xdEQQUQCXsv1OtozZ8TxXKNpi8hiEensXe4s6Yot15mH7QD8\nodmbK0RkEJClqsFE3+UB8aQ9F7jD74xY0gJbrjMM2wH4jIj8rxMU4lMRudK5JiLyjIhsFJF3ROQt\nEbnC+cq1QKh2SINdmiJyloh8ICIfi8j7IvIN5/oNIvKqiLwrIltE5A4xgU8+cZ7vEvKa74nIGjEB\nUc5yvn+ck591IvJsaNrOez907v1HyHveIELMW0tmY8t1hpAqrYpM/gDlzt9/A95xjo/HBN/o4Vx/\n07neA9gLXOGcL8MEzXDfFQCOC3v/MZjRFMC3gAXO8Q3A3zH69t2AMuBm596TwN3O8VLg187xecA6\n53gG8JBzPBaocdMGujh/22F0dI4Nyc/nJElPxn5subbl2rtPS9ACasmcC8wHUNVdIrIMI0Q2EnjF\nub5TRJaGfKcX8FUj7+0CzHVGSEp9VdelqloJVIpIGfCmc30dcGrIc26+VohIR8feeT7wr871hSLy\ndcjz94jId5zjPsA3gNXO+VdAbyD0eUvmYst1hmBNQMnF1UaPxUHMaCQWjwLvqQkleGnY81Uhxxpy\nfpT6FSo8H0dpiACIyCiMfO/ZasL5rQ1Ls52Tb0vrxJbrFortAPzBtTGuAMaLCdLcHTMtXQ38Ffh3\nx2baAxgd8t1NwIAo73PpRJ22eXMVNMcDiMhIYJ+qVgB/wdhqEZGLMSMygM7A16paJSa26fCwd/UA\ngs3Mh6XlYMt1hmFNQP6gAKr6qogMBz7FjER+6EyZ/4AZeWzAhK37GBOZCuAt4ALgvZB3fSoi6hy/\nDDyOmSo/5DwfMx9Rrh8SkU8wZcCtbFOB+SJyFfABJmQiwNvAbSKyAWMXXem+SET+CSPrG2mkZcks\nbLnOMKwcdIoQkQ6qekCMP3IRcK5TidphKsm52gL+c8SEcnxNVZc2+rAl47HlumVhZwCp403HfS0X\neESdcHyqekhEHsYEsP5HKjMYJ+syvZJYmoQt1y0IOwOwWCyWVopdBLZYLJZWiu0ALBaLpZViOwCL\nxWJppdgOwGKxWFoptgOwWCyWVortACwWi6WV8v/VSqeHPvaK7gAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "f = plt.figure()\n", + "f.add_subplot(2,2,1)\n", + "cvglmnetPlot(cv1)\n", + "f.add_subplot(2,2,2)\n", + "cvglmnetPlot(cv0p5)\n", + "f.add_subplot(2,2,3)\n", + "cvglmnetPlot(cv0)\n", + "f.add_subplot(2,2,4)\n", + "plt.plot( np.log(cv1['lambdau']), cv1['cvm'], 'r.')\n", + "plt.hold(True)\n", + "plt.plot( np.log(cv0p5['lambdau']), cv0p5['cvm'], 'g.')\n", + "plt.plot( np.log(cv0['lambdau']), cv0['cvm'], 'b.')\n", + "plt.xlabel('log(Lambda)')\n", + "plt.ylabel(cv1['name'])\n", + "plt.xlim(-6, 4)\n", + "plt.ylim(0, 9)\n", + "plt.legend( ('alpha = 1', 'alpha = 0.5', 'alpha = 0'), loc = 'upper left', prop={'size':6});" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that lasso (`alpha=1`) does about the best here. We also see that the range of lambdas used differs with alpha.\n", + "\n", + "### Coefficient upper and lower bounds\n", + "\n", + "These are recently added features that enhance the scope of the models. Suppose we want to fit our model, but limit the coefficients to be bigger than -0.7 and less than 0.5. This is easily achieved via the `upper.limits` and `lower.limits` arguments:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "cl = np.array([[-0.7], [0.5]], dtype = np.float64)\n", + "tfit=glmnet(x = x.copy(),y= y.copy(), cl = cl)\n", + "glmnetPlot(tfit);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are rather arbitrary limits; often we want the coefficients to be positive, so we can set only `lower.limit` to be 0.\n", + "(Note, the lower limit must be no bigger than zero, and the upper limit no smaller than zero.)\n", + "These bounds can be a vector, with different values for each coefficient. If given as a scalar, the same number gets recycled for all." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Penalty factors\n", + "\n", + "This argument allows users to apply separate penalty factors to each coefficient. Its default is 1 for each parameter, but other values can be specified. In particular, any variable with `penalty.factor` equal to zero is not penalized at all! Let $v_j$ denote the penalty factor for $j$ th variable. The penalty term becomes\n", + "\n", + "$$\n", + "\\lambda \\sum_{j=1}^p \\boldsymbol{v_j} P_\\alpha(\\beta_j) = \\lambda \\sum_{j=1}^p \\boldsymbol{v_j} \\left[ (1-\\alpha)\\frac{1}{2} \\beta_j^2 + \\alpha |\\beta_j| \\right].\n", + "$$\n", + "\n", + "Note the penalty factors are internally rescaled to sum to nvars.\n", + "\n", + "This is very useful when people have prior knowledge or preference over the variables. In many cases, some variables may be so important that one wants to keep them all the time, which can be achieved by setting corresponding penalty factors to 0:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pfac = np.ones([1, 20])\n", + "pfac[0, 4] = 0; pfac[0, 9] = 0; pfac[0, 14] = 0\n", + "pfit = glmnet(x = x.copy(), y = y.copy(), penalty_factor = pfac)\n", + "glmnetPlot(pfit, label = True);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see from the labels that the three variables with 0 penalty factors always stay in the model, while the others follow typical regularization paths and shrunken to 0 eventually.\n", + "\n", + "Some other useful arguments. `exclude` allows one to block certain variables from being the model at all. Of course, one could simply subset these out of `x`, but sometimes `exclude` is more useful, since it returns a full vector of coefficients, just with the excluded ones set to zero. There is also an `intercept` argument which defaults to `True`; if `False` the intercept is forced to be zero.\n", + "\n", + "### Customizing plots\n", + "\n", + "Sometimes, especially when the number of variables is small, we want to add variable labels to a plot. Since `glmnet` is intended primarily for wide data, this is not supprted in `plot.glmnet`. However, it is easy to do, as the following little toy example shows.\n", + "\n", + "We first generate some data, with 10 variables, and for lack of imagination and ease we give them simple character names. We then fit a glmnet model, and make the standard plot." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZYAAAElCAYAAADHpsRNAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXd4XFe1v/9u9TqSZTuyLBdZttzlJnc7lrudBlxISMgN\nJIEUCCEQuNwQvkBoFwj8KAm5kIQETCCQkNwbSnIT27El23HvkrsdS66yXFRmpFGf9ftjz4xGsiRL\nsqQzR9rv85znnLPnlHWO5fnMWmvvtZWIYDAYDAZDVxFitQEGg8Fg6F0YYTEYDAZDl2KExWAwGAxd\nihEWg8FgMHQpRlgMBoPB0KUYYTEYDAZDl2KExWBLlFINSqk9SqkDSqm9SqmvKqWU1XZ1BqXUY0qp\nQ0qpPzVrz1ZKlXmfc69Sak033f8PSqmPd8e1DX2TMKsNMBg6SaWITANQSg0A/go4gO9e74WVUiEi\n4rne63SALwBLROR8C59tFJGPtHaiUipURBq6zzSDoeMYj8Vge0TkMvAQ8ChoYVBK/VQptV0ptU8p\n9aC3XSmlfuP1DlYrpd7x/VJXShUopX6ilNoF3K6USldKvauU2qmU2qCUGu09boBS6k3vtbcrpeZ4\n27O9XsUepdRupVRsczu9XlW+UipPKfWYt+23QDrwrlLqyy083lVemNfD+K1SahvwtFIqRin1slJq\nm/feH2nrPXg/e04pddjrBd0Q0L7E+wz7lVIvKaXCA97Pj7zPuEMpNVUp9Z5S6rhS6uGO/6sZejUi\nYhaz2G4BnC20lQADgQeBb3rbIoCdwHDgE8Db3vZk7/Ef9+4XAP8RcK33gZHe7ZnAOu/2q8Bc7/ZQ\n4JB3+5/AHO92DBDSzLZpwH4gCogFDgCTvZ+dBPq18DzZQBmwx7s86W3/A/DPgOP+C7jbu50AHAWi\n23gP/was9ranAKXAx4FI4HTAc/8ReCzg/Tzk3f4FsM/7nAOAC1b/PZgluBYTCjP0RpYDmUqpO7z7\nDiADmA+8ASAixUqpnGbnvQ7g9TbmAm8E5G3CveulwLiA9jilVAywGfilUupV4H9F5Fyza88H3hKR\nau89/he4ES02ihY8Ey+thcLeaPa8tymlvu7djwCGtfEeFqBDh4hIkVJqnffzMcBJEfnQu/9H4BHg\nWe/+v7zrfCBWRNyAWylVrZRyiIizlWcw9DGMsBh6BUqpdKBBRC55v/S/JCJrmx1zyzUuU+ldhwCl\n4s3hNL8VMEtE6pq1P62Uehu4BdislFouIsc6/iTtprLZ/idE5HgTQ9v/HlQr282p8a49AdsAgvku\nMQRgciwGu+L/AlRKDQR+C/za27QaeEQpFeb9PCPAq7jdm2tJBha2dGERcQEFSqnbA+4xybu5Bvhy\nQPtk7zpdRA6KyE/RIaexzS67CfiYUirK6xH9G7CxU09+NauBxwJsmhLQ3tJ72Ajc6c3BpACLvMcf\nBYZ7RRrg00BuF9lo6EOYXxkGuxKllNqDDvvUAa+IyC+9n70EpAF7vL/aLwIfA/4HWAwcBM4Au4Fy\n7znNy3z/O/C8Uupb6P8nrwF5aFH5b6XUfiAU/SX9CPAVpdQioMF7/XcDLyYie5VSq9CiI8CLIpLX\nyr2vRfPjfwj8SimVhxbcAuAjrb0HEXlLKeV7D6eBLV4ba5RS9wNvKqVCvba+0A4bTYl0QxOUiPmb\nMPQdlFKxIlKplEoCtgPzROSi1XYZDL0J47EY+hpvK6US0cn47xtRMRi6HuOxGAwGg6FLMcl7g8Fg\nMHQpRlgMBoPB0KX0amFRSq1USh1RSh1TSj1htT0dxdsddI9S6p9W29JelFKjA0qb7FVKlfvKlwQ7\ndrXdrnb7UEo9rnQx0Tyl1KtKqQirbWoPdrLbW/Kn2Ntz0NfWTym1Ril1VOkSRwlddr/emmNRSoUA\nx4AlwHl018m7ROSIpYZ1AKXU40AW4Ghl9HVQ4/03OIseUHjGans6gl1tt5vdSqnBwAfAWBGpVUq9\nDrwjIq9YbFqb2M1updR8oALdLX+St+1p4IqI/NT7w7ufiHyjK+7Xmz2WmcBxETnlHSX9GvBRi21q\nN0qpIcDN6LEIdmUp8KEdvuBawK6229HuUCDWO5AzBv1D0A7Yxm4R+QBdEy6Qj6LL9uBdf6yr7teb\nhSUVPQjOx1lvm134JfB17D347E68NalsiF1tt5XdoqcK+Dl6oOY5oExE3rfWqmtjV7ubcYOIFAOI\nyAUCqlxfL71ZWGyLt5ZTsYjso+0ChUGL0uXWP0LTYom2wK6229Fu75iij6KrLg9GF/W821qrro1d\n7b4GXfYjtjcLyzl0hVcfQ7xtdmAe8BGl1En0r89FSqmgjN22wU3AbhG5ZLUhncCuttvR7qXoisol\noics+190Zelgx652B1LsrZmHUmoQuuRPl9CbhWUnMEopNdzbW+Mu9JwZQY+IfFNEholIOtru9SLy\nGavt6iCfwkYhmWbY1XY72n0amO0tzqnQnW0OW2xTe7Cj3c2jH/8E7vNu3wv8o6tu1GuFxfsr4lF0\nNdqDwGsiEuz/8L0CbwXdpehfcbbCrrbb1W4R2QG8CeylcW6aFy01qh3YzW6l1F/QxUZHK6VOe4uN\n/gRYppQ6ihbGn3TZ/Xprd2ODwWAwWIPlHsu1BjEqpcYopbYoPUvdV5t9Vqj03Nx7lVI7es5qg8Fg\nMLSGpdWNvYO5niNgEKNS6h/NBjFeAb5Ey32sPcBCEWneP9tgMBgMFmG1x3LNQYwicllEdgP1LZyv\nsP4ZDAaDwRCA1V/K1zuIUYC1SqmdSqkHu9Qyg8FgMHQKu0/0NU9EipSe83ytUuqwt3SBwWAwGCzC\namG5rkGMIlLkXV9SSr2FDq1dJSxKKdP1zWAwGDqBiHS48ofVobCODmL0P6BSKkYpFefdjgWWAwda\nO1FEbLk89dRTltvQl+w2thu7je2NS2ex1GMRkQallG8QYwjwsogcVko9rD+WF70lB3YB8YBHKfVl\nYDwwEHjL642EAa+KyBprnqT7KCwstNqETmFXu8HYbgV2tRuM7S1hdSgMEXkPGNOs7YWA7WJgaAun\nVgBTutc6g8FgMHQUq0Nhhmtw3333WW1Cp7Cr3WBstwK72g3G9pboEyVdlFLSF57TYDAYuhKlFGLD\n5L3hGuTm5lptQqewq91gbLcCu9oNxvaWMMJiMBgMhi7FhMIMBoPB0CImFGYwGAyGoMAIS5Bj1/it\nXe0GY7sV2NVuMLa3hBEWg8FgMHQpJsdiMBgMhhYxORaDwWAwBAVGWIIcu8Zv7Wo3GNutwK52g7G9\nJYywGAwGg6FLMTkWg8FgMLSIybEYDAaDISgwwhLk2DV+a1e7wdhuBXa1G4ztLWGExWAwGAxdismx\nGAwGg6FFTI7FYDAYDEGBEZYgx67xW7vaDcZ2K7Cr3WBsbwkjLAaDwWDoUkyOxWAwGAwtYnIsBoPB\nYAgKjLAEOXaN39rVbjC2W4Fd7QZje0tYLixKqZVKqSNKqWNKqSda+HyMUmqLUqpaKfXVjpxrMBgM\nhp7H0hyLUioEOAYsAc4DO4G7RORIwDEDgOHAx4BSEflFe88NuIbJsRgMhqBEPEJ1YTWV+ZVU5FcQ\nkxHDDXfeYLVZQOdzLGHdYUwHmAkcF5FTAEqp14CPAn5xEJHLwGWl1K0dPddgMBiCibordVTkV1CZ\nV+kXEvdBN2GJYcRmxhKbGUvEoAirzbxurA6FpQJnAvbPetu6+1zbYNf4rV3tBmO7FdjVbmjZ9obK\nBpw7nBS9XMSJx0+wb+k+tqRsYdvIbRR8q4DKQ5XETYlj5M9GMvv0bOacmcOk/5vEyKdHkpidaKnt\nXYHVHkuPcd9995GWlgZAYmIiU6ZMYeHChUDjyzX7Xbe/b9++oLKnI/v79u0LKnv6wr5d/1489R62\nr95OaW4pUzxTqMyvZOOOjdRdrmPe+HnEZsaSF5NH1PIoVvxhBZFDItmwYQNOnEFhf/P93NxcVq1a\nBeD/vuwMVudYZgPfFZGV3v1vACIiT7dw7FOAKyDH0pFzTY7FYDB0GhGh5lwNlQd0CMu3uI+6iUiJ\nIG5SnD+UFTsxluiMaELCrA4IXT92zbHsBEYppYYDRcBdwKfaOD7wATt6rsFgMFyTutK6pgJyQC8q\nUhGXGUfMhBgSsxNJfTSV2AmxhMaGWm1y0GGpsIhIg1LqUWANOt/zsogcVko9rD+WF5VSycAuIB7w\nKKW+DIwXkYqWzrXoUbqN3Nxcv8tqJ+xqNxjbrcAKuz01HioPN/VAKg9UUl9WT+xE7XnEZsYy8JMD\niZ0YS8TAlpPqdn3n0H22W+2xICLvAWOatb0QsF0MDG3vuQaDwRCIeITqgmrdGytARKoLq4kaGUXs\nxFjiMuMY/IXBxGbGEjU8ChXS4eiPIQBTK8xgMPQaGiobqNhXQcX+xqXyQCXh/cP9+Y+4TJ0PiRkT\nQ0iktXmQuoY6Dl46yK7zu9h1fhe7i3azcPhCfrb8Z5ba5aOzORYjLAaDwZY0uBuo2F+Ba5cL124X\nrl0uqk9WEzM+hvip8cROjiVushaR8MRwq82l3lPPoUuH2H1+txaSol0cuHiA4QnDmT54OlkpWUwf\nPJ3JyZOJi4yz2lzACEub2FlY7Bq/tavdYGy3gmvZ3VClRaRid6OQVJ2o0iKSFa+X6fHETowlJKJn\nvZCWbG/wNHDk8hG/F7Lr/C72F+9niGMI0wdPZ3rKdKYPns745Ml8WAs7nE52ulzscLlY0a8fv8rI\nsMz2QOzaK8xgMBia0FDdQGVeZRNPpOp4FTFjY4ifHo9jtoPBXxxMXGac5aEs0CJy+NJhv4DsOr+L\nfRf2kRKf4heRT4z7BJMGTeF8Qxg7vSLy18suDpzaR0Z0NDMdDuYnJPD4kCFMjI21+pGuG+OxGAwG\ny/DUeKjI93ohu1xU7K7AfdRNzJgY4rLiiJ+uvZHYzFhCo6zv1usRDydKTvgFxCciA2MHkpWSxYzB\nM8ganMXUQVO5IpHsdLm0J+J0sr+ykuTwcGY4HMyMj2emw8HUuDhiQq1/rtYwobA2MMJiMFiPp9ZD\nZX6l3wtx7XbhPuwmOiPaH8qKz9K5kWAQERHhw9IP/TmR3UW72V20m35R/ZiROsOfE5mWMo3qkFgt\nIk4nO1wudrlcxIaGMiM+3i8i0+LiSAy3PtfTEYywtIGdhaW3xsyDGWP79eOp9VB5sGk4y33ITfTI\n6CaeSNzkOEJjQi23W0QoLCts9ESKdrGnaA/xEfH+xPqM1BlMS5lGWHgCu7z5kJ0uFx/k5uKZMkWL\niMPBjPh4ZsTHMygy0rLnaS8mx2IwGIIST50H9yF3ExGpPFBJVHqUP7E+6DODtIgEwSh1EeF0+Wl/\nTsS3jg6LJmtwFtNTpvMfc/6DrMFZxEb1Z49XQFa5XDya/yFFtbVMjYtjRnw8dw4cyO0ZGdw9bx5K\nmbEvPozHYjAY2o2n3isiAeGsyvxKotKimvTOipsSPCJyznWuyTiRXed3ERYS5k+sZw3WIa2kmBvI\nr6z0J9d3ulx8WFXFxNhYpnu9kOnx8YyLjSW0j4iICYW1gREWg6HjeOo9uI+4/Ul11y4XFfkVRA2N\n0uLhDWnFTYkjLC44gh/V9dVsP7udrWe3sv3cdraf3U6dp44Zg2doIfGGtVLiB3PU7fYLyE6nk/zK\nStKjo/2hrBnx8UyKiyMixPqeZ1ZhhKUN7CwsVseeO4td7Ya+abs0iBaRAE+kYn8FkamR/nxI/PR4\n4qbGERbf9SLSWbvrGurYdX4X6wvWs75wPTvO7WDcgHHMGzqPWUNmMSt1FsMThnOmtraJJ7Lb5WJA\neLgWEG8vralxccSFdfzZevPfi8mxGAyGdiENgvtYs5zI/koiBkX4vZABHx9A/NR4whKC6yuiwdPA\n/uL9WkgK1rP5zGbS+6WzKG0Rj89+nBuH3YiExrDD28X31bMudhzaigJ/Yv0/hw5lhsNBf5v10LIT\nxmMxGHox4mkUkYrdFdoT2VtBeHJ4ky6+cdPigqLsSXNEhIOXDpJTkMP6wvVsKNzAoLhBLEpbxOIR\ni1kwfAElKpYt5eVscTrZUl7O6ZoasuLimBkwXmRoZKRJrncCEwprAyMshr6AT0R8AuLa5aJiXwXh\nA8P9ifW4rDjis+IJ7xd8IgJaSE6UnCCnMIf1BevJKcwhNjyWJSOWsGjEImYNXcAZifWLyFanE0dY\nGHMcDuYlJDDH4WBSbCxhfTgv0pUYYWkDOwuLXeO3drUb7GN7bXEtzm1OnNudOLc5ce12kR+TT/aN\n2Y0iMi2e8KTgFBEfp8tP85s3fkPRgCLWF6zHIx4tJGmLGDN4LmdUPzaXl7OlvJzDbjeT4uKaCMlg\ni8eL2OXvpSVMjsVg6MN4ajy49rpwbXdpMdnmpL68HscsB47ZDoY9MYz4GfE05DUwYeEEq81tkwsV\nF8gpyPF7Jc4aJxPcE/jE5Du4beqXOaMGsNXl4tvl5dSduMzchDrmORzcmZFBVlwcUUFcAsWgMR6L\nwRCE1BTV4NzipHxzOeVbyqnMryRmdAyO2Q7/Ep0RbYsJqa64r7Dh1AZ/aOu86zzZw7OZMfRG4gfM\n4FxoCltdFexxuRgVHc2chATmORzMTUhgRFSUyY1YiAmFtYERFkMwIw1C5cFKyjeX+8Wkvqwex1wH\nCfMSSJibQPz0+KAYcNgenDVONp7a6E+4f1jyIXOHzmN86jyikqZzJmwI2yoquVRby2yvgMx1OJjp\ncODoRHdfQ/dhhKUN7Cwsdo3f2tVu6H7b6yvqcW13+b0R5zYnETdEkDAvAcc8BwlzE4gZG9Mpb8SK\n9+6uc7P59GZ/aOvAxQNkpc5kxKDZhPbL4nT4cHZWVJEcEeEXkbkJCYyLiSHE642YvxdrMDkWg8Gm\nVJ+u1gKyWXsj7qNu4qbEkTAvgdQvpDLulXFE3BBhtZntpqa+hu3ntvvHkuwp2sPYGyaRmjyLG8Y8\nwoiJ6eyu9UB8PHMTEviow8Ech4OBEfZ5RsP1YTwWg6EL8dR7qNxfSfmWch3a2uzEU+NpDGvNSyA+\nKz4oJqhqL/Weenaf3+0f3b7t7DaGJGaQfMMsahMmczx8JFERjT215jocTO7jpVB6CyYU1gZGWAzd\nRX15PeVbvd7IlnJcO1xEDovUYS2vmESPirZVAtojHvKK8/weycbTm0iKG0K/ATOojM/kbNRYJiYO\n8oe05jgcDI2KstpsQzdghKUN7Cwsdo3f2tVuaN12EaG6oFrnRryJ9qqTVcRPj/cn2R1zHJaOG+nM\nexcRDl8+TE5BDu8XrCOnMJfIyCQc/adTFpdJQ8Ik5g9MY67DwZyEBGbEx3f5rIe98e/FDvTaHItS\naiXwKyAEeFlEnm7hmGeBm4BK4H4R2ettLwTKAQ9QJyIze8puQ+/HU+uhYm9FY5J9sxMU/iR7yudS\niJsSR0i4vUI+IsLJ0pOsL1jPeyfXsb4wB1HhRPefTmlcJsPnfJbs5Ay/R5IRbS+Py2A9lnosSqkQ\n4BiwBDgP7ATuEpEjAcfcBDwqIrcopWYBz4jIbO9nJ4EsESm9xn1s67EYeo66K3VNw1q7XUSPim70\nRuY5iBpuz3EVZ51nef/kOv5x4n02nsqhqr6W8KQsah2TyRq6gCUp45jjcDDb4bDd9LmG7sOuHstM\n4LiInAJQSr0GfBQ4EnDMR4FXAERku1IqQSmVLCLFgEJ7OgZDhxAR3Efd/nEjzi1Oas7X6JHscx0M\n/9ZwHLMchDms/i/SOYorinnv5DreOL6Gbac34Kwug8QpOPpPZ978F1iZOpl5iYlM7EOTVhl6Dqv/\n16QCZwL2z6LFpq1jznnbigEB1iqlGoAXReR33WirJdg1fhtsdjdUNeDa6Wrs9ru1nNC4UH9PrdQv\npRKXGYcKVUFne3socZfwxom1vPTWK5xMOE5ZZREqYRLDBs3h1huf47Zh05mXkBi087Db8Z37MLZf\njdXCcr3ME5EipdRAtMAcFpEPWjrwvvvuIy0tDYDExESmTJnif6G5ubkAZr8L9/ft22fp/WtLapkq\nUynfXM6699ZRfbKa+ZPmkzAvgRNZJ4j9TCzL71jeeH4ZLAzV5+/bt6/H7e3ofk1DLWdSGnjj2Lts\nXfc2Lvc5IqZMZjDDWRRzP9kjx/PQLbcRGRKizz90mEFBZH/zfav/Xq5n3w5/L+3dz83NZdWqVQD+\n78vOYHWOZTbwXRFZ6d3/BiCBCXyl1PNAjoi87t0/AmR7Q2GB13oKcInIL1q4j8mx9GL8JVECBiH6\nS6LM1d1+HTMdhMbYoyRKS1TV1/N64XbeOPYeO07ncvnyHqJihzMm9UZuGrmce0cvZkxcoi3zP4bg\nxa45lp3AKKXUcKAIuAv4VLNj/gl8EXjdK0RlIlKslIoBQkSkQikVCywHvteDthsswl8SxTcIMaAk\nSkJ2AsOeHNbpkijBgqu+nncunOAvR95hW+F6Ll3aRmRYNKMHz+e+Kffz4Lg3GJ0wyGozDYYWsXwc\ni7e78TM0djf+iVLqYbTn8qL3mOeAlTR2N96jlBoBvIXOs4QBr4rIT1q5h209llybxm+70u7qM9VN\nCjT6S6LMTfAPRIwY2HXlQqx452V1deSUXOS1EzlsLFjLxeIthNQUMyplLstHLueBcbeSOXD0Na9j\n/l56nt5su109FkTkPWBMs7YXmu0/2sJ5BcCU7rXO0NN46j1U5lU2GYToqfb4x45k3JVhu5IoLXG5\ntpaNZWX848xe1p1cy4XizVCeT0piBsvTl3Hv/JdZMGwuYSGW/xc1GDqM5R5LT2Bnj6W3U19ej3Ob\n0y8krp0uIodG+ntrOeY6bFcSpSUu1NSwobyctRdPs+bkOi4Ubya0dBcRSlgwYimfGnMLK0ctJyk6\nyWpTDQY/pqRLGxhhCQ78JVECkuzVBdXET4/319VyzHEE7XzsHeFMdTUbysrILS1hzemtXCreQnT5\nHtzO40xNnc0nRt/MTaNWMH7geNuLpqH3YoSlDewsLHaN3+bm5rJg7gJdEiWg0i8hNCnQGIwlUTr6\nzkWEgupqNpaVsaG8nHUXjlF6cSuJrr2UXNrO4PjB3DZqBStHreTGYTcSHR4dNLYHC3a1G3q37bbN\nsRh6D4ElUY6/c5yQkyH+kigD/20gI/+/kbYtiRKIiHCsqooNZWV6KblIVcleBlbsw3lpG1U1l7kl\nfRkrpt3J8pEvk+pItdpkg6FHMR6LoVOICFXHqpoUaKw55y2JMs8b1rJxSZRAPCIcrKxkQ1kZG8vL\n2VBaSoi7kFR3HlWXt3Pq4h6mDprC8pHLWTFqBVkpWYSG2HfMjMHgw4TC2sAIy/XTUN2Aa5fLnxsp\n3+ItieLr8jvPQezEWELCgius1RkaRNhfUeH3SDaVl5MgboZX5VN/ZSfHz28kOiySFSNXsGLkChaP\nWExCVILVZhsMXY4Rljaws7BYFb+tL6+nLLeMsk1lODc7qcirIHZ8bGOSfa6DqCGtT+5kp7hzncfD\nbpeLDeXlOk+Sm8vQmdMZXVdASNluCoo2cfLKUbLTsv1iMippVFCG9Oz03gOxq93Qu203ORbDddFQ\n3YBzq5PSdaWUvl+K+6Abx2wHCdkJjPjRCF0SJbZ3hHeqGxrY4XL5Q1vbnE5GRkUxJcxFatluJlz6\nO0dzv0N0v3RWjFzBl5f/jLlD5xIRauZsNxjag/FY+ijSILj2uihbV0bpulKcW53ETIih35J+9FvS\nD8dcB6FRvUNIKhsa2FpervMjZWXsdrkYHxvLnNhwEioOcOHCZnIL1uKscbJ85HKWj1zOsvRlJMcl\nW226wWApJhTWBkZYvMn241V+j6Qst4yI5Aj6LdVCkpCdQHii/cePADjr69nsFZEN5eXkV1QwJS6O\nBQkOUuvPcrl4C7kFa9l1fhczBs/Q4a1RK5iUPIkQZf8ckcHQVRhhaQM7C8v1xG9rimooXVfq90oQ\nSFySqMVkcT8iB3ff3Bw9GXcuqatjk1dINpaVcbSqihnx8SxISCAzopbyS9vJKVjLmg/XkBiV6M+T\nZKdlExcRZ6ntXY1dbber3dC7bTc5FgOgJ7S69D+XKHqpiMq8ShIXJdJvST+GPTmM6Az7l0YBKK6t\nZZPXG9lQVkZhdTVzHA6yExP52Yhh1Jbnk3PyNf6xfTW/Ki1g8YjFrBi5gh8s+gFpiWlWm28w9HqM\nx9JLcO1xUfRSERdfv4hjloOUz6XQ/7b+hETYP7RzrqbG741sKC/nQm0t8xMSWOBd4mqLWH9yLWtO\nrmHjqY2MHTDW75XMTJ1JeGjvCPEZDD2NCYW1QW8VlrrSOopfLebCyxeoK60j5XMpDLpvEFFDW+8G\nbAcKq6r83sjGsjLK6utZkJhIdmIiCxISGB7WQG7hetZ8uIbVH66mrqGOFSNXsHzkcpamL6V/TH+r\nH8Fg6BUYYWkDOwtL8xioeISyDWUUvVTElXeu0P+m/gz63CD6Le4XVBNbtTfuLCIcr6ryeyMby8qo\n8XjI9gpJdmIio6Mi2XthD6tPrGb1h6vZX7yfuUPn+r2Sri7k2Jtj5sGKXe2GTtpeUwNlZVBaCuXl\nel1aqtvGjIHFi7vF1uaYHEsfp+Z8DRdWXaDo5SJCY0NJeSCFjGczCO9vrzCPiHDI7fZ7IxvLywlT\nyu+NfHv4cDKioznnOseaD1fz/a2ref/k+6TEpbBi5Aq+veDbLBi+oFsLORoM10QE3G4tBidPQmho\nU3EIXPu2S0r0UlYGdXXQrx8kJjaufds33GD101037fJYlFLzgH0iUqmUugeYBjwjIqe628CuwK4e\ni4jg3Ork7LNnKV1TysA7BpLyQArx0+Ntk4RvECG/osIf2tpUXo4jNNTvjSxISCAtKorq+mo2ntrI\n6g9Xs+bDNRRVFLE0fak/xDXEMcTqRzH0NjwecDpbF4KWtktKGtvCwpqKg28JFIvmnycl6f3YWLDB\n/+FuDYUppfKAycAkYBXwEvBJEcnu6A2twG7C0lDdwKXXL3H22bM0OBtI/VIqg+4bZIuCjvUeD3sq\nKvyhrQ/KyxkUEcGChAS/kAyJitKey6VDrP5Qh7e2nNnC5OTJ/jElppCjocOIwIULUFgI589DcbHe\nLy5uFISe8+9HAAAgAElEQVRAoXA6ISbmamFoLga+7aSkpm2R3dddP1jobmHZIyLTlFLfAc6JyMu+\nts4Y29PYRVhqztVw7rfnKPpdEfHT4kl9LJW8yDwWLV5ktWmtUuvxsNNXHqWsjK1OJ8Ojohh59Ch3\nL1/OgsREkiN0KZQr7iusK1jH6hOrWXNyDaEq1C8ki0csJjEq0eKn0fS5eH8Q0C67ReDyZS0cBQVX\nr0+dAocD0tIgNRWSk2HQIB1a6t//aqFISNBeR0/YHqRYnWNxKaWeBO4BFiilQgB7BfeDFBHBucUb\n7lpbSvI9yUzdOJWYMTEAqNzgcperGhrY7nT6Q1s7XS5GR0eTnZjIF1JTeXX8ePqHh5NbWcn8AUls\nP7ud//Z6JYcvHWbB8AWsGLmCJ+Y/QUZShm1CeoYeoqysUShaEo+ICC0cI0boZcIEuPVW3ZaWpkNM\ndqK6Go4ehYMH9XLoEMydC1//utWWXRft9VgGAXcDO0Vkk1JqGLBQRF7pbgO7gmD0WBqqG7j42kXO\nPXuOhgpvuOve4At3VdTXs8Xp9Ie29rpcTIyN9edI5iUkkBDwq6+wrNDfeyunMIfhCcP9Xsm8ofOI\nDOv94QNDG1RUtO5xFBZCfb0WjEDx8G2npWkvw460JCAHD8KZM5CeDuPHa5GcMAGmT9fPGwR0dyjs\naRF54lptwUowCUt9eT3nnjvH2WfPEp+lw11Jy5OCpquwu6GBzeXl5JSVkVNWRn5FBdPi4/35kTkO\nB3EBQlJRW0FuYa5/TElpVame8GrkCpaNXMaguEEWPo2hx6mu1gLhWwKFo6AAKisbvYuWxCMpyRZJ\n7VbxCYhPOHwicvp0o4c1YUKjkGRkaC8sSOmRHEuztjwRmdTRG1pBMAhLXWkdZ585y/n/Pk/STUkM\n++YwYsde223v7vhtjcfDNqeT9aWl5JSVscflYkpcHIv79WNRYiKzHQ6iQxuT6B7xkFec5/dKdp7f\nyfTB0/1jSiYPmkyICunVcedgptttr6vTX5IteRwFBTopPnTo1Z6Gb52c3KJw2O6dV1fDsWNw8CC5\n//d/LKys1CJiMwGxJMeilPoC8AiQ7u0Z5iMe2NLRm7Vyj5XAr4AQ4GURebqFY54FbgIqgftEZF97\nz7Wauit1nPnlGc7/9jwDPjaAqVunEjMqxjp7vMn2nLIy1peWssPlYnxMDIsSE/nW8OHMS0ggNrRp\nb6yLlRf9HsnaD9fiiHSwYuQKHp/9OItGLGqxkKPBpjQ0wNmzrYerioshJaWpYKxc2bidkqLHdPQW\nampaDmGdOqVDWBMm6J5ld90V1ALS07TpsSilEoB+wI+BbwR85BKRkuu+ue4EcAxYApwHdgJ3iciR\ngGNuAh4VkVuUUrPQ42dmt+fcgGv0uMdSe7GWMz8/Q9FLRQy8fSDDvjGM6BE9P6ivQYQ9XiHJKStj\nc3k5o6KjWZSYyKLERG5MTPTnSOoa6igsK+R4yXFOlJzg+JXjbD6zmZOlJ1k0YpHfKxnRLzjiv4ZO\n4PHoLrjNPQ3f9rlzMHBg6x7HkCEQ3gv77QQKSGAYy+eBBOZAxo+H0aP7hIB0e0kXpVQokEyAlyMi\npzt6w2bXnA08JSI3efe/oS/b6HkopZ4HckTkde/+YWAhMOJa5wZco8eEpaaohjM/O8OFVRe44e4b\nGPafw4ga1r21uxpEKK6t5WxNDWdqavS6upqjVVV8UF5OakSEP7Q1zxGHq/I8x0uOc/zK8UYRKTnO\nmfIzDI4fzKikUWQkZZDRP4Ppg6czK3WWKeRoF0TgypWrBcO3feqUToC3JhzDhvXu8Rk+AQkUj0AP\npI8KSGt0d47lUeC7QDHg8TbL9eZYlFKfAFaIyEPe/XuAmSLyWMAx/wJ+LCJbvPtrgSfQwtLmuQHX\nkK8vv/kaxgghCEp5iIysIiqiqsPPE1EaQfSVKFSK4BnpISw+hJCQ66sufLSwlDFp/QCoVYrKkBDc\nhOBWIbhVKFVKb0eKhxg8RIuHWI/ejmqoJaKuEme9m4t1Ls7XlHGptoLE8BhSIxMZHJlISmQCgyMT\nSY3sR3JEPOEhXdMrbdPxs9yYYc/R8kFnu8ejvxCrqqGmCqproNq3rm5cXC42nbnMjY5wPW4jKUmv\nfUtSEiT1D8ovyk15x7lxUkYXXU0Id4cT4QohpLRCj33xiUlhYWMOJFBErkNAbJcfCsDqcSxfAcaI\nyJWO3qAb6FSXkbyNq0kJ1V/ysQoywkOZGqFjwXtrGwAC9j0oapkWpdv31uhrTPX+kGtrX4C9hSBb\nYaL373RvrTZ6apRe763VTzE9WhEaCntqtLhnRetH213VuF9fJdR7n2FGlEIFfD7d6wjt8mrg9Oim\n+zOiIVLB3mpIAxbGQISCzVUuwMWCmLMAbHILJ1EMiVGgYJNb23ljjPJ/Tgf386uFBUkhnT7fyv38\nEg8qSgWNPZvcAgpujA0FFJvcHlCKG+NCQSk2VXj05/FhqPBwPqhWcK6EG51OKCxkk0v/Bd0Yr/+7\nB+N+vruBBcmRXXK9ja56GqIamJlaR0NCJJurYyE1mTkPLSRs/Cx25bmJihrC0qUfBfSXK5cv+79g\nc3NzAdq9v2/fvg4dH8z7ubm5rFq1CoC0tDQ6S3s9lhxgmYjUX/Pgjtxch8K+KyIrvfvtCYUdAbLR\nHkub5wZcQ/70J+Gee9pn18GDcPvtepzSc89B9HWkRmpqaqioqMDlcjVZnz17lnXr1vH+++8THx/P\nsmXLWL58OYsWLSKhG/rq19TXcMl9iUuVl7hYeZFLbu+6+b53XdtQyw2xNzAgZgBJ0Un0j+7fdB2j\n14FtSdFJJmRmCBpEPNTWXqS6upCqqhNUVR2nquo4bvcxqqqOo1Qo0dEZREdnEBOT4d+Ojs4gPDw4\nqkBYTXeHwl4GxgDvADW+dhH5RUdv2Oy6ocBRdAK+CNgBfEpEDgccczPwRW/yfjbwK2/y/prnBlxD\nbrhB2L9fV3hoDxUV8PDDcOAAvPmm7uzRHYgI+fn5rFmzhrVr17JlyxYyMzNZtmwZy5YtY9asWYRb\nkCytqqvikvsSl92XKakq4Yr7il5XNVsHtJdWlRITHuMXndbEqPl+v6h+pi6YoUcREerqLlFVdcIv\nNI3Cc5zQ0OgmQhMoPGFh8Vab32N0t7A81VK7iHyvozds4dorgWdo7DL8E6XUw/ry8qL3mOeAleju\nxveLyJ7Wzm3lHvLkk8LRo1ok2jv+SgReeAG+8x34zW+0F9PdVFdXs3nzZtauXcvatWs5evQoixcv\nZvny5SxevJhx48YFbRkUj3hw1jgpqSphzftrGDF1RIsC1FyYnDVOHJGOlsUnQISaC1JCZEK3vIve\nHDMPVoLJbhGhtvZCE6FpFJ4PCQ2NbyI0e/bUsmzZx4iOHkVoqL1KynRXjqVDE30ppWJExN3Rm1iN\nUkqqqoSpU+H734c77ujY+bt363Nuuw1+9rOezX3+/e9/p7q6mrVr15KTk4Pb7WbhwoUsWrSIhQsX\nMnr06KAUmo58UTR4GiirLmvVE/Ktm7dV1lbSL7pf6x5RC+39Y/oTGx7b5jsLpi+5jmJX2+1itxad\n803EZuPGLUyYUEZ19YeEhfUnOnqUV3hG+72dqKiRhIYG38yulgqLUmoO8DIQJyLDlFKTgYdF5JGO\n3tAKfN2Nt26Fj38c8vNhwICOXaO0FO6/Xw8BeP11GD68e2y9FoWFheTm5pKTk0NOTg4NDQ1NhGbk\nyJFBKTTdQV1DHaXVpVxxX2m3IF1xX6FBGq7yhHyiEyhAzYUpIjT4elMZggeRBmpqzjbzcHROp7r6\nFBERyURHj/KKzeiAUFs6ISHB+bfV3cKyHbgd+KeITPW2HRCRiR221AICx7F89ataHP7yl45fRwR+\n/nPttfzhD3DzNXowdzciwsmTJ5sITUhIiF9ksrOzSU9P7zNC016q6qpaFZ22PKSosKjWw3OteE39\novsR1kVduA32xeOpp6bm9FWhNbf7GDU1Z4iMHOL3bpKSbqZ//5usNhnoAWERkVlKqb0BwrJfRCZ3\nwtYeJ1BY3G6YNAl+8Qv4yEc6d70PPoBPfQo+/WkdWuuCKR1apSMhAhHh+PHj5OTkkJuby6ZNm6is\nrGTatGlMmzaNrKwspk2bxqhRo657fE1X2h1stGS7iOCqdbXsFQWKU7O2suoy4iLiOhSqS4pOIjEq\nkRDV8X8ju753u9oN12+7x1NHdXWBX3Sio0cyYMBtXWdgG1g9juWMUmouIEqpcODLwFW9r+xATAy8\n9BLccw8sWKDn/Oko8+frvMu//zssWwZ//Wv7e5t1J0opRo8ezejRo3n44YcBKC4uZu/evezevZs3\n3niDJ598kitXrjB16tQmgjNmzBhCe1ONpy5GKYUj0oEj0kFaYlq7z/OIh/Lq8hY9oCvuK5woOcH2\nc9spqSpp8pmrxkVCVELL4tOKIPWP7o/VxVYNHSckJJyYmNHExIymf3+rreka2uuxDED3vlqKHju3\nBvhykAyYvCYtlXR55BE9mPnllzt/3YYG+MEP4He/g1dfBbv84CopKWHPnj1NlvPnzzNp0qQmns34\n8eMt6epsgHpPPWXVZU3Ccz4xaq3L92X3ZWobahkQM4D+Mf0ZEDNAb0f3b7IO/Lx/dH8ckQ4TLjW0\nSI/0CrMrLQmLywUTJ2pRWL78+q6/Zg3ce68Oj33jG3omVLtRXl7Ovn37/EKze/duCgsLGTduHJMn\nT2bSpEn+df/e8rOqF1JdX80V9xUuuy9zpUqvL7sv+9suV12+6vPq+mq/1+MTG78YxbS8nRiVaMYe\n9QG6RViUUv8pIj9VSv0aXa2kCS3V5QpGWitCuXo1PPSQHgQZf51jni5cgP/6L90p4IEH9MyiHe15\n1hJWxp4rKyvJz88nLy+PvLw89u/fT15eHnFxcX6R8S1jxoxp4t305Zi5lXTG9pr6Gr/H4wvZBQqP\nfx3Q7qpxkRiV2FSMYvozIPpqMfJ93lZlhr72zoMFq3IsvjzKro5e2A6sWAFLlmgv47//+/quNWgQ\n/PrX8J//CT/6EYwZA5//PHzta7r2nx2JjY1l9uzZzJ49298mIpw+fdovMm+99Rbf+973OHPmDGPG\njPF7NiLChAkTGDhwoIVPYGgPkWGRpMSnkBKf0u5z6j31lFaVtipGx68cb+oxeSszxEXENREb39p5\n1Mnh2MNXiVH/mP5EhQXf+A9D2/TZUJiP0lLIzIQ//7lrcySnTmkP5n/+B774RXj8cejXr+uuH2y4\n3W4OHDhwlXcTFRXl92p8Xs7YsWOJCMIKu4buxdeRobkX1MQjqrq6LSI04uqwXPPQXTOxigmPMXmj\nLqC7uxuvBe4QkTLvfj/gNRFZ0WFLLeBa87H861/wla9AXh7EdnFFhoIC+OEP4R//gC99Sd+nG2pM\nBiUiwtmzZ/0i4xOcwsJCRo8efZXgDAqGrnWGoMLXzdsnNv5cUaCn1IIY1Xnq/L34HJEOYsNjiY2I\nJSY8Ri9hMf7twPbY8IBjmn0eFxFHXEQc0WHRfUa0ultY9onIlGZt/jEtwU57Jvr6zGe0R/HMM91j\nw4kTWmDeeQe+/GV47DFwOK59nl3jt23ZXVVVxaFDh64SnLCwsKvEZty4cUT28MRTdn3nYF/bu9ru\n2oZanDVOnDVOyqvLcde5/UtlXWXT/dpKquqrrvqssrbS3+bbrqitoLq+mujwaL/wSIEwcMLANsUp\nJjyG+Ih4HJEOYsJj/OdHh0U3uVZ0WDTxkfE9Fv6zehxLg1JqmG/GSKXUcFpI5tuZX/1Kh8Q+8Qk9\nvqWrGTUKVq2CY8d0F+X0dN2T7JFHYOTIrr9fMBMdHU1WVhZZWVn+NhHh/PnzfrF57733ePrppzl5\n8iSjRo26SnBSUlL6zK9GQ8fxhc8GxHRBD5pmNHgaqK6v9otQTk4OmbMy/QLlE6HAbXedm4uVF3HW\nOP2f+dqr6qr8bVV1Vdw7+V5+vuLnXW53T9Jej2Ul8CKwAe8cUMBDIrK6e83rGto7NfE//6mT7fv3\n64GU3UlBATz/PPz+9zBzJjz6qO5M0M0D4m1HdXU1hw8fvsq7Aa4Sm/HjxxMVZRK9BkNX0RNz3g8A\nfN2DtonI5Y7ezCo6Muf9PffoPMtvf9szX/JVVfDaa7pHmculPZj77+9cRYC+gohw4cKFJp0E8vLy\nOH78OOnp6U3EZvLkyQwePNh4NwZDJ+iucSxjReSIUmpaS5/75kUJdjoiLCUl8LGPaXH505+6ZixK\nexCBbdv0jJX/93/wyU/q3mQlJSZm3l5qamo4cuTIVYJTV1d3ldiMHz+e6FamBrVrngLsa7td7Ybe\nbXt35Vi+CjwEtBTwE2BxR28Y7CQlwfr18P/+H2Rl6RL5AcM4ug2lYM4cvVy4oCsC3HSTFrZvfUuL\nnamu0jaRkZFMnjyZyZMn8+lPf9rfXlxc7Beb3NxcnnnmGY4dO0ZaWlqTgZ6TJ09myJAhFj6BwdA7\nuJbHcoeIvKGUSheRkz1oV5fSEY8lkH/+Ex58EL75Td2Lq6ejKXV18Pe/ay/mxAlty+c+B0OH9qwd\nvZHa2lqOHj3q92x865qamiYVBSZPnsyECROI6e6km8EQhHRXKGyPiEzzra/LQgvprLCATrLfcQek\npemClVaNQcnLgxdf1CVj5s6Fhx/WHk13luzvi1y8eNEvNPv37yc/P5+jR48ybNiwqzoLDBs2zORu\nDL2a7hKW9wEPMBPY2PxzEenkjCY9y/UIC+gqyF/9qi42+eabMLkHZ6FpHgOtrIS//U2LzJkz2oN5\n4IHg82J6U9y5rq6Oo0ePXpW7qaysvMq7mThxIrFdPcr2Omy3C3a1G3q37d2VY7kZmAb8iZbzLH2C\nyEhdS+yvf4WlS+EnP4HPfrbnQ2OgOxXcf79e9u/XuZjJk7UX89BDelZL48V0LeHh4UycOJGJEydy\n9913+9svXbrkL9K5detWnn/+eY4cOUJqaupVuZu0tDTj3Rj6DNfyWP4kIp/2VTnuQbu6lOv1WAI5\nfBhuvx1mzIDf/Kb7x7u0h8pKeOMNeOGFRi/mc5+DYcOstqzvUV9fz7Fjx67ybpxOJ5mZmVd5N/HX\nW1bbYOhGuisUdgg9ude7wEL04Eg/IlLS0RtaQVcKC+gv8i98Afbu1aGxMWO67NLXTV6e9mL+8hct\nfh/5CNxyCwwfbrVlfZsrV66Qn5/fpLPA4cOHGTRo0FXz3YwYMaLbp442GNpDdwnLY8AXgHTgHE2F\nRUQkvaM3tIKuFhbQ405eekn3GHvuObjzzi69vJ/Oxm/dbl1c85134N13ISVFC8ytt+ru0909C3Fv\njjt3FfX19Zw4ceIq76akpKSJdzNp0iQyMzNJaEfPEbu+d7vaDb3b9m7JsYjIs8CzSqnfisgXOnrx\ntvBWSH4dGA4UAp8UkfIWjlsJ/AoIAV4Wkae97U8BDwIXvYd+U0Te60ob20Ip3f03K0v3Gtu0CX7+\nc52PCQZiYrTY3XmnnkJ5xw54+2096PLsWVi5UgvNypW9u5x/MBMWFsbYsWMZO3Ysn/zkJ/3tpaWl\n/tzN3r17+eMf/8jBgwdJSkoiMzOTzMxMJk6cSGZmJmPHju3xIp0Gw7XoSEmX+UCGiPzBW94lXkQK\nOn1jpZ4GrnhnqHwC6Cci32h2TAhwDFgCnAd2And5qwE8BbhE5BftuFeXeyyBlJXpnlk7d+qJvj77\nWWhlUHdQcOaMHt3/9tuwYQNMmaI9mVtugfHjremUYGgbj8dDQUEBBw4cID8/378UFBSQnp7u71ww\nYcIEJkyYwMiRIwkzvTgM10l3l81/CpgOjBGR0UqpwcAbIjKv46b6r3kEyBaRYqXUICBXRMY2O2Y2\n8JSI3OTd/wY6BPe016YKEblmb7XuFhYf27bBj3+svYOvfEXnYdpTGt9KqqogJ0eHzN5+W9dH84XM\nFi4EU9MxuPGVscnPz+fAgQMcPHiQgwcPcuHCBTIyMvxC41vS09MJ7e44qKHX0O3zsQBTgT2+OViU\nUnkiMqnDljZes0REklrb97Z9AlghIg959+8BZorIY15huQ8oR0+d/LWWQmne83pEWHzk5+suyatX\n66KSjz3W+ZpjPRm/FYEDBxpFJi8PbrwRFi/Wy+TJ7S/M2ZvjzsGMz/bKykqOHDniFxrfUlxczJgx\nY64SnLS0NEsFpze8czti9XwstSIiSinx3qxdI8C8M08mBzaha4x9q4XDO/rN/xvg+167fgj8Avhc\nawffd999pKWlAZCYmMiUKVP8LzQ3Nxegy/avXMnlwQfhe99byE9/CiNG5LJyJfzqVwtJTe36+3Xl\nfmamtn/2bMjMXEhODvzpT7k88wy43QtZuBCGDMll2jT49KcXolTL19u3b19QPE9n9vft2xdU9lzP\nflZWFrm5udx0000sXLiQiooK/vznP1NYWEhJSQnPP/88u3fvpry8nPHjxzNhwgSio6NJS0vjrrvu\nIi0tjY0bN3a7vebvJTj2c3NzWbVqFYD/+7IztNdj+Q8gA1gG/Bj4LPAXEfl1p2+s1GFgYUAoLEdE\nxjU7ZjbwXRFZ6d33h8KaHTcc+FdrHlRPeyzNOXsWfvELPdHXHXfAE0/oib7sxrlzOmy2fj2sW6dr\nmfm8mcWLddkbgz1xuVwcOnToKg+npKSEcePGMWHCBL/wTJgwgeHDh5su0X2AnpiPZRmwHO11rBaR\ntR29WbPrPQ2UePMlrSXvQ4Gj6OR9EbAD+JSIHFZKDRKRC97jHgdmiMjdtIDVwuLj0iV49lk918vy\n5TpMNm+ePZPlIrqO2vr1jUtMTKPILFqkuzgb7E15eblfcAKFp6yszC84gYupn9a76AlhSQZmeHd3\niMjFto5vx/WSgL8BQ4FT6O7GZUqpFOB3InKr97iVwDM0djf+ibf9FWAKupZZIfCwiBS3cq+gEBYf\nTqcuaPnCC3o8yec/D5/+dMuTe+XaJH4roqsS+ERm7dpchg5d6BeahQv1lAR2wC7vvCV6yvaysjIO\nHTp0lZfjdDr9nk2ghzN06NA2Bce8c2u4lu3dmmNRSn0S+BmQi/ZYfq2U+rqIvNnRG/rwjtpf2kJ7\nEXBrwP57wFVj20XkM529t9U4HPD447rn2IYNWmC+8x0958rnP6+nKrbbjz6ldFfl8eP1NMvr1unx\nMevX60oA998Po0Y1ejTz54OpZmJfEhMTmTt3LnPnzm3SXlpa2kRs3nvvPQ4ePEhlZWUTofEtqamp\nxsPphbQ3x7IfWObzUpRSA4H3RaQH6/x2nmDzWFri4kWdg3nxRYiL02Xx//3fg7+7cnupq9PjfHwe\nzc6dMGlSo9DMmWO6NvdmSkpKrgqnHTx4kOrq6hY9HDOddHDQ3d2N80UkM2A/BNgf2BbM2EFYfHg8\n+tf+Cy/o9R13aC9mmm1nw2mZqirYurWxI8CBA9pT8wnN9Olmxsy+wJUrV1oUnNra2hYFJyUlxQhO\nD9LdwvIzYBLwV2/TnUCeiDzR0RtagZ2EJZCiIvjWt3JZt24hAwfqisV33mmPEiwdjTs7nbosjs+j\nOXlSh8s6M4bmeunNMfNgpbndly5darGXWkNDQ4shteTkZMsEx67vHCzKsSilRgHJIvJ1pdTHgfne\nj7YCr3b0ZoaOkZKik/ovvqgHW65apbsqr1gB996r172laofDoUf833KL3r98Weef1q/XxT4vXoTs\nbFiyRAvN2LH2y0MZ2s/AgQPJzs4mOzu7SfvFixc5dOiQv8rAm2++ycGDBwGaCM7YsWPJyMhg6NCh\nptKABVyruvHbwJMikt+sPRP4kYjc1s32dQl29VhaoqQEXn8d/vhHOHVK52HuvRcybRGU7Dznzzcd\nQ1NT03QMzYgRVltosAoRobi4uImHc+zYMY4fP87ly5dJT08nPT2dESNGXLU4eksSs5vorrL5O0Vk\nRiuf5Zsci7UcOQKvvAJ/+hMMHKgF5u679XZvp/kYmqiopmNoBg+22kJDMOB2uzlx4gQFBQUUFBRw\n8uRJ/3ZBQQHR0dEtCk56ejrDhw8nIiLC6kewlO4SluMiktHKZydEZFRHb2gFdhaW9sRvGxr0r/lV\nq3SNr+xsLTK33gpW/b/oybiziBZZn8jk5sINN9BkDE3//u2/Xm+OmQcrVtgtIly8eLGJ0AQKz7lz\n57jhhhuaiE2g+AwePJiQkBDbvnOwbhzLLqXUgyLyu2Y3ewDY3dGbGbqH0FBYulQvTqee1fKZZ3Qp\n/2XL4Kab9LwrgwZZbWn3oBSMG6eXL35RC+3+/Vpsf/97PY1Benqj0Nx4Y+/pxm3oPEopkpOTSU5O\nZvbs2Vd9Xl9fz9mzZ5sIzurVq/3CU1payrBhw0hISCArK+sq4UlKSuqzPdiu5bEkA28BtTQKyXQg\nAvg3X0mVYMfOHsv1cP48vPeenntl3Tr95XrzzVpoZs3q/lkkg4XmY2h27NA5KZ/QzJ0b3PPnGIIT\nt9tNYWFhE48nUISAFkNsI0aMIC0tjZiYGIuf4Np0d3fjRcBE7+5BEVnf0RtZSV8VlkDq6mDLFj1N\n8bvv6sKYy5droVmxQoeO+gqBY2jWr9fTA8yY0Sg0M2eaMTSG60NEKC0tbVV0Tp06RWJiYothtnHj\nxpESJIX2ur1WmJ2xs7B0V/z27Fntzbz7rvZmMjIavZkZM67fm7FT3NnlajqG5siRXLKzG+ucTZli\nH+/OTu89ELvaDZ2z3ePxUFRU1ERwCgsLOXnyJEuXLuXb3/529xjbDEtrhRl6H0OG6BzMAw9AbW2j\nN/Pgg3DhgvZmbrpJr3u7NxMfr0X15pv1/j/+ofM069bpcUQXLugOET6hMdM3G66XkJAQUlNTSU1N\nZf78+dc+wWYYj8VwFWfONOZmcnJg2DA9MHHJEliwoO8lvouKGsfQrF8Pbrfu0uwTmvR0IzSG3okJ\nhbWBEZbOU18Pu3frX+/r1jUmvn1CM2cOREZabWXPUlDQVGjCw5uOoRkyxGoLDYauobPCYqaAC3J8\n0xWwM50AABYaSURBVIZaRViY7kH2zW9qYbl4EX7wAx0qeuIJGDBAh8uefhp27dLtwWD39XAt20eM\n0F2Y//xnPavmmjU64f+Pf+h8zJgx8IUvwBtv6MndehK7vne72g3G9pYwORZDh4iObvRWAMrKdE2v\ndev0oMyiIp2PGDYMkpN7f00vpbSQ+MTE44H8fO3JvPKKzmGlpTV6NAsWQEKC1VYbDN2LCYUZupSi\nosZ6XuvW6VDa4sWNYjR0qNUW9iy+UKIvbLZtm07++4Rm3jw9pbPBEIyYHEsbGGGxBhH48MNGkVm/\nXk9P7BOZRYs6VmqlN1BdDdu3N76PffsgK6tRaGbNsq4Mj8HQHJNj6aXYNX6bm5uLUno64ocfhr/9\nTedn/vY33fb73+tcxbRp8PWv615olZVWW63pznceFaVDhd//Pnzwge7K/OST+tkff1wL7YoV8NOf\nNs1ZtRc7/73YFWP71Zgci6HHCAnRye0pU+BrX9PjZ3bs0L/ef/Qj2LNHC83Spdqj6Qsj4OPidB23\nlSv1fmlp4zw0992nOwcsWKALaWZn6wnP7DJY09B3MaEwQ9BQUaFHwPtCZ75ZJH2hs8zMnptFMlgo\nLtZdmzds0EtRkc7L+IRm6tTeM9mbIfgwOZY2MMJiTy5f1l+qPqEpK2vaEaAvDkwsLoaNGxuF5vRp\nXURz4ULt2WRlmRyNoeswOZZeil3jt11h94ABcMcd8PzzcPy47l21cqX+Yp0/X3fj/exn4dVXda6i\nqwjmd56crN/Jc8/pbs0ffqjL8Jw/D488AgkJuSxYoMcdvfOODq3ZgWB+59fC2H41ljnRSql+wOvA\ncKAQ+KSIlLdw3MvArUCxiEzq6PmG3sOwYXD//XoRgcOHdS7izTfh0UchNbXRm8nO7hvjRQYMgI9/\nXC+gxSQ8HDZvhl/+Ej71Kf3e5s3TYjxvnu400dc8PUPPYlkoTCn1NHBFRH6qlHoC6Cci32jhuPlA\nBfBKM2Fp1/neY00orJfT0KCT/76wmW+8iE9o5s3TPbL6GvX1etKzzZt1L7QPPtDtgUIzZYrJ0xha\nxnY5FqXUESBbRIqVUoOAXBEZ28qxw4F/NROWjpxvhKWPUV2t51zxCc2BA7qXmU9osrL65pepCBQW\nNgrN5s1w6pSeKsEnNLNn971Co4aWsWOO5QYRKQbwzkTZ0eLs13u+LbBr/NZqu6Oi9ADMH/5QC8zZ\ns/CVr+ixNA88AAMHwkc/Cs8+CwcP6i9cH1bbfj1cy3aldCjsnnt07io/XwvL176mJ4P74Q9h8GDd\n2+xLX4LXXtPvzmq7gxlj+9V06282pdRaIDmwCRDgWy0cfr0uRZvn33fffaSlpQGQmJjIlClT/BPc\n+F6u2e+6/X379gWVPQC33baQ227T+yUlUFOz0DuGJpfaWrj55oUsWQIFBfuCwt6e2t+/P5eYGPjR\nj/T+2rW5HD8ObvdCXn8dHn44l6goWLp0IfPmQWRkLmlpsGRJ19kTjH8v7d3ft6/3/L3k5uayatUq\nAP/3ZWewMhR2GFgYEMrKEZFxrRzbUiisI+ebUJihTU6ebFp6JiFBh8x8pVYGDLDaQusQ0b3yfDma\nzZt1t+c5cxpzNTNnmppnvRE75lieBkpE5Ol2JN/T0MKS2cnzjbAY2o3Ho3MyPqHZtEmHjwInO4uL\ns9pKa7l4Uc866svV5OXBxIlNOwUkJ1/7OobgprPCgohYsgBJwPvAUWANkOhtTwHeDjjuL8B5oAY4\nDdzf1vmt3EvsSk5OjtUmdAq72i1yte21tSKbN4t8//si2dkisbEi8+aJfOc7Ihs2iNTUWGJmi1j1\n3t1u/S5+9CORm28WSUwUGTVK5N57RV58UeTQIRGPp/Xze9Pfi524lu3e784Of79b1i9GREqApS20\nF6HHrfj27+7I+QZDVxMerke3z50L3/62npr4gw+0N/PVr8KxY/ozn0czZUrfKz0THa09uQUL9L7H\nA4cOaY9m40b48Y/B6dTvyefRTJ/e92Yf7SuYki4Gw3VSUgK5uY2hs0uXdI80n9BkZJgBiaCrAwR2\ncz5yRIuwT2jmzu170ygEO7bLsfQkRlgMPcnZs00nOwsJaVrjbPBgqy0MDioq9Nw0PqHZtg2GDGnM\n08yf3zfrwQUTdhzHYmgHvq6AdsOudsP12z5kCHzmM/DHP8KZM7B2re419fe/6wrN48bpEjRvvdX1\ntbzs9N7j4rTQPvUUfPObugv4q6/qqQHefVeX5UlJgdtv1+Vpdu7UY22CDTu98+Z0l+19cOyxwdBz\nKAVjxujlkUd06Zl9+7Qn88ILWoDGjm30ZubP1/mKvkhYmB6YOXWqFl4RXb3Z59H84Q9QUKCrBPi8\nmtmz+0ZNOLthQmEGg4XU1OgQkC9stn+//uL0Cc2MGX2z9ExrlJXpSgq+XM2uXXpG0sBuzsOGWW1l\n78HkWNrACIvBLrhc/3979x5kZX3fcfz9aYiKRkGMRDTxRgS0gW4gRYnssKbNVFOjDM3Q1ksC1Zlq\nmqo1idJO1ElrpiUdM7XmUq1RTFvrxMYYMLVoo5suNaLCbiSCVk28gHipaZxIQAG//eN3juewnt09\nu57zXHY/r5lnOOfsc5aPD7vn6+/6pFlU1ULz9NPQ2ZkmA3R1+Q6S/b3+OvT27jkpYK+90uLNE06A\n449PdyUdq63At8uFZRBlLizd3d1vbr1QJmXNDcXK/uKLacZZ9di6tXar4mqhqZ/aXKTsw9Gq3BHw\nxBOpFbh2bTo2boRp09LGo3PmpGnOM2e2brfrsl5zGDr7SAuLG9lmBTZ5MixenA5INzT74Q9Tkbn2\n2lR4qoVmwYI0hjOWSWl69zHHwNlnp9d27Eg7Azz0UDqqN46bPr1WbObMgVmzxuatFdrBLRazEtu6\ntVZourtT4Zk3L403dHam2Wj+sHyr7dtTsVm3LhWbdeveWmxa3bIpI3eFDcKFxcaKl15K4ww9Pel4\n5JG0CLGzMx0f/jAceGDeKYupvthUC85Yb9m4sAyizIWlrP23Zc0Noyv7tm1pvGHNmlRo1q5NG2pW\nWzSdnWndTd6Kes37F5t169IWPtOmpRbNnDkA3Sxd2lXKYuMxFjMbtv32q01dhrTAsK8vFZlbb4UL\nLkjndHbWis2MGWNvr7OBjB+fZpYdf3zttf5jNt3d6UZpY7ll059bLGZjWAQ89litRdPTkzaLPPHE\nWrGZPTtN4bWBDdSyKXuxcVfYIFxYzJq3ZUvtpl49PfDkk2mhZrVFM2+e70fTjGa60YpebFxYBlHm\nwlLUvuehlDU3OHt/1dXu1RZNb2/qLqu2aObPf/s39Ror17zajVY/G61/y6arK+0nlwWPsZhZLiZO\nhFNOSQekD8d161KRueEGOPdcOPjgPcdppk71rsSN7LNPmgI+d27ttR070lY+1WKza1d2haVd3GIx\ns7eleivnnp5a99nu3XvOPJs1y1vRlJG7wgbhwmKWnQh46qk9JwQ891wam6m2aubO9f5dZeD7sYxS\nZb3XQ1lzg7O/XVJaK3P22XDddbBpU9q/67zz0v1nLrkkdZ2deCJceinccQesXJl/7pEqwjUfKd+P\nxcxK6+CDYeHCdEBauLl2bWrNXH112i1g6tRa99n8+d7+vszcFWZmudu5Mw1g14/TjB+/54SAY4/1\nws2seYxlEC4sZuUSkfbpqo7R9PSkac/1CzfnzPHCzXbzGMsoVdb+27LmBmfPQ//cUlpIeM45sGJF\nWqS5YQOcdVa6XfGnPw2TJqU1H5ddBqtXp5uk5aGs1xzalz23wiLpQEl3SXpM0mpJDe9cLembkl6Q\n9HC/16+QtFnS+spxcjbJzSwPhx6a7ktzzTVpkeaWLbBsWZru/KUvwZQpqRVz0UVwyy3w05+mlo9l\nL7euMEnLgZcj4suSLgUOjIhlDc6bD7wKfCsiZtW9fgXwy4j4ShN/l7vCzEa5115LCwx7euCBB9Kx\nY0fajmbOHPjgB9Nx1FFevNms0o2xSHoUWBARL0g6BOiOiBkDnHsEsKpBYXk1Iq5q4u9yYTEbg557\nDh58ENavT0dvb5qR1tGRiszs2enP6dNhnOfIvkUZx1gmR8QLABHxPDB5BN/jM5L6JF0/UFda2ZW1\n/7asucHZ89Cu3IceCqefDl/8IqxaBZs3p92cly1Lt31etSpNgZ4wIW2Nf/75ae3NQw+l1k6e2bNQ\nynUsku4G6renExDAFxqcPtwmxdeBv4yIkHQl8BXgnIFOXrJkCUceeSQAEydOpKOj483N16oX189b\n97yvr69QeYbzvK+vr1B5xsLzLH9eNm7sZu+9Ydmy2te3bYMDDuhi/Xq47bZuli+HrVu7eP/7YcqU\nbo45BhYv7qKjA9av3/P7jaafl+7ublasWAHw5uflSOTZFbYJ6KrrCrs3IhpuvdaoK2yYX3dXmJkN\ny44d6dbO9d1oGzakSQLVLrTqn5NH0t9SAmXc3XglsARYDnwK+N4g56py1F6QDql0oQEsAn7Shoxm\nNkbts09tK/uqXbvSNve9vanYLF+eHu+7b63IVI8jjhi7kwTyHGNZDnxU0mPAbwF/AyBpiqQ7qidJ\nuhm4D5gm6RlJSytf+rKkhyX1AQuAP8s2fjaqzdSyKWtucPY8lCX3uHFw3HFw5plw1VVwzz2p62zN\nGli6NE1vvv76tOHmQQelW0J//vNw881pz7Tdu/P+L9hTu657bi2WiPg58NsNXt8KnFr3/IwB3v/J\n9qUzM2tOddPNo46CRYtqrz//fGrN9PbCd78Ll1+eXps5c89utA98APbeO7/87eAtXczMMvLKK9DX\nV+tK6+1NOz9Pn14rNCedlIpNEZRuHUuWXFjMrKi2b0+TAqqFpqMjTXsugjKuY7EmlKXvub+y5gZn\nz0NZc8Pbzz5+fLrx2XnnwbXXZltU2nXdXVjMzKyl3BVmZmYNuSvMzMwKwYWl4Mra91zW3ODseShr\nbnD2RlxYzMyspTzGYmZmDXmMxczMCsGFpeDK2n9b1tzg7Hkoa25w9kZcWMzMrKU8xmJmZg15jMXM\nzArBhaXgytp/W9bc4Ox5KGtucPZGXFjMzKylPMZiZmYNeYzFzMwKwYWl4Mraf1vW3ODseShrbnD2\nRlxYzMyspTzGYmZmDXmMxczMCiG3wiLpQEl3SXpM0mpJExqc815J90h6RNIGSRcM5/2jQVn7b8ua\nG5w9D2XNDc7eSJ4tlmXAf0bEdOAe4M8bnLMLuDgifh2YB/yJpBnDeH+plOUH1DlbpwwZwTlbrSw5\nRyrPwnI6cFPl8U3Awv4nRMTzEdFXefwqsAk4rNn3l02jH7aurq7McwylmV+KIuQe6S9vltlb/QHT\nruzt/iBsVe48PrBHkr0ohaVdPy95FpbJEfECpAICTB7sZElHAh3A/SN5v5mZZaOthUXS3ZIerjs2\nVP48rcHpA07bkvQu4N+ACyNi2wCnjcppX0X5P5vhKmtucPY8lDU3OHsjuU03lrQJ6IqIFyQdAtwb\nEcc2OG8ccAdwZ0RcPdz3V84dlUXHzKzdRjLdeFw7gjRpJbAEWA58CvjeAOfdAGysLyrDfP+ILoyZ\nmY1Mni2WScC3gfcBTwOLI+IXkqYA/xgRp0o6EfgvYAOpqyuAv4iI/xjo/Xn8t5iZWc2YWHlvZmbZ\nGVUr7yWdLOlRSf8j6dIBzvl7SY9L6pPUUbSMkqZLuk/SDkkXZ52vLsdQOc+Q9OPKsUbSzILmPK2S\nsVfSA5VWcOFy1p33m5J2SlqUZb66v3+o67lA0i8kra8cXyhizso5XZV/959IujfrjJUMQ13Pz1Uy\nrq9MbtolaWLBMh4gaWXlM3ODpCVDftOIGBUHqUg+ARwBvBPoA2b0O+cU4PuVx8cD9xcw47uBOcBf\nkRaHFvVangBMqDw+OetrOYyc+9Y9nglsKmLOuvN+QJqssqiIOYEFwMqss40g5wTgEeCwyvN3FzFn\nv/NPJS36LlRG0uLzv65eR+BlYNxg33c0tVjmAo9HxNMRsRO4hbSIst7pwLcAImItMEHSe4qUMSL+\nNyLWkXYdyEszOe+PiFcqT++ntnA1S83k/FXd03cBb2SYr6qZn02APyVNq38xy3B1ms2Z92SYZnKe\nAXwnIrZA+r3KOCM0fz2r/hD410yS1TSTMYD9K4/3B16OiEE/n0ZTYTkMeLbu+Wbe+mHX/5wtDc5p\np2YyFsFwc54L3NnWRI01lVPSwsr09FXAH2WUrd6QOSUdCiyMiG+Q3wd3s//u8yrdIt+XdFw20fbQ\nTM5pwCRJ90p6UNLZmaWrafr3SNJ4Usv/OxnkqtdMxq8Cx0l6DvgxcOFQ3zTP6cY2Ckg6CVgKzM87\ny0Ai4nbgdknzgSuBj+YcqZG/A+r7t/NuFQxkHXB4RPxK0inA7aQP8aIZB8wGPgLsB/xI0o8i4ol8\nYw3o48CaKObM1t8BeiPiI5KmAndLmhVpm62GRlOLZQtweN3z91Ze63/O+4Y4p52ayVgETeWUNAu4\nDjgtIv4vo2z1hnU9I2INcHRlqnqWmsn5IeAWST8DPgF8bYAdKtppyJwR8Wq1ezEi7gTeWdDruRlY\nHRE7IuJl0rKF38goX9Vwfj7/gOy7waC5jEuB2wAi4kngZ8AMBpP1gFYbB6HeQW0Qai/SINSx/c75\nGLXB+xPIfvB+yIx1514BfLbA1/Jw4HHghIL/m0+tezwbeLaIOfudfyP5DN43cz3fU/d4LvBUQXPO\nAO6unLsvaS3ccUXLWTlvAmlAfHxBr+XXgCuq//6krrNJg33fUdMVFhG7JX0GuIvUEvtmRGyS9Mfp\ny3FdRPy7pI9JegLYRqrEhcpYmUzwEGmQ7A1JF5J+IQZsduaRE7gMmAR8XZKAnRExN6uMw8j5e5I+\nCbwObAcWZ5lxGDn3eEvWGaHpnJ+QdD6wk3Q9f7+IOSPiUUmrgYeB3cB1EbGxaDkrpy4kta62Z5lv\nGBmvBFZIerjytksi4ueDfV8vkDQzs5YaTWMsZmZWAC4sZmbWUi4sZmbWUi4sZmbWUi4sZmbWUi4s\nZmbWUi4sZsMg6ZcNXuuUtG6o7e4lvSHpb+uef1bS5e3KapYXFxaz4Wm08Otp0u2x/2WI974GLBrp\nFiiS3jGS95llbdSsvDfLS0Q8AyBpqNXGu0h7q10M7HGDLElHADcABwEvAUsjYrOkG4EdQAfw35UW\n01HA0aR97y4mbU90Cml/rI9HxO4W/aeZjYhbLGbZCdK+S2dK2r/f164BboyIDuDmyvOqwyJiXkR8\nrvL8aKCLdN+MfwZ+EBGzSAXod9uY36wpLixmGars+XYTb72nxTxqu9v+E1B/C+Vb+517Z0S8QdpY\n8dci4q7K6xuAI1sa2GwEXFjMsnc1cA7pPiFVg3Wjbev3/DVIOwSSNoOsegN3b1sBuLCYDc9QN+Aa\n7OsCiHTvmm+TikvVfaRb0wKcBfS0KI9Z5lxYzIZnvKRnJD1b+fMiSR+S9CzpBl3/IGnDAO+tb5Vc\nRRqor752AbBUUh9wJrWusqEmBHh7ciscb5tvZmYt5RaLmZm1lAuLmZm1lAuLmZm1lAuLmZm1lAuL\nmZm1lAuLmZm1lAuLmZm1lAuLmZm11P8DHWVFDfWNk0YAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "np.random.seed(101)\n", + "x = np.random.rand(100,10)\n", + "y = np.random.rand(100,1)\n", + "fit = glmnet(x = x, y = y)\n", + "glmnetPlot(fit);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We wish to label the curves with the variable names. Here's a simple way to do this, using the `matplotlib` library in python (and a little research into how to customize it). We need to have the positions of the coefficients at the end of the path. " + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "%%capture\n", + "# Output from this sample code has been suppressed due to (possible) Jupyter limitations\n", + "# The code works just fine from ipython (tested on spyder)\n", + "c = glmnetCoef(fit)\n", + "c = c[1:, -1] # remove intercept and get the coefficients at the end of the path \n", + "h = glmnetPlot(fit)\n", + "ax1 = h['ax1']\n", + "xloc = plt.xlim()\n", + "xloc = xloc[1]\n", + "for i in range(len(c)):\n", + " ax1.text(xloc, c[i], 'var' + str(i)); " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have done nothing here to avoid overwriting of labels, in the event that they are close together. This would be a bit more work, but perhaps best left alone, anyway." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Linear Regression - Multiresponse Gaussian Family" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The multiresponse Gaussian family is obtained using `family = \"mgaussian\"` option in `glmnet`. It is very similar to the single-response case above. This is useful when there are a number of (correlated) responses - the so-called \"multi-task learning\" problem. Here the sharing involves which variables are selected, since when a variable is selected, a coefficient is fit for each response. Most of the options are the same, so we focus here on the differences with the single response model.\n", + "\n", + "Obviously, as the name suggests, $y$ is not a vector, but a matrix of quantitative responses in this section. The coefficients at each value of lambda are also a matrix as a result.\n", + "\n", + "Here we solve the following problem:\n", + "\n", + "$$\n", + "\\min_{(\\beta_0, \\beta) \\in \\mathbb{R}^{(p+1)\\times K}}\\frac{1}{2N} \\sum_{i=1}^N ||y_i -\\beta_0-\\beta^T x_i||^2_F+\\lambda \\left[ (1-\\alpha)||\\beta||_F^2/2 + \\alpha\\sum_{j=1}^p||\\beta_j||_2\\right].\n", + "$$\n", + "\n", + "Here, $\\beta_j$ is the jth row of the $p\\times K$ coefficient matrix $\\beta$, and we replace the absolute penalty on each single coefficient by a group-lasso penalty on each coefficient K-vector $\\beta_j$ for a single predictor $x_j$.\n", + "\n", + "We use a set of data generated beforehand for illustration." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "# Import relevant modules and setup for calling glmnet\n", + "%reset -f\n", + "%matplotlib inline\n", + "\n", + "import sys\n", + "sys.path.append('../test')\n", + "sys.path.append('../lib')\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", + "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", + "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", + "from cvglmnetPlot import cvglmnetPlot; from cvglmnetPredict import cvglmnetPredict\n", + "\n", + "# parameters\n", + "baseDataDir= '../data/'\n", + "\n", + "# load data\n", + "x = np.loadtxt(baseDataDir + 'MultiGaussianExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'MultiGaussianExampleY.dat', dtype = np.float64, delimiter = ',')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We fit the data, with an object \"mfit\" returned." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "mfit = glmnet(x = x.copy(), y = y.copy(), family = 'mgaussian')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For multiresponse Gaussian, the options in `glmnet` are almost the same as the single-response case, such as `alpha`, `weights`, `nlambda`, `standardize`. A exception to be noticed is that `standardize.response` is only for `mgaussian` family. The default value is `FALSE`. If `standardize.response = TRUE`, it standardizes the response variables.\n", + "\n", + "To visualize the coefficients, we use the `plot` function." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n99uo441lAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "glmnetPlot(mfit, xvar = 'lambda', label = True, ptype = '2norm');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we set `type.coef = \"2norm\"`. Under this setting, a single curve is plotted per variable, with value equal to the $\\ell_2$ norm. The default setting is `type.coef = \"coef\"`, where a coefficient plot is created for each response (multiple figures).\n", + "\n", + "`xvar` and `label` are two other options besides ordinary graphical parameters. They are the same as the single-response case.\n", + "\n", + "We can extract the coefficients at requested values of $\\lambda$ by using the function `coef` and make predictions by `predict`. The usage is similar and we only provide an example of `predict` here." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[-4.71062632 -1.16345744 0.60276341 3.74098912]\n", + " [ 4.13017346 -3.05079679 -1.21226299 4.97014084]\n", + " [ 3.15952287 -0.57596208 0.2607981 2.05397555]\n", + " [ 0.64592424 2.12056049 -0.22520497 3.14628582]\n", + " [-1.17918903 0.10562619 -7.33529649 3.24836992]] \n", + "\n", + "[[-4.6415158 -1.22902821 0.61182888 3.77952124]\n", + " [ 4.47128428 -3.25296583 -1.25725829 5.2660386 ]\n", + " [ 3.47352281 -0.69292309 0.46840369 2.05557354]\n", + " [ 0.73533106 2.29650827 -0.21902966 2.98937089]\n", + " [-1.27599301 0.28925358 -7.82592058 3.20521075]]\n" + ] + } + ], + "source": [ + "f = glmnetPredict(mfit, x[0:5,:], s = np.float64([0.1, 0.01]))\n", + "print(f[:,:,0], '\\n')\n", + "print(f[:,:,1])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The prediction result is saved in a three-dimensional array with the first two dimensions being the prediction matrix for each response variable and the third indicating the response variables.\n", + "\n", + "We can also do k-fold cross-validation. The options are almost the same as the ordinary Gaussian family and we do not expand here." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "warnings.filterwarnings('ignore')\n", + "cvmfit = cvglmnet(x = x.copy(), y = y.copy(), family = \"mgaussian\")\n", + "warnings.filterwarnings('default')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We plot the resulting `cv.glmnet` object \"cvmfit\"." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "cvglmnetPlot(cvmfit)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To show explicitly the selected optimal values of $\\lambda$, type" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.04731812])" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cvmfit['lambda_min']" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.1445027])" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cvmfit['lambda_1se']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As before, the first one is the value at which the minimal mean squared error is achieved and the second is for the most regularized model whose mean squared error is within one standard error of the minimal.\n", + "\n", + "Prediction for `cvglmnet` object works almost the same as for `glmnet` object. We omit the details here." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Logistic Regression\n", + "\n", + "Logistic regression is another widely-used model when the response is categorical. If there are two possible outcomes, we use the binomial distribution, else we use the multinomial.\n", + "\n", + "### Logistic Regression: Binomial Models\n", + "\n", + "For the binomial model, suppose the response variable takes value in $\\mathcal{G}=\\{1,2\\}$. Denote $y_i = I(g_i=1)$. We model\n", + "\n", + "$$\n", + "\\mbox{Pr}(G=2|X=x)+\\frac{e^{\\beta_0+\\beta^Tx}}{1+e^{\\beta_0+\\beta^Tx}},\n", + "$$\n", + "\n", + "which can be written in the following form\n", + "\n", + "$$\n", + "\\log\\frac{\\mbox{Pr}(G=2|X=x)}{\\mbox{Pr}(G=1|X=x)}=\\beta_0+\\beta^Tx,\n", + "$$\n", + "\n", + "the so-called \"logistic\" or log-odds transformation.\n", + "\n", + "The objective function for the penalized logistic regression uses the negative binomial log-likelihood, and is\n", + "\n", + "$$\n", + "\\min_{(\\beta_0, \\beta) \\in \\mathbb{R}^{p+1}} -\\left[\\frac{1}{N} \\sum_{i=1}^N y_i \\cdot (\\beta_0 + x_i^T \\beta) - \\log (1+e^{(\\beta_0+x_i^T \\beta)})\\right] + \\lambda \\big[ (1-\\alpha)||\\beta||_2^2/2 + \\alpha||\\beta||_1\\big].\n", + "$$\n", + "\n", + "Logistic regression is often plagued with degeneracies when $p > N$ and exhibits wild behavior even when $N$ is close to $p$;\n", + "the elastic-net penalty alleviates these issues, and regularizes and selects variables as well.\n", + "\n", + "Our algorithm uses a quadratic approximation to the log-likelihood, and then coordinate descent on the resulting penalized weighted least-squares problem. These constitute an outer and inner loop.\n", + "\n", + "For illustration purpose, we load pre-generated input matrix `x` and the response vector `y` from the data file." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "# Import relevant modules and setup for calling glmnet\n", + "%reset -f\n", + "%matplotlib inline\n", + "\n", + "import sys\n", + "sys.path.append('../test')\n", + "sys.path.append('../lib')\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", + "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", + "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", + "from cvglmnetPlot import cvglmnetPlot; from cvglmnetPredict import cvglmnetPredict\n", + "\n", + "# parameters\n", + "baseDataDir= '../data/'\n", + "\n", + "# load data\n", + "x = np.loadtxt(baseDataDir + 'BinomialExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'BinomialExampleY.dat', dtype = np.float64)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The input matrix $x$ is the same as other families. For binomial logistic regression, the response variable $y$ should be either a factor with two levels, or a two-column matrix of counts or proportions.\n", + "\n", + "Other optional arguments of `glmnet` for binomial regression are almost same as those for Gaussian family. Don't forget to set `family` option to \"binomial\"." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [], + "source": [ + "fit = glmnet(x = x.copy(), y = y.copy(), family = 'binomial')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Like before, we can print and plot the fitted object, extract the coefficients at specific $\\lambda$'s and also make predictions. For plotting, the optional arguments such as `xvar` and `label` are similar to the Gaussian. We plot against the deviance explained and show the labels." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZEAAAElCAYAAAAlet80AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXmcXUWV+L/n3vvWfr2mkzRpSELCDkJAwioaREccEBWV\nQdyijOi4j86Cjg7+XEZ0RgQdGUVBREUUFEVRFglhUUAMSQiQkBCyJ93p7vT21rud3x/3dr9OZ+uE\nhO501/fzqU8tt27deqdf3/OqTtUpUVUMBoPBYNgXrNHugMFgMBgOXowSMRgMBsM+Y5SIwWAwGPYZ\no0QMBoPBsM8YJWIwGAyGfcYoEYPBYDDsM0aJGMYcIhKIyFMi8oyILBaRT4uIjHa/9gUR+YSIPCci\nPxlW/hoR6Yk/52IRue8APf9HInLxgWjbYABwRrsDBsNOKKjqKQAi0gz8HKgDvvhSGxYRS1XDl9rO\nXvBPwHmqunkn1x5W1Yt2daOI2KoaHLiuGQwvHTMSMYxpVLUTuAL4GERKQES+ISJPiMgSEflgXC4i\ncn38q/9eEbl74Be4iKwRkatF5G/A20Vkloj8UUSeFJGHROSouF6ziNwRt/2EiJwZl78mHi08JSKL\nRKRmeD/j0dIyEXlaRD4Rl/0fMAv4o4h8cicfb4fRVTxy+D8ReRz4uohkReRGEXk8fvZFu5NDfO1/\nRWR5PLqZMqT8vPgzLBWRH4pIYoh8/iv+jH8VkZNF5B4RWSUiH9r7v5phQqGqJpgwpgLQt5OybcBk\n4IPA5+KyJPAkMAN4G/D7uHxqXP/iOL8G+Jchbf0JmB2nTwMeiNM/A86K04cBz8Xpu4Az43QWsIb1\n7RRgKZAGaoBngJPiay8CjTv5PK8BeoCn4vDZuPxHwF1D6n0VuCxO1wPPA5ndyOGtwL1x+SFAN3Ax\nkALWD/ncPwY+MUQ+V8Tpa4Al8edsBtpG+/tgwtgOZjrLcLDxd8ArROQdcb4OOBJ4FXA7gKq2i8iD\nw+77BUA8ijgLuH2InSURx68Djh1SnhORLPBn4Fsi8jPg16q6aVjbrwLuVNVy/IxfA+cQKRZhJyOO\nmF1NZ90+7PO+SUT+Nc4ngem7kcOriab/UNUtIvJAfP1o4EVVXR3nfwx8BPh2nP9dHC8DalS1CBRF\npCwidarat4vPYJjgGCViGPOIyCwgUNWO+AX/cVW9f1idC/bQTCGOLaBbY5vL8EcBp6uqN6z86yLy\ne+AC4M8i8nequnLvP8mIKQzLv01VV23X0ZHLQXaRHk4ljsMhaQDFvCcMu8HYRAxjkcGXnYhMBv4P\n+E5cdC/wERFx4utHDhktvD22jUwF5u2sYVXtB9aIyNuHPOPEOHkf8Mkh5SfF8SxVfVZVv0E0bXTM\nsGYfAd4iIul4pPNW4OF9+uQ7ci/wiSF9mjOkfGdyeBj4h9hmcghwblz/eWBGrJAB3gMs3E99NExg\nzC8Mw1gkLSJPEU3deMAtqvqt+NoPgZnAU/Gv8a3AW4BfAa8FngU2AIuA3vie4a6q3wV8T0Q+T/Q/\ncBvwNJEC+a6ILAVsohfyR4BPici5QBC3/8ehjanqYhG5mUjBKHCDqj69i2fvieH1vwJcKyJPEynX\nNcBFu5KDqt4pIgNyWA/8Je5jRUTeD9whInbc1++PoI/Gzbdht4iq+Y4YxgciUqOqBRFpAp4AzlbV\nraPdL4NhPGNGIobxxO9FpIHIUP4lo0AMhgOPGYkYDAaDYZ8xhnWDwWAw7DNGiRgMBoNhnzlolYiI\nnC8iK0RkpYj8+2j3Z7QQkaOGuORYLCK9A243JgKxS5D2ePXSQNk3YrcfS0TkVyJSN5p9fLnYmSzi\n8o/H8lgmIlePVv9eTkTkUBFZICLPxp976DLpCSUPEUnF7nEWx5/5qri8UUTuE5HnJXIVVL9P7R+M\nNhERsYCVwHnAZqLlipeq6opR7dgoE8tlI9GGuQ2j3Z+XAxF5FZAnWgZ8Ylz2OmCBqobxS0JV9bOj\n2c+Xg13IYh7wOeDvVdUXkWaN/JGNa0SkBWhR1SUikiNa8v1moIWJKY+sqhbj5d1/Jtp79DagS1W/\nEf8Qb1TVK/e27YN1JHIasEpV18W7i28j+oJMdF4HrJ4oCgRAVR8l8g81tOxPWvXU+zhw6MvesVFg\nZ7Ig8iJ8tar6cZ1x/8IEUNU2VV0Sp/PAcqCViSuPYpxMEa3KVaJ35o/j8h8T7bfaaw5WJdJKtKFs\ngI1x2UTnH4j9JhkG+QDDNgdOMI4CXi2RF+AHReTU0e7Qy42IzATmEO0dmpDyiD0YLAbagPtV9Ulg\nqqq2Q6R0GeLxeW8w+0TGCRK59b4I2Ovh6HhFRP4D8FT11tHuyyjiEE1TnCEic4FfErmnnxDEU1l3\nAJ9U1XzsJmbCySMemZ8c2wfvFJHj2dEbwT7ZNg7WkcgmIk+mAxwal01k3ggsUtWO0e7IWEBE5gN/\nD1w2yl0ZbTYAvwaIf32GIjJpdLv08hArjDuAn6jqb+PiCSsPgNgb80LgfKA99jM3YEPap825B6sS\neRI4QkRmiEgSuJTozIeJzDuZuFNZ27lbF5HzgX8FLlLVyi7vGp8Mdz3/GyKfYkh0+FZCVbtGo2Oj\nwE1EZ8JcN6RswslDosPW6uN0Bng9kY3oLmB+XO19wG932sCe2j8YV2fB4IviOiJFeKOqjvulersi\n9t66DpgVe6mdMIjIrUQeeycB7cBVRKtvksDAy+FxVf3IqHTwZWQXsvgJ0UFXc4hcvH9GVR8arT6+\nXIjI2UQONJcRTdMo0ffiASLlMmHkISKvIDKcW3H4hap+NfYx90uiA9jWAZeoas9et3+wKhGDwWAw\njD6jPp21i81iV4nIxngD3VPxqMNgMBgMY4xRVyJEQ+037KT8GlU9JQ73vNydMhgMBsOeGXUlsosN\nUrD7ozwNBoPBMAYYdSWyGz4W+z764b76dDEYDAbDgWWsKpHriVYazSHaYXnNKPfHYDAYDDthTO5Y\nH7Zh7gfA73ZWT0TM0jKDwWDYB1R1v5gMxspIZPhmsZYh1y4GntnVjapqgipXXXXVqPdhrAQjCyML\nI4vdh/3JqI9Ehm6QEpH1RBukzhWROUAIrAU+NGodPEhYu3btaHdhzGBkUcXIooqRxYFh1JWIqu7M\nt9GPXvaOGAwGg2GvGSvTWYaXyPz580e7C2MGI4sqRhZVjCwODAe12xMR0YO5/waDwTAaiAg6zgzr\nhpfIwoULR7sLYwYjiypGFlWMLA4MRokYDAaDYZ8x01kGg8EwwTDTWQaDwWAYExglMk4w871VjCyq\nGFlUMbI4MBglYjAYDIZ9xthEDAaDYYJhbCIGg8FgGBMYJTJOMPO9VYwsqhhZVDGyODAYJWIwGAyG\nfcbYRAwGg2GCYWwiBoPBYBgTGCUyTjDzvVWMLKoYWVQxsjgwGCViMBgMhn3G2EQMBoNhgiEiADcB\nFwLtqnrivrZlRiIGg8EwMfkR8IaX2ohRIuMEM99bxciiipFFFSOL7VHVR4Hul9qOUSIGg8Fg2GeM\nTcRgMBgmGAP7RERkBvA7YxMxGAwGw6hglMg4wcz3VjGyqGJkUcXIIuIXz/xiaFbisM8YJWIwGAwT\niJ8u+ykAInIr8BfgKBFZLyLv35f2jE3EYDAYJhDn//R87n3PvcZ3lsFgMBj2nkpQ2a/tGSUyTjDz\nvVWMLKoYWVQxsohwA3e/tmeUiMFgMEwgKv7+HYmMuk1ERG5kmP8WEWkEfgHMANYCl6hq707uNTYR\ng8Fg2AtOuP4Env3os+PKJrIz/y1XAn9S1aOBBcBnX/ZeGQwGwzik7Jf3a3ujrkR24b/lzcCP4/SP\ngbe8rJ06CDHzvVWMLKoYWVQxsogo+aX92t6oK5FdMEVV2wFUtQ2YMsr9MRgMhnFBydu/SmTUbSIA\nw/23iMg2VW0acr1LVSft5D5jEzEYDIa9IP2VNJUvVPabTcTZH40cANpFZKqqtotIC7B1VxXnz5/P\nzJkzAWhoaGDOnDnMmzcPqA5fTd7kTd7kJ3J+4cKF3HzzzYQaUlk3zlZnAYjITKKRyCvi/NeBbar6\ndRH5d6BRVa/cyX1mJBKzcOHCwS/PRMfIooqRRRUjC+ir9NF6TSv5z+XHz+qsXfhvuRp4vYg8D5wX\n5w0Gg8HwEsi7eXLJ3H5tc0yMRPYVMxIxGAyGkbOyayUX3nohqz6xavyMRAwGg8Hw8tBX6aMuVbdf\n2zRKZJwwYEQzGFkMxciiipEF9JR7qE/X79c2jRIxGAyGCUJvuZf61P5VIsYmYjAYDBOEHz71Qx7b\n8Bg3veUmYxMxGAwGw97RVeyiMdO4X9s0SmScYOZ7qxhZVDGyqGJkAV2lLiZnJ+/XNo0SMRgMhglC\nR7GD5mzzfm3T2EQMBoNhgnDBrRfw4Vd+mIuOucjYRAwGg8Gwd7Tl22jJtezXNo0SGSeY+d4qRhZV\njCyqGFnAlv4tTKudtl/bNErEYDAYJgBe4NFZ7GRKTXQ8k4gcKiILRORZEVkmIh+Py78hIstFZImI\n/EpEdrvF3dhEDAaDYQKwvnc9Z954Jps+vQkRATgF+A0wNa6iwGnAt4GBHYmzgLKq7nIObKyeJ2Iw\nGAyG/ci6nnXMbJg5tCgEbKAOSBIdU/5xVT13oIKI/AbY7qbhmOmscYKZ761iZFHFyKLKRJfFmp41\nw5VIBxAANUSjEQHWDbvt74Cbd9euGYkYDAbDBGD1ttXMapg1mFfVzSLyTWA9kAY84LqB6yJyA9FU\n1rW7a9fYRAwGg2ECcNmvLuP8I87nvSe9d8Am0gj8mmhGahawCfiOqt4qIvOBrwHfVNX/2V27ZjrL\nYDAYJgDLO5dzbPOxFL3iQNHrgEOBGcA3geuBs0TkfOBfifTDrXtq1yiRccJEn+8dipFFFSOLKhNZ\nFn7o83zn8xzTfAwn/9vJA8UNwJFADpgPXEtkF/kO0Axkgd+LyPW7a9vYRAwGg2Gc88K2F2jJtVCb\nqmXNPWsGipcTLeutBY4BisAfVPWjIvIj4DFVvWFPbRubiMFgMIxzfr7s5/xq+a+445I7cI5wCFYH\nxneWwWAwGEbGk5uf5JWHvBKAsBICICI3iki7iDw9UE9ErhKRjSLyVBzO31PbRomMEybyfO9wjCyq\nGFlUmciyeHzj45x+6OkAqDs4e/Mj4A07qX6Nqp4Sh3v21LZRIgaDwTCOKXkllrYv5fTWSIlQiSJV\nfZRol/pw9mqay9hEDAaDYRyzYM0C/mPBf/DY5Y8RaoidsaECqioiMgP4naqeCNF0FtFKrV7gb8Bn\nVLV3d+2bkYjBYDCMY+5ffT/nHX4eAJ35TnB3W/16YJaqzgHagGv21L5RIuOEiTzfOxwjiypGFlUm\nqizuWX0P5x8R2ceXrF0SOTjZBaraMWR65wfA3D21b5SIwWAwjFPW965nQ+8Gzjj0DAAWr16MZLcz\neQhDbCAiMtTl+8XAM3t6hrGJGAwGwzjlW499i2Vbl3HTm28CYP635nPLdbeg6xTg58A8YBLQDlwF\nnAvMIXITvxb4kKq27+4ZZse6wWAwjFNufeZWvnLuVwbzq9avwqq1CAhQ1ct2csuP9vYZY3o6S0TW\nishSEVksIn8d7f6MZSbqfO/OMLKoYmRRZaLJ4rmO59jUt4nzZp03WLZxw0ashv372h/rI5EQmKeq\nO1vLbDAYDIZdcMOiG3j/nPfjWNXXfNeWLmTSfvF2MsiYtomIyBrgVFXt2sV1YxMxGAyGYfRV+jj8\nusN56oqnmNEwY7Dcnm1jv8rGu8Ub2CdyPpH3Xgu4UVW/vrfPGtPTWUQeJu8XkSdF5IOj3RmDwWA4\nGPjBoh/w+lmv306BdJe6CTtCwqZB31kW8L9Erk+OB94pIsfs7bPG+nTW2aq6RUQmEymT5fFW/UHm\nz5/PzJkzAWhoaGDOnDnMmzcPqM6BToT80PnesdCf0cwPlI2V/oxmfsmSJXzqU58aM/0Zzfy11147\nId4Pp519Gt987Jt86fAvsXDhwsH/hav++yrIQ+65HL30ApwGrFLVdQAichvwZmAFe4OqHhSBaPnZ\np4eVqSHiwQcfHO0ujBmMLKoYWVSZKLK4+pGr9W2/eNsO5X//5b9Xe6atr/nRa5RoludtwA1afZ++\nG/i27uW7eczaREQkC1iqmheRGuA+4P+p6n1D6uhY7b/BYDC83LTn2znh/07g0fc/ytHNR293rfnC\nZijBWz75Fm58840AVwBfBHqIFjEtBnpU9RMAIvIZ4L+BZlXdtqtnjmWbyFTgURFZDDxO5CTsvj3c\nYzAYDBOWKx+4kvee+N4dFEjRK7JtxTYOOeEQjmkeNHtsAtaq6vHAmcAbiT1ricihwOuBdXt65phV\nIqq6RlXnqOrJqvoKVb16tPs0lhlqD5joGFlUMbKoMt5lcf/q+1mwZgFfnPfFHa7d9cxd6EYlNTvF\nsY1zBorvBQ4RkbuBJ4EmoBRf+xbwryN57phVIgaDwWAYGdtK27j8rsu54cIbqE3V7nD9az/+GslD\nkzxfeJ7v/sepAKhqAKwGTiFyy9gHXC8iFwEbVHXZSJ49Zm0iI8HYRAwGw0RHVbn4lxczo34G155/\n7Q7Xe8u9NJ3exCvnvhJ/rk/trU/x8MMCUE9kBzkJWAh8mcj2/CDwelXt39NePRj7S3wNBoPBsBuu\nfvRq2vJt3Pa223Z6/bqF1xGuDDnu346jtaWV31bVweFAJ9GSXgUuADYCM4GlIiLAocAiETlNVbfu\nrH0znTVOGO/zvXuDkUUVI4sq41EWdzx3B9f/7XrueMcdpJzUDtfdwOXq/72a5pOaeajzId5x/Dvo\n6Bi87BCdF/KQqh4GFIGLVLVFVWep6uFESuXkXSkQMErEYDAYDkoeXPMgH7n7I9x16V201rXutM53\nH/supUdKvPuKd9OQbuC4ppPofO2GgcvfJDpL5J0iUgIuAy6PHd+WRESJbCW7dbY1IpuIiJwNLFHV\ngoi8m8gQc53GOx1HC2MTMRgME5FH1z/Kxb+4mNvfcTuvmfmandbpLfcy9e1TyW7MctI/n8T8k+Zz\nTt37OPaeRbgfPRWi3elfA2zgVKLzQ34HXE20b+RuYKmqvmN3fRnpSOT/gKKInAR8hsiif8sI7zUY\nDAbDfuL+1ffz1l+8lZ9d/LNdKhCA99/6fioLK3zyPz7J5v7NvOvEd7FqFQQN0W9/Vb2L6H0+HXiU\naI/Inar6vKquIlIu4Z76M1Il4sc/+d8M/K+qfhfYcR2ZYdQYj/O9+4qRRRUjiyrjQRa3LL2Fd/36\nXfz6kl/z+tmv32W9O5ffyW+v+S1nXXgWt2y5hevOvw7Hclj6TEjQvN2reznwAvAWIiWyQES+IiLr\niTZ8f29PfRrp6qx+EfkskW+VV8feHxMjvNdgMBgML4EgDPjPB/+TW5+5lYXzF3Lc5ON2WXf1ttVc\n8rlLyPRkmP7m6RydPZrzjzgfgAWri1gtncOHFxZwB/BJVc0Dnwc+LyKrgUuJlvzukpHaRFqIjC5P\nquojIjKd6LCoUZ3SMjYRg8Ew3tla2Mq7f/1u/NDntrffxpSaKbus21HoYNa/zqJ4S5GPXv9RHi4+\nzJ8/8GdqkjWoQsN715I/7AeEX/uvgfNEZgFLgc+r6nVD2xKRvwCTVfXI3fVvpNNZ/6yq16jqIwCq\nup7I/7zBYDAYDhB/WPUH5nxvDnOnzeW+99y3WwWyoXcDs/9zNqWflnjfVe/jd92/4+7L7qYmWQPA\nkiVQmbuB1k0bh97230B5QIGIyBFDrjUTGdt3y0iVyM4m3944wnsNLwPjYb53f2FkUcXIosrBJIvu\nUjeX//ZyPnL3R/j5237OV8/76nbH3A7nDyv/wOwvzKZ0U4k3fPgNPJJ+hAff9+B2S3+v/02J8IgK\n2+6+GAARuQ+4GJgkIq6IrAV+JCLrRMQFZgMnisgfd9fX3SoREfknEVkGHC0iTw8Ja4AR+VUxGAwG\nw8hQVX769E85/vrjySayLPunZbtdgdWeb+fSOy7lom9chNwiHHfpcfQf289fPvAXZjbMHKxXLMJP\nUi/S+tcn8POHDRR/gMjesRx4HrhGVc8BLgL+BjxD5EF9t0t8d2sTEZF6oJFoLfGVQy71786//MuF\nsYkYDIbxwpObnuST93wSN3D5zhu/w5mHnbnLup3FTq59/Fque/w63L+6yINC9h1Zrrj0Cr587pdJ\n2Nuve7r0pjZ+3/Ai1ofeTL5rKaqtAIcALaq6RERyRIrjrcCPiQ4AfFRE5gOzVPU/d9WXETtgFBGb\naMnX4Jgqto2MGkaJGAyGg53lHcv5woNf4LGNj/Hlc7/M/DnzsWTHSSJVZdGWRXz/b9/n9uduZ3py\nOs/f8jx2h80hlx/CLf94C2dPP3uH+25a0ck/rnieyxY9wbZFT3DPPTejmkVVt9uJLiK/ITpz/XZV\nbYzLDgXujc8c2SkjsomIyMeAduB+ol2MdwO/H8m9hpeHg2m+90BjZFHFyKLKWJPFsvZlXPary3j1\nza/mtNbTWPXxVXzg5A/soEDWdK/h649+nRO/dyLvuP0dJKwE2dVZnv3Ss0iNcNXPrmL5Vct3UCCh\nKl9fs4EPr3qe965o5d7vfY1E4nSmTt3RDZaIzATmEE1fPRu7gwe4hMgJ4y4Z6T6RTwFH784dsMFg\nMBh2j6qyYM0Crn3iWv62+W/88xn/zPcu/B51qbrBOqGGLGlbwu9X/p67nr+L9b3reesxb+W/Xvtf\nfPv33+b7n/4+2qO856r3cN0/XUdDumGH5ywvFPinlat4ZmXIq393Ctv6LuVd73oXP/iB8s531nLj\njdW68VTW4D4REbkc+LaIfAG4i/i0w10x0n0iA/7l/RFJ6mXCTGcZDIaDgZ5yD7cuu5XvPvldLLH4\n+Gkf5z0nvodMIoOqsqJzBY+sf4QFaxawYM0CGjONXHDkBVx41IXMapzFB3/yQR64+QF4Hs5/3/n8\n5OqfMKl20g7PeaFY5Or16/lNZxfTHpjBlD+3MveVV7Fgwb20th7GggXXc889UzjzTBnYJ+IQzSr9\ncfg+EQARORL4iaqesavPNtKRyIvAwvgYxcpAoapeM8L7DQaDYULhhz4L1izgx0t/zN0r7+YNR7yB\n77zxO5w45USeanuKbz72TZ7Y9ASPb3ycXDLHOdPP4e9m/x1ff93XmVIzhdueuY0P3vhBXrz7RayV\nFhdcdgE3338zk5omDXtOyL3d3Xx/82Ye6+vjrdY0mj91Gicf7zDr7P/ipz/9OaeeeipLl85i5sxm\nlqduHnr7TcBzQxWIiExW1Y7YM8nn2YPrk5GORK7aWbmq/r893nwAMSORKgsXLmTevHmj3Y0xgZFF\nFSOLKi+HLPzQ59H1j/LLZ3/JHc/dQUuuhVOnncqkzCRe6H6BxVsW013u5uSWkzmt9TRObz2d0w89\nnUPrDqWn3MMfVv6BG5+6kYfuf4jwiRCnw+HyD13OV6/8Kk1NTYPPccOQh3t6uLOzkzs6OpiVyfAP\ndS28eMNUfv4jm699rcxjj32MRx55mFwuR0vL0Tz33M/4/vctvrD+NJ684kmAVwEPE23X0Dh8DjgK\n+Gic/7Wqfm53n3lEI5EBZSEiWVUt7r1oDQaDYXyypnsNtz1zG3evupuntjxF2kmTclL0u/3k3Bxd\npS5aa1t55wnv5L9f/9/MapyFJRZBGLBoyyJuWXoLv1nxG5Y+txRdogSLA1oOaeHzn/0873/X+0mn\n04SqLMvneainhz91d7Owp4ejs1ne0tzM72aewt03ZPjKd+Gtb4Wf/WwRn/jEuwiCgO7ubj760c/w\nxz9ewQUXCGe8ppfl31oOgKr+mchT73DuAb490s8/0pHImcCNQE5Vp8cu4T+kqh8Z6YMOBGYkYjAY\nDjSqSlepixe7X2RN9xqWbV3GExufYEXnCtoKbfihT22yliOajuCc6edw6rRTOW7ycRzTfMygyxGI\nRimLtyzm4XUP8/D6h1m4diGpfAp3mUv/U/0k80nedPGb+MzHPkviiCNYVijwdD7P4jhMTiQ4p76e\n8xobOa++kRVPJLnxRrjrLrjkErj88g6+9a2P89vf/hbbtvnHf/xH5s//Ah/72CQOPRR++lP49pPX\n8NjGx7jjkjt2WOK7r4xUiTwBvB24S1VPjsueUdUT9kcn9hWjRAwGw0slCAO25Lewvnf9YFjXs451\nvetY27OWNT1rUFWyiSxu4FLxK8xums1prafxpqPexIVHXbjD0bSqyoa+DSzavIgnNj3BYxsfY9Hm\nRUytmUq6M8OmJdvoX9qL1aPMmPcqjnzzJbhzTuYF12Wr53FEJsMramp4RU0Np9TWckouR5Od5PHH\n4c474Ze/hPp6mD8fzjprBV/60j9z//33k06n+ehHP8qHP/wv/OIXk/mf/4FPfxquvBKe3rqE1//k\n9Tw0/yGOn3L8flMiIzWso6obonPbq7LfHx0w7B/M3HcVI4sqRhbROeMb+zby23t+S+OxjaztWbtd\n2Ny/mUnZSUzJTqEmWYOIUPJKdBQ62FrcypFNR3LGoWcwd9pc5rbO5cSpJ27nx8oLPJ5uf4bH2p7l\nya3Ps6x7PSv62lCnnqb62fh9KXqfnklxqcuLS1ZAtobk6Wcy+7PncdyZZzErl2N2JsPsdJqjsllm\npNPY8bt2wwZ44C741P1w770wbRq85S1w882buf/+7/Ctb/2Ef/mXTcyePZvvf/8GTjjhvfz85w5z\n58JrXwt/+QvMPiLg5qU/5so/Xcn3Lvjebt3I7wsjVSIbROQsQEUkAXySyN+KwWAwjAqqSm+lly39\nW9iS38KW/i1s6t/Epr5NbOzfyMa+jWzo3UBnsZNDag+hZlMNh4eHk0lkAKhN1tJa10qoIe2FreTS\nzRxSN4vpTcdySMMRtDTMpq5mGoUQun2fVZUif2rfxsY1f2KrW6Tb88mr4FlpsLMkw1pSnIDdX0O4\nrExx6dMUnv8jVrHCjFNP5LXnvYHLvv1Dzjz2WFLWjvu8gwCeew5ufCx6+T/8MPT3R8rg3HMDLrnk\nSf70p59x00138tWvbiGTyfC6183n3//9KpYtm8yXvgTJJFx6KTz5JGjDi9zx3B388N4fMrlmMve9\n5z7mtMzXNwasAAAgAElEQVQZfJ6I3AhcCLSr6olD+yIinyHy8Nu8JxdXI53OagauA15HdGj7fUQb\nU0Z186GZzjIYxhdFr0hHoYPOYicdxTgudLC1sJWOYhS3F9ppz7fTlm8jYSdozjZTn2oklZ6EnWxA\n7Ro8SVHCJh9CfxDSFwQkUo1k05NJpppwkvVg1+BbKco45EMlIUKtbZEhIKEu4hfwvV7K5S76i5sp\nlTpoTmaYlqllUiJJJvTJr1vHluXPs375KtwNFdgMuYYcJ556IhecdwFvfO0bOf7447GGKQ3PgxUr\nIvfsixfDokVR3NICZ54JZ56pzJixmlWr7uFXv7qdJ55YShjORuR4Zsz4e5qbX8e6dZNwXeGss+Ds\neUVmzH2W7vRT/HXTEzyy/hH6K/1cdPRFvO+k93HWYWcxdCYpTp8D5IFbhiqR2NXJD4GjgVfuFyUy\nVjFKxGAYm1T8Cr2VXrpL3XSXu+kudbOttI3ucjddxS66SlHoLG6jvdxPe7mfbW6Z0M6QTU8ilWzE\nTtYidg3YGQIrjW8l8aQaAiuNlagDJ0dopUioSxqfGgmpsy0aHYfmVIYpqRoOydTR4CRQvx+30k2h\ntJW+wma29W9ga9+LbOlexfqeNSTtJIfVHcbU3FTqU/WknBRe2WPrhq1sXLuRzWs247a5JLoSuFtd\nGqY0cMzxx3DGqWdw3tnnMXfuXJqbm6tyqMALL0QKY8UKePZZeOYZWLUKZs6Ek06COXPgxBN9isXn\neeCBRSxc+CIvvhjg+9MJw5k4zjGEOpVpR2zmiFM6aT5iPdnWNYT1L9Lhr2Zl10ra8m0cNeko5rTM\n4bTW03jV9FdxwpQTduqDCyIlEm82nAH8bpgSuR34EtFu9ZemRETk31T1GyLyHaI1w9uhqp/Y7Tfp\nAGOUSBUz913FyKLK3spCVakEFfoqffRV+ugt99Jb6aW33EtPuYdt5V62lvvYWu6ns1Jkm1ei13Xp\nD3wKYUgphLJaqJ3GSdRiOTnEqQEni1oZ1M4QWilCO0NopcFKQFBCgjKOuiTUJy0BGVFqLCFn2zQ4\nCRoTKSalMkxO5ZiWqaM1W09rtpEmJ4EdliiVO+ksdtCWb6Mt31ad4spvYXP/Zjb2bqT3+V6mHD+F\nxkwjdck60ok0glDJV+jr7KOnvYfOtk68bR6ZQga718btdPEKHlMOncLsI2fzimNfwdyT5nL88cdz\n7LHHUlOTo6sL1q2DNWui8OKLkeJYuRK2bIHW1ig0N0fG8GRS6e7uZcWKbWzcXKE/8AgzLtS8ALUr\nSDVtoq61h4bDiiSa+uiXzXSUN5NNZDms7jBmNMzg8IbDObzhcI5oOoKjJh3F4Y2H7/a8keHEI5Hb\ngLcRmTWeBX5AdAjVvwCnADXAOuAkVe3dVVt7euqA3eNvI+7dfkREzgeuJXIUeaOqfn00+mEwjFVC\nDSl6RXpKPWwtdtNW6qaz3EdHuZeuSoFnlizle96f6fdc+vwKBd+nGPqUQqUcgquCi+BjE1gJAkmC\nnUHsDNjpKFhp1E6D3QoyHYISWCUkWcZKuNhpjwQ+SXwaRMlaQo1lUWNb1NsOdYlICTQmUjQns0xJ\n52jJ1DMtU09LtoGGdP3gL2Y/9OkudUcjlWIXHYUONvdvZlP/Jtq2trGk0M79xQ66il10l7vpK/dh\nWzbZRJaUkyJpJ7HUIigHuP0uld4Kxd4iQT4guSWJu8aNpsj6O3B7XIrdRRzHYXLLZA6ddijzDp/H\nEScdwYwZM5g+fRaZzCzy+WmsXWuxfj2sXx8tlW1rg44O6O4Gy4JMbQUn14OV6cWze6hID6X6HtLT\nt9GZa2NrahN+chO+30bodMIh/TC7CGmPZJBmcmYS05sP4/Dmw2nJtdCSO4pptdOYVjuN1rpWWmtb\nt1suvJ/4OfAo8D/AmcBTRO9aB/gK8CHgduCzbH8UyHaM2emseMv9SuA8YDPwJHCpqq4YUseMRAwH\nFFUl0AA3cHF9l1LgUvArFAOPol+h6LuUAo+i71KI01Hwo+B7Uf0wiku+RzHwKQc+ZQ1wg5CKKq4q\nnoKngg8EWIRiE2ATio2KEwUrgUoy+gVvJcBKgpWKYvUhdOPgIaGLpS6W+ljqY6uHowFJCUkCKQuy\nlkXWtsnZCeoTKRoTaRqSGWodh5zlUGNb1DoOtbZDzrbJ2DYJK0FIiBu4eIGHF3qD6bybHxzFDIR+\nt5+8m6fgFih4BQpugZJfouSXKPtlym4Zt+LiuR7qKRII4gnqKeoqlmfhBA4JP4ETOCT9JI6XwHET\nSMVCS4pX8HHzFcr9JcqFIslMhlxtI7W1k6mtmUou20Im04JlTSUIp+AFzZTDBspBLXkPil6BUtBP\nhTy+1U/g9EMyCpLux0rnsTP9WJl+7Ew/ku6DVB9Bog+XPpQQJ0gjFQctKUHBJciXoazYnk2tXcvU\nuqkcN/M4XvXKV3H2yWczu2U2jelGbGtn+/0OLEOms84CHlDVjIg8QLSL3SJ6504D2oiOz93lOesj\nGv+IyP3AO1S1J843Arep6hte4mfZHacBq1R1XfzM24A3Ayt2e5dh1FFV3DCMXq6BSyXwB1+2ldCn\n7MflcboSxi/VwKcS+rhhQCUMcOO0G4a4YYinUdrXEDdUfA3xNMQPFU+j4A8NQKAMxgFSjYFAJX5Z\nC4pFiBW/rG1UbBgIViKOk6ABhD5ogKgfvbjVj8t8COProY+GfrTkJgwQDZEwxArB0hBbBTsULLWx\nFWwFRyGjYKvgaPTPaWlAIjb0OoCjigPYhDiqJAiR0IewQqAevrr4YRR76kZ5davX1MULKvh+hYJX\npscvE/gefuDiBy6h7xIEHhoESGAjvoP4Nng2BBbiWqhvgS9o/KLHB/WIBO0DviCBQAASDAh/IISR\nTIIQDX00cEFCSCaRZBZJJJFECrFTiJMGO4XaKXw7iWcnUMsBJ4kkHSRhY6UtpM5GEhaSABKQSASo\nU6LXKdLjFAntTaizCnUKkCxAoghqYQc12FpDUnNk7ByNTo76dC2NNTmaarPUpx2SgJf36NnaQ097\nD93t3fSs7qG3o5dCdwG3z4UKJKwEjY01tLa2cuSRR3LKKadwzjnnMHfuXBxn5NNMo4DAoCv42UTv\n16OALcAU4L3Ar3bXwEg/3eQBBQKgqt0isusT4/cPrcCGIfmNRIplO17xxrcd4G6MZQQVQKDQ1UFN\n89TIAU5cNnBcjEps0IpXZ6iADqzUECGU+J6oSVQkqm8JYdxMiKBWdD0UieO4riVRPNiOICgoiMYu\neVQRQEId6HnVWw+KoMhAPq6LxmUD5rgw/lgA4ZB7qLaDQnnrVjLNk+M2ohe0Pdifaj1QRMP4fh0s\nF8L4eogVqRuEACFELD+6LmH0hpQQsQIEH6wQEQ8kxLK8uI6PSAB4YAWgAaoKGiIDjw0hDC00hDCE\nMBQ0FDQELwRXIQyEMLotqqO6k7QSapQPw6jM6w+RLNuVA1iWYEkUbEsQLFIiWGJhkUawsMTGilJY\nccpWCxELseKXtiNIOtZ4CYUEhIkQdULCREgYx4ETEiSCKHYCfDvAd0J8O0QQnCDA8ZVE4OEEJZzA\nwvZtbF+wfRvLs7F8G/FtrMBGAhsCG0ILKxCsMkgBnNDCCWzswCYROiQCh0RYT0In0dPTR0t6ElZF\nUF/xfQ/P9/FcD8/z8P1uPH8r5SBgoyqbEDT+7jm2QyKZYHIqxczsTHK1OeoPraepqYna2trB1VcD\n/1e6uMijS//EI9aDqGWjloXaTpS2E6hlE9oO6kSKMXQSqJ2I5sZ29p8uFslkmnQ6R01NPTU1jeRy\njSQSyZ3WH45qtCKsrw/uvnugTbmVaKYnDawGvgucSzRDdYaIbAJ+VP0H3DkjVSKBiEwfOMkwtuiP\niXmkZ1Y+hOTi3aIJG2mqwWqJfPOHbX0AEyIfen3gbt3/7evI62tbH7o/n98+LL91SF52fT9psHKl\n/fT5BaulHpD4uiAt9YCDtvUCAlMbo8/f3gukkalNcf3od5dMnQQI2t4d9W/K5EgbtseLXqY2Rdqt\nvRNQrJZGQKG9C1DsQxqAEG3vRkSxW+oQUcItPYgozrRaRELCLX0gIcnWHJaEeJv7ka4StXMaEVG8\nzXlElOz0NCJKeUMRsUKyh6WwJKS0sYyIUjMzgVghxfUuYoXkDncQ26O41gNLqTtSSNpK6cWAhCjT\njoaUhPSuDkkAhx8FKYW2lZBUOPZISAewdiUkKzBnGqR8WLkKnABObQW8kMVrAvDhlMkWVkVZskGx\nPTitFhIlWLIVnAq8xoJMEf7aC5YLZwVQEWEB4IpwomNRFOGxUCmLMNu2KSLc5fo02g5T7AR9arHS\n8ymoRUITFAPok+jYjHoriSNCn3qICA1W9KLe5rngQUMxSWcn9IRR/YHr1XwCAXqDCoLSYDmIKj2h\ni6BMEgvRkG71EVWaBURDthGiQJPYhNh0oYRi0yAJfLHYGvqU4zp96tOrHg4WTVaSeiuJpVBrJZjt\n1NFop+nTgJyV4dTs4azTgAcrG6mk6ph8/OnR91X1MhH5MpG9Y4WqfkJE/gDUichUVW0VkTXAbrdy\njHSfyPnADcBD0X8N5wBXqOq9e7x5HxGRM4Avqur5cf5KQIca13dmE/HCaE14r+/TMyR0+z7bPI/u\nON0dp7f5Pr2+TykMKQUBxTCkHIakLIusZZGxLGpVafQ8Gn2fhkqFBteloVKhvlKhrlKhtlwmV6mQ\nK5XIlstky2XSpRKZYpFUqUSqWCRRKODEwSoUkHwe8nnwfcjloLY2CnV11fTQfF3d9unaWshkIJWC\ndDqKB8JAPpEYHH3sDlWNfg37iueGeGWPSqVEpVzBLbtUKhXcikel4uK7HpWKR8V18Vwf1/VxvSj2\nvQC3HOBVAvxKiF9RgkqI5ymBB6GnBC4EHgQ+hJ5Es0OeRL+0PQsNLPAdCJIQOBAkILQhdOJfnjYS\nWmhgg1pIaEFoQSiIRnGUB1SiwYBGv+oHRjqigsSjHNHoC22j0RSRKBaKI1E+KtfB6wNpa0iZhWJr\ntcwaCEqcjmKBOB2N1SIsfBSfAVuI4IsQiBAI+JYQIgRWVBZaQmBZBJYQShzbVlxmRWW2jS8Wgdh4\nYuFLnMfCUyuacVILXwVfBS+M4kAFX8EPo7JAJUoPxOFAfYblozqBWtgSkpCQhBXiSEjCCnAkwLEC\nEhLgWD6OBNjiR2nbx3F8bMfHcTxsx8dKeVgpF0l62KkKknSxk2XsZIVEqoiTLJFKFUgkS6QSBZKJ\nMpYTInaAFT/L0YBk6JFyfTKeT6ZSoaZSJlsqkSuWqM0XqevL09BVoG6zjwTg1QluvU2lLoGbS1Cp\nTVOqy5CvzdHd2ETb1Gl0NrfS2zCb8uQjSTYfwuR0PVOTSaYmk0xLJmlNpajd1+krVXDdaF1wqVSN\ny+UoeF4UwhBU0SAgXyzS2dtLV28vHb29bO3upqOnh7bubtq6utiybRsbu7rYsG0bWcfhuEyGc8tl\nvlQsAhwGLAJSwMOqepGIXEE0hfU74E7gCeD7qvrSDevxhsOBg0keV9XOfZPUyIjPdH+eaLi1Bfgr\n8E5VXT6kzgExrIeqlMOQUhhSjBXLgIIpBAGlOB7IF4emh5QV4nQ+CHaIbRFqbJsGVaaWy0ypVGgu\nl2kul2kql2kslWgoFqkrFqktlcgVCtQUCmQKBdL5PMlCAadcxqpUsCoVpFLBcl2kUom+cJUKEgTR\nFtYBxTKQTqW2Tw/PD782oJSGKqvhZen0rkMmE7U5QoUWhhXCsEQYluNQGoyDoLRD2UA6ulYNI80H\nQQnVJKq1QA7IEYY5IEsY5hDJEoY1qNagmiUMo6CaGZaOQhCkCcN0HKcIgij4XgK/bOGXArxyHEo+\nXjnALwZ4pRC/HOCXFb8c4rvgVxTfhWBAEfuC71mEgRAEggZCGFoEoYWGFmCTxCMtHik80rik1CeF\nSwqPpISkJCBphSQsHYwTFiQsxbEhYYFjCY4FtiXYdjTlZVsWdjwFZllSnRIbmC9VwfMFzwPXg4oH\nng+eF5W7PnhiETgWoWMTOFE6sKMQWoJvWQSxcgzEipQpFj6Cx4CiixWbWngKvoJHiEuIR4hHZB9z\nUVzAk2gVmh8Kfmjh+Q6+n8DzEnhuGpGQZKpEKlUmmSiTdspkrBI5yVNLnrqgj8ZKD435HurCfrK1\nBTINfaRatpGZ2kdykos0W/hNSToyTWzMTKE70UIxeQhp91CmlCcx008yQ5PMlhR16QRW1sLO2tg1\nNlaNhZ2zsXM2Tp2DXWtjJUZ0cvmIUVXa29t5+umnufOaa/jevfdCdOT5VKqzSuuBjwDvAy4gmqla\nRnQgYc9OmgX2vE/kGFVdISKn7KJjT+3LBxop8QjoOqpLfK8edv2gXJ2l8WqcQhDQHyuVfBDQ7/uD\n+f6BEJftLF8Jw+ifJQzJL1qEnHxybICO/okSquR8n1rPI+f7ZHyfjOdFIQhIx+lUXJ6O02nPIzUQ\nXJe075N2XZKuS8rzSMbppOeRrFRIDMSuG4VymUSlglOp4LguTrmM7XkEqdRgCDMZgnSaMJMhTKfR\nTAbNZtFY6Wgmg2QySKyIrHQaiWMrk8FOp7EzGaxMBieOBxTWwqeeYt5rXxspr3R6l/PMQ/8equ5u\nlU4QFHdxrRini3Gd4XEhvl4YbEMkiW3XYNtZLCs7JK4ZzA9NW1bNdnV2V9+yavD9NK5rUalE+0RO\nPnkelQqU8x7lngqVfpdKX4Vyn0u536OS9yj1+1SKAeVCEMUlpVzS6IdwBUpli7IrlFybkutQ9BMU\ngxQFP00hTFPQLB4JshTJSYEaKVFjl8k5JWoTZXIJl1zSoy7tUZ/xqcuE1NVAbQ3U1VrU1Vrk6pPU\n1iWoqUuSrk1BMkNoZ1ArRYiDekpYCQkrIVpRwnJIWA4JSkGULkUhKAZRuhin4/hvvX9jTjCHoBRE\n07QpC0la+Gml0lCmWJ+nUFugkC1QSJcoJssUnQplK8CTEBcolmoo9kyl2D2JQncj+d4G8oVa+ku1\n9Pk5fGwarDwNiTx1mT7qGruob+ymLlUim60QNrq4U8CuS9IgNTR0TuWQ9gTT10NNZ0iQDwj6A6yk\nhdPg4NQ7OE0OTqMT5QfKGrYPiaYETlMU23X2drvTd0Z8/buq+jERmQd8RlXftC/vsz0pkRtU9Yr4\neNyd/O/pa/flofuLg1WJHAiGbyrTeIWSGysZT5UgLhuIfVUCqKZ3cn2kwRuW9sKwmlYlCAK0UkHK\nZaxiEatcxiqVsMtlrHKZRJx24pAolbBdd1AZJeJ0Ik4PKrJKhXSlQtp1I0XouizO53mtKmnXJeW6\n+LZNJZXCTaVwk8koTqdxUym8dBovlcJPp/FTKfxYufnpNOFAiJWbZrNVBZfNRiGTwaqpwaqpwc7l\nSNTUkLQsUpYVxSLbpZMiJHCxdUAZFYYpnmo+Sg9XQlF5VUENLysShmUsK41t51i61OLUU5ux7Vys\ngGridO12sePUxukoRPm6OF2HZWX2+GLyfSj2euQ7yxS2Vch3VSh0u/Rv88j3eOR7Avp6Qvr7lP4+\npa9f6M3b9BVseopJesspuisZer0sxTBNnZWngR4atDuKnTwNySKN6TKN2QpNOZfGuoCmRqVxktA0\n2aZpapKGQzLYjXXRzr76+sGp4IVLljDvda8DIPSHKCJ3iGJyQ9SNlVWc9koB7cUKm/Jl2grdbPPX\nU9QNhPYmJmfbmJJroza7hWRuPV45RWHtkfSvnk7fqsPoW9tK75ZWOgvT6NIGOqiliyxdYYaeME3O\n8miWMs24TAldplBmarJMS9ZjZl3A5JoQO2NhJS3Ekej0D4mXrgSK+lGfw1KI3+8TbAsIKyGJSQkS\nkxMkpiRITkmSnJokdViK7LFZGuY14GQdiJbxNhEvBAQWqepp8SGEHwS2xn/az6nqPbv6u+9JibxD\nVW8XkVmq+uKeXmQvN0aJGAYIhijLASU2qMwqFfxikaBUIigWCctlwjjWUikKxSKUSmi5jJRKUYgV\nnpTL2LHis0ulSNHFcaJcJlUskiyXSZVKOJ5HJZWilMlQTqUoZDIUMhnymQz96TR9mQx96TT96TSl\nbJZyNku5poZKNksll8OtqcHL5fBqa/Fraghra6GmhrRtk7Ys0pZFZmh6wHZn22QG80KaMlmpkNYS\naSmT0iIJLeFopGh8v58gyBMEQ+P+uLxvh7Sqj23X4Th1cVyP4zQMCQP5xsGQSDTiOE0kEpOw7exe\n/T19P1pJ1NMDvb3QvdWjp61M95Yy3R0e3R0B3V0h3d3Q3Sts63PYlk+xrZSmz01T5xRpsntpkh6a\ntIumoINmfwuTnF6as0WacxWa6z2am0ImT4bmqTbJSbXQ1ASNjVHc1ASTJkWhqSmyMQ77zr1QKrE0\nn2dpPs/i/n5W9m9kqm7grFQ7JzibmaZryJaWE3gdZPpryawJqF2Up25ZgJdvZB1n8oI/lzWJWbTl\nErQnkrR5tbT1TGbz1pn4QYKpk7cxfUqFVxyS4NQpaY5vKNPoVfC2efhdPm6Hi9fu4ba7OE0OmcMz\npGakSB2WIn1YGrvexuvwqGyokF+ap7y6zP9v777D46rOxI9/X/Uuy6ruwg3bsY1cMdU24NBCTUKA\nhA0lJIQQIBBgCRv40ULIbkLbTSELDi0hBIdiggOGdQnVNrZl417lIlnVarbKSPP+/jhXnrGsblmS\npffzPPeZuWXOnHllzzv3nHvPOXXPqQADgAwgEbgbGIm7jeJbQEVbpz9vLYmsVNXJDY/t+lfQBSyJ\nmB6nvt51hh44cPjScCGFt/grKvBXVFDvPforKty3ZkUFUlmJVFQQUllJWEUFITU11MXE4IuNpTY2\nlprYWKpjY6mKjaUqJoYDMTGHElW5t5RGRbE/Jobi6GiKoqMp8JbCqChCo6KIDQ0lLjSU2NBQ7+7y\noPWG5yEhxHnP40P9JHCQOA4SQyXReoAorSBcKwjzl0N9GXV1pd6y/9Di85Xg8xUjIocSiltSCAtr\neJ5KeHgK4eEpREQEnoeExLR69tPcn6CsDIqLoaTELcXFUFykFOX5KMqtpbiwnsICKCwWisrCKa6I\nIDbCR2pUBanhpaSGlJBGPml1uaRW7yGtKoe06ArS+teRnqYkD4wkLCMF0tIgPd0tGRloejq5ycl8\nocryykqWl5ezrKKCtJBqzovJY1pYDpm6hYgDq6iq2kx0WSyxm3wkLa0kMi+cKoZR7ptJ8e5zqIuC\n8qH7yMmsZksC5JQlsmvHaLZsnkJMrJ9TTq7mnLOTmTMnghNPBFSpzaulalsVBzcepHJ1JWUflVGz\nt4a0K9MY8tMhRJ8QTf6f88n4dsah+UREZCZwJ+5ylGdwNxxWquqv2xLv1pLIB17B03Fz8R5GVS9u\n7x+4M1kSCbDxogJ6XSzq613yqagILA3rTT1WVh5KSIt37WJWSIhbLy9Hy8vdvUH9+lGfkEBdYiK1\n8fHUJCRQlZjIgcREKhITKU9IoCwhgeL4eAoTEylISGBffDz7RajwLhAJ7s+rVyU+LIyE0FASwsJI\nbHgMC6NfaCj9Q2pJDqkkSSpIpJx4yonRUqL8pUT49xNSV0xdXTE+XyE+XxE+XzGq9UGJJbBERKQT\nEZER9DiAiIg03LU4zWvp34Xf7856CgsPXwoK3FJYoBTk1pG/z09BobC/Ioyk6BrSY8pJj9hPuhQw\noH4vA2p2MqByMwM1l8HpPgYNgqghKWwZPZpPhw/n44wMPoqJYa8IMxOjOC8ml0khG4k/uJyykiVI\njY+EjSH0/78KIvMiqIwYRemBiyndOBMJC8cfWUHlhVtZOS6fHSWh5K09kVUrzyUyIppLLgnl6qtj\nmTHj8GtYqndVk/tsLrm/z2XEf41gwLUDDt2x3nCMd7PhYmA8LqFcC5Thhry6s6Wxs1pLIhG4gbhe\nAr7XeL+qLmn2xV3AkkhAr/viPAoWi4AjYqHqrt4rK3NLQ3tRaakbCKrhp3tJiVsvKvJ+xntLTIwb\nSTA11S1paZCWRl1qKtUpKVSmplKWmsr+5GSK4+Mpa+Jy+4ZL7oMvtS+rqyMuNJT+4eEkhYWRFBZG\nalgd6SEVpEk5yVJOEqXEU0qsv5hIfxFhdYX4ffnU1uZRV1dCeHgqkZGDiIwcTGTkECIjBxMVNYzI\nyKFERQ3jk082MXv27E6Ja12dC01BgRtHq2HJy4PcXMjdXc/e3X5yC0KJi/AxJKGMoVEFZIbs4gTf\nZpLZRPHwA2w69QQWZU2gOC6OOZUVXBxdwuS0vfgivmR/yQdEVISR9HEN/T+upZpkSsMuo3jNJUh9\nDP4apey0Oj6/8nMOhOWw/19DWbLo3wgPS+LWW2O44YYQYoJaEQ9sPED2OdmMeX4MyecmB5+JxOES\nyMOq+paIpAJF6sZFeQQYoKo3NBeL1pLIS6p6TcNovp0S/U5kScSYLqTqEk5R0ZE/1fPzA9+o+fnu\n8cABN0HGwIFuGNuGx8GDD18iI/GrUubdtxV8D9d+n4+SujqKgx4LfT4Ka2sp8vk46PeTFh7OwPAQ\nhoeVkxlWymApIk0KSdICYupzCfPtpa4mh/r6CqKiTiA6eiQxMaOJiRnjLeMID086ZiErKnIDN+bk\nuGX7dm+k3y1KTo4ysH81maNziZiwm6IxZWwcEc2ULZv55qZ1nB+3l5CJBylK3UItxSR9EULKB9XU\nSAqlYT9k/8dnIqGh1IfCZ9f7yf7qe2Rt2cOC177Lxo2n8eijkVx3nRy6QLFofhE7H9jJtFXTGsbO\nCgPeARao6lON69/UUPFHHNNKElmPm4hqATCLoFEnXIBaHmf+WLMkYkwPVl3tksneve7n+d69sGdP\n4HHPHre9Xz8YNgyGDnVLZiaccIJbMjPdzbjNqPH7ya+tJb+2ln21teTV1pJbU8Pe2lr21NSwu7qa\nPTU11KkyMrKeCWGFjArdx1B2k+rPIbZuO1K9ifCweGJjxxMbO5G4uInExWUREzOWkJDwZt+7M/h8\nbo0PO2EAACAASURBVPj4devcsmYNrFxXz570EhLP30f5+BJGFxzgxmWLuWrRHzl4VjgFp9dRHV9J\n6mIlIRsOpF5IYfaPqc0JR0X4182RLL9gKedu/ZTfPfEYGRnDePXVSJKTQf3KJwM/4fT80xuSyIu4\ns447GuokIhmqus97/hNgmqpe3dxnaC2J3Ar8EBgO7OXwJKKqOvzoQnh0LIkEWBNOgMUioMfHwu93\nZy45OYGf6zt3Bibn2LnTXaI7cmRgGTUKTjwRRo+G2LYNj15eV8e8hQvJmD6dnOpqcmpqyKmuZmd1\nNTurqgjx7WVa+B4mhuUwgm2k1m0iqj6XiOgJJCdOIynxVBITTyMqaugxDUeDsjI3xe3Sz+p5q6CY\ndYPzYXwZY3fHcePuPK7Z9wf2xyxk36xqIguEAQv81Az8KsWrfs7BNfX400J56JE6Lhv5Vz59ZiLL\nl13HkiWRDBwI6765jvGvjwfXgb4Ud0Nhw8h1PwOuBrJw/eE7gR+oan5zdW3rsCe/U9UfHm1gOpsl\nkYAe/2XRhSwWAcd9LFRdR8PWrbBtm5sScPNmt2zd6i6/HTsWxoxxj+PHuyXpyOaplmJRXV/Pzupq\ntldXs72qiq1VVeQcLMR3YDX9atcwOWQDY3QtEhJJfexppCSdzYlp55IU2zW/o30+WLCshqe37OOj\nfrn48iKZvHUwtySXMyv+fgoT5uGnlgHzwX/iPex57iLq9tfx4R3R7L/sQ6r/GMKKFbfx2WdRREQo\nISEhh3WsH432DHtyOjBKVed6Q6DEq+qOzqhER1kSMaYP8/vdmcvGjbBhg1u+/NK1CyUkwIQJMHGi\nW046ySWaDoxr5fP72VZVxYYDB9hRvo4DZUuIPfgJw+uXUy2J5EedSXjiVxmRcg5TEvqTEtG2kXU7\nqs7v55WcYh7avIuCynr8z2VyRUYKN1/8B/z1dxKZU0XKF4mUV71L4Xwf666OZsfN81l+zyzOPHMm\nDz0U1nDp9BDgRdzQJ37gj6r6tIicBPweN7qvD7hZVZudmLCtZyIPAFOBE1V1tIgMBP6mqqcdbUCO\nhiURY8wRVF1yWbvWdTKsWQOrV7s+mAkTYPJkmDoVpk2DceMgtGOTQtXW17G+6FN2Fb5Dffn7RPm2\n8TkzWBt2FpGJc5iemMaMhAQmx8cT0crQOx2hqry/fz93b95OaWEIVY+PYnq/KO6/+S5q659i0DwI\nLX6K7Qsm8vH1kfQ7/2nuu+55duyIpn9/Ae9mQ1Vd7V2htQK4DDeb7K9V9X0ROR+4W1WbvaytrUlk\nNTAJWKmqk7xta1rqse8KlkQCjvtmi05ksQiwWAQsfvddZiUkwIoVrsNh+XLXVDZpEkyf7pZTToEh\nQzpUfk1NLoWFb7Ar/zWqD2SzM/JsFujZ/LNmHNMS+zGzXz9m9+vHjISETk0qflX+tG8f927fzsTc\nDNb85ARuvGYVF5x8Cv0/9REz/yds33Qxv39mFwXz4vn65V/jllsiAJ4Hvgbkq+pEEXkTd6XWf+Lu\nEcnGjeR7jqp+p7n3b+u5Xa13zbA3t5F0+mS/xhhzTMXEwOmnu6VBaalLKsuWwSuvwC23uBGnTz0V\nzjgDZs50fSxt+NKPjBzI4ME/YvDgH1FTs5dRBa8yYd+z/CSijMrIq/mo9mvcua2YTQcPcnpiIuf3\n788FycmMiI4+qo8VIsL1AwbwteRkbty0icHzVrHpha/w7oN7+e09Q/BHP03SU8O58d8n8OZd/+SN\nNxoGY2cu7g71F72bDbOAwcCPgMdwHe+zcDcgNqutZyI/BUYBc7zCrwf+rKrPtP8jdx47EzHGdCpV\ndxPHJ5/A0qWwZIm7yXL2bJgzxy3D29eZXl6+gry8Zyks/BtJSeeSOOBWPqsbyYKSEt4tKSExNJTL\nUlO5PCWFqfHxHRrqJVB95Ve7d/PMnj18f/tEXnmwjBceHErKynj2PjmPRXcv4df/fQ+VFXHgzkQu\nxs1/sA54GHgBdxYSBmzBjae1QVXnNPee7elYnwN8FXeZ73uqurDDn7STWBIxxhxzubnw4YewcKFb\nEhLgwgvha19zZyvhbbuXpK6unLy859iz5ymiooYwdOi99Es6j5WVlbxRVMS8wkJ8qlyVlsa309MZ\n18bLl5vy14ICbtuyhf8oO4lPnnqNm2++gdQHLiKn5jKuKryQkuJ0cJMLJgJvA3eo6lMisgdIU9UI\nEXkHd59gjaomNvde7Uki6cA0b3WZqha0dHxXsCQSYG3fARaLAItFQKfEwu+HVavcROXz57t7WS66\nCL7+dXeWEhnZhiLqKCqaR07OI4hEkpn5AMnJXwMgu7KSPxcU8Ep+PkMiI7lhwACuTk8ntgOd/6/m\n53PX9u3cumEyU3aMJn54HpXf+we3jIlj/fpTwZ2JfAeICBoCJR9IwQ0N/wJwDa4vfFozb0ObendE\n5ArczILfBK4APheRb7T7UxljzPEsJASmTIH773cd8ytXQlYWPP64G9bl+993TWB+fwtFhJGW9i2m\nTs1m2LD72LHjPlatOoPy8k/Jio/nVyNGkDNjBvdnZvJOcTHDPv2Uu7ZtI7empl1VvTI9ne8NGMA/\nJq3n1dy/4A/xEXPyq4wZkd1wyEQgAkBEqkRkN65paxvukt8rcTni+y29T1v7RLJxUyQWeOupwAeq\nelK7PlUnszMRY0yPsWsX/OUv8PLLbtywG26Aa69144W1QLWe/PyX2bHj5yQkzGDEiN8QFTX40P6d\nVVU8uWcPL+bnc1VaGj8fNoyMNpzxgJvzZNbq1Zwdksq5r04gPEUoDh/Oebd9AW7ukJnAHUA8br71\n4bipce8FYoApqtriBVhtvc4spFHzVXE7XmuMMb3f0KFwzz3uvpTXXoPdu919KZddBosWuU77JoiE\nkpHxXaZP30RMzFhWrMhi165f4ffXAZAZHc2To0axafp0okJC+Mry5TyycyfV9fWtVilUhN+PHs1v\nK3P4ghupGruf0HcPTUh7JXCd93w9cAA39MmLuOk/6rxtLWprIviniLwnIteKyLXAP4B32/ha0wUW\nL17c3VXoMSwWARaLgC6LhYi7mfH3v3dnJ+ee6y4dnjgR5s6F2tomXxYaGs0JJzzIlCmfs3//Qlau\nnEFl5dpD+1MjIvj1yJF8MWUKqyorGb98OYv372+1Ol+JjeXC5GRWnvstYjcJMVUVDbvuxo2JCHAQ\nGAa8AkTimrlmAHUi8suWym8xiYjISBE5TVXvAv6Aa0ObCHwKPNtq7Y0xpi+Li4ObbnLDsTzxBPz5\nzzBiBDz5JBw82ORLoqNHMHHi+wwceBPZ2Wexe/eTBDfbZ0ZHM2/8eJ4YOZLvbNjAnVu3UtNCHwzA\nT4cMYUF4DSElYYRN/LRh89NAQ1vbCbh8EE2gpWkrsAb4r5bKbm0U33eAe1V1baPtE4BfqOpFLdb8\nGLM+EWPMcWfFCvjFL+Dzz+FnP4Mbb3Q3ODahqmo769dfRXh4CmPHvnzEvCfFPh83bNzIvtpa5o0f\nz6AW+kpOW7mSn867gYHpO5lxWym4sbPewk08mAcU4fpEcoIeRwBDGoaGb0przVnpjRMIgLcts5XX\nGmOMaWzqVPj73+Htt+Gdd9zAkK+/3mSfSXT0cCZN+oiYmNF88cXUw5q3AJLDw3lj/HguSknhlJUr\nWVtZ2ezbfjM1lU+Sz8I35FBz1vO44azAXdY7AagHRuNuNhyByxH/3dLHaS2J9Gth39Hdq286lbV9\nB1gsAiwWAT0uFlOmwIIF8Nxz8PDDMGuW65RvJCQknJEjnyAz80Gys89m//4PD9svItw3bBiPDx/O\nnOxsVlZUHFEGwAXJySwYOp36mEMd8uMIzBEVhutU3w003JRSjhs7q9m71aH1JLJCRG5svFFEvoe7\nHMwYY8zRmD3b3W9y1VVwzjlw771QVXXEYRkZ32HcuNdYv/4qCgpeP2L/Venp/G70aC5Ys4ZNTfS3\njIqOpjAljciiQ5uuxI3OXonrUK8F/h34J/AXXGI5EygWkeTmqt9an0g6LhPVEkgaU3E995e11E7W\nFaxPxBjTq+zbB7ff7pLKSy/ByScfcUhFxWrWrj2fESOeID39yiP2z83L49GcHJZNmUL/RkOyXLT6\nC37++TROvkkbpsedh7tXRIF5qnqTiHwf1+G+CngUGKSqzbZKtXgmoqr5qnoq8CBumsSdwIOqekp3\nJxBjjOl1MjLg1VfhscfgkkvgwQeh0f0g8fFZTJy4kK1bb6eo6O0jirhuwAAuSknh2o0bafwje1Ji\nf7Ta3TsoIqcBlwJJQH/gVBE5Dze673Dc/SJxQElLVW7TfSKqukhVn/GW/2vLa0zX6nHtvd3IYhFg\nsQg4rmLx9a+7MbqWLIHzzoPCwsN2x8WNZ8KEd9i06XuUlX1yxMsfHz6cvTU1PL/v8N/6Y2Ni4O2B\nAKjqx8CbuOashao6UVX/ibtfZCOwEHd5b7OzGoLddW6MMT3TgAHw/vtuBsapUyE7+7DdCQlTGTPm\nBdat+zpVVTsP2xcREsLzY8Zw7/btFAXd3Dg8OpqPhk4FQETmA5cDCcBYEVkpIotxk1E9hJuw6mHg\ntpaq2eZRfLuSNx3vjUDDUCs/8zJk4+OsT8QY0/v99a/urvcXXoALLjhs1+7dT5Cf/zKTJn1MaGjU\nYftu2byZUBGeGjUKgLyaGsZ8tJDycy4CNxR8Cq7fO0FVK7zmrF/jOtTvBUpV9ZGWqtaTz0R+o6qT\nveWIBGKMMX3Gt77l7iu5/no3yGOQwYNvJzp6BNu23XnEy36emclL+fmHRgBOi4jgYOihuzNuxo1E\nosA6EbkON9NhHK4p61ZgTGtV68lJpOPTe/VBx1V77zFmsQiwWAQc97E45RT44AO46y74058ObRYR\nRo9+luLidyguPnxIw/SICL6dns7/7HVDZIWKkBTmrthS1atxAy1+qapDVXWuqo5S1WG4JqzVLc2t\n3qAnJ5FbRGS1iPyviDQ7q5YxxvQZ48e7WRbvu89dxeUJD+/HmDFz2bz5Jurqyg97yS2DBvFcXh4+\nb3yt5IjDm7yacRXuXpFWtThO/LEkIguB9OBNuNOq+4DfAg+pu5D5EeA3wA1NlXPttdeSmZkJQL9+\n/cjKyjo0e1nDL4++sD5r1qweVR9b7znrDXpKfbprvWFbT6nPUa2/9x6LzzgDcnOZdccdAGRnh7Br\n13hSUx9g5MgnDjs+Zd06znvmGYZERVHRylwkIhKK63Cf3OKBDcf39I5pERkGzFfViU3ss451Y0zf\ntHgxXHEF/OtfcOKJANTWFrJ8+Tiysv5FbGygO+OZPXtYUVHBC2PHcl52Nu9lZTXcbJiJ+36d0HCs\n17l+j6rObks1emRzlohkBK1eDnzZXXU5XjT+1dmXWSwCLBYBvS4Ws2bBI4+4Sa+88bIiIlIZMuRu\nduy497BDL0lJ4d2SEvyqnJXkRgIWkT8DnwCjRWSX17EO8C3a2JQFPTSJAL8SkTUishp3S/5PurtC\nxhjT43z/+67D/ZZbDm0aNOjHlJcvp6Ji5aFtQ6OiSAkPZ3VlJXcPHQq4jnVVHaiqkQ0d697261S1\nzfNF9fjmrJZYc5Yxps87cMCNCPzQQ655C9iz5ylKS5cyfvy8Q4fdtGkTY2JiuH3IEEQEVe2UK2B7\n6pmIMcaYtoiNdTch3norFLkhejMybqCsbClVVdsOHXZKYiKfNzNM/NGwJNJL9Lr23qNgsQiwWAT0\n6licfDJceSXccw8AYWFxZGRcx969vzt0yNT4+GbnGjkalkSMMaY3ePBBN8nVCjde4sCBPyA//0X8\nfjd21ujoaHbV1HCw0ajAR8v6RIwxprd49lk3ztYHH4AIq1adyeDBd5CaeikA45ct4+WxY5mUkGB9\nIsYYYxq5/nrYvRsWLQIgPf3bFBQErtYdFRPDliZmTTwalkR6iV7d3ttOFosAi0VAn4hFWJgbEuXR\nRwFISbmMkpL3qK+vBmB4VBQ7qqs79S0tiRhjTG9y9dWweTOsXk1ERBpxcRMpLXVnJkOjotjVyUnE\n+kSMMaa3+eUvYdMmmDuXnJxfUluby6hRT/N6QQGvFBTw5oQJ1idijDGmGddfD2+8AaWl9O//VUpK\n3gdgQGQk+4JmOuwMlkR6iT7R3ttGFosAi0VAn4pFWhrMmQOvvUZcXBY+XwE1NftICw+n0JKIMcaY\nVl1zDbz8MiIhJCScSnn5x6SEh1Pk83Xq21ifiDHG9EY1NZCRAevXk1P7PD7ffoaP+E/ClyzBP3s2\nQBSwFIjAzS31uqo+2N63sTMRY4zpjSIj4cIL4a23iI+fRkXFckJEiA8NBUBVa4DZqjoJyALOF5Hp\n7X0bSyK9RJ9q722FxSLAYhHQJ2Nx0UUwfz5xcZOorFyNqpIQFpjQVlUPek8jcWcj7W7asSRijDG9\n1Zw58K9/EaEJhIbGUl2dc+hMBEBEQkRkFbAPWKiqy9v7FtYnYowxvdnJJ8Pjj5Od9AsGD76NC3Zm\nsGzq1MPuExGRBOBN4BZVXd+e4u1MxBhjerNZs2DxYmJixnDw4CZig85EGqhqObAIOK+9xVsS6SX6\nZHtvMywWARaLgD4bizPOgI8/Jjp6NFVVW4gOcV/7IpIiIone82hgDrCxvcVbEjHGmN7slFNg2TKi\nI4dTVbWVy1NTG/YMABaJyGrgc+A9VX23vcVbn4gxxvR2I0Zw8G/PsKb2VmbM2GpzrBtjjGmHKVOI\nWrePmprdqPo7tWhLIr1En23vbYLFIsBiEdCnY5GVRcjajYSGxuPzFXVq0ZZEjDGmtxs/Hr78ksjI\nQdTU7O3Uoq1PxBhjertt2+Css8h+ewyDB99GSsqF1idijDGmjTIzoaCAyPoUamvzO7VoSyK9RJ9u\n723EYhFgsQjo07EIDYXhw4ndF47PV9ipRVsSMcaYvmDECKL21Hd6ErE+EWOM6Qtuu42yfnnkXRXH\n2LFzj/8+ERH5hoh8KSL1IjK50b57RWSLiGwQka92Vx2NMabXyMwkPPcAdXX7O7XY7mzOWgtcBiwJ\n3igiY4ErgLHA+cBvRaRTMmZv1qfbexuxWARYLAL6fCyGDiUst5S6utJOLbbbkoiqblLVLUDjBHEJ\n8Kqq1qnqTmAL0O7ZtowxxgQZPJjQvF6URFowCNgdtL7X22ZaMGvWrO6uQo9hsQiwWAT0+VgMHEhI\nXhF1deWdWmxY64d0nIgsBNKDN+GmX7xPVecfy/c2xhgTJCMDikqor+3csbOOaRJR1TkdeNleYEjQ\n+mBvW5OuvfZaMjMzAejXrx9ZWVmHfnE0tIH2hfXg9t6eUJ/uXG/Y1lPq053rq1ev5vbbb+8x9enO\n9SeffLJPfz/86U9/QkNCCPtd53asd/slviKyCPipqn7hrY8DXgFOxjVjLQRGNXUtr13iG7B48eJD\n/3j6OotFgMUiwGIBOm4cK+7awPTr6bRLfLstiYjIpcAzQApQCqxW1fO9ffcCNwA+4DZVfb+ZMiyJ\nGGNMW82cSfbly8i6vbrTksgxbc5qiaq+iZsYvql9jwGPdW2NjDGml0tJIbIiAqjutCJ74tVZpgOC\n+wP6OotFgMUiwGIBJCcTXhE4dxCRnSKSLSKrRGRZR4rstjMRY4wxXSwpiYjK0OAtfmCWqna4t73b\nO9aPhvWJGGNMO/zyl+xb/wQDXipAVUVEdgBTVbW4o0Vac5YxxvQV/foRWnnYFgUWishyEbmxI0Va\nEuklrL03wGIRYLEIsFgAiYmEHTys9eY0VZ0MXAD8SEROb2+RlkSMMaaviI8ntDJwx7qq5nmPhcAb\ndGCcQusTMcaYvmLpUip/chnxK0sAYoEQVa0UkVjgfeDB5u7La45dnWWMMX1FfDwR1VENa+nAGyKi\nuFzwSnsTCFhzVq9h7b0BFosAi0WAxQKIjSWiNgYAVd2hqlmqOklVJ6jqLztSpCURY4zpK2Jj4eDB\nTi3S+kSMMaavKC2FzEykrOz4n2PdGGNMF4uO7vQzEUsivYS19wZYLAIsFgEWCyAiAurqOrVISyLG\nGNNXiLizkc4s8njuU7A+EWOMaafkZKSkxPpEjDHGdEBUVOvHtIMlkV7C2nsDLBYBFosAi4UnMrJT\ni7MkYowxfUlQEhGR20Rkrbfc2pHirE/EGGP6kqwsJDsbYDzwF2AaUAcsAG5S1e3tKc7ORIwxpi+J\niGh4Nhb4XFVrVLUeWApc3t7iLIn0EtbeG2CxCLBYBFgsPIEk8iVwhogkiUgMbk6RIe0tzkbxNcaY\nvsRLIqq6UUQeBxYClcAqoL69xVmfiDHG9CXnnou8//4R94mIyKPAblX9fXuKszMRY4zpS8LDDz0V\nkVRVLRSRocBlwIz2Fmd9Ir2EtfcGWCwCLBYBFgvPoEHBa/NE5EvgLeBmVS1vb3GWRIwxpi/5wx8O\nPVXVM1V1vDcx1eKOFGd9IsYY08eIiI2dZYwxpvt1WxIRkW+IyJciUi8ik4O2DxORgyKy0lt+2111\nPJ5Ye2+AxSLAYhFgsTg2uvNMZC3uaoAlTezbqqqTveXmLq7XcWn16tXdXYUew2IRYLEIsFgcG912\nia+qbgIQkaba5Tqlra4vKS0t7e4q9BgWiwCLRYDF4tjoqX0imV5T1iIROb27K2OMMaZpx/RMREQW\nAunBmwAF7lPV+c28LBcYqqr7vb6SN0VknKpWHsu6Hu927tzZ3VXoMSwWARaLAIvFsdHtl/iKyCLg\nTlVd2d79ImLX9xpjTAd01iW+PWXYk0MfRkRSgBJV9YvIcGAk0OT49p0VBGOMMR3TnZf4Xioiu3Fj\ntbwjIgu8XWcCa0RkJfAa8ANVtR4xY4zpgbq9OcsYY8zxq6denXUYETlPRDaKyGYRuaeZY54WkS0i\nslpEsrq6jl2ltViIyNUiku0tH4nIhO6oZ1doy78L77hpIuITkXbP2na8aOP/kVkissq7yXdRV9ex\nq7Th/0iCiLztfVesFZFru6Gax5yIPCci+SKypoVjjv57U1V79IJLdFuBYUA4sBoY0+iY84F/eM9P\nBj7r7np3YyxmAIne8/P6ciyCjvsQeAe4vLvr3Y3/LhKBdcAgbz2lu+vdjbG4F3isIQ5AMRDW3XU/\nBrE4HcgC1jSzv1O+N4+HM5HpwBZVzVFVH/AqcEmjYy4BXgRQ1c+BRBFJp/dpNRaq+pmqlnmrnwGD\n6J3a8u8C4MfA60BBV1aui7UlFlcD81R1L4CqFnVxHbtKW2KhQLz3PB4oVtW6Lqxjl1DVj4D9LRzS\nKd+bx0MSGQTsDlrfw5FfjI2P2dvEMb1BW2IR7HvAghb2H89ajYWIDAQuVdXf0btHQWjLv4vRQH/v\nBt7lInJNl9Wua7UlFv8NjBORXCAbuK2L6tbTdMr3Zk+5xNd0MhGZDVyHO6Xtq54EgtvEe3MiaU0Y\nMBk4C4gFPhWRT1V1a/dWq1ucC6xS1bNEZASwUEQmqt3Q3CHHQxLZCwwNWh/sbWt8zJBWjukN2hIL\nRGQi8Cxwnqq2dDp7PGtLLKYCr3rjs6UA54uIT1Xf7qI6dpW2xGIPUKSq1UC1iCwFTsL1H/QmbYnF\ndcBjAKq6TUR2AGOAFV1Sw56jU743j4fmrOXASG+I+AjgSqDxl8DbwL8BiMgMoFRV87u2ml2i1Vh4\ncyXPA65R1W3dUMeu0mosVHW4t5yA6xe5uRcmEGjb/5G3gNNFJFREYnAdqRu6uJ5doS2xyAHOAfD6\nAEbTzA3NvYDQ/Bl4p3xv9vgzEVWtF5FbgPdxSe85Vd0gIj9wu/VZVX1XRC4Qka3AAdwvjV6nLbEA\nfg70B37r/QL3qer07qv1sdHGWBz2ki6vZBdp4/+RjSLyHrAGqAeeVdX13VjtY6KN/y4eAf4UdOnr\n3apa0k1VPmZE5M/ALCBZRHYBDwARdPL3pt1saIwxpsOOh+YsY4wxPZQlEWOMMR1mScQYY0yHWRIx\nxhjTYZZEjDHGdJglEWOMMR1mScQcFRGpF5GV3hDjK72bHY+2zEtEZEzQ+oMiclYnlDtTREpF5Atv\nqPDFInLhUZT3AxH5ztHWqwPv+10RKWgU9zGtv7LJsiracMxHHSm7iXKGicjazijL9Bw9/mZD0+Md\nUNXJze0UkVBVrW9nmZfihm7fCKCqDxxF/RpbqqoXe3U7CXhTRA6qarvn11DVP3RivdrrVVW9tRPK\nafVGMVXtzPHX7Ma0XsbORMzROmJIBe+X8lsi8iHwgYjEisgHIrLCmyzr4qBj/83btkpEXhCRU4CL\ngV95v7BPEJG5DRNKicjZ3vZsEflfEQn3tu8Qkf/nnWVki8jo1iquqtnAQ7jh4hGRFBF5XUQ+95ZT\nxNkhIglBdd4sIqki8oCI3OFt+56ILPM+x99EJMrbPldEnhKRj0VkqwRNjCUi94jIGu81v/C2DReR\nBeJG2l3SwudoKu6XisgH3vMBIrJJRNK8v8eb4kbw3SQi9zfx2pb+RhXe40yvjL+JyAYReSnomMne\nmd1yr/7p3vYp4iY8WgX8qLW/iTkOdffEKbYc3wtQB6wEVuHmqwD4LrCLwORYIUCc9zwZN98DwFdw\nZxtJ3no/73EuQRNINawDkV65I7ztLwC3es934MbGAvgh8Mcm6joTeLvRtpOAdd7zV4BTvedDgPXe\n8yeA73rPpwPve88fAO7wnicFlfkw8KOguv/Vez426LOfD3wERDb67B8Efb7pwIdNfI7v4uZHaYj7\nyqByXsR9Wc8Hrgg6fi/QD4gC1gKTvX3l3mNoU3+jRsfMxM1PMQCXxD4BTsW1aHwMJHvHXYEbbgTc\nUOunec9/RTMTJNly/C7WnGWO1kFtujlroQYmxwoBHhORMwE/MFBE0oDZwN/UG2lYVUtbea8Tge0a\nGFjyBeBm4Glv/Q3v8QvgsjbWP/gX/TnAWBFp2BYnbrDC14D7vfe7EvhrE+VMFJGHcV/UscB7Qfve\nBFA3hlOat+1sYK6q1nj7SkUkFvel/LegOoQ3U+/mmrNuBb4EPlXV14K2L2yIr4j8HTdFwMqgoqSh\nlAAAAmpJREFUzy808TdS1caTeS1T1TyvnNVAJlAGjMcNqS64v3euiCTifkh87L32Jdxsm6YXsSRi\njpUDQc+/jRuKfZKq+sUNvR3l7WvvHB8tHV/jPdbT9n/bkwmMZivAyepmxAv2qYiMEJEUXH/Nw02U\nMxe4WFW/FJHv4n61N65Xa/UPAfY3k5TbagguCTSeoa5xX4Q2emzpbxQs+LM0xFmAL1X1tOADvSRi\nejnrEzFHqy1JIBEo8L6cZuPmvwb4P+AbItIfQESSvO0VQMKRxbAJGCYiw731a4DFHa2vuHlX/gM3\n0x24kV9vC9p/UtDr3gB+g2viamqOljhgn9dH8+02vP9C4DoRifbeK0lVK4AdIvKNRnVs8XMEHRsG\nPIc7W9ogIncG7Z4jIv2897sU15QWXE5zf6Mm36uRTUCquOHEEZEwERnnnYmWisip3nEtxcUcp+xM\nxByttlxt8wowX0SycRP/bABQ1fUi8iiwRETqcO371+Pmxf6jiPwY+EbDe6hqjYhcB7wuIqG4uSMa\nrpBq61U/p4vIF7gmp3zgFlVd7O27Dfgfr56hwFJccxm4Jq1luP6Fptzv7S8APicwh3eTZwCq+p6X\npFaISA3wLi6hfQf4nYj8B+7/56u44dsbu0JETsN9watXzzm4q88+ETfM+TIRecc7fhnwd9z0py+p\n6qpG9Wvyb9TMZ2j8WXxe4nvGO/sIxc0quR7393xeRPy4JG16GRsK3phezmtem9JMH4oxR8Was4wx\nxnSYnYkYY4zpMDsTMcYY02GWRIwxxnSYJRFjjDEdZknEGGNMh1kSMcYY02GWRIwxxnTY/wfSUt9c\nOafS6wAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "glmnetPlot(fit, xvar = 'dev', label = True);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Prediction is a little different for logistic from Gaussian, mainly in the option `type`. \"link\" and \"response\" are never equivalent and \"class\" is only available for logistic regression. In summary,\n", + "* \"link\" gives the linear predictors\n", + "\n", + "* \"response\" gives the fitted probabilities\n", + "\n", + "* \"class\" produces the class label corresponding to the maximum probability.\n", + "\n", + "* \"coefficients\" computes the coefficients at values of `s`\n", + "\n", + "* \"nonzero\" retuns a list of the indices of the nonzero coefficients for each value of `s`.\n", + "\n", + "For \"binomial\" models, results (\"link\", \"response\", \"coefficients\", \"nonzero\") are returned only for the class corresponding to the second level of the factor response.\n", + "\n", + "In the following example, we make prediction of the class labels at $\\lambda = 0.05, 0.01$." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0., 0.],\n", + " [ 1., 1.],\n", + " [ 1., 1.],\n", + " [ 0., 0.],\n", + " [ 1., 1.]])" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "glmnetPredict(fit, newx = x[0:5,], ptype='class', s = np.array([0.05, 0.01]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For logistic regression, `cvglmnet` has similar arguments and usage as Gaussian. `nfolds`, `weights`, `lambda`, `parallel` are all available to users. There are some differences in `ptype`: \"deviance\" and \"mse\" do not both mean squared loss and \"class\" is enabled. Hence,\n", + "* \"mse\" uses squared loss.\n", + "\n", + "* \"deviance\" uses actual deviance.\n", + "\n", + "* \"mae\" uses mean absolute error.\n", + "\n", + "* \"class\" gives misclassification error.\n", + "\n", + "* \"auc\" (for two-class logistic regression ONLY) gives area under the ROC curve.\n", + "\n", + "For example," + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "warnings.filterwarnings('ignore')\n", + "cvfit = cvglmnet(x = x.copy(), y = y.copy(), family = 'binomial', ptype = 'class')\n", + "warnings.filterwarnings('default')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It uses misclassification error as the criterion for 10-fold cross-validation.\n", + "\n", + "We plot the object and show the optimal values of $\\lambda$." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "cvglmnetPlot(cvfit)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.00333032])" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cvfit['lambda_min']" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.00638726])" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cvfit['lambda_1se']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`coef` and `predict` are simliar to the Gaussian case and we omit the details. We review by some examples." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.1834094 ],\n", + " [ 0.63979413],\n", + " [ 1.75552224],\n", + " [-1.01816297],\n", + " [-2.04021446],\n", + " [-0.3708456 ],\n", + " [-2.17833787],\n", + " [ 0.37214969],\n", + " [-1.11649964],\n", + " [ 1.59942098],\n", + " [-3.00907083],\n", + " [-0.3709413 ],\n", + " [-0.50788757],\n", + " [-0.54759695],\n", + " [ 0.37853469],\n", + " [ 0. ],\n", + " [ 1.22026778],\n", + " [-0.00760482],\n", + " [-0.8171956 ],\n", + " [-0.4683986 ],\n", + " [-0.44077522],\n", + " [ 0. ],\n", + " [ 0.51053862],\n", + " [ 1.06639664],\n", + " [-0.57196411],\n", + " [ 1.10470005],\n", + " [-0.529917 ],\n", + " [-0.67932357],\n", + " [ 1.02441643],\n", + " [-0.49368737],\n", + " [ 0.41948873]])" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cvglmnetCoef(cvfit, s = 'lambda_min')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As mentioned previously, the results returned here are only for the second level of the factor response." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.],\n", + " [ 1.],\n", + " [ 1.],\n", + " [ 0.],\n", + " [ 1.],\n", + " [ 0.],\n", + " [ 0.],\n", + " [ 0.],\n", + " [ 1.],\n", + " [ 1.]])" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cvglmnetPredict(cvfit, newx = x[0:10, ], s = 'lambda_min', ptype = 'class')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Like other GLMs, glmnet allows for an \"offset\". This is a fixed vector of N numbers that is added into the linear predictor.\n", + "For example, you may have fitted some other logistic regression using other variables (and data), and now you want to see if the present variables can add anything. So you use the predicted logit from the other model as an offset in." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Like other GLMs, glmnet allows for an \"offset\". This is a fixed vector of N numbers that is added into the linear predictor.\n", + "For example, you may have fitted some other logistic regression using other variables (and data), and now you want to see if the present variables can add anything. So you use the predicted logit from the other model as an offset in." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Logistic Regression - Multinomial Models" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the multinomial model, suppose the response variable has $K$ levels ${\\cal G}=\\{1,2,\\ldots,K\\}$. Here we model\n", + "$$\\mbox{Pr}(G=k|X=x)=\\frac{e^{\\beta_{0k}+\\beta_k^Tx}}{\\sum_{\\ell=1}^Ke^{\\beta_{0\\ell}+\\beta_\\ell^Tx}}.$$\n", + "\n", + "Let ${Y}$ be the $N \\times K$ indicator response matrix, with elements $y_{i\\ell} = I(g_i=\\ell)$. Then the elastic-net penalized negative log-likelihood function becomes\n", + "$$\n", + "\\ell(\\{\\beta_{0k},\\beta_{k}\\}_1^K) = -\\left[\\frac{1}{N} \\sum_{i=1}^N \\Big(\\sum_{k=1}^Ky_{il} (\\beta_{0k} + x_i^T \\beta_k)- \\log \\big(\\sum_{k=1}^K e^{\\beta_{0k}+x_i^T \\beta_k}\\big)\\Big)\\right] +\\lambda \\left[ (1-\\alpha)||\\beta||_F^2/2 + \\alpha\\sum_{j=1}^p||\\beta_j||_q\\right].\n", + "$$\n", + "\n", + "\n", + "Here we really abuse notation! $\\beta$ is a $p\\times K$ matrix of coefficients. $\\beta_k$ refers to the kth column (for outcome category k), and $\\beta_j$ the jth row (vector of K coefficients for variable j).\n", + "The last penalty term is $||\\beta_j||_q$, we have two options for q: $q\\in \\{1,2\\}$.\n", + "When q=1, this is a lasso penalty on each of the parameters. When q=2, this is a grouped-lasso penalty on all the K coefficients for a particular variables, which makes them all be zero or nonzero together.\n", + "\n", + "The standard Newton algorithm can be tedious here. Instead, we use a so-called partial Newton algorithm by making a partial quadratic approximation to the log-likelihood, allowing only $(\\beta_{0k}, \\beta_k)$ to vary for a single class at a time.\n", + "For each value of $\\lambda$, we first cycle over all classes indexed by $k$, computing each time a partial quadratic approximation about the parameters of the current class. Then the inner procedure is almost the same as for the binomial case.\n", + "This is the case for lasso (q=1). When q=2, we use a different approach, which we wont dwell on here.\n", + "\n", + "For the multinomial case, the usage is similar to logistic regression, and we mainly illustrate by examples and address any differences. We load a set of generated data." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [], + "source": [ + "# Import relevant modules and setup for calling glmnet\n", + "%reset -f\n", + "%matplotlib inline\n", + "\n", + "import sys\n", + "sys.path.append('../test')\n", + "sys.path.append('../lib')\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", + "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", + "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", + "from cvglmnetPlot import cvglmnetPlot; from cvglmnetPredict import cvglmnetPredict\n", + "\n", + "# parameters\n", + "baseDataDir= '../data/'\n", + "\n", + "# load data\n", + "x = np.loadtxt(baseDataDir + 'MultinomialExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'MultinomialExampleY.dat', dtype = np.float64)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The optional arguments in `glmnet` for multinomial logistic regression are mostly similar to binomial regression except for a few cases.\n", + "\n", + "The response variable can be a `nc >= 2` level factor, or a `nc`-column matrix of counts or proportions.\n", + "Internally glmnet will make the rows of this matrix sum to 1, and absorb the total mass into the weight for that observation.\n", + "\n", + "`offset` should be a `nobs x nc` matrix if there is one.\n", + "\n", + "A special option for multinomial regression is `mtype`, which allows the usage of a grouped lasso penalty if `mtype = 'grouped'`. This will ensure that the multinomial coefficients for a variable are all in or out together, just like for the multi-response Gaussian." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "fit = glmnet(x = x.copy(), y = y.copy(), family = 'multinomial', mtype = 'grouped')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We plot the resulting object \"fit\"." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAElCAYAAAAPyi6bAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd8VMX2wL+T3fTegEDoXXpRQBCCiIICjypKe6jYC8+u\n71nfs7+f3WdBUAQrVRGUJgREBEQIIL130uum7u78/pgNCSEJaVuZ7+dzPnPv3bv3npO72bNzzswZ\nIaVEo9FoNJrSeDlbAY1Go9G4Hto5aDQajeYitHPQaDQazUVo56DRaDSai9DOQaPRaDQXoZ2DRqPR\naC5COweNUxFCWIQQ24QQfwkhtgshHhFCCGfrVROEEA8JIfYIIeaWOT5ACJFhs3O7EGKlne7/uRBi\ntD2urbn8MDpbAc1lj0lK2R1ACBEFfAOEAC/U9sJCCC8ppbW216kG9wKDpJRnynltvZRyREVvFEIY\npJQW+6mm0VQP3XPQuAxSyhTgLuABUF/uQog3hBCbhRAJQog7bceFEOJD26/0FUKIZcW/mIUQR4UQ\nrwkhtgJjhRAthBA/CyH+EEKsE0K0sZ0XJYRYYLv2ZiFEH9vxAbZf99uEEH8KIQLL6mnr3ewSQuwU\nQjxkO/YR0AL4WQgxvRzzLuoN2X7pfySE2AS8LoQIEELMEkJsst17RGV/B9trHwgh9tp6I/VKHR9k\ns2GHEGKmEMK71N/nFZuNW4QQ3YQQy4UQB4UQd1f/qWk8FimlFi1OEyCrnGNpQDRwJ/BP2zEf4A+g\nKTAGWGo7Xt92/mjb/lHgsVLXWg20tG1fBfxi2/4KuNq23RjYY9teAvSxbQcAXmV06w7sAPyAQOAv\noIvttSNAeDn2DAAygG02edp2/HNgSanzXgYm2LZDgf2AfyV/h1HACtvxGCAdGA34AidK2f0F8FCp\nv89dtu23gASbnVHAOWd/HrS4juiwksaVuR7oJIQYZ9sPAVoD/YD5AFLKRCHE2jLv+w7A9qv/amB+\nqTyGt629Dmhf6niQECIA+A14WwjxFbBISnm6zLX7AYullPm2eywCrkE5DEE5PQQbFYWV5pexd7gQ\n4nHbvg/QpJK/Q39UGA4p5VkhxC+219sCR6SUh237XwD3Ae/Z9n+0tbuAQCllLpArhMgXQoRIKbMq\nsEFzGaGdg8alEEK0ACxSymTbF/eDUspVZc656RKXMdlaLyBd2nIaZW8F9JJSFpU5/roQYilwE/Cb\nEOJ6KeWB6ltSZUxl9sdIKQ9eoGjV/w6igu2yFNhaa6ltAIn+TtDY0DkHjbM5/yUmhIgGPgLetx1a\nAdwnhDDaXm9d6tf9WFvuoT4QV96FpZTZwFEhxNhS9+hs21wJTC91vIutbSGl3C2lfAMVvmlX5rK/\nAiOFEH62nskoYH2NLL+YFcBDpXTqWup4eX+H9cB4W04iBhhoO38/0NTmaAEmA/F1pKPmMkH/StA4\nGz8hxDZUCKUImCOlfNv22kygGbDN9us5CRgJLASuBXYDJ4E/gUzbe8qWGZ4IfCyEeAb1ef8W2Ily\nDP8TQuwADKgv2vuAfwghBgIW2/V/Ln0xKeV2IcRslOOQwAwp5c4K7n0pyp7/EvCOEGInymkeBUZU\n9HeQUi4WQhT/HU4AG206FgghbgMWCCEMNl0/qYKOukSz5jxCSv150LgfQohAKaVJCBEBbAb6SimT\nnK2XRuMp6J6Dxl1ZKoQIQyWY/60dg0ZTt+ieg0aj0WguQiekNRqNRnMR2jloNBqN5iK0c6gjhBCx\nQog1QojdttIKxWUVwoUQK4UQ+22lHkIreP8QIcQ+IcQBIcSTjtX+Il08xhabPrOEEIm2UUCljz9o\nKz2xSwjxWgXvdSlboHx7hBBjhSpeaBFClDevo/g8l7OnNEKIY7aSH9uFEFsqOOc9W7mPhFLDfV2O\nij53Zc5xXVucPUXbUwRoAHS1bQehxpq3A14HnrAdfxJ4rZz3egGHUCURvFElDdppW+rMnn5AV2Bn\nqWNxqLkORtt+lDvYUok9bVGzptcA3St4n0vaU0bHckuQlHp9KLDMtt0L2ORsnavznNzJFt1zqCOk\nlOeklAm27RxgLxAL/A1VvgBbO7Kct18FHJRSHpdqxu63tvc5BU+yBUBKuQFVd6g096Kcm9l2Tko5\nb3U5W6B8e6SU+6WaWV3ZzGiXtKcMgsojGn8D5gBIKTcDobaJkC5HBZ+70ri0Ldo52AEhRDPUL4ZN\nQH0pZSKoL11KVc4sRSPUZK5iTtmOOR1PsqUMbYD+QlVAXSuE6FnOOe5iS1VxB3sksEqoKrp3lvN6\nWRtO43o2VBWXtkXPc6hjhBBBwAJgupQyRwhRdqyw24wd9iRbysGICl/0FkJcCcxDldzWOJe+UhUR\njEY5ib22X+AaB6N7DnWIrfbNAmCulPIH2+HE4q6iEKIBqvRBWU6jqm8WE2s75jQ8yZYKOAksApBS\n/gFYhRCRZc5xF1uqisvbI6U8a2uTgcWoUFhpTqNKrBfjcjZUA5e2RTuHuuUz1LoA75Y6tgSYatv+\nO/BD2Tehat+0EkI0FUL4ALfY3udMPMkWuLic9veo+kwItQCQt5Qytcx7XNUWqLw8eEXHXdkehFrs\nKMi2HYgqVf5XmdOWAFNs5/QGMopDnS5KZc/JtW1xdkbcUwToiyrWlgBsRy3qMgSIQC04sx81OibM\ndn4MtgVrbPtDbOccBJ7SttSpPV8DZ1DlqU8At6HCSnNRaxpsBQa4gy2V2DMS1RvKA84CP7uLPaV0\na17qM7erWD/gbmwLFNn2P0CNutpBBSOzXEEqeE5uY4sun6HRaDSai7BrWKmiyVTlnOe6E0E0Go3m\nMsTeo5XMwCNSygRbLPFPIcRKKeW+4hOEEENRa922FkL0Aj4GettZL41Go9FUgl17DrL8yVRlx/G6\n9EQQjUajuRxx2GilUpOpNpd5yaUngmg0Gs3liEOcQ9nJVI64p0aj0Whqjt1nSFcwmao0VZoIUs7s\nXI1Go9FUASllZTW3ysURPYfyJlOVpsoTQZw97rcu5Pnnn3e6Dtoez7fF0+zRttRcaopdew5CiL7A\nRGCXEGI7qhbPP1Elg6WUcoaU8ichxI1CiEOACTVRxGM5duyYs1WoUzzJHk+yBTzLHm2L47Grc5BS\n/gYYqnDeA/bUQ6PRaDTVw+1qK7399tt07NiRzp07M3HiRAoLC52tUrWYOnWqs1WoUzzJHk+yBTzL\nHm2L43Gb8hlCCHn69Gn69evHvn378PHxYfz48dx0001MmTLF2eppNBqNSyKEQLpoQrpOsVgsmEwm\nzGYzubm5NGzY0NkqVYv4+Hhnq1CneJI9nmQLeJY92hbH41bOoWHDhjz66KM0adKERo0aERYWxnXX\nXedstTQajcbjcKuwUnp6OmPGjGH+/PmEhoYyduxYxo0bx4QJE5ytnkaj0bgkl0VYafXq1bRo0YKI\niAgMBgOjR49m48aNzlZLo9FoPA63cg5nvc7yy6+/sOHwBnae28ninxbTtGXTWk30cDTuEm+sKp5k\njyfZAp5lj7bF8di9fEZd8kPOD5jbmhncbzDSS+LdyJvVHVfzwqsv0Ci4EbEhsdQPqk+AMYAA7wD8\nvf0J8A4gwj+CqIAoogOiiQ6MPr/ta/R1tkkajUbjkrhVzqEiXbMKsjiddZrT2adJzEkktyiXPHMe\nuUW55Bblkp6XTnJuMim5KSTnJpNsUtv+3v5EB0RTL7AeMcExNApupCSkETFBMcQExxATFEOYXxhC\nVDtkp9FoNE6npjkHj3AONUFKSUZ+Bsm5ySSZkjibfZbT2ac5k33mfHs2+yxnc85SaCkkJiiG2JBY\nYkNiaRzSmNiQWJqGNaVZWDOahzUn2De4znTTaDSaukI7BztiKjSddxonM09yKusUJ7NOcjzzOMcy\njnEs4xh+Rj+ahzWnZURLWobbJKIlrSNa0zC44fmeR3x8PHFxcU6xwx54kj2eZAt4lj3alppTU+fg\nVjkHZxHoE0jryNa0jmxd7utSSpJzkzmSfoQj6Uc4nHaYX0/8yuwdszmUdojsgmxaR7amTWQbfE74\ncDriNO2j29M2si2BPoEOtkaj0Wguje45OICsgiwOph7kQOoB9qXsY1/qPval7ONg6kGiA6PpEN2B\nTvU60bFeRzrW60j76Pb4Gf2crbZGo/EAdFjJDbFYLRzLOMbu5N3sStzFX8l/sStxF4fTD9MqohVd\n6neha4Ou5yUqIMrZKms0GjdDOwc3oSrxxgJzAXuS95BwLoEdiTvYfm47CecSCPUNpVtMN7o16EaP\nmB70ju1NdGC0YxSvAB0Ldl08yR5tS83ROQcPwtfoq5xATLfzx6zSytH0o2w/t53tZ7fz3pb3mLx4\nMlEBUfRp3IfejXrTr0k/OtXvhJdwq7mNGo3GBdE9BzfGKq3sTd7LplOb2HhyIxtObiDJlMTVja/m\nmibXMKDpAHo27Im3wdvZqmo0Giehw0oaABJzEtlwYgO/nviVdcfXcST9CH0b92Vgs4Fc2/xausV0\n0z0LjeYy4rIovOcJ2LuuSv2g+oy5YgzvDHmH7Xdv58hDR5jWfRonMk8wefFk6v9ffW5deCuzE2Zz\nJvtMre/nLnViqoIn2QKeZY+2xfHonIOHExkQyej2oxndfjQAJzNPsuLwCpYdXMYjKx6hSWgThrUZ\nxrA2w7iq0VW6V6HRaAAdVrqsMVvNbDq1iaUHlrL0wFKSc5O5sfWNjGo3isEtBuPv7e9sFTUaTS3R\nOQdNrTmafpQl+5eweN9itp/bzg0tb2B0+9Hc1PomXTtKo3FTdM7BTXDleGPz8OZM7z2d+KnxHHrw\nEDe0vIE5O+YQ+3YsY+eNZcGeBeQW5V7wHle2p7p4ki3gWfZoWxyPdg6acokOjOaO7nfw08SfODr9\nKENbDeWTPz+h4ZsNmbhoIssPLcdsNTtbTY1GYyd0WElTLZJMSczbPY+5O+dyIvMEt3a8lSldptC1\nQVdnq6bRaMpB5xw0Dmd/yn6+3Pklc3fOJdw/nGndpjGh0wTC/cOdrZpGo7Ghcw5ugrvEG6tC26i2\nDPIaxJHpR/jv4P/y64lfaf5ucyYtmkT8sXi3WtsbPOvZgGfZo21xPHqeg6bWeAkvrmtxHde1uI7U\n3FS+3Pkl9/90Pxarhbt73M3fu/6dCP8IZ6up0WiqgQ4raeyClJLfTv7Gx1s/ZumBpYxoO4IHr3qQ\nKxtd6WzVNJrLCp1z0LgsqbmpfJ7wOe9veZ/GIY35R+9/MLLdSIxeuuOq0dgbnXNwE9wl3lhVqmJP\nZEAkj139GIcfOsz0XtN5e9PbtHqvFW///jY5hTn2V7KKXI7Pxl3Qtjge7Rw0DsPoZWRch3H8dvtv\nfDf2Ozae2kjzd5vz3NrnSDYlO1s9jUZTCh1W0jiVA6kH+L+N/8f8PfOZ1GkST/R9gsahjZ2tlkbj\nMeiwksYtaRPZhhnDZ7Dnvj34e/vT5eMu3LP0Ho5nHHe2ahrNZY12Dg7GXeKNVaWu7IkJjuGNwW9w\n4MEDRPpH0n1Gd+5ccidH04/WyfWrgn42rou2xfFo56BxKaIConh50MscfPAgMcExXPnpldy/7P46\nWZhIo9FUHZ1z0Lg0KbkpvL7hdT5L+Izbu97Ok/2eJCogytlqaTRug845aDySqIAo/nv9f9l17y5M\nRSbafdCO1za8Rr4539mqaTQejXYODsZd4o1VxVH2NAxuyIc3fcjvd/zOltNbaPdBO77e9TVWaa2z\ne+hn47poWxyPdg4at6J1ZGsWjV/EnFFzeOv3t+g9szcbT250tloajcehcw4at8UqrXy18yue/uVp\nBjYfyOvXvU7D4IbOVkujcSl0zkFz2eElvJjcZTL7HthH45DGdP6oM69veJ0Cc4GzVdNo3B7tHByM\nu8Qbq4or2BPkE8Qrg15h07RN/HbyNzp+1JHVR1ZX+zquYEtd4kn2aFscj3YOGo+hVUQrlty6hLdv\neJtpS6YxadEkEnMSna2WRuOW6JyDxiMxFZp4If4FvtjxBS9d+xLTuk/DS+jfQprLD72eg0ZTDjsT\nd3L30rvxMfgwc/hMWke2drZKGo1D0QlpN8Fd4o1VxdXt6Vy/Mxtu28CodqPoM6sPb258E4vVUu65\nrm5LdfEke7QtjseuzkEIMUsIkSiE2FnB6wOEEBlCiG02ecae+mguTwxeBv7R+x9snraZpQeX0vez\nvuxJ3uNstTQal8auYSUhRD8gB5gjpexczusDgEellCOqcC0dVtLUGqu0MuPPGTy79lmeuPoJHunz\nCAYvg7PV0mjshkuGlaSUG4D0S5xWbaU1mpriJby4p+c9bJm2haUHlxL3RRyH0w47Wy2NxuVwhZxD\nHyFEghBimRDiCmcrY2/cJd5YVdzVnubhzVn797WMbjea3rN68/HWj1m7dq2z1apT3PXZlIe2xfEY\nnXz/P4EmUspcIcRQ4HugTUUnT506lWbNmgEQFhZG165diYuLA0r+4K6+X4yr6HO52/Nw3MMMaTWE\nka+NxJBkYO2Va6kfVN9l9KvNfkJCgkvpU5v9hIQEl9LHlffj4+OZPXs2wPnvy5pg96GsQoimwI/l\n5RzKOfco0ENKmVbOazrnoLEbRZYiXlz3IrO2z2LGsBkMbzvc2SppNHWCS+YcbAgqyCsIIeqX2r4K\n5awucgwajb3xNnjz0rUvMW/sPB5a/hD3LL0HU6HJ2WppNE7D3kNZvwY2Am2EECeEELcJIe4WQtxl\nO2WsEOIvIcR24B1gvD31cQXKhmPcHU+yJz4+nmuaXkPC3QmYikz0/LQnOxPLHYXtFnjas/EU3MUW\nu+YcpJQTLvH6/4D/2VMHjaa6hPqFMnfUXObsmMOgOYP4d9y/uafnPQihB9ZpLh90+QyNphIOpB5g\n/ILxtAxvycwRMwnzC3O2ShpNtXDlnING47a0iWzD73f8TkxQDN0+6cYfp/9wtkoajUPQzsHBuEu8\nsap4kj0V2eJn9OP9G9/nzevf5Kavb+KDLR/gDr3Yy+HZuCPuYot2DhpNFRndfjS/3/E7n23/jFsW\n3kJ2QbazVdJo7IbOOWg01STfnM/0n6cTfzyeBeMW0Kl+J2erpNFUiN1yDkKIQCHUKilCiDZCiBFC\nCO+aKKnReAJ+Rj8+Gf4Jz/Z/lmvnXMvXu752tkoaTZ1TlbDSesBPCNEIWAlMBmbbUylPxl3ijVXF\nk+ypri2TOk/ilym/8Nza53jo54cotBTaR7Eacjk/G1fGXWypinMQUspcYDTwoZRyHNDBvmppNO5B\n5/qd2XrXVo5mHGXgFwM5k33G2SppNHXCJXMOttnL9wFvA3dIKXcLIXZJKR0aaNU5B40rY5VWXvn1\nFT7a+hHzxs6jb5O+zlZJowHsO8/hH8DTwGKbY2gBeFZtY42mlngJL57p/wwzh89k1Hej+GTrJ85W\nSaOpFZd0DlLKdVLKEVLK1237R6SUD9lfNc/EXeKNVcWT7KkLW4a2Hspvt//Gu5vf5e4f73ZqHkI/\nG9fEXWypymilnkKIRbY1nncWiyOU02jckdaRrdk8bTNJuUkM/GIg53LOOVsljabaVCXnsB94HNgF\nWIuPSymP21e1i/TQOQeNW2GVVv6z7j/M2j6L72/5nu4x3Z2tkuYypKY5h6o4hw1Syn411qyO0M5B\n464s3LOQe5bdw4c3fsi4DuOcrY7mMsOeCennhRAzhRC3CiFGF0sNdNTgPvHGquJJ9tjLljFXjGHl\npJU8tuoxXoh/Aau0XvpNdYB+Nq6Ju9hSlfUcbgPaAd6UhJUksMheSmk0nka3mG5snraZ0d+NZnfy\nbr4Y+QUB3gHOVkujqZAq5RyklG0dpE9leuiwksbtKTAXcMeSOziQeoAlty6hQVADZ6uk8XDsGVba\nKIS4ogY6aTSaMvgafZk7ai7D2gyj98ze7Erc5WyVNJpyqYpz6A0kCCH224ax7tJDWWuOu8Qbq4on\n2eMoW4QQPDfgOV4Z9AqD5gxi+aHldrmPfjauibvYUpWcwxC7a6HRXIZM6DSBpqFNGTt/LM/1f457\nr7zX2SppNOepNOcghDAAu6WU7RynUoW66JyDxiM5nHaYG7++kRFtRvD64NfxEnoNLk3dYZecg5TS\nAuwXQjSpsWYajaZSWka0ZOPtG9l8ejPjF4wnryjP2SppNFXKOYQDu4UQvwghlhSLvRXzVNwl3lhV\nPMkeZ9oSGRDJqsmr8PbyZtCcQSSbkmt9Tf1sXBN3saUqOYdn7a6FRqPB1+jLl6O/5Nk1z9JnVh9+\nmvgTbSLbOFstzWVKldaQFkLUB6607W6RUibZVavyddA5B81lw8xtM3lmzTMsuHkB/Zo4vXqNxo2x\n5xrSNwNbgHHAzcBmIcTY6quo0WiqyrTu05gzag6jvxvNd39952x1NJchVck5/Au4Ukr5dynlFOAq\ndKipxrhLvLGqeJI9rmbL9S2vZ9XkVTy+6nFe2/Aa1e05u5o9tUHb4niq4hy8yoSRUqv4Po1GU0u6\nNOjC73f8zrd/fcu9y+7FbDU7WyXNZUJVaiv9F+gMfGM7NB7YKaV80s66ldVD5xw0ly1ZBVmMmTeG\nAO8AvhnzjS7ap6kydlvPwXbxMUDxium/SikXV/dGtUU7B83lTqGlkGlLpnEw7SA/3vojUQFRzlZJ\n4wbYs/AeUsqFUspHbOJwx+BJuEu8sap4kj2ubouPwYcvRn7BwGYDuXrW1RxJP1Lp+a5uT3XQtjie\nCuc5CCGOotZtKA8ppWxpH5U0Gk1FCCF4ZdArNA5pzDWfX8OyCcvo2qCrs9XSeCAVhpWEEJFlDnmh\nhrI+BmyTUo6xs25l9ZFSSt59911mzpwJwJ133slDDz3kSDU0GpdhwZ4F3LfsPhbcvID+Tfs7Wx2N\ni1LnYSUpZaqUMhVIB4YBa4E+wE2OdgzF7N69m1mzZrF161YSEhJYunQpR45U3rXWaDyVsVeM5Zsx\n3zB23liW7NcVbTR1S4XOQQjhLYS4G9gDXAOMlFJOklLucZh2Zdi7dy+9evXC19cXg8FA//79WbTI\nvVYrdZd4Y1XxJHvc0ZZBLQbx08SfuHvp3Xy+/fMLXnNHeypC2+J4KqutdBQwA+8AJ4DOQojOxS9K\nKR3+rdyxY0eeeeYZ0tPT8fX15aeffuLKK6+89Bs1Gg+mZ8OexP89nhu+vIHUvFQeu/oxZ6uk8QAq\nyznMpvKE9O32Uqo8inMOn3/+Of/73/8ICgqiQ4cO+Pr68tZbbzlSFY3GJTmZeZLrv7yekW1H8sqg\nVxCi2mFmjQdi13kOrkB58xz+9a9/0bhxY+655x4naaXRuBYpuSnc+NWNdG3QlY9u+giDl8HZKmmc\njF3mOQgh2gkhBgkhgsocd87SoceOkbxrF6SkcGL3bhYvWsSEW291iio1xV3ijVXFk+zxBFuiAqL4\nZcovHE4/zKB/D6LAXOBsleoET3g2xbiLLZXNc3gIuB/YC8wSQkyXUv5ge/kVwD6roldGXBxjzp4l\nzWLBW0o+9PIipF49iIgokdBQ8PcHX1/w81MSFATBwRASUiJl98PD1fs0Gjcn2DeYZROWMfjfgxnx\n7QgW3byIQJ9AZ6ulcTMqyznsAvpIKXOEEM2ABcBcKeW7QojtUspujlOzkvIZ+fmQng5paUoyMqCg\nQB3Pz4e8PMjJgexsyMoqkbL7aWng5QWRkSWOJiysRMLD1bGoKHVOZCRERyvRTkXjgpitZu788U4O\npB5g2YRlhPmFOVsljROo85yDEGK3lLJDqf0glIPYA1wrpXTotEy711aSEnJzlZNITVVtZqZyNhkZ\nJQ4oJUW9npKiJClJ9VKio6FePWjQAOrXV22xxMRAw4Zq29vbfjZoNGWwSisPL3+Y9SfWs2LSCuoF\n1nO2ShoHYw/nsAZ4REqZUOqYEfgMmCildGimy2UL70mpeh7JyZCYqOTcuQvlzBk4exaSkogPDCSu\neXNo1KhEmjRR0rixEj8/Z1tVZeLj44mLi3O2GnWCJ9kCJfZIKXlx3Yt8+9e3rJq8isahjZ2tWrXx\npGfjaFtq6hwqm+cwBTXP4TxSSjMwRQjxSXVv5LEIofIcoaHQqlXl51os8P330KwZnD6t5NQpWLsW\nTpxQcuqUCmE1a6akeXPVtmihtps0AR8f+9ul8RiEELwQ9wKhvqFc8/k1rJy8Uq9Nrbkkbj2U1SOx\nWlVv49gxOHq0pD16FI4cUb2QmBho2RLatIG2bVXbpo1yHgY9dFFTMZ9t/4xn1jzDzxN/pkuDLs5W\nR+MALst5DpclRUWqh3HwoJIDB5Ts369CWq1aQfv2Sjp0gI4doXVrnevQnGf+7vk88PMDLB6/mKsb\nX+1sdTR2RjsHN8Gu8cbcXOUk9u5Vsns3/PUXnDypHETHjtC1K3Tpotr69Wt9Sx0Ldl0qs2f5oeVM\nXjyZr0d/zeCWgx2rWA3wpGfjCTmH4gu/XnZJ0PKOVfDeWaiKrolSys4VnPMeMBQwAVNLJ8DL4447\n7mDp0qXUr1+fnTt3XkqFy4uAAOjWTUlp8vKUs9i1C3bsgOXLISFBjbLq1g169oQePZQ0aqTyKBqP\nZkirISwev5jR343m42EfM7r9aGerpHExqrKG9DYpZfcyx3ZW9GVf5rx+QA4wp7zzhRBDgQeklDcJ\nIXoB70ope1dwLSmlZMOGDQQFBTFlyhTtHGqDlKpHsW0b/PknbN2qxGiEq66C3r2hVy+48ko1YVDj\nkWw/u50bv76R1wa9xt+7/t3Z6mjsQJ33HIQQ9wL3AS2EEKW/hYOB36pycSnlBiFE00pO+Rswx3bu\nZiFEqBCivpQysaI39OvXj+PHj1fl9prKEKJkCO3IkeqYlCqfsXkzbNoEzz6rehitWkHfvtCvn2qb\nNNG9Cw+hW0w31v59LdfPvZ7swmweuOoBZ6ukcREqq630NTAcWGJri6WHlHJSHd2/EXCy1P5p2zGP\nxaXrqggBTZvCzTfDW2/Bb7+pyX8zZigHsXCh6lU0aQKTJ8PMmcR/9ZVyKh6ASz+bGlBVe9pFtWP9\nbet5Z9M7vLz+ZVwxt+dJz8ZdbKmw5yClzAQygVuFEAagvu38ICFEkJTyhIN0PM/UqVNp1qwZGRkZ\npKSkXJAR190wAAAgAElEQVTYKf6Du/p+Ma6iT5X2e/UiPi8PuncnbsECOHiQ+Bkz4NtvVc/iySeJ\nv+IK6NmTuAcegIYNXUv/Ku4nJCS4lD6OtOdYwjFeb/U6L+x+gcyCTIYahyKEcBl7EhISnHp/d9qP\nj49n9uzZADRr1oyaUpWcwwPAC0AiYLUdllXJOdje3xT4sYKcw8fAWinld7b9fcCA8sJKpUcrHT9+\nnOHDh+ucgysgJRw6BL/8AqtXw5o1qlTI4MEwZAj0769rT7kRaXlpDP1qKF3qd9Elvz0Eu5TstvEP\noK2UsoOUspNNquQYinWzSXksQc3ERgjRG8ioLN9QjJTSJbu+lyVCqGGy99wDCxaoMiKzZ6sChS+9\npOpNDR0K774Lhw87W1vNJYjwj2D15NUcTj/MxEUTKbQUOlsljZOoSs9hLTDYVjqjehcX4msgDohE\n9TyeB3xQPY8ZtnM+AIaghrLeJqXcVsG1ZOTrkZi+NVF4uBCryYoxxEjsiFjaDW5HhH8EEX4RhPqF\n4mPwwcfgg7eXNz4GH4J8ggjxDblIQv1CCfQOdOiKWfEeNF4bqmBPRobqVfz0EyxbpqrZjhih5Kqr\nXGpG92X3bCoh35zP+AXjMVvNzB83nwDvgLpVrpp40rNxtC12m+cAHAHihRDLgPMrh0gpL7k2p5Ry\nQhXOqfLwiL3376Xo3iKKLEUUWYsotBSSXZBNal4qaXlppOWlkZmfSaGlkNyiXAothRSYCzAVmcgq\nyDovmQWZqrWdG+IbQrh/OOF+4SWtXzgR/hGE+6u2WCL9I4kMiCTSPxJfo29VVb98CQuDMWOUWK3w\nxx+wZAncdZeqajtyJIweDXFxeha3C+Fn9GPBuAXc9sNtDP1qKD/e+iMhviHOVkvjQKrSc3i+vONS\nyhftolHFethlhnSRpYjMgkwy8jNIz0snPT+d9Lx00vLSLtgu7YBS81JJzU3F1+hLvcB61AusR3RA\nNPUC61E/sD4NghpQP0i1DYIaEBMUQ7CvnitwEYcOwaJFSg4ehGHD1EipwYN1cUEXwSqtPPjTg2w+\nvZnlk5YTFRDlbJU01cTu5TOEEAFSytxqa1ZHuFr5DCkl2YXZJJmSSDIlkWxKJtGUSGJOIudyzpFo\nUu25nHOcyT6DwctATFAMDYMb0iikEbHBscSGxNIopBFNQpvQOKQx9QLrXb6Lwp86pZzEd9+pEiAj\nR8L48TBwoJqYp3EaUkqeWfMMi/ctZuXklcSGxDpbJU01sJtzEEL0AWYBQVLKJkKILsDdUsr7aqZq\nzXA151AdpJRkFWRxNucsy1YuI7pDNKezTnMq6xSnsk9xKusUJzJPkF2QTePQxjQNbUqzsGYXScPg\nhniJqowhcBx2iZ+eOAHz5ytHceKEchITJ6rZ2nZ0np4U14a6t+eN397go60fsWryKlpFXKI8fR3j\nSc/Gk3IO7wA3oEYWIaXcIYToX90b1RUHDhxg/PjxxQZz5MgR/vOf//DQQw85S6VLIoQg1C+UUL9Q\nzjU8R1yXuHLPyy3K5WTmSY5nHudYxjGOZRzjp4M/cTTjKMcyjpGel06T0CY0D29Oy/CWtIlsc16a\nhTXD6OUhv7CbNIFHH1Vy8CB8/bVyDkKodsoUVZ5c41Ce6PsEYX5hDJg9gJ8n/kzn+tUZtKhxN6rS\nc9gspexVet1oIcQOKaVDi8GX13OwWq3ExsayefNmGjd2v9WtqktuUS7HM45zNOMoh9IOcTD1IAfS\nDnAg9QBns8/SIrwF7aPb0z5KSYd6HWgf1d4zEudSqmT23Llq8l3HjnDbbSrRHRjobO0uK77961um\nL5/OkluW0Cu2l7PV0VwCe4aVFgBvAR8AvYDpQE8p5S01UbSmlOccVq5cyX/+8x9+/fVXR6rikuQV\n5XEw7SB7k/eyN0XJ7qTdHE4/TLOwZnSs15FO9TrRtUFXujboSuOQxu6b3ygogKVL4fPPVYmPsWPV\n6KeePXXNJwex7MAypv4wlXlj5zGw+UBnq6OpBHs6hyjgXeA61GS2lcB0KWVqTRStKeU5hzvuuIMe\nPXpw330OTX/UCkfHGwsthexP2c+upF3sStzFjsQdJJxLIM+cR9cGXeneoDs9GvagZ8OetIpoVe2c\nhtNjwWfPqkl3n36qlmq96y6YMEFtVxOn21LH2NuetUfXcvOCm5n9t9nc1OYmu90HPOvZeEzOQUqZ\nAkyskVZ2wmq10qNHD/bs2cNrr73mbHVcGh+DD53qd6JT/U7QqeR4kimJhHMJbDu7jUV7F/GvNf8i\nLS+N7jHd6d2oN71ie9E7tjcNgho4T/mqEBMDTz8NTz6pJtvNmAH//KdKYt9/P3TqdOlraGrEwOYD\nWXrrUkZ8O4L3hrzH+I7jna2Spg6psOcghHhCSvmGEOJ94KKTpJQOzQCX7jm8/fbb/PDDD+zZs4ek\npCRHquHRpOSmsPXMVjaf2sym05vYcnoLwT7B9Gnch36N+9G3SV861evk+vV2zp5VPYkZM6BFC7jv\nPjXRTs+dsAs7E3cy9Kuh/Gfgf7i92+3OVkdThjoPKwkhhkspfxRClLsCiJTyi+rerDYIIeRdd0ny\n80+xdu1tgJX8/DTuu287QUFqPZqgIJWb9PZWQ+OLxd9fHQ8IUFK87eVao0JdDiklB9MOsvHkRjac\n2MBvJ3/jTPYZ+sT2YUDTAcQ1i6Nnw554G1x0ZnNRkZqN/cEHap3te+9VYad69ZytmcdxIPUA1825\njif7Psn9V93vbHU0pbgs1pD++GPJJ5+Mo3//R/jkk6E0aXI1t9zyEzk5kJ0NOTlgMoHZXCJFRWqV\nzNzcEjGZVOvrqxxFUFCJlN4PDi6RkJCL25AQVR0iNFSdX5VcqLvHTpNNyWw4sYF1x9ex7vg69m3d\nxzX9r+Ha5tdyXYvr6Nagm2v2LHbtgvffV/Mn/vY3mD79ouVU3f3ZlMXR9hxNP8qgOYO4t+e9PN73\n8Tq9tic9G4/JOQghVgHjpJQZtv1w4Fsp5Q3VV7N2xMYu4+qr6/POO30YOfJ73nzzTV6sYREPKZXT\nKHYoJpPaLt7Pzi6RrCw4erRku7jNylJ15TIzIT9fOYvwcOUwwsNLJDISIiJUe+aM6s1ERSkJD3ep\n2nOXJDowmlHtRzGq/SgAfmz2I9amVtYcXcOUxVNINCUqR9H8Oq5veT3Nw11kPkKnTirM9OqrMHOm\nKvzXqpWaS3HjjbobWQc0D2/O+tvWc92c68gtyuW5Ac+574g4TZVGKyVIKbuWOXZ+zoOjEELIp59+\nmi+//BKj0UheXh7Z2dmMHj2aOXPmOFKVcjGblZNIT1eSkaHatLQLJSUFUlNVm5Ki3hMWpiId0dGq\nrVcP6tdX0qBBSdugAfj5OdvSyjmddZo1R9ew8shKVh5eSahvKDe0vIHrW17PoBaDnF7d8zxFRTBv\nHrz5pupGPvywmlyn156oNYk5iQyeO5ghrYbw+nWvawfhZOw5lPVPYFTxym+2xXsWSym710jTGiKE\nkMdeOca57HM8Mv8RTqSdIN2UzpOjn+Tu0XdjDDZiCDZgCDQgvIUSo2q9/Lww+Bvw8vNCGFzrg2o2\nK6eRlKSWQkhOhsTEEjl3TknxfkCAchIxMRAbC40aKYmNhcaN1eTiqCjXGO5vlVZ2Ju5kxaEVLD+8\nnD/P/En/pv0Z3mY4w9oMo1GIC6wIKyWsW6ecxNat8NBDKjcRFuZszdya1NxUhnw1hF6NevHe0Pdc\nruzL5YQ9ncMQYAawDjXP4RrgLinlipooWlOEEPLwU4dJykwiKSuJ7LxsZmydwYmME7zb612a0hRL\ntgWLyYIskkizxFpkRRZJrPlWrHlWrPlWhFHg5e+Fl9+FYggyYAg2XOBkvAK88PK3OZYAdY4xxPa6\nTYwhRgwh6n1VcTy1iTdKqRzJuXMqPHX6dImcOgUnT6pSRHl5ylk0bQrNml0oLVoo51JXzqM69mTk\nZ7D80HJ+PPAjyw8tp0V4C0a3G83o9qNpG9W2bhSqBfGff07c2rVq3Yk77lC9iZgYZ6tVY5wdp8/M\nz+Smr2+idWRrZg6fWatclLNtqUs8JucgpVwuhOgO9LYd+odt7oPDafFqC1rQ4vz+RCYycuRIAh8M\npMugS1fzkFIiCyWWPAuyQLXFjsNisijnUiwmizqea6EotQjLCQuWHNtrttacbcaSZcGcZcaSbcHL\n3wtjqFFJWKk23NaGGUlJSiEpJQnvcG+MEeo170hvDEGGS3a/hVB5i8hI6NCh4vNMJuUkTpyAY8eU\nLF2q8iZHjqjXmzdXjqJVK2jTRi3m1rq1cir2Cr+H+YVxS8dbuKXjLZitZtYfX8+ivYu4ds61hPmF\nMbrdaMZ1GEenep2cE4po3lyV5Dh+HN56S/2RJ0xQcygug/IsdU2oXygrJq1g5HcjmbBoAl+O+tJ1\nR7ZpLqKyoaztpJT7bI7hIipasc1elDdD+tixY8TFxfHXX38RFBTkSHUuQlolFpMFc6YZS6ZqzRml\nJN1MUXoR5nTzeSlKU/tFqUVIs8Q7yhvvSG/VRivxifZR2/W88annc741hhtr/AVanGA/fFgtqXDw\noJIDB1SupE0baNeuRNq3h7Zt7ZfvsEorW05vYeGehczbM49A70DGdxjP+I7jaRfVzj43rQqJicpJ\nfPopjBsHTz2lC/7VgHxzPuPmj0MgmDduHn5GF0+ceRj2mOcwQ0p5l22Z0LJIKeW11b1ZbSjrHHJy\ncoiLi+PZZ5/lb3/7myNVsQuWPNVDMaeaKUwupCi56LwUJhVe0BYlFWExWfCp74NPTIn4NvI9Lz6N\nfPCN9cUYWj0nkp2tnMS+fUr27oU9e1SPo2lT9WO6Y0fo3FlJy5Z1O9pKSsmmU5uYt3se8/bMo15g\nPSZ1msStnW6lYXDDurtRdUhJgXfegY8/VutMPPOMitFpqkyRpYhJiyeRmpvKD7f8QKCPLpboKOzh\nHMZJKecLIVpIKY/UWsNaUto5mM1mhg0bxtChQ5k+fbqTNasedRVvtORbKDxXSOHZEik4XXBeCk8X\nUnCqACklfo398I31xbexL35N/fBr5odvU1/VxvriZbx0HKmwUDmN3bvhr7/UtIGdO+HMmXg6dYqj\nWzfOS+fOKnFeW6zSyvrj65m7Yy6L9y2mR8MeTOo0iTFXjCHIp+57ipd8Nmlpqifx0UeqGuy//qU8\npovianF6i9XCtB+ncTD1IMsmLCPUr+r1r1zNltrgLjmHypzDNill9+K21hrWEiGElD/8AEYjU956\ni6iwMN564AEV6yg9/dnf/8Lp0QaDawzdseHoD4Y500zBqQLyT+ZTcLKA/OP55B/Lp+B4AfnH8ilM\nKsQ31hf/Fv74tfDDv4U//q388W/tj39LfwyBlXcLli2LJywsjoQE2L4dtm1TPY4WLaBHD1UotWdP\n6NKldg4jryiPpQeWMmfnHDac2MCodqO4rett9GvSr87yE1V+NqmpanTTJ5+oZU2feUYNGXMxXPEL\n1SqtTP95OhtPbWTFpBVVXnbUFW2pKZ7gHFYDVuAqYH3Z16WUI6p7s9oghJBy2DB+S0mh/6ZNdAoK\nQkiJkJJXoqMZYjCoTGte3oVTpK1WVVPH11c5kuK2WIr3i51LafH3V1K8XVx7o7SUPeZmS1paC6zk\nH88n70ge+UfzyTuUd17yj+RjjDAS0CYA/7b+BLQLIKBtAAHtAvBr6ofwKv/zVlioehd//qlGh/75\npwpNtWsHvXuXSOvWNfPb53LOMXfHXD5P+JwiaxG3d72dqV2nEhPs4JFFKSnw+uswa5ZKZD/1lJqs\noqkUKSX//OWfLDmwhNWTVzv+uV1m2MM5+ADdgbnAtLKvSynXVfdmtaHGy4RarerbqqBASX6+ktLb\neXkX19jIzb3weF5eSd2N4inVpfeLW2/vC2tvFNfZKJbQ0JI2NFSNpy89pTosTDkZF+jtSKuk4FQB\nuftzyd2fS97+PHL35WLaa8KcbiagXQCBHQIJuCKAwI6BBHUKwreJb7m/5PPzISEBfv8dNm1SbV4e\n9O0L/fop6d69erXxpJRsPr2ZWdtmsWDvAgY0HcC07tMY0mqIY1fFO3sWXn4ZvvlGFfl77LEalQy/\n3Hh5/cvM3jGbX6b8QpPQJs5Wx2Oxh3OYK6WcXFydtdYa1hK3WENaSvUtWLruRulaG1lZxG/bRlxU\nlJoanZmphgcVS/HU6qKiknobxW2xREWpNjq6ZEp1dLRyRA50KOYsM7l7c1m1aBVdLF0w/WXCtNOE\nxWRRjqJzEEFdlQR2CsQQcHF46tQptVbPhg1KDh6EXr0gLg4GDFDbvlVcxC67IJt5u+cxc/tMTmae\nZFr3aUzrPo3YkNgq21Tr7v6xY/Dii2qexBNPqJLhTpxx7Q6hmHc2vcM7m97hlym/0DKiZYXnuYMt\nVcVdwkqV/bzqIYRoCEwUQnyKmgB3HillWnVv5vEIURKKqqjyZ3y8+varjIKCknobqakXSnKyCuoX\nT6dOSlJiNpfU3ChdeyMmpqSNiYGGDav+jVsJxhAjIb1CiMyLpFVcyWLzRalF5OzKwbTDRNbmLM7M\nOEPu3lz8mvoR1D2I4J7BBPcMJqhbELGxRsaPV0svgPKVGzaoP9Fjj6lQVK9ecO21MGiQyl1UFLUL\n9g3mju53cEf3O9iZuJNPtn5C5486M6DZAO7pcQ+DWw62/yzdZs3U6nR79qg8xDvvwPPPq5CTm4Ub\nHcU/ev8Df6M/A2YPYNXkVbSPbu9slTQ2Kus5PATcC7QATnOhc5BSyhblvtFOFPccCgoK6N+/P4WF\nhZjNZsaOHcvzzz/vSFVck9zcC+tuFNfeOHtWSfG06nPnVMijuO5G48YldTeK29jYOl37wFpkJXdv\nLtnbssneqsS0y4RfMz9CeoUQ0iuE4F7BBHYMvGDkVFYWrF+v1vBZs0bNTevfH66/XsmlchY5hTl8\ns+sbPtr6ETmFOTxw1QNM7TqVEN+QOrOtUjZvVgsRnT4NL72kljN1gXChKzJnxxyeWv0UP0/8mS4N\nHLo8vcdjz/IZH0kp762xZnVE6bBSbm4uAQEBWCwW+vbty3vvvcdVV13lZA3dBKtV9TSK626cPHmh\nnDihnEl0tPol3LSpGnpUWho1qvU0amuRFdMu1bvI2pxF9uZsCk4VEHxlMCFXhxDaN5SQ3iF4h5fM\nqE1KUk5i1SpYsUL9GL/hBiXXXadSOeUhpWTjyY28v+V9Vh5eycROE3ngqgccU7JDSli9WiWrhYDX\nXlPKai5i/u75PPDzA/x4649c1Uj/P9cVdl3PQQjRD2gtpfzctqZ0sJTyaA30rDHl5Rxyc3Pp378/\nH330EVdeeaUj1akxbhE7NZuV4zh+XMXRi+tuFEtampop3KoV8X5+xA0cqKZVt2mjeh01/HVclF5E\n1qYssjZmkflbJtl/ZOPXzI/Q/qGEXhNKWP8wfBuqkJiUaoLeihWwfDls3KiGzg4dqipwd+xYvhqn\ns07z8daPmbFtBr0a9eLRPo/Sv2l/hBD2fTZWKyxYoMJNTZooJ9Gzp33uZcMtPmtl+HH/j9yx5A4W\n3ryQa5pec/64O9pSEe6Sc6hKz+F5oCfQVkrZxpaHmC+l7FszVWtGsXNYvnw506dP5/jx4wA8/PDD\nvPrqq45UpVZ4xIc8N1c5iYMHiV+xgjirVc2Q279fJeBbt1b1Nq64QtXeuOIKdayaoSprkZWchBwy\nf80kY30GmRsyMYYZCRsQRlicEr/GqhSDyaRyFT/9pMRqhZtugmHDYODAi/PCeUV5zNkxh7c2vUWw\nTzCP9nmUesn1GHTtoDr6I1VAUZEa+vrvf8M116hwU+vWdrmVu37WVh1exYRFE/hmzDdc10L1stzV\nlvLwJOeQAHQDthWv4SCE2Cml7FwjTWuIEEJaLBbatGnDL7/8QsOGDenevTuBgYF89tlnXHHFFY5U\nR1MRmZlq2NHevSWyZ4/qhbRooX7Sd+pUUoOjefMqh6ikVWLaYyJzXSYZ8RlkrMvAEGQ47yjCBoTh\n19TvfK9i6VI1cGj7duUghg9XzqJBg5JrWqWVZQeW8d+N/+VU1ikev/pxpnadir+3nUcZmUzw7rtq\nxvXNN8Nzz12o2GXOr8d/Zcy8MXz2t88Y1maYs9Vxa+zpHLZIKa8qNWM6EPjdGc7h999/58UXX+Tn\nn38G4LXXXmPNmjUMGTKERx55xJHqaKpLQYEaZfXXXxfW38jIUM6iSxcl3bur/SpU+ZNSkrsnl4x1\nGSXOIsDmLAYq8WvsR1qaCj0tWaLCUG3bqoXgRo1SHZtiNp7cyGsbXuOPM38wvdd07u15b7VKPNSI\nlBR45RX44gu1lsSjj6p5Mhq2nN7C8G+G88HQDxjXYZyz1XFbauocVBnrSgR4DPgEOALcCfwOPHip\n99W1AHL+/Ply8uTJMiMjQ0op5axZs2TDhg3lsmXLpLuwdu1aZ6tQp9TantRUKdeulfKdd6ScOlXK\nLl2k9PdX7W23SfnBB1Ju3ixlfv4lL2W1WmXOnhx56sNT8q9xf8kNURvk7y1/l/um7ZOJ3ybKguQC\nWVAg5erVUj7wgJSxsVK2bSvl009LuWWLlGvWKFt2ntspJy6cKCNfj5TPr31epuWm1c7GqnDkiJS3\n3iplTIyUn3wiZVFRrS/pCZ+1hLMJMub/YuRTnz7lbFXqDEc/F/U1X/3v3KompAcD16OGs66QUq6q\ntheqJUIIyQsvwC+/IM6dUxnJrCwM0dE0njmTQIOBQC8vAgwGjEKcF28h8PXywr9YDAYCbNsBtu3i\nNtBgIMB2nUCDgUCDgSBba3B0/R43wS725OernkVx/Y0//lChqiuugKuuUrU3+vRRi1FU8lykVWLa\nbSJjTQbpq9PJWJ9BQJsAwq8PJ+L6CIL7hLBthxeLF8OiRZCWFs+ECXGMHq1mbh/NPMTLv77Mkv1L\nuK/nfTzc52Ei/CPq1taybN0Kjz+uhhy/8YaKg9Xws+cpn7W9yXvp/0J/XrrtJe7uebez1ak1HpNz\nsF28PlA8HGiLlDKpujeqLUIIuXHjRl544QWW/PwzZin57+uvY5aS2x55BJPFgsliIddqxSzleSmy\nWimQkjyLhTyrlTyrldwy27lW6/n3Fl/HZLFgslrJsW37enkRZHMWxRJsMBBiMBBiNKpto5FQg4FQ\no/H8dpjReF7Cvb3x1QvZ14zcXFV/Y8sWVXujuP5G797qm/yaa9Ton0om+FkLrWRtyiJtZRrpK9LJ\nO5RH2LVhRN4YScSQCA5n+rJwoXIUZ8+q6txjx0Ljzof576ZXWbxvMfdfeT+P9HmEMD87LiMqZcks\n63r14P/+z+4jm1ydw2mHGTRnENN7TefhPg87Wx23wp45h5uB/wLxlCwT+riUckEN9KwxQgj58MNm\n/ve/cAwGX4KDG+DlZWDSpG/YseNzdu/+EV9fX2JjW/LPf35OWFgIRqMqdeTnVzJxuViqswaBlPK8\n48ixSbatzTKbyba1WRYLmWazklLb6WYzGTYxCEGE0Ui40UiEtzcRtjbS25tIo5Eo23a0tzfRPj5E\neXsTbjTipSdPXcypU8pJFNfg2LdP1Qy/5ho1W65vX1VWpAIKEwtJW5FG2s9ppK1Mw6+pH5HDI4kc\nFklSWDCLvxcsWKAGZo0YAX1vOEu817P8fPQHpveazvRe0wn2rfj6tcZshs8+gxdeUBn1V15x6RLh\n9uZE5gkGzRnE1C5T+Vf/fzlbHbfBns5hBzC4uLcghIgGVkspHTqNUQgh33hDsnbt/7Fx4/vk5Jyj\nf/8X6dbtKfbtW01w8LXk5Hixc+dTWK2C2NhXKSpSIwdL19YrFqPxQmdRulZecPDFRVcDAi58vbxa\nen5+lUcApJQsX7OGTn37kmZzGmlFRaQWFZFqNqu2qIgUmyTbJMdiIcJopJ6PD9He3tTz9qa+jw8N\nbBJjaxv5+hLp7e1QR+JSoYvsbFXV79dfYd06FZa64grlKAYOVE6jgplyVrOVn/73E+1PtSflxxQs\nmRYiR0QSPTqazBZhfL/Ui/nz1Yjda4dmktrif+wK+IAnrnmE+6+8376jm3JyVO/h/ffhzjvVrOsq\nFPZzqWdTS4ptOZt9luvmXsfItiN56dqXnLOcbC3xmLCSEGKXlLJTqX0vYEfpY46g9CS448ePM3z4\ncHbu3HnRed9//z0LFy5k7ty5FV5LSlWotXTRVZNJfbfk5JS0pQuu5uSUvFa6nl5mZkkrZUmR1dJS\nXHA1PBySk+Pp0yfuopp6lQ3OKbJazzuLpMJCkouKOFdYSGJhIWcLCzlna88UFJBtsdDAx4eGvr7E\nlpHGvr408fUlxtf38sih5OerMNS6dbB2rdru1Ek5ikGDVM+i1B++tC25B3NJ+SGFlIUp5O7PJXJY\nJFGjo8i5IoKFSwx89x0cOWYmtPsqstt8wr8nD2Vaj9vtu0by6dNqyOuyZfDss3DXXaprXAEu/Wyq\nSWlbkk3JXP/l9cQ1jeOtG95yOwfhSc7hv0Bn4BvbofHALinlE9XWshZU1TmMGDGCW265hQkTJjhS\nPUB9F5UttJqRoSYUp6crKa6nV7auno+PKrgaFVVSbLWsFNfTi46u+Dsh32LhXGEhpwsLOV1QwMmC\nAk4VFHAyP5+TBQWcKCggraiIRjZH0czPj+b+/jT386O5nx8t/P2J8fHxzDBWfr4KQ61Zowo27dql\nEtuDB6uSFl26lDvnouB0ASnfp5C8IJmchBwih0USPT6a9JYRzF/sxcwvcjmbmo1ft+956p4mPD76\nBvsW+duxQ1UmPHlSzZO48Ub73ctFSc9LZ8hXQ+jWoBsf3vSh/YsqujH2TkiPBvrZdn+VUi6u7o1q\nS1Wcw8svv8y2bdtYuHCho9WrFVKqXklyshr2npR0YcHVxMSSNjFROZOwMFVgtVhiYlTlitISGVl+\nmCvfYuFUQQHHCwo4lp/P0bw8jubnn5dMs5nmfn609Penlb8/rf39aRMQQBt/fxr5+nqO48jMVNOq\nVwWVVLEAACAASURBVK2ClSvVfnGxpuuvL3fhnoKzBSQvTCb5u2RMe0xEjYyi3oT6nIwI49VPjrN4\nnh9eAVlMngwvPNiGhvZa9lpKNRX8kUfU5MI331QhtMuIrIIshn09jObhzZk1YpZj1/BwI+yxnkMr\noL6U8rcyx/sBZ6WUh2ukaQ0p7RxiY2NJTU2lXbt2eHt7s2XLFmbPns2nn37KmjVr8K2DktT2oi66\nlBaLch7FBVfPnCmpo3fqlJKTJ9W8s+JCq02bqrZZMzUpuXlz5VDKS8znmM0cyc/nUF7eeTmQm8uB\nvDwyzWZa+/vTLiCA9oGBWLZvZ8zgwbT198evOll+FyT+m2+Iy8xUM+bi41WtqGHDlHTrdpGnzT+V\nT9K3SSR9lURhUiH1bq1H9K31eWfnNt6akUTuziH06Gnl/mmhjBplp7lthYXw4YdqsaFbblHrSUSo\n4baeGlYqjanQxMjvRhLhH8GXo760b1ivjnD7sJIQYinwtJRyV5njnYBXpJTDa6RpDRFCyKys7Qhh\npF27wQQFBbJ9+2oMBn9WrfqdJ574F+vXrycyMtKRalUbR34wcnJKCq2eOKEqWBw9WlJLLy1NOYxW\nraBlSyWtWqnvxObNyw9dZZnNHMjNZX9eHntNJn5dt46UDh04kp9PY19fOgQG0iEggI6BgXQKCqKN\nvz/ebjJ894JnU1ioRkH9+KOSvDxVrGnkSLXARJkfIKY9JhK/TiTxy0SMoUaip0SzrPVanpm3Bf+9\n08g51JURww1MmqQiWHW+vENKispHLFyo6jXdfjvxv/7q8c4BIN+cz9h5YzF6Gflu7Hf4Gl33xyF4\nhnP4Q0pZbqnTsklqRyCEkFu2dOGZZ46xenUmBgNERBi4/fYA5szJwWyWhIR4IYQXHTr48sQT0Qjh\njRDeeHn54eXlj8Hgj5dXsZQ+5ofBEITBEFymDcDLK6BUG4zRGIyXl2t/+KpKXp5yFIcPw6FDJe2B\nA6oX0qSJKjXRtq0qM9G+vVoHOqKceWBFVisH8/LYbTKx22TiL5OJXSYTJwsKaO3vT6fAQLoGBdEt\nOJhuQUFEVJJIdUn271f1N374QZX/uOEGVX/jxhsvGAElrZKMdRmcm32OlB9SCO4fzKY+m3jW9D5t\nkp8hb9sYzpz0YeJEmDpV5cfrlO3b4YEHlHP74AO1WtJlQKGlkFsX3kpeUR4Lb15o/9pYboQ9nMNB\nKWW55SKFEIeklK3Ke81elA4rtWjRgrCwMAwGA3fddRd33nknUlqwWHKxWnOxWouQshApi7Bai7Ba\n87Fa886LxZJX6lg+VmsuFosJiyUbiyUHs1m16vVcLJbi13OwWLIAbI4iBIMhBKMxFKMxFIMhFKMx\nzLZfug3HaAzH2zvcth2KEK4dgikoUOP79+9X0weKa+jt26eG9XbooGrndeyotjt1Kn9KQa7Fwh6T\niZ0mEwk5OWzPyWFHTg4RRiPdg4PpaZMewcFEuovDSExUvYnFi9Ww2QEDYMwYNRmilOc0Z5tJnpfM\n2ZlnyTuRx95r9/JG4zfo3+pOQvY9wPxv/KlXTzmJCRNUjqhOkBLmzoUnn1TO69VXK16Z0IMwW81M\nWTyFRFMiS25ZQqBPoLNVcgns4Ry+AdZIKT8tc3waat7D+BppWkNKO4ezZ88SExNDcnIygwcP5oMP\nPqBfv36XuELdYbUW2BxIFmZz5vm2WCyWTMzmjPNSVJSO2azkjz+S6NQpH6MxxOYwIjAaI/H2jrJJ\n8XY03t5R+Pio1miMxMsFEm5SqpzG7t3/z955x0dRrX38O9s3fdN7Qu8gXXpUlKIIgiL6Ktiwe+3X\nit177b1e5YpdUa8oKigtIL13pEN6zybZvjtz3j/OJgQISCAQLD8+z+ecmczOnsPMzjPnKb9HvkDP\nnZtNWVkW27ZJUtGuXQ9w6HXvLn0dh/qvNSHY7XazpqaG1UFZ63AQazTSNyKCMyMi6BseTvfw8FOa\nUX5cy/2qKkn/+s03sqhP//6SZfWii2TschCODQ4K3iug6NMictvkMq3LNM66YihdPLfzxScWfvxR\nPscnT5ZVZJvC55/9ww9kzZ8vFcUjj8BNN/1hy5Ue67VRNZXJMyezs2InP17+46mr+tcI/BnMSgnA\nt4APWBPc3QswARcJIYqOc6zHhYaK/QA8/vjjhIeH/2FYWbOzsxkyZBCBQBV+fwWBQAV+fzl+f1m9\ntrSBthKDIbyeEonHZErEZErCbE4KtimYTCmYTPEopyi0r/ZGV1VJf7Rxo5R166R4PFJJdO8uGSB6\n95bBNQ0pjO0uFyuqq1leXc2Kmhp2uFx0CQ1lQGQkAyMj6R8ZSUITli890lyOGw6HzEGYPl0qioED\nZYHsMWPqTE+qU6XkixJ2v7ab8uJyfujzA33v6MuFXa/ii88MvPeeXLVdd50sPd1AwFTj57NlC9x2\nm/RLvPGGTAr8g6Ex10YTGrf8eAvritYx+4rZJ5fq5Djwh1cO9U58FtA5uLlFCDH/OMZ3wlAUReTm\nvoLbrSKEQlhYKG53gMsue4V77hnP2Wf3RaczB/0BehTFgKLUtsbg30woimx1OnOw/8d4kxJCDa5C\npALx+Yrx+Qrx+QrxemvbfHy+fAKBqqCySA1KGhZLWrDNwGzOwGiMOSXJQ0VFUkmsXXuAQ8/tlkqi\nlkPvzDMb9mM4VZVV1dUsqa5mSVUVy6qriTUaGRgZyaCgtLZaT88kqJoaaXr68ksZ+TRsGPzf/8Hw\n4WA2I4SgekU1G5/fiGO2g9VnrKb7A90ZOfJ8Vq5UePddmDFDriZuvFHqmROaphDw1VcyP6JfP3j2\nWRm69ieFEII7f76TRfsXMefKOcSEnN6BKicTJzXP4XSAoihix47byMmp5NZbZ6EoEAionH9+Jtde\n2wohvEH/gRch1KAEgiJ9EJrmRdN8wWOlAEHFYQlK/b6lznF9aHuwc7t2OwS9PrSuPSBh6PVh6HSh\np0QZaZoXr7cArzcfrze3TjyeXLze/Xg8+9A0PxZLBhZLC6zWllgsLbFaW9X19fqT59ArLJRKopZD\nb9UqGVZ75pnyIThwoHR8N7S62OJ0sriqil+DEhCCQZGRDImKYnBkJJ1CQ0+/PIyKClki9NNPpS3u\n4oulo+HMM0FR8BZ7WfivhbinuSlNK6XTfZ048//OxF6l8NFH8M47Mjfv5pth4sSj0kX9PlwueP55\neO01qXUeeOBPWz9CCMED8x7gp50/MefKOSSEJTT3kJoFfwnlcDLGqmkBNM1TT2F4gm2ts9pT57w+\n2JFd37l9wHF9wLntQtOc9RzZDlTVyfr1enr3jgxGRMmoqFrHdkNO7lpHt3RmRzWZQzsQqMLj2Y/H\nsxe3e09d63bvwuvdj9EYh9XaBqu1NSEhbQkJaY/V2g6LJfMgBddUeRtbtkhFsXixlJoaqSQGDZL+\n3jPOONxcLoRgv8fDoqoqFtrtLLTbsQcCDI6KYqjNxrk2W6NWFqdkuZ+bK5XEBx/I7auukk/8lBR8\nbh/fPvct7v+4iVQiaXN/GzpO7ohi0rFwIbz5pkzsvvxyuOWWgwsVNXo+eXlSMcyfLwn9rrzymCvy\nNQeO99oIIXh84eN8ueVL5k2cR3L4ycpKPHb8acxKJwpFUYYDrwA6YKoQ4tlD/j4E+A5ZTAjgf0KI\npxo4z0lRDqcSQgjmz/+ZQYN6HBIZVevcrj6Cc7sq6NCWzm1VralzaBsM0UGndnTQmS2l1sktHdrS\nqa3XhxzjOFU8nhzc7l243Ttxubbjcm3H7d6Oz1eExdKS0NCOhIR0ZP16OPfcSwgJaYtO13T+gLw8\nqSRqOfTy8qSvNytLphl0795wAl++18uCykrmVlYyp7ISo6JwbnQ059lsDLXZsJ0uXERCSJLAadOk\nuadfP7jhBhg5Eofq4f033od3oX1Fe1rd3YoWt7TAEGEgLw/+8x8pnTvLBOnhwxt+rh/TfFaskP4I\nvV76I3r2PBmzPWGc6LX516//4uONH5M9KbvZVxB/KwfqSPp2AOcABcAqYIIQ4rd6xwwB7hZCXPg7\n5/rDK4emwgH/Q20UVAV+v3RsBwLl9RzbZXUObZ+vFEXRYzIlBJ3Z8cF+QtChnVjn4DaZko5oVlJV\nd1BZbMPp3ILLtRWncwtebw5Wa2tCQ7sQGtqFsLCuhIZ2xWxObRKfQGmpVBTZ2fLtubBQrijOOUcm\nlbVrd7gZSgjBNpeLOZWV/FxRweKqKjqFhnKezcbw6Gj6REQ0GQHhCcHlkk7sd9+VWvDaa+G668iP\nUHhp6ktEfxzNmXvOJOPmDNLvTMcUZ8Lnk+6MF1+UKQ133QVXXHFM1VUPh6ZJJfXQQ7LQ9tNPn5gn\n/DTF49mPM33rdLInZRMX+ueb35FwuiqHM4FHhRAjgtv3I0vWPVvvmCHAPb+Xcf23cjgxCCFQVQd+\nfwk+Xwk+XzF+f3HQsV1UT6SDW68PwWRKxmxOxmxOqefclg5uszkdo/FAFIhUGltxODbhdG7C6dyI\nw7EJIbyEhnYlLKwrYWE9CQ/vSUhIhxP2vRQWSovI3LlSFEXy5517rlQYDT3bPKrKkupqfq6oYFZF\nBYVeL8Oiozk/JoZh0dGnR57Fxo1yWfDZZ3KZdPPNrOtg44nPnqLXzF4M2DiA1KtTSbsnDXOKGSEk\n4eyLL0qG8ttvlyanIzCTHx12u6Tf+PRTePJJGVd7GpuaGgshBFMWTGHmjpnMnzj/L+OkPl2Vwzhg\nmBDi+uD2FUAfIcQ/6h0zBPgGyAPykYWEtjZwrj+Fcvgj8N0IIQgEKuqc2j5fPl5vXtChnRd0cOcA\nOrZsiaZ//45YLJn1pAVWawsMhmj8/pKgwthATc1aampW4/XmExbWjfDw3kRE9CEioi8WS8vjXmEI\nIZP15s6VHHoLF0KbNtLcMmyY9Ps2FN6f4/Ewq6KCn8rLWWC3k/Hbb0waNowLY2NpG3JsJriTBodD\nPqTffBO8XsSNN/J9v2genf0yV626ih5Le5A4IZH0B9KxpMvlwtatMt9t9myZ0tCzZzajR2c1/rs3\nbpQnUFV4+21pw2tmNNXvRgjB/XPvZ86eOcybOA+b1fb7H2pi/FHMSqdDHOcaIF0I4VIUZQQwA2jb\n0IFXXXUVmcHwu6ioKM4444y6/+Ts7GyA0367FqfLeBraVhSFJUs2BbeHN3j8ggULUFUHGRnFJCfH\ns2DBXHy+lXTrtgyPZx9Ll+4ABP37t8NqbcX69UYslhTOOed9TKZE5s6didu9nU6dvmH37n+yZk0N\nISEdGTp0FBER/Vm71oNebznG8UJRUTadO8Ott2bh98Nbb2WzciX84x9Z7N0L3bpl068f3HVXFnFx\nBz5/Q1YWNyQn88u8eXxdXMxOt5us9esxbNjAwMhI7h41ih5hYSxcuPDUXo/Vq6FdO7I2bIAlS1j4\nyCNETlnJ6ssuZeq4nVwa8yyTtk/i/DPOJ2FCAvuy9mGKN/Hxx1ns3g23357NCy+s57bbsrj3Xti8\nuRHf37Ur2U8+CbNmkTV8OFx2Gdnnnguhoc12f65fv77JzvfM0GfY8/we+k3px8qnVxJhjjitfn8n\nup2dnc20adMA6p6Xx4NTYVZ6TAgxPLh9mFmpgc/sBXoKISoO2f+nWDn8VSBXH5W43btxu3fj8ezG\n5dqJ270Dl2sHQvgJCWlHSEh7QkI6YDTGo2lO3O691NQsx+HYSGhoRyIjBxEVNYTIyEEYjQ0kQxwD\niopg1iyZyDx3rqT7uOACmZvWoUPDIbOra2r4tqyMr0tLCQjBuNhYxsXF0TciovlCZQsL4b334N13\n8WSk8u4gC29bCvn3/meJ+z6O+MviyXgwA3OK5P7KzYVnnoEvvpBRq3ff3XA+yVFRViZrWc+ZIyvR\njRnT9PNqBgghuPnHm9latpVZ/zeLEGMzrxRPIk5Xs5Ie2I50SBcCK4HLhBDb6h2TIIQoDvb7ANOF\nEJkNnEsIIcjLy2PixIkUFxej0+m4/vrrue2223jkkUf47rvv0Ol0JCQkMG3aNBITE0/a3P7GicHv\nLw86tn8LOre34XJtw+crxGptQ0hIOwyGSFTVg9e7H4djPRZLC6KiziImZgSRkUPQ6xvvffV6YdGi\nAxx6Fot83o0ZI81PukNM7EIINjmdfFNaylelpThUlfFxcVwaH0+v8PDmScDz+2WG3DPP4PLU8NQ5\nRrJTInhy11OYvzGTeE0i6fenY4qV0WP790sf8//+J/0R99xzHLkSCxfKaKoOHaSSSE1t+nmdYmhC\nY+K3E6lwVzBjwgxM+pOXfd+cOF7lgBDipAowHKkgdgL3B/fdAFwf7N8CbAbWAUuBvkc4jxBCiMLC\nQrFu3TohhBA1NTWibdu2Ytu2baKmpkbU4rXXXhM33nijOB2xYMGC5h5Ck6Kp5xMIOEV19WpRWPih\n2LXrXrFhwwixZEmKWLgwTKxY0UWsXt1HLFvWSixcGCo2bDhf5Oe/Kzye/OP6Lk0TYs0aIaZMEaJz\nZyGioxeIm28WYv58Ifz+ho7XxKaaGvHwnj2izfLlouWyZeKB3bvFpnr33imFpgkxY4bQunUTFZ1a\nietuSBLjXh0rll61VPwa/av4bOJnwm8/MJHdu4W48kohEhOFePNNIXy+Rn6fxyPEo48KERMjxKuv\nChEINOl0joaT9bvxq34x5osxYtyX44RfbeCinwSc6mdA8NnZ6Gf3Hz4JbsyYMdx2222cc845dfue\neeYZcnNzefPNN0/lEI8JfwSHdGNwqubj91fgdG7C4diAw7GBmprVuFzb0OksaJoXkykBm20oiYnX\nEBk54Lje6D/+OJu8vCy+/lqaZMaMkfVzhgw5PKdCCMF6h4MvSkr4vKSEKIOBy+LjuSw+nkzrKaaL\n1jT49lu0xx6lRDj4Rz87ib2upNP0znTe1Jm0e9NIuSUFfYicxLp10lKUkyPNTmPGNJKa47ff5CrC\n45Fmrq5dT8686uFk3mfegJdRn48iJSKFqRdOPeklR/8oDuk/tHLYt28fWVlZbN68mbCwMB5++GE+\n+ugjoqKiWLBgwWlf+OdvnBg0zY/L9Rs1NasoL/+B6url+HxFKIoei6UV0dHDiI+/lPDwno2uwbF3\nr8xN+/JLWdvikkukoujX73DTkyYES6qq+KykhK9LS+kQEsKVCQlcEhdH1KkMj9U0mD4d9dFHyDW5\nub1/FX373s/ImSNxrXSR8XAGSdcmoTPpEEJWRr33XoiMlKWoezdYveUo3zV1Kjz4oAx5nTIFTrVS\nbEI4fU6GfTKMXsm9eHnYy6cnX9dx4i+nHBwOB1lZWUyZMoXRo0cfdOyzzz6L2+3mscceO8Wj/BvN\nDU0LUF7+PUVFH1JVtYRAoAoQhIS0wWYbTlTUICIjB2AyHXuW7I4dMkft889lvtrll8uEs4boK3ya\nxqyKCj4uKmJuZSXnRUczKTGRYTYbhkO1yslCIACff47/0SnsDPNx11leLun+HD0/64lnt4eWz7Yk\nblwciqKgqpLJ45FHZH7Iv//dSHdCYaFMrli3TuZnnHXWSZvWyYbdY2fItCFc0vESHh78cHMPp8lw\n2vocmkoI+hyEEMLv94thw4aJV155pUEbW05OjujcufMxWONOPf72OZxauFy7xb59/xIrVrQXCxeG\niKVL08TChWFi2bJWYtu2a0Rh4TThcu0Rmqb97lw0TYh164S4+24hkpKE6NFDiJdfFqK4uOHjK3w+\n8W5+vui3Zo1IXrJE3Ldrl/jN6Wz6SR4BC+bMEeI//xHepHixqHeCGPZQhpgxdYZY2XWlWDtoraha\nVVV3bHW1EA89JER0tPTBOByN/LLvvxciNVWIyZOFqKxs2omIU3efFVQXiFavthJvrXzrpH3HH8Xn\n8MdKf5w5k2uHDSM8JITVy5dze48esGoVj9x0E+1btaJ7ly4MHzqUj95/nw7t2snsqL/xl4bV2pKM\njAfo02cbvXtvISXlVkJC2hEI2PF49lBU9Alr1/Zn+fJ09u17moKC93C5dta+kBwERZEEgC+8cCBM\ndO1aWXN7zBgZQOTzHTjeZjRyfXIyS3v0YG63bmhA1vr1DFy7lmmFhThV9eRO3mCAyZMx7drLoIvv\n4vu37KhTr+HpK27BOcrJ5gs3s23SNrz5XsLDZenpdetkXY4OHeRq6Zh/QqNGScZZvV6SPs2YcVKn\ndrKQFJ7EL1f+wtO/Ps0Xm79o7uE0K/5YZqULLuDp7dt5eOdOFMCsKMQaDLyWkMA/CgspU1VUQADt\ngU0gDcQWywGxWg+09SUk5GAJDT28DQ2V9Ma1ba2Ehv6paAb+CnC5dlBc/BklJZ8CCjbbMEymJNzu\nbdjt2QihEhWVRVTUWURFnYXV2uqIdujqasnIPW2azNS+8kpZrKd9+8OP9WsaP1VU8H5hIUuqqrg0\nPp7JSUn0OCEe7mNEZSXav/+F7z9v88aZeraOHc4t2/6J+2M36femk3pHKjqzvI8XLZJ8fNHRkt27\nUbWuFy6Ufohu3SSZX8Ifjyp7U/Emhn48lA/HfMjw1sObezgnhL+Mz6GoqIi1a9dy//33s3TpUnr2\n7Ml3331H++Av8ZlnnuGLL77g4osv5uGHHpIUAF6vrDDj8Uhxuw8Xl+tgcToPb51OSWtQ2zocklva\n7ZYKIjxcktpEREgvX/1+rURFSbHZpERFyV9geHjT1Ib8G42CEIKamlUUF39CSckXWK1tSUycSHh4\nXxyONdjtC6isXICiKERFnYXNNhSbbShmc8PUzzt3Sj/ttGlyRXHdddKZ3ZCvNs/j4YOiIqYWFhJr\nNHJTSgoT4uMJbYhutimxdy+B+/6JK/sX7j9LJfa8OxnzzUX4d/lp/VprYobLQI5AQAYjPfqo9LE8\n8UQjSj+43ZKn6YMP4OWX4bLL/nD399LcpYz+YjTfTfiO/mn9m3s4x42/jHIA2L9/P6NGjWLjxo11\noawLFiyoi1SqqKhg4cKFtGrV6tQMTlWlwqiulsqiulpKVdWB1m6Hqiqyf/uNLItFbtvtUFkpxe0+\noCiioyE2Vlacr9/GxR1o4+KkcmnmH9yfKTR3/vw5dO3qpqjoQyor5xITcz5JSdcTGTkYj2c3dvt8\nKivnUlk5H5MpEZvtXKKjzyMqKuswOnS/XxaCe+89Wcxo0iRJV9S69eHfqwrBLxUVvFNQwOKqKi5P\nSOCm5GQ6hoae0Hx+99osW4bv9tsorNjP7UP9jGn7Cu3fbk9ox1Bav9Iaawup0crKJOvrr79KqqXh\njXmRXrUKrrkGWrSQH05JOTlzOUmYvWs2k2ZMYu6Vc+mS0Jjl05HxdyhrE6Mh5fD9998fFMoKcOON\nNzJz5kzy8/Obc7hHxBFvDL9fKomKCigvl1JWdqCtldJS2ZaUyBVNfLxctickQGKiLKlW2yYnHxDT\nycn+/DMph/pz8fvLKS7+lIKC/yCEn6SkySQmTsJkikMIlZqatVRWzqGi4mccjrVERPQnOnoE0dHD\nCQlpd5AJas8eycb93//Kcgk33wznn99wPYocj4f3Cwt5v7CQ9iEh3JqSwoUxMccV6XRM10YImD4d\n3713sTrWz9PDIvmH5w1CPwol9c5U0u9NrzM1/fKLpOHo1w9eeaURrN4+nywo9Oabku31+usbbYZt\nzvvs802fc++ce1l09SJa2lqe8Pn+Vg5NjEOVw8iRI7FarYeFsk6cOJE5c+ZQWFjYXEM9dfB6pZIo\nLpZSVCRDC+tLfr7cHxUl39pSUyEt7YCkp0NGhvxbQ9Slf3EIIaiuXkZBwX8oK5tBbOwoUlJuJTy8\nT50CCASqqKycR0XFbCoqZqEoJmJizic6emRwVSFpPjwe6eR9/XW5aLzzTrmiaGiB4NM0/ldaypsF\nBezzeLgxOZnrkpJIOElKHo8H8dpr+J95mq+66Pn5nAFcv/Q+jHuMtHmjDdHnSVImpxMeeww++kjm\nRlx+eSMWr5s2yeQ5RZFhr506nZy5nAS8teotXlr2EouvWUxi2B+LlucvoxyuvfZaZsyYQWVlJS+/\n/DK33347P/zwA//6179wOBxs27aNoUOHMmvWrOYe8ukDTZNKJD9fFpPJzT0gOTmSfKe4WK42MjOl\nCaBlS9m2aCFtIQkJzW7Cam74/RUUFX1Afv6bGI0xpKTcSlzcpQdxPAkhcDo3UV7+I+XlP+J0biQq\nakhwVTECq7UFQsgqdy+/LE01kyfDrbfKBV5DWF9Twxv5+XxTVsbI6GhuSUmhX0TEyUnUKitDe+xR\nvJ9+xLMDQel8O0O/GEFU3yhav9wac5JMJly9WlqL0tNljetjzo3QNLmMeuQRqSgeeugPkzz35MIn\n+Xrb1yy+ejHh5lMQQNBE+Esoh5SUFMrKyvB6vQAYDAYSEhIoKipCr9ejKAqBQIC0tDTOOOMMjEYj\nJpMJk8mExWLBYrEQEhJykISGhmKxWLBarXXH1N+u35pMphP+QZ62ZhifTyqOfftkenCt7NkDu3dL\nE1br1tCqlSyW0LYttG1LdlkZWaNH/ykUx7FeGyFUKipmk5f3Og7HelJSbiI5+SZMpvjDjvX7y6mo\nmENFxSwqKmZjMNiIiZGKIjJyMHv3Wnj1VVm64aKLJCnekWpDV/r9fFBUxFv5+YQbDNyaksLl8fFY\nj+DAPqF77bff8N99B9XrVvDPIXqy9C/R4ueWtHiiBck3JKPoFHw+mTT3xhuS2G/y5EbcBrXJc2vW\nyHCo888/6uGnw+9GCMG131+LKlQ+HPPhcZ/nb7NSE0NRFDF69GiWLl1KaWkpAGFhYQghcLvdJCYm\nUlRUVPsfQUpKCpqmEQgEUFW1rq3ta5qGqqoy2UOnQ1EUdEE7aK0CqJ8QomkaQgj0ej0GgwGDwXCQ\n8jGbzXVKJDQ0lNDQUMLDwwkPDycyMpKoqChsNhtFRUUMGTKE2NhYYmJi6o7Rn+wIlRNFVZVUErt2\nyZCcHTtg+3ayN28my2iUcZsdO8onW4cOsp+R8YcK8T2eH63TuY28vFcoLZ1OXNzFpKbeSWhoBPgB\nagAAIABJREFUxwaPFULD4VhHefksKit/xuHYQGTkAKKjh6PTnc/Uqa154w3o21dyHw0c2PB3akEH\n9uv5+ayuqeH65GRuTk4myXwwRUiTPITmzcN7+63sEmX8q28LJq1/ihhzDO3ebUdYV+nn27wZrr5a\nxkdMnSqtlceMX36RMbPt2sGrr8qVagM4HZQDSJqNXu/14qFBD3FF1yuO6xx/K4cmRq1ZafHixVRX\nVzNu3DjcbjcAXbp0Qa/Xs3r1al577TUee+wxqqurj+m8mqbh8/nw+Xx4vd66tiFxuVxUV1dTU1ND\ndXU1DofjIHE6nbhcLpxOJ263G7fbjdfrxePx4PP58Pv9+P3+OiV1yPwOUji1q5ywsDDCwsLqFEx0\ndDSxsbHEx8eTkpJCWloaaWlpREdHN4+CEUI6yH/7TZYi27ZNytat0rDeoYO0LXfuLAnaunWTTvQ/\nGXy+UgoK3iE//00iIvqSnn4/kZH9jvoZv9+O3T6P8vJZVFT8hMEQSWTkhSxfPoqnnupHYqKeBx6A\nESOO/Ea+3eXitbw8Pi8p4fyYGO5MTW36nAlVhXffxffIQ3zVxcimpAmM+GUcaTekkTElA71FTyAA\nzz4rHdUvvAATJzZiFeH1SgfGiy/CP/4h+ZpOY//XhqINDP14KEuvWUqbmDbNPZzfxV9GOVx77bV8\n++232O12NE0DYODAgaxfvx5N04iOjsbpdFJZWdnMIz46hBD4fD4cDgc1NTWUlJTUSWlpKWVlZVRU\nVFBZWUlVVVWdMnI6nXg8HjweD16vF7/fX5fNq9PpMBgMdYolPDwcm81GbGwsCQkJJCcnk56eTmZm\nJvHx8cTExBAbG4v1ZNl87XapJLZskc7IjRthwwaZhNitmyw/2aOHlJYt/xSmKVV1U1Q0jdzc5zGb\n00hPv5/o6OG/a44UQqOmZg3l5TMpK/sen68Au30s//3vePbuHcx99xm4+OKGI5xAmpzeLyzk9fx8\nWlos3JWWxgUxMU1bmKisDO3BB/H870se72+jY9njtClrQ8epHYkaJOuJr18vneyZmdK10KiSKjk5\ncO21YDRKxsNTkRh4nHhj5Rt8sP4Dll6zFLOhcaSOpxp/GeWwePFidu3axTXXXFOnHCIiIhg9ejQ7\nd+6ksrKS/Px8HA5HM4+4YZyMJWUgEKC8vJycnBz27dtHbm4u+fn5FBUVUVxcTHl5OZWVlVRXV+N0\nOvH7/XWrDFVV0ev1hIaGEhUVRVxcHElJSWRkZJCZmUlCQgKJiYl1EhMTc9CDrtHzEUI6wjdskE+S\ntWul3bm6WiqL3r2l9OkjvZ2nUGE05bXRtAClpV+Rk/MMiqIjPf0h4uLGohwjHbTbvYfS0q8oKfmK\n6upcVq4cx+LFlzFhwgAmTNAd8cXar2l8XVrKS3l5FK5YwYOjR3NVYiIhTbmqXL2awI03kOMt4V8t\nOjJ++d2kXZRGm+fbYIgw4PXKhLmpU2Vqw0UXNeLcfr+sSLRypSzdF/R0ny5mpVoIIbjoy4toaWvJ\nS8NeatRn/zYrNTHqh7J+/fXXjB8/vk45hIWFMXjwYH744Qd69uzJ1q1b65zWpxtOh5vc7/dTWlpK\nYWEhhYWF7Nmzh927d7N//37y8/PrFIrH48FisWA0GutWOn6/H5vNRlJSEpmZmeh0Onr37k1ycjKp\nqamkpKSQmppKRERE4wZVWioVxapVUlaulOaMvn1libZ+/aTSOIlvkyfj2gghKC//kf37n0JVq0hP\nf5D4+MvQ6Y7dbOJ276akZDp79nyC3e5i6dL/o3v3Kxg/vv0RlYQQgtd//JH5GRksra7mxuRkbklJ\nabpQWFWFd94h8OgUZvRN47fyi+i/fzBd3ulC3GiZALF0qaQSGTJEuhOO+dIJAc8/L2N+v/8eunc/\nLX43h6LcVU73d7vz7gXvMqLNiGP+3N/KoYmhKIpYubIz996bw+LF1agqGAwKQ4fGsXlzDQUFnjrz\nil6v47LLOjFlShaKYkSnM6EoZnQ6EzqdGUWR7cF9KzqdBZ3Oil5vrbdtDrYWFOXEo5X+SPB4POTn\n55Obm0tOTg45OTns3buXnTt3sn//fgoLCzGbzYSHh2MOOkM9Hg92ux29Xk96ejppaWmkpqaSlpZG\nZmZmnaSmpmI4ml1ZCBl6u2IFLFsmZf16GTE1cCAMGiTlODNuTzWEEFRWzmP//qfwenNJT3+AxMSJ\n6HTH/rAWQuBwbGD16k+oqfmMiooUbLarGT78Msxm2xE/t8Pl4uW8PL4oKeHiuDjuSk2lwwlmX9eh\noADuvBPXsl95qmdnei+7ieQzk+n+bndMCSZqamQ+x4IFMjdiwIBGnPurr2TG4EcfScfLaYi5e+Yy\neeZktt2yDYuh8WVrTwX+EsqhpmYjRUVF/PLLr9x117Ps2vU9Z511HZGRIZjNRoxGhaysTjzzzDes\nWvU0NpsZTfMjhA9N8yGEF03zoWneYL9221NP3PXEe9DfhFCDyiMEnS7koFavDw32Q4P9UPT6sDox\nGMLrbYej10cE98n9x2puOJ2gaRrFxcXs3buXvXv3snv37jrZuXMndrudhIQEbDZbnV/D7XZTXl5O\naWkpSUlJtGzZ8iBp3bo1rVu3Jioq6vAv9Pnk6mLJEpkgsHixfB0dMgSysqRkZp7K/4Ljgt3+K/v3\nP4nLtZ309PtJSrqm0cWIhFCZP38umzd/QJs2szEaR9Cjx9VERw894r1U6vPxVkEBb+Xn0zcignvS\n0hgUGdk0LzyzZiFuuonN7ZL42NmLoVtG0fa5tmRcl4GiKMyYIbOrb75ZpjYcs5Vr6VJpl3rlFcnP\ndBrioi8vondybx4c9GBzD6VB/CWUg2jbljEFBfzkcOAHjIpCvMGAXVWx6vVUBQL4hcCi0+G+7DLp\n2DIYJHXEoWI2H9w3m6Wj9NC2Xl8zG9DMoJkEquJDEx5U1YmmuVBVV7DvRFUdqKozKI6g1KCqDlas\nyOGMMwzB7RoCgWo0zR1UIJFBpRGJwRBVTyIxGGwYDDaMRluwH43RGI3RGINOF9JsK5qjLZGdTudB\nymL79u389ttvbNu2DYAWLVqQmJhIWFgYiqLgdDrJy8tj165dmM1m2rRpQ5s2bWjXrl2dtGnTBosl\n+IamaTJKatEiyM6WYrFIJXHOOVKOlFnWyLmcDFRVLWf//idxODYElcR1ByXUHQuEgJkzK5g9+3MG\nDJhKSkolLVpMJjHxGpYt+63B+bhVlQ+LingxLw+bwcA9aWmMjY098WJENTXw8MOoX37Bf88djCn7\nAlq1bEXPaT2xtrBSUCAzqg0G+OSTRjirN20i++yzyXriCUlQdZphd8Vu+rzfh003bSI5/Pfvt7/N\nSk0MRVFE+dQNFFcWs3HfVh7/3+tMvfZxBj89iRRbHJqmMbJzHz5e/gug8PPND9MzJQNF9QfFhxLw\noQQ8KH4PqH6UgBfF50HxeWU4ndcrOQ5qWVzr76vP6OrxyAfTobTftdTftTTf9am+gzTf2QUFZHXv\nfhDltwi1EgjXo4YIAhaVgNGHqlYTCNgJBOz4/ZUEApXBbdn3+ysIBCrw+8sRQgsqiliMxrhgK/sm\nUzxGYzwmU1ywTcRgiGoyZXI8N7oQgtLSUrZt28aWLVvqZPPmzSiKQpcuXWjdujUxMTGYTCacTie7\ndu1i+/bt7N27l7S0NDp27EjHjh3p1KkTnTp1okOHDljMZsmZPX8+zJsnbRlJSTB0KJx3nlQaRzGn\nNJddu7p6Ffv3P0FNzbrjVhKqCl98AVOnrubCC9/ljDO+Zu/erowePQWb7ZwGr7cqBN+XlfFibi75\nPh93pqZyTWIiYScaRrpsGVx3Hbmxobxo6MKotZfT7rF2pNyagioUnnxSEhJ+9JG8NMeC7M8+I2vK\nFBnN9MADp11k2/1z76fIUcS0MdN+99i/lUMTQ1EUsX7oeu7fdD+rK1dj99lBgXhjPJclXMYbeW9g\n1VnxCz+XR17OjzU/8nXy1whVgApCFYiAkK1f1G2jAXrQGXUoRgXFpBzoG5QDrUFBZ6p/jIKiF+j0\nGopOQ6dTURQVnaKiU/wo+NEJHzrhQxFedKoXnepGF3CjC7jQ+Z3ofA4UTw06TzV6tx2dy47OWYHO\n70IXbkQXaUUXGSZpv6OiDlB+17ZB2m/VFoI/SkcgXOAL9eM3OPH7y4JSgs9Xgt9fis9XjM9XjKa5\nMZkSgpKEyZSM2VzbJmMypWA2p2I0xpzSFUktJfvGjRvrZP369ezevZt27drRvXt3unXrRmLwlXP7\n9u11SmXPnj1kZmbSpUsXunbtSvfu3enRrRtJRUUwZ45Mtlq9Wjq4hw+X0qnTafWQqa5ezf79j1NT\ns46MjAdISrqu0eYmnw/efx9efLGaSZM+5eyz38Zo9JKcfBOJiZMwGhv2TSyrquLF3Fyy7XauS0ri\n1pQUUi0nYEP3euGppwi88zZPDMqg045/0iqsFR2mdSC0fSjz5kln9eTJkknjmMxMBQUwbJiU558/\nra5djbeGdm+0Y8aEGfRJ6dPcwzkIfwnlUDvWQCDABRdcQN++ffnwww/ZvHkz48eP57777uOxxx7j\nxRdfZPz48axYsYKYmJijnleIoNLwS9H8GsIX3A4cEM2vyX0+geaTx9QeW7ftPbCteTWEV+6rFeEV\naJ4D25rnEHHXtiqqW24rOtCZQWfU0Bs1dIYAep0fneJDjwed5kavOtD7Heh9Vei9lehUF/pQHfpw\nA4YoE/poK/rYEPRx4ehTolDSwtBSDfhiNXwRAXxmB75AMV5vAT5fAV5vPl5vHqrqwmxOwWxOw2JJ\nr9emY7FkYrFkHEZVfTLgdrvZtGkTa9euZc2aNaxcuZJdu3bRpUsX+vbty5lnnkmPHj1wu91s2bKF\nDRs2sG7dOtatW4fBYKBHjx707NmTXp060cvtJnnlSpTZs+Xq7/zzYeRIOPtsudI7DVBdvYp9+x7D\n6dxERsbDJCZejU5nbNQ5nE7JSvHSS4Lrr1/CRRe9jcfzE7GxY0lJuYXw8B4Nfm63282reXl8UlzM\nuTYbt6emnhiP0+rVqBOvZGWYg+9SL2TkoktpOaUlKbelUFyiMGGCtNp++qlko/9dVFRIxd6nj4xm\nOo0UxAfrPuC9te+x5Jolp1Xgyl9KOUyYMIHVq1eTn59PXFwcX331FRs2bCA/P59Fixbxj3/8gzvu\nuIP9+/c386gPR2OWlEJIJaW6VKk43FpdX3WqaC7Zqk4VzRnsO1TUKh9quQu10o1q96JW+eV+pyDg\nBtVrQA0Y0On8GHBi0BzojV4MZhVDqMAQoUdvM6JL1EELLyLDjUh1o8ZX4bcU4Vdy8Wm5eH05bNhg\npn//tlgsLbBYWmC1tsRiaYnV2hKzOb1RIZuNgcPhYPXq1axYsYLly5ezbNkyFEWhX79+9OvXj4ED\nB9K9e3dKSkpYt24da9asYdWqVaxevRqDwUCvXr3ok5lJb7eb3tu2EbNpE9mdOpF1zTVwwQXSHNXM\nqKpaxr59j+B27yYj4xESEq5o1P9ndnY2Xbtm8dxz0oxz/fUlTJw4Fbv9HczmZJKTbyE+/pIGVydV\ngQDTiop4PS8Pm9HIrSkpXBIXd3z5Eh4P4tFHcb7/Fg+fncG4fW8THhZOuw/aYUy18uCDkq32q69k\ntPKR5lL3u6mqkgrijDMkDfhpQtGiCY0+7/Xhrn53cXmXy4943N9mpSaGoihi2bJMNm70c8MN+ZhM\nCpGRBmw2I5Mnp5OVlcxjj21n/vwikpJCePTRM+nTJ/U4Qllr5dBtS12I64lEFp0u8dpCE6gOlUB1\nALXCR2B/GYH9Zah5dgKFVQSKnQRK3QQqfQSqNQIOhYDPhF8XSUCJIKCGgFFlk+1XenWKRdeiHDLL\nILkENaoANWw/qrEco0jFYmxFSGhrQm3tCY3sQEhIO8zm1CZ9uxJCsG/fPpYvX87SpUtZsmQJO3bs\noHv37gwcOJDBgwczYMAAwsPDycnJYdWqVXWyZs0aYqOjyQgJYZTZTN9du+jerh3Wiy6CceMk708z\nwm5fxN69U/D7y2jZ8l/ExFx4TP939e+1wkJZSmH6dLjttgBXX/0jlZVv4HBsJDn5epKTb8FsPtxD\nrArBT+XlvFtQwLLqai5PSOD6pCS6HHNJuHpYuhTn+IuYnuog5czphH4aRcvnW5I4KZFvv1W48cYD\n5R4Ond5hv5vqarni69BBpmKfJgpiSc4SJnwzge23bifE2PBK9G/l0MRQFEW4XHuoqqqkTZtBTJo0\nln//+45giKovGHbqZcyYB3jkkcvp2jUtuP/YQlnltgdVddcLafU2EOLqQVGMDYSzHhzK2lA468Fh\nrQfEYIhAr484aW/ZTYZAQFJ75+UhcnJRd+UT2FWMf28F/rxq/EVOAm4T/og0/KHJ+EIj8cZ58cVU\n4LcVo8bkQnoupOWC1YW+KhOTuw1mrS0hpg6ERnYiLL4t5mQrpgQTOuOJ/eBrampYvnw5ixcvZtGi\nRaxatYqOHTsyZMgQsrKyGDx4MOHh4Wiaxvbt21m5cqWUFSvYumUL7cLC6O9y0c9mo//YsWReey1K\n167NYsoQQlBRMYs9e+5Hrw+nZctniYo6AjPfUbBnj6zH8PPPktzv6qu3U1b2KiUlnxMbO5bU1DsJ\nC+vc4GdzPB7+GyxElGo2Mzk5mUvj4hrnwK6qouyq8VQsnc/6Ox4h85NhhPcIp81bbdhTaGDcOFkQ\n6e23j4HJ2+GQZsGWLaWj5TQhr7x4+sX0Tu7NfQPva+6hAH8R5WC1ClR1Gj7f1SiKDSE8KEoIMTFT\nMRgEZWW3oapl6PVRhIaeQadOszAYZOic0SjFZDq8PZLURrvWRrpKEZjNHkwmNyaTG7PZhcnkwmBw\nYTA460QIRzCs1VkXxlo/pFWGsdYEt6sJBGrQ6cx1iuJACGv9tjaMNQqjMbounNVgiMZgiDw9ciWc\nTsmRcyjt9549iF27CZij8ad1xZ2eiSPDijPBizu6HF94Lv6IXWjWcpT8TMTOTHTFrTE5OmAVXbBE\nJ2BONWNOMWNOM2NJs2BONaMPPfYHgsfjYeXKlWRnZ7NgwQJWrVpFt27dGDp0KOeccw5nnnkmpmAG\nscfjYe3atSxbupRlP/7IklWrwONhgNXKoAEDGHjNNXQbO/boiXwnAUKoFBd/yt69UwgL606rVs8T\nEtJ48rctW2DKFJmIPmUKXHllGSUl71BQ8CZhYWeQlnYfUVFDGlyhBDSN2RUVTC0qIttu5+K4OK5L\nSqJPePgxrwZL3n0Zwz33smB8Fh3F61Qvqabjlx3RtQnn+uslJdc338jn/lHhdMKoUZLN9b33TosV\nxPay7Qz8YCDbb91OtDW6uYfz11AODodg1KjzWLBgDkajiVat2hIVFUN5eRmqGqCwMBe/P4DBYODt\ntxfSpk0v/H75wuv3S/H5Du97vQe2a6U2irV+vyGpjXytH+16tEhXvz+bpKSsgyJdZSsID3cREVFF\neHgVoaFVhITYsVqrMJvtmM12jEY7en0limInEKgIhrSW4/dXoKoOjEZbXRirwRCD0RgbDGWNC4a1\nxmE0yiglozGuSVYqjVoiCyGLDu3ceUC2b5eyezfExxPo1gZn71icbUxU21w4THm42IouEIbB3gF9\nflvE9raoa1rh2xSJ3qrHnG7Gkm6pay0ZFiyZFiwtLBjjjEd8YLlcLpYsWcK8efOYN28eW7ZsISsr\ni6FDhzJ06FA6d+5cR+MuhGDf3r0s+egjFn/7Lb9u3UquptGvRQuGjB7NkLFj6d27d51yOdlQVQ/5\n+a+Rk/MciYlXkZHxMEbjwYmDx3JtVq6USWn79kk+pEsu8VBS8gm5uc9hNMaQnn4/MTGjjvjiUej1\n8lFxMe8XFmJWFK5NSuKKhATijuH/oXrrOgpHDqYiMZLUSfPIeaSMzCcySbohmTffVHjqKfjgA2k9\nOupcHA4ZwdSrl0yWOw2cwdfPvJ4oSxTPnfvcYX/726zUxKh1SPft25eVK1eiKAodOnSgsLCQiIgI\nCgoK0Ol0qKpKVFQU7du359dff2228QYCB9Ii3G5ZK8fthsWLs2nfPguXS+5zOg+0teJwHGgdDplb\nVCvV1fL40FAZ0RoRISUyMkBCQgWxsWXExJRjs5USEVFGWFgpISGlmM2l6PUl6HTFaFoxgUAFBkMU\nJlNiMJxVyoGQ1hTM5hRMpqSjUjw02Y2uqrIiXS3ddy2b67ZtiIhwPANa4ehtw9FaUBNbQY1uFyAI\nNffA6jsDY0VX9Ps74d8bine/F/deN569HjSvJhVFrWTU67ewYIw5oDy+//57AoEAc+fOZc6cOdTU\n1DB8+HBGjhzJueeei81WLwxU0yj/+WcWv/EGCxcsYKGisENV6dunD8NGjWLEiBF06tTppEeteL1F\n7Ns3hbKymWRmPhYMf5VKvzHXZt48yZTt9cpyz8OHq5SVfUtOzr/RNA/p6f8kPv7yI0ZNCSH4taqK\n/xYWMqOsjHNsNq5JSmKYzXbU5Dqvo4pF43rRfn0epjdms/8xK3Fj48h8IpOlSxUuvRSuuw4GD87m\n7LOPMhe7XUacjRwJTz11THM+mcivzqfrO13ZcOMGUiMOLpP3t3JoYtQqh++++4677rqLvLw8ysvL\niYmJIT09nby8PB588EHee+89Bg4cyKZNm9i0aVNzD/ukQFUPVhbV1TKAo77Y7bKtrJRit8sowMpK\n2VqtKunppWRkFJGSUkRiYiFxcYVERRUSEZGP1VqA0ZiPohSj10djtaZhsaRhNqfVhbRaLBmYzemY\nTAknz6SladJMtWWLrCoTpP4WO3fg7ZFOzeBEaroYqEmsotqwC6MphvDwPkRG9iMioh8WtTO+HA3P\nPg+e/Z4D7V4pIiCwtLBgaWkhtEMooZ2lhLQPYV/+PmbNmsWsWbNYtGgR3bp144ILLuDCCy+kffv2\nBx78gQDMm4d92jQWzZzJ7JgYZrndBEwmho8YwYgRIxg6dGjjyQgbgZqa9ezadQeBQCWtW7+KzZbV\n6HMIATNmyJVEfDw89xz07i2orJxLTs6zuN07SE29i6Sk6zAYjuyQrg4E+LKkhKmFheR4vUxKTOSa\nxETaHCFUWBManz9wISPenI3vgWfI/WII0SOjafnvlhQXK1x8McTFyaS5o5L3lZZKKpVJk+C+5rf3\nPzD3AUpdpbx/4fvNOo6/hHIYOXIkmzZtoqCgAFVVCQsLw+FwYLPZ6uo3KIpSxyR66aWXotPp0Ol0\n6PX6Btvafm11t9q+Xq8/TOpXgKvt198+WmsymTAajYdJcxToEUKuSMrLpaIoL5f1emrbsjL5Oyst\nhbIyFb+/GIMhl4yMXDIzc0lJySUhIQebbT9hYfsxGKqBdMzmTCIiWhAenlkvpLUVRuNJsLt6vXKV\nUY/6W2xYh7tdGNXnJFHVVU91fBluQwlhYWcQGTmAyMhBREb2P2g8frtfKoo9HpxbnTg3S/Hs8WBt\nbSW8bzgRfSOwdLewsnglM3+aycyZMzGZTIwaNYrRo0czcODAA74HpxNmzEBMm8aOlSuZ1bEjszSN\npVu30rNnT0aMGMHIkSPp3Llzk68qZOb51+zefQ8REX1p1ep5LJaMRp8nEIBp06Tjun9/uZJo3Vom\n6eXmPovdnk1y8i2kpt6G0Xj0PKItTicfFBbycXEx7UJCeCIzkyxbw4l4H3/xIH3veJ6IAePI230X\nUUOjafV8K/x+hdtuk1Ra330nx3JE5OfD4MFw112S+rsZYffYaft6WxZetZAOcUeo/XoK8JdQDjNn\nzmTp0qV89NFH5Ofn1z1cBwwYwLx58wAwGo2EhYVRVVXF22+/jaqqaJpWVxb0SG1t+dCGyooe+vdA\nIFBX0c3v99dt1/YP3a7t+/1+XC4XQB39taIodYqjtuRo/dKjh/brtxaLpa49klit1jqpX0PbarUe\n1Nf9jiNPVaUiKS6WUlQkwyNXrcrGbO6Dy5WDpu3FYNhLQsI+MjP3kJKym+jo3SiKHlVthdHYmoiI\nNsTHtyEqqg0hIe2aVnFomnR+r1kjs6FXryawbQ3VvUKpzoqlqp2P6vA8zNZMomyDiYwcQlTUEMxm\nmdNQf7mveTWcm51Ur6imenk11Suq8RX6CO8TTmT/SMqSyvgl9xe+mf0NeXl5XHjhhYwdO5Zzzjmn\njqGWvDyZ3fXBBzhVleyBA5kF/LRwYV0i5/nnn8/ZZ5/dpAWXVNVFTs5z/PDDS1xwwZ2kpd171Df9\nI8Hlkib8l16CCRNkJnN8PLhcO8jJeY6ysm9JSrqW1NS7GgyDrY/aOhMP7NlD34gInm/VivQGMrC/\nX/0pXHMN/f0d2Gd4i8hz4mj9cmsWLlzI9u1ZPPIIfPihTHM4Ivbulcy9r78OY8c2et5NieeXPM/S\nvKV8e+m3dfv+Nis1MWrNSkVFRXz44Yfcf//9pKSkIITgq6++YujQoXg8Hmw2GwaDgZKSEk7HuR16\nY9Qqj9pSpX6/v65caUPlSw8tY1pbFa62Mlxt3+1217WHisvlwu1215Uzra3bEBISUlf/ur6EhYUR\nHh5eV7K0drs2Z6Bfv35EREQQGRlJeHgEEEFFhZW8PIXcXEFRURlVVbvx+3dhMOwkNHQnaWk7SUnZ\ngRAm3O52QDtCQtoTG9uBFi06EhOT2TSmKk2T9a5XrIDly9FWLcfh30bVuQnYexmpii/GaIknKuZs\ntmxJ5IILbsVkSmjwVP5yP1XLqqheUk3Vkipq1tYQ0iYE5QyFDWIDX/72JSu3r+SCCy5g/PjxnHfe\neVJRCCH5hv77X/jmG8TAgfw2ciQ/1tTww08/sXbtWs4++2zGjh3LqFGjDvZtnAB++eULUlO/x25f\nSIsWT5KYOAlFafxKtaxMmvE/+QTuuENScIeGgseTQ27u8xQXf0pCwv+RlvZPLJajF5B2qSrP5eTw\nen4+d6Smck9aGtZDVs9Lc5Yw5+bh3Lk0nJ3xnxJ+Vgr5l+Rz1tlnsXgxjB8Pd98tFweGZWtkAAAg\nAElEQVRHXHytWSM1yA8/SMqUZoLb76btG22ZfvF0+qXJsrF/K4cmhqIoYtZKN68+fSO//PAJmqpy\n+30vsG7VQi4aN4n77roCv89Lx45nkJ+/j5qaaoqKAuh0MrpNr2+4PQ0CG5odmqbVKQ2n03mQ1JYm\nrV8ru6am5iCpratdW860qqqKQCBAZGRkXe3r2jYqKoqIiEhMpmRUNQVFsWA0VmE0lmC15hARsYu4\nuG1ERJRTXt4Ol6sjitKJ8PCOJCV1onXrFiQl6U/sujmdsqDQkiWIJYtxFi7B3sdM5YAQqlLKMFlS\nsMUPx2Y7l6ioLAyGhg3dmk+jZk0NVYuqsC+0U7WkCn2CnsKkQuaUzeGn/J/IujCLCRMmcO6552I0\nGqU9b/p0GXaZlwfXXUfl2LH8sH4933zzDfPnz6dfv36MGzeOcePG/S79y7GgunoFu3bdhao6adXq\nBaKjj5Ht7hDs3i39Eb/+Co8/DldfLX9HXm8ReXkvUVg4lfj48aSn3/+75qx9bjd3797NeoeDd9q2\n5dzog1eQO8t38vijQ3jjswB7o97HMqA17T5oj86gIycHRo+WlWbfeUcS8TaIH36Q5E1LlhxDTOzJ\nw3tr3uOrrV/xy5W/NMv3/yWUg+6y69Bmz4DKstqdso3JBGcleGtAKCACENsZOl4LqgE0g2wDJtn3\nG0E1yW2hB80IGFGEEaWuNaGjfmtEr5jQ6QwYDAp6PegNAr0B9LW5FAYwGA/0jUYwGRTMJjAZFUxG\nsBgVLCawmBQsRoUQs4LVpGA2K0fMvai/r36/NvfCZDrALG42nx65QD6fj6qqqjqx2+11bW2/srIS\nu91OZWXlQVJeXkFoaDzt2mXSokU4qakaKSmVJCXlERFRSU5Oe4qK2lNT0xa9vj1xcd3o3LkFnTub\nSU4+DoWvadLhvXgx2q/ZOHLnU9nJS+XAEGqS7YRZumBLvpDo6GGEh/c84tu3UAWO9Q4qF1Rin2/H\n/qsdZ5STVdoqsp3ZdLq0ExMmTqBfv37SjLdhg1QSn38ujfs33IBj0CBmz5nD9OnT+fnnnxk0aBCX\nXXYZo0ePJux4spJrxyYEpaXfsGePfHC3aPEkkZH9j+tcK1fCPffIIIcXXpCEtwA+Xyl5eS9RUPAf\n4uLGkp7+IFZri6Oe66fycm7esYNBUVG81KrVQSGwJc4SrntzGC+/U4zD8wz6Xt3o+FUXdGYdTidc\ndZXUr99+exT677fekiRTS5dCdPPkHPhUH21fb8vn4z6vWz2cSvwllIP1KSue/3gQOfXGbAJEsHUe\n2B3zeCy6ED2gCzr+akUeXisI0ESQx0gINDSEpqEJFU3IVohAcDuAQEXBiE4xoFOCikMxoWBCwXyg\nFRYQJsACmgU0M0Iz499TjpLWEi1gQQtYUANWRMCKErCiD4Si84eg94cFJRSdNxSdLxTFF4IuoIeA\nAgEF4deh+RQ0n4LqUwgExedRMBiFVBQWCLGC1QIWi4LFcnDOhcUicyxqmcYPlaMwjxMWJj+3cOHJ\nWSLXFgWqqKigvLy8rl9RkY/TuZdAoAyrtZK4uDLS0grx+czs3t2VPXu6kZubQmVlEooSR2amia5d\nLfTvH0fv3umYzccQliuE9F0sXIi68BfsJXOo7Oqj4kwD/ggVm20o0cljiY4ehskUd8TzaX6NmpU1\nVMypoPD7QlxbXWw3bme9cT3p49MZe9tYOnXqJFcy06dLGoiCAhm7ee211ERE8N133/H555+zePFi\nRo4cycSJEzn33HOPKfmuIfOFpvkpLv6IffueIDS0E5mZTxAR0etYL0sdaiOb/vlP6SB+4QVJcgvg\n95eTm/syBQXvEBs7ivT0BwgJaXvEczlVlUf37uXj4mKeadmSqxIT65z1Tp+TKz+7mIHPr+G8/AdR\nu/aj86xe6EP1aJqk25g6VSqInj2P8AX33CNXir/8It+emgHvrn6Xb3/7ltlXzP7brNTUUBRF7Pp+\nFyX2Euatnscjrz/CnVffyTc/f0NZZRnjLhjH9z9/T2xMLPtz93PJJZcw+cbJqIp6mPjxoyoqASVA\n3T8lQEAECGgB/Jofn+rDr/rxa37+v70zj5OiOvf3c2rrfdaeYWeYAWRRQFwiKCKuPyXRSNSg0WDQ\nGzVxwdwbjYm5N3ivJjG57kaNMS5BzabXqFFciIJCAJHVhW3YZwZmmK27Z7q7uqvq/P6o7mGGRRlk\njfXM53zOqerqqrd7quutOud9vydr55adLKZlkrbSpK00pm2SyqYwbXedaZmYttlR59+T34/lWCgb\nFbSBGpqioQgFRSgIoSBw+7ikBAfpOibHxnIsbCeDlA6q6kNTfWiqH00LompBVC2EqgVRtBBoYVBD\n2ATJyCAZO0TaDmJbYQIUE7QLCcgSwlYRfsvAZ2n4shpaRkUzNdSMikirYKrItIKTVrBSCtmUINku\nuuRitLe7AUM+32yKiiZ0np6CSKRrnW9HIjvyMnbkZ+woeveERzuQUpJOb2H79gXU1n5AY+NHOM4a\ngsE6Ghr6sG7dMFauPJE1a45j06ZiDCNLRUWKo49WGTu2iNNP70dlZW/mzJmz+x+tlO64xTvvkJ7/\nMs3p92gep9MyLE1Qq6K0/zcpLb+QcPjYz4xAyrZkaZnVQvUfq4m/FafFbGFV0Sp6TerFV2/7Kv2q\n+rmRV48/7k7OcOaZ7tRpEybQ2NTEX/7yF/7whz+wceNGLrvsMqZMmcKxx+75mJ91EXIck61bf8+m\nTT+noOAkKivvIhQa2u3vPpNxu3buugsuvNBNpOuRG7LJZluorX2I2tqHKC4+m4qK2wmFjt7jvpYm\nEvzb6tVEdZ3fDRnSMWCdtbOc//OvMXH5Gs5+bQqpQaczcu44tELXQb74ojvL3IMP7mGyOMeBSy5x\nT7gnnzwkfckZO8OgBwfx10v+Sqo65TmH/YkQQv7oyh/x6pxXWb15NbZjUxAsIGgEaYw3Yjs2EknY\nCNOeaScajHLbmNsQtkC1VYQlUC0VxVJ2lGyuziioWRXVUlGliqqoaIqGpmroQkdXdTTVDVvtmONB\n7zTvQ345N9+DYigIQ3RpK4YCBliGRdbIkvFlyGpZMkaGtJ4mo2UwNdMtqompmKTVNGmRJpn7S9gJ\nEk6CRNYtbZk22jJtJLNJ2rPtHQ7KkQ66oqMq7mcBgQRs6WA5FpadQVd96HoInxbGMArQjUI0oxBF\nLwS9CEcvxFTDJJUQbSKEz1dMaaCUUn+YEk0jquuUKDqFWYNQxi0BU8dn6mhpHSWpkk4quyTy5fMy\nds7NiMdd57DzlBVFRW5vQEmJO31FNOpO7ta3r1s+K+7dttMkkytpa1tOW9sympsX096+jFSqgM2b\nj+Kjj0aydOkYVqw4k1QqTmFhLX37Jhg+XDBmTAFnn92P4cP77xrJZVmwaBHOrJnEVr9IU3k1jeM1\nnJBBaclEogMup6jojM+csEc6kvjiOEsfWUrja434G/1sLN9Iz4t6cvbtZ1MYUWDGDFd1VErXSVx5\nJUQirFmzhmeffZYZM2YQDoeZMmUKl19+Ob27Mevdju8oRW3tw2zZ8iui0UkMGDAdn6/7+2lpcQet\nn3nGHSy++eYd2kiWFaeu7lG2bLmX0tKvUVX18z0P+jsOv96yhftqarirspLv9uqVv7hx26zbaPzb\nn7j1yUtp63UmIz88Hb3EvaNYscIdh7j0UteOXbpW29rcCayvugqmTev259sfPPbhY7yy+hVev/z1\ng3rcL4VzuOG1G6ieV80bP38DcCfokbbEX+gn1ZoiWBrEztqYMROhCs77w3nYjo0t83fgbm05Fra0\nd1nO2tmO5c7t/NMEgK7orsNQdDThOg+NnBMh10bHwECTGrrU3eLkajvXtnQM23Bry0DLauhZHSNj\noJv6jpLS0dM6RsrAaDcw2gz0Nh2/9BMwAvh8PpSAghJUUAMqSlDBCTmkw2lSoZRbgilS/hTtvnaS\nviRxPU6z2kyLaKGFFlqdVlrtVtrsNtos19lk7AyaonU4F0c6WE4WIVR8epiAUYjfV4zPH0XzlaL6\nynCMEtJaEQklQkwpIBKI0tMfolzX6WEY9OxUeuXq3j4fZbqOQJBMdk3iyyfv5RP3Wlrc3Iu6Orev\nuabGHd/p39+dOrqyckddVeWWnZ2HlA6pVDWJxIckEouIxz+grW05Uvahvv5oPvpoKP/85ygWLx5N\nPN4PaKCwsIb+/dsYOVLltNNKOP/8QfTo0SmhrakJ+dabpOb9mcbkLJpOhrYKm2LfWKKDplBadsHn\n5gPE1sWY88s5NL7SSM+GnjT3bqbf5f0Y+8MxGJ/Oh4cfdme4mzIFbrgBBg3CcRzmzp3LH/7wB158\n8UVOOukkpk6dyoUXXrgjnHYvyWab2bz5l2zd+gS9e19H//63oWndT9pbt87NP1u0CO6+GyZP3nGj\nblkxNm78H+rrn6F//9vp0+f6PWZcf9LeztRVqyhQVZ4YMoQBOU9z3/z7eO2lX/HIo5cTKziDUcvO\nwihzuwobG+Hii90n1eeec28wurBxI4wd6zrdvZ2Cbj9iWiaDHxrMC9984aBOCPSlcA5SSpYsWcLU\nqVNZtWoViqJgGAaXXHIJzzzzDNFolJaWFrLZLIFAgLa2tv1qg+3YXbqJdq47d0Vl7MwuxbRMli9c\nTtXoKkzL7XbKd0N16aqyUl3WpawUqWyKZDZJynLrZDZJKptCIAhqQQJqgIASICACdPw5AYJOEL/t\nJ2AFCGTc4k/7CaQD+Np9+JN+/HE//liuNPvxt/vxhXykS9MkS5O0FbfRVthGrCBGU7iJhkADjUYj\njVojdRvqyFZmaZNtJO0kilBQhYpEYjk2mmoQ9BUS8JUQDJTjC/ZC8/dE+nuQ1EpoUYtJqEX09Ifp\nbRj08fno6/N11H19PvrlamOnO3gpXeexebP7u9+4cRetP0IhGDjQ7Rc/6igYPHhHnXccjpOlvf1j\n3nhjBscc00Q8voBMZivh8Ikkk8exfHkls2cPZMmSYurqSkil+qDrdZSX1zN0aIZx4yJceOEARo0q\nRTg2fPABmTf/QnPNCzQObqBltCSiDCFadSXR3pd8biTPtg3beP1nr9P6civD2oZhVpkMuWYIg84x\n0P/0hKtAOmYM3HSTe5ETgmQyyUsvvcSTTz7JihUruOKKKxg5ciRTp07t1jmeTm9hw4af0tLyFgMG\n3EGvXlfvU/jr+++7PqxHD3dMuHPiWnv7Kqqrp2GaWxg8+DcUF5++231YjsM9NTXcs2UL362v585J\nkxBC8MyyZ3johVv546PfpkWMZ9SKc/D1znVBZd2nlvfegzlzdjMGPWeOGws7b97nZNMdGB5Z9Agz\nXp7B/DvnH7RjfimcwxWffsqcG2+kYfFizFgMPRzGMU1O//GPeeeuuwDoO3Iksbo6jECAO95/H00I\nDEXBEAJfrjYUpaOdr/2Kgj+3Pt/WhNjvWaz7ezAqa2c7nEW+tGfbac+071K3Zdpoz7aTMBO0Zdvc\nOtNGIpMgYSZIZBLEzThxM46CQoFeQIFWQFgJEyFCgSwgbIWJZCOEzTChVIj6NfWMiIwgFAsRaApA\nHMx2k6SaJFYeo75nPdtKttEQaaAp2ESL3kJciZMkicD9fm1po2s+Qr4SwoFyQqE++EP9UAJ9yPh6\n0axFaRARooaffj4fFX4/FT4f/f3+jnaF30+RpnX5f0npJuutWwfV1e6wQb5UV7sXjqFDd5RMZjbf\n+tYEevQAy3KdRCw2n3h8PonEIgyjN4WFJxMInMxHH1Xyxht+Fi3KUF0doqWlAiF8lJRsYejQFKee\nGuIb3xjA6JJGeP0FWj75A42ln9J0soJP7UW032VE+3+LUGjPmdJSShbMXsDbd72N8p7CifJE1NEq\nR19XSY/ULJTf/sa9Gt5wg/tEkfN269at46mnnuKxxx5j0KBBXHPNNUyePJnQZ8yfvTOJxGKqq/8d\ny2ph4MB7KCk5u/vnZhYeeAB++Us3N+KWW9zIuvxna2x8merqG4lGL6Kq6heo6u4TAZclElz47LOM\nGT+eR486imJd54VPX+AnL3yPVx//Dq3xUzh2+Zn4Knc8Jt5yixugNGvWbqS/H3nE7a6bP98dhziI\nmJZJ32l9mXn7TE7o3f1AgH3hS+EcLr7tNj58/XU2f/IJmmFw2lVX8Y/f/pbRkyax6p13MNvbsdJp\nVJ+PHiNHUnXuudiAIwS2EFiADVidlq3csgVkc8USggwgFQVdVTE6FZ+m4cvVfk3Dr6oEdB2/phHI\nlZCuE9J1gppGyDAI6zphXSdiGEQMgyKfjwLDoNDnI5KT0VAUZb87on1FSolpm8TNOLF0jJgZ61K3\npluJmW7dmm6lJd1CS6qlS521s5T4SijWiylWiimWxRRmCylIFhBJRIi0RFCaFKxWi1QiRSwao7Fn\nI/Ul9TSEG2jWmkmIBBmZ6ehzDhhhIoEyCkL9iEQqMSIDkIEBxI1e1Dh+EIL+eefh93e0+/v9VPr9\n9DQMlNx3nJdsWrVqR8lr/YEbeXPMMTBypBtPf/TRNoryMbHYPGKxucRi83CcJAUFp1BUdCqRyCl8\n+mkJr7xSx9y57axa5ae5uQIhelNWVsuIEWnOO9XggtAKSjY8SLPxAY3jFQiGiPa4iGjF5RQUnLxH\npdy2tjb+8sxfWHTvIobWDmW4GE7RuYUMObWByD+fQbzzD7jiClcyIjc5kWVZvPHGGzz++OPMnTuX\nyZMnc8011zB69Oi9Pg8aG//GunW3EAoNY+DAe/dJHnzTJrjxRtchP/ssHNdphtJstpm1a6+nrW0Z\nQ4fO2GPkVMq2+dH69fytsZGnhw7ljOJiXl/7Otf99UrefPpq4rUnMeqjs/BXuQ7CcVx/2dYGL7zg\ndj92+mDuCPa2bW6Y00GW+X74g4d5a91bvHLZKwfleF8K53DbbbexePFiZs2ahcjd1TuOw8SJE3n3\n3Xc7pCmEEEyePJnS0lJs23ZDVHMSGlLKXdbl13de7pDMcBwsxyFrWVi2TTa/zrLcuvN2O8lt5IuT\nL46DY1lIx0HmamzbPZMdB1QVoWkoquoWTUPNaz5pGkZOq8mn6xi6jt8wCBgGAZ8PI+dkOms47SzH\nsTtpDp/P10WK47PkOPIyHNpOd+i7w7RMmlJNNCWbdls3JhtpTDa67fZGGtsbacu2UaQWUSJLKM4U\nU9ReRDgWRokpWEmLZHGSRHGC1kgrrb5W4iJOUiaRSBShEPYVUBzqQ3FBJSVFQwkVDUOGBlIvg2w0\nTeK2TYXPR2UgQJXfT1UgQKXf39Eu0LQOVfG8zt/y5W759FN3IPy443aU4cNr0fX3iMXeJxZ7n3R6\nIwUFYygsHE9R0Xj8/tEsXLiOl17axJw5JmvXFpNMHoOmBamq2MaZfes4M/Q2A8ueJHtOO2YZlJZ8\nldJ+l1FScs4e5+f+6KOPmPHgDLY9v42v6l+l3Cin8hKNPvar6C89406fef317kQ4uZHZmpoannrq\nKX73u9/Rq1cvrrvuOiZPnkxwL+bNdhyTmpr72bz51/TqdTUVFT/dY2LgnpDSDcC66SZ3wHjn2d7q\n6/9EdfU0+vT5Pv37375HJ/lGUxNXr17N1J49mT5gAHM3v8e3/nQJbz95FYm6sRy74iz8VW4+SCbj\nzvhaWelGVHU5ZTMZmDDB/Y5uv71bn+WLkrbSVD5Qyaxvz+Lo8j1Hb+0vvhTOIW/runXrGDVqFCUl\nJTz00EMMHDiQ448/nmg0SkNDA7ZtEwwGWb9+PeXl5YfY8q7s3K1kS0mbbRPLZGjJZGg1TZpTKWKZ\nDK2ZDLF0mtZ0mlgmQ8w0iZkmcdMknk4TN00SpkkykyEgJWEpCTsOISkJOg4BxyEoJX7HwWfbGJaF\nYdvoto2SzZLtJM/RWX6jszRHXl6jc9txnC6aTMXFxR3SG3m9pj1JcEQiEQoKCjrqfBZ1YWEhQhU0\npZrY3r6d7cntHXVDewMNiQbqm+qpb62nKdlEc7aZVlrxWT5CqRCGY6AYCpbPIq25UV6mNLGljUAQ\n8UXoFenLgOhI+pWfQLTsRFK+XmxIp1mfTrMhlUJZvpzBY8dS6fd3OJBBgQCDAgF6qT7WVyssXQpL\nlrhl6VJ30PMrX3HnPh49Os6gQfNwnHdpbX2P9vaPiURG5wT/xlFQcDKtrVlefXUpL7+8jQ8/VNi2\nrQI4nvJgMycXr+D4nm9See4yep6ymGjpKZT2voTS0q/tVruovb2d5557jhf/90VOaDqBCdkJFA8N\nMGjkUgqXzWBOzWYm/Pu/u3kTuc5327aZOXMmjz32GAsWLOCKK67ge9/7HkP2YipU09zK+vW30dLy\nNlVVv6RHj293+2l39Wo3qnTkSPeC3TmvzzRrWbXqKiyrlWHDnu3ylNL5d1OfyfDtlStJOQ7PDxtG\nbeMyLppxPm8/eSXxrady7PIz8Q90d5xIuD7g6193taG6UFvr/uOefnpHJt9BYPbs2cxT5rGuZR1P\nfv3JA368L5VzmDRpEq+99hq//vWvmTZtGq+88gqzZ8/m3nvvpbKykkwmQ1FREZ/k+wgOIw5EAowt\nJTHLojmbpSlf59qN2WxH2Z7JsD2bpSGbpdWyKFRVehhGR+kcTdQ7F1HUy+ejZKcnhWw226HT9O67\n7zJixIgu8hs7y3DkJTg6S23E4/EOqY287Iau6x0SG/lSUlJCaWlpR4lGo0SjUcrKyohGoxgRg1gm\nRt3GOurW1rF181a2bdvG9sbtNCYaaSlsob6snqZgEwklQYZMl+9OV3QK/YX0L+hPeXM/Lpo0jVDR\nMDaZJuvSadalUlSnUjRkMlT4/QwLBhkeCjE8GGRoIIRva5AVi1UWLXIzh5cvd6Okxo6Fr3wlzdFH\nL6G8/E0SifdJJBbh9w+kqOhUiorOoKjoNLJZP/PnL+LFF1fz7rvtrK8uISzGYNq9OTk6hxPHz2Xk\nBX9n0BA/PftcTY8eV+xy1y6l5P333+fh+x8mNivG1B5T6d3Qm7rh/+AbhavRF76JuOQSt29nxIiO\n923atInHH3+cJ554guOOO45p06ZxzjnnfK4IYzy+kDVrrkdVQxx11KOEQsO7db4mk+4wyYIFbpfP\n8E5vl1JSW/sbNm26g8rKO+nV6xqEELv8bhwp+dXmzdxXU8MTQ4ZQlq7m4hnn8/bvpxDbNr6Lg6iv\ndxPQ/+u/3GjgLsyZ44ZULVjghrodBGbPns2Ir4xg8EOD+fj7H9M70v3Q4e7wpXAOt923mJqNy3n2\ngasQQqG872AkEjub4bJpD1PWu4L7/uNc0qk4A48Zw+U/vB+hCRRFoORqVRUoqkDVBIqqoGruOlVz\n25oq0HJtXVPQdAVdV9BUBV2IHUXZsWzk2vnBbkMI1AMwmL0/saWkKZulPpNxSzbLtkyGbZkMW02T\nrZkMWzMZ6kyTtOPQOxdB1McwdkQR+d0B4n4+Hz069efvC1JKkslkF4mNlpaWLhnSTU1NNDY20tjY\nyPbt29m+fTtNTU2Ew+EOh5F3GnlnUkABoViI0PYQ/k1+jNUG2USW1AkpPj32UxaVL2KNuoZt5jYS\nmQSOdADQFI0ifxHDosM4o/IMTqs8i9KSkaxNm3zS3s6n7e18kkyyLpWi0u/n2HCY0eEwRxth9I0F\nrFyksWCBO+bZ0uJqv40ZYzFqVDWDB7+B47xJLDaPQGAwxcVnUFr6NQoLx5HN2ixevJjXX/+AmS+3\n0/JJP1rl2RQYbYwbN5NTJ/2V004/mr4VN+w2oWzDhg089NBD/O2pv/FvFf/GKbFTiCjtVFX9g8KP\n/ogYNsTt27nggo4up3Q6zR//+EceeOABTNPkpptuYsqUKZ85gC2lTW3to2zadAe9en2Xioqf7rEb\nbE889ZSbYf3oo24Iamfa21eycuUVGEYvhg79/R7zIubFYnzr00/5Znk5XzcauGzGBbz9+8tpbTiD\n0SvPxtfXHY1eudKd6uHll13H3YX77nMHQ+bO3YuJq/cfN828iZAe4hdn/eKAHudL4RxmfvVDPm5c\nxq0Lr0FTNPoFB5B1MjSbjW6egsxiSwtD+Lh3yBNU+AaCI5EOCHtHjQPYEuEAtrtO5NfZIBxQLHed\ncEC1wBHgqLmiga3uVBSwcu2sCpaW21YHRxNILVfrIHWB1AToAgy3FrlaMRQUn0DxKaiGguJT0AwF\n1a+g+xT0gIbuVzD8Kr6Aij+g4QuoBIMqwaBOMKgSCusEDBV1Pw20JW2bOtOkNpOh1jSpyZUtpsmW\ndJrNpkncsujXKYpoQG4QuDLX7u3zfSHnsSccx6G1tZXt27fv4jQ6O5T8+oaGBkzTJFoYJeqLUmQV\nUdhWSFG2iD4Vfeg9sjeNxzayrGwZn6Q+oSZRQ8bOIF2xFfyan36RfhxdfjRj+47lzIHnooQrWdbW\nxrK2Npbm6mJN47hIhNHhMJXtEayVBaxapLFggWDJEje89tRTbU44YS3Dh/8dIZ7DNLdSVjaJsrKL\nKSw8DUXRyGazLF68hBeeXsryF2FVyxnIgM6pZ7/AGafOY+Ill9K7zyW7hJvG43GefPJJ7r/vfsYW\njuU75d8h/KFBv4Ef0Kv9RbR0A+L66+Hqqzu6nKSUvPfee9x///3MnTuXa665huuvv/4zk+tMcyvr\n1v078fgCjjrqMUpK/l+3/n+LF8NFF7nJa3fd1TV5zXEybNx4B9u2Pc2wYc/tcQKjpmyWK1auJGnb\n3Fqc5nvPX8Cbj36bRPI0Rq85D73UDZF67TV3rGPhQjeBsgMp3dTqYNDV4jhIN3UbWjZw4u9OZMO0\nDUR83RvD6Q6HrXMQQpwL3A8owO+llHfvZpsHgfNw1ZG+I6Vctptt5LJlrq11dRu56abzeemljzr+\nj0K45eyzK3nxxSUUFRV3rNtdySuy7t02EiFBSJlzJDLnXHa0cdzXsCVO1sHOSrKmTSbrkDVtslmH\njOkwf9lcRg0eQ9a0sTLOjmK6tW26xck4OKbM1Q7SlJBxwJQIUyIybq2YEjUjURKSklcAABCGSURB\nVE3QMhLdBD0DQkLWgIwfsj6wfALLL3D8AiegIAMCAgoiqKCEVNSQghZS0UMaRljFH9EIFOgEIxrh\nAp1IoUGkyECPaKgRFUV3HU/+cT9l22w2TTal02xKp9mYTrMhX1IpWi2LAX4/AwOBjpLvz6/0+3fJ\nYTiQpFIpGhoaqK+vZ9u2bdTX11NTXcPC2QuxW23qttVRn6gnJmNEA1F6DOiBb6SPRGWCWn8tSZL4\nFB82NmknDUCxv5iKogpG9xzNuQMnMrjveNZkYEkiwdK2NpYkEmhCcFwkwigjTMGGYuJLw3w8X2Pe\nPEHPnjBhQivHH/8PBg16GE37mGj0IsrLJ1NUNL7j4p9Om7zw0Bxee2Q7c+vHICIWp43/KyeM3sS5\nF13HkCE7BIZmz57NuHHj+L//+z/uuece2hvb+cnYn3DUuqMw1i6nstffCW+ejfjOFHeO0B477s6r\nq6t54IEHeO655zj//PO5+eabPzPKqbn5TVavvpaiogkMGnRvt+bp2L7ddQ6q6moQ7ixE29z8Fs8/\nfynnn/9D+ve/bbdS7raU/M/GjTyxdSv/WQa/fv4CXnnwalKhcYz69Dy0sDvA/atfuTJW773n+oIO\n2trcR4qLL4af/Wyvbd8XOneRTX5hMmP7juXmMTcfsOMdls5BuP/FNcCZQB2wCLhUSrmq0zbnATdI\nKb8qhDgJeEBKOWY3+5IjR0o2bfoW7e2zse0mVLUH5eV3UFg4lfzHWLeuiv79P0RRSpCSzyyOs/v1\nsOO1PdW2vet+HCdvKx1S4XkHI+VsdH0CjjMbw5jQRTZ8Z1nx3a1T1W4W4aDrWVQ1i6pZqEoWTdgo\nwkLFQpUWqmOhOjaqbaNaNpplo2UctKyNZjoYaQfDlBhpyfqWpYyWxxJIQTDpityaQcESdRlDS47H\nCSmQcxx6gUagSCdcYlAcNSgu90GhQkPIoSZgscGXYY2Rodo2WZtMUmOa9PH5GBQIMDgQ4KhgsKMe\n4Pej7oc7ub0Z6+m8jXQksU9irH1rLWvfX8v6ZevZXLeZ5pJmakpr2BjdSGNpI7JKouoqkWwEXdPJ\n6BniahwHh5AvxKCSQYzvP57LR1xOz9IRLG1v7+Iw2h2HYwNh+taU4nxYzOb5AZYtVDjmGJNx4xZy\n7LGPMGDAe2zYMJbzz7+VgoKTOrorpSOZ/fBCnn50PTNrJlBYvo3jq/7MgFFJzp90Kel0mjPPPNPd\nVkrmzZvH3XffzbJly5g+dTrjEuOIzVhNZeDPlLbORNz0fcStt3RJLW5ububxxx/nN7/5DZWVlUyb\nNo2vf/3ruxX+s6wE69f/mMbGlxg8+GHKyibt9XdvWfDjH7tjEM8+6ypddOatt/5KNPoAmlbAsGEz\n9phxPrOpie+sWsU3Cxze+fM3+Mt938OqGMOIpeei+BSkdENcLQuef36nh4T6ence6osucjXJcy/u\n73HCzvtbVLuIi/96MdU3VqOr+ygu9jkcrs5hDPAzKeV5ueXbANn56UEI8RjwrpTyz7nllcAEKWX9\nTvuSR0IXWGeHkXcgjgN33jmdH/94ese6fATrzss7R7fml/elWFbX9s7L2WzX1/LrOrfzy4sXT2fo\nsJ+REjZJslhkkDIDTgZVZlHJoJHBkFn8joXfsQg6NkHLJpyWhFsFkZgg0gaRdkkoLcmqgnZDI6Wr\npHSdpKLTZmi0+hWa/YLtfkljCJQSg1C5j2jPAJVRP0OK/RSGlC4Ks51LMOjmNnX+4U+fPp3p06d/\nof+t1WaRWJggNi9GbF6M1vmtJHokWDV6FfP7zGdFcAWb1E3oMZ3MugyGZWCUG5hlJqlQCsVR6FPQ\nh3FV47hsxGVMHDyRJstmSSLBh4kEi3Ilk4aqtT3RFkbZPCeEk3YoKb6eqVMFJ5zwPv37f5MePS7v\nEs1jx9t56+dv8NvXbP6x/hyOrpxLgfo8/U6IcNlllzBhwoSOC/oHH3zA9OnT+eSTT/jpbT9lYngi\nLfcvo3zVI5SKhcibf4B287WukFWObDbLSy+9xAMPPEBtbS3f//73mTp1KmVlu6rStra+x+rV/0Yw\nOIyKitu5997X9/q7f/llNwXhyivd63NnFRDHybJhw+3U1z9PRcVP6Nnzqt3qV21MpZiyahXb03HU\nWbfw/J2TUI47geHvnYmiK6TT7vjDKafAf/6nq9nVQUODm3X+ta+5/VxC7Jdz57OY8PQErj3+Wi4b\nsTvVwC/O4eocLgL+n5TymtzyFcBXpJQ3ddrmVeAXUsp/5pZnAbdKKZfstK8jwjnsiQN9gh1ovoj9\nGcehLpmlpj1DbSpDbTJDXdqksdUk0WSSajWxWjMQtyiOCcpiKtEWhaIWQbhVEmqRBGM2oaRNWlVo\n1jUSmk67ZtCuGrQpPmIYNDs+tlsGW02DurRBoEjtEOxrbp7OmDHTKS11uy2iUbeUlXWt90IJuwNp\nS9qWt9E6p9Wd7Of9GDIqqT6nmvmD5jMrO4tYJkaVqMK/3c+2jdvY3LoZq4eF098BFQqsAo4pP4Yz\nhpzBeSPP46R+J1GftVgYjzM/HuefsRiLV9poDz1PxLmL1pU6Y07+mHEnPcFJJ1UzaNBoysrOoLBw\nXMeAcGzFGp7+3zeZ8cEIVteM4riKWRSqr1HxlSDfuPwShg4dSo8ePVi4cCHTp09n0aJFTJw4kYtG\nXcQxcxUKZj5KVM7DPGYC6s3X4vv2xC6JYh9++CEPP/wwL7/8Mueddx7XXnst48eP7xKAYdsptm79\nHVu23MMzzwjuuutRSkrO3asgjYYGd2xg/XpXBmnUqK6vx+MfsGnT/5BILKFfv1vo3fuaXQbDpZTM\nqK/nB2tXEfnkDV78QSkpRhIdI4l+pxLztMHc8hOFmTPdMNdrr3UVSYTAFWk66yw3vPXuu5l+xx0H\n9Lf79zV/57/e/S8WX7P4gASxeM7hMCd/cT3YWu77iz05h/35eaSUtFhWx6B3baeB782mSU0yRWuj\nSahF0ieuUtoqKGiWBJsdwk2SomYobYGSZihsAUuHlmJBaxG80vg05/SaipSuLLoEHCkg1yWII1jX\ntoSB4eNASIRCfvqPbuGOTeGOQUnYHq5hXY+lbCxbwYbocjJait4tR6E6qhvtIKQ72C12Pre7Hrxx\nUS3RE/tgS0Fb1k+b5SNla9hSRVOzGEYaTbW6vMuqi6H13ll9bv8hpSSTlWSyNgCKsvsvzF5egzqq\n725f21ucbXGUngdX6iLP/rC/M3v6LMdu78+imX/db8fJc7g6hzHAdCnlubnlvelWWgWctrtupQNm\nqIeHh8e/MPviHLrxEL1PLAIGCSEqgK3ApcDOHWuvANcDf845k9adHQPs24fz8PDw8Ng3DqhzkFLa\nQogbgLfYEcq6UghxrfuyfFxK+boQYqIQoho3lLV7GsMeHh4eHvudIyYJzsPDw8Pj4HFwtWq/IEKI\nUUKI+UKIpUKID4QQB0cQfT8hhPiTEGJJrmwQQiz5/HcdXgghbhRCrBRCfCSE+OWhtmdvEUL8TAhR\n0+n7P/dQ27QvCCH+QwjhCCH2PsvsMEAI8d9CiOW53+4bQohdlQQPY4QQv8qd98uEEC8KIQ7N6Pg+\nIoS4WAjxsRDCFkIc9/nvOMKeHIQQbwL3SCnfyiXP3Sql3P00Uoc5Qoj/xR1fufNQ27K3CCEmAD8B\nJkopLSFEVErZeIjN2iuEED8DElLKew+1LfuKEKIv8AQwBDheStl8iE3aa4QQYSllW659IzBcSvm9\nQ2zWXiOEOAt4R0rp5G6KpJTyx4farr1FCDEEVzjot8APd44G3R1H1JMD7ofLx+YVAbWH0JYvyjeB\nPx5qI7rJ94BfSiktgCPFMXTiSA9quA+45VAbsS/kHUOOEO5v+YhBSjlLSpm3eQGw/2JbDwJSytVS\nyrV04zdwpDmHHwD/K4TYDPwKOGI8d2eEEKcC26SU6w61Ld3kKGC8EGKBEOLdI61bD7gh1y3whBDi\nwCUAHACEEBcAW6SUHx1qW/YVIcSdud/ut4CdZ1c4krgKmHmojTjQHOhQ1m4jhHgb6KzPK3Bzlm4H\nzgKmSSn/JoS4GHgS6P7ktgeQz7JfSvlqbt1lHKZPDZ9h/09xz5diKeUYIcSJwF+AqoNv5e75nHPn\nEeC/pZRSCHEncC9w9cG3cs98znf/E7qe64fdU9DnnftSyp8CPxVC/Ai4EZh+8K3cM3vz2xVC3A5k\npZTPHwITP5O9vPbs/f6OsDGHVillUaflmJTySLsDVHG7w46TUtYdanu6gxDideBuKeWc3HI1cJKU\nsunQWtY9cnk3r0opRx5qW/YGIcQxwCwgifuD74t7Dn1FStlwKG3bF4QQ/YDXpZQjPnfjwwghxHeA\n7wJnSCnNQ2zOPiGEeBf4j3/FMYdaIcRpAEKIM3EVX480zgZWHmmOIcffgDMAhBBHAfqR4hh2io75\nBvDxobKlu0gpP5ZS9pRSVkkpK4EaYPSR5BiEEIM6LV4IrDxUtuwLuei2W4ALjlTH0Im9euo87LqV\nPofvAg/m7r7TwDWH2J59YTKHaZfSXvAU8KQQ4iPABKYcYnu6w6+EEMfiDoRuBK49tOZ8ISSHYbfS\n5/DL3A2FA2wCrjvE9nSXhwADeDsnjrdASvn9Q2vS3iOEuBD3M0SBvwshluXVsvf4niOpW8nDw8PD\n4+BwpHUreXh4eHgcBDzn4OHh4eGxC55z8PDw8PDYBc85eHh4eHjsguccPDw8PDx2wXMOHh4eHh67\n4DkHj38phBCJI2SfG/ZGdvtAHNvDY2/wnIPHvxoHInHnUO7TS0TyOCR4zsHjXx4hRIUQ4h85Rda3\nc/MiIISoyk0etVwI8T/duUsXQnwtp067WAjxlhCiLLf+Z0KIp4UQ7+WeDiYJIe4WQqwQQryey+4H\nN8P5R7n1C4QQVbn3DxBC/DNvU6fjhYQQs4QQH+Zeu2D/fUMeHrviOQePLwMPAU9JKY8Fns8tAzwA\n3CelHIWrV9Sdu/T3pZRjpJTHA38Gbu30WhUwAfg68Czwj5zIXxr4aqftWnLrf5OzJW/Tb3I2be20\nbRq4UEp5Aq6+1T3dsNXDo9t48hke/1IIIeJSyoKd1m0HekopbSGEBtRJKcuFEI1AeW52rwhQu/N7\nP2Ofx+BeoHsBOrBBSjkxN+NcRkr5C+GK8CSllIHce+4AmqSUDwohNgCnSyk35mzaKqUsy9nUI2dr\nh025be4DxuPqEx0FVB5J4nseRxbek4PHl4G9uQPqrpDdQ8CDuTv/6wB/p9dMcOeRBLKd1jt0FbuU\nn9PubNPluKJpo6WUo4GGnY7p4bFf8ZyDx78au7vI/xN3giWAK4D3c+35wMW59qXd3GcBkJddv7Kb\n780zudOx5+faczvZenmnbQuBhtxTzulAxWfs18PjC3OkSXZ7eHwegdxUlPlZsO7FnXXsaSHED4Ht\nwNTctj8AnhVC/AR4E4h1Y5/TgReEEM3AO8CAPbx3T08tEigWQizHHU/IO4SbgeeFELcCL3fa/jng\n1dz2H3KEzYfgceThjTl4fGkRQgSklKlcezJwqZRy0iE2y8PjsMB7cvD4MnO8EOJh3CeCFtyJ4z08\nPPCeHDw8PDw8doM3IO3h4eHhsQuec/Dw8PDw2AXPOXh4eHh47ILnHDw8PDw8dsFzDh4eHh4eu+A5\nBw8PDw+PXfj/qL1TZoIQrUIAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "glmnetPlot(fit, xvar = 'lambda', label = True, ptype = '2norm');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The options are `xvar`, `label` and `ptype`, in addition to other ordinary graphical parameters.\n", + "\n", + "`xvar` and `label` are the same as other families while `ptype` is only for multinomial regression and multiresponse Gaussian model. It can produce a figure of coefficients for each response variable if `ptype = \"coef\"` or a figure showing the $\\ell_2$-norm in one figure if `ptype = \"2norm\"`\n", + "\n", + "We can also do cross-validation and plot the returned object." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "image/png": "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\nRK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "warnings.filterwarnings('ignore')\n", + "cvfit=cvglmnet(x = x.copy(), y = y.copy(), family='multinomial', mtype = 'grouped');\n", + "warnings.filterwarnings('default')\n", + "cvglmnetPlot(cvfit)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that although `mtype` is not a typical argument in `cvglmnet`, in fact any argument that can be passed to `glmnet` is valid in the argument list of `cvglmnet`. We also use parallel computing to accelerate the calculation.\n", + "\n", + "Users may wish to predict at the optimally selected $\\lambda$:" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 3., 2., 2., 1., 1., 3., 3., 1., 1., 2.])" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cvglmnetPredict(cvfit, newx = x[0:10, :], s = 'lambda_min', ptype = 'class')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Poisson Models" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Poisson regression is used to model count data under the assumption of Poisson error, or otherwise non-negative data where the mean and variance are proportional. Like the Gaussian and binomial model, the Poisson is a member of the exponential family of distributions. We usually model its positive mean on the log scale: $\\log \\mu(x) = \\beta_0+\\beta' x$.\n", + "The log-likelihood for observations $\\{x_i,y_i\\}_1^N$ is given my\n", + "$$\n", + "l(\\beta|X, Y) = \\sum_{i=1}^N (y_i (\\beta_0+\\beta' x_i) - e^{\\beta_0+\\beta^Tx_i}.\n", + "$$\n", + "\n", + "\n", + "As before, we optimize the penalized log-likelihood:\n", + "\n", + "$$\n", + "\\min_{\\beta_0,\\beta} -\\frac1N l(\\beta|X, Y) + \\lambda \\left((1-\\alpha) \\sum_{i=1}^N \\beta_i^2/2) +\\alpha \\sum_{i=1}^N |\\beta_i|\\right).\n", + "$$\n", + "\n", + "Glmnet uses an outer Newton loop, and an inner weighted least-squares loop (as in logistic regression) to optimize this criterion.\n", + "\n", + "First, we load a pre-generated set of Poisson data." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [], + "source": [ + "# Import relevant modules and setup for calling glmnet\n", + "%reset -f\n", + "%matplotlib inline\n", + "\n", + "import sys\n", + "sys.path.append('../test')\n", + "sys.path.append('../lib')\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", + "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", + "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", + "from cvglmnetPlot import cvglmnetPlot; from cvglmnetPredict import cvglmnetPredict\n", + "\n", + "# parameters\n", + "baseDataDir= '../data/'\n", + "\n", + "# load data\n", + "x = np.loadtxt(baseDataDir + 'PoissonExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'PoissonExampleY.dat', dtype = np.float64, delimiter = ',')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We apply the function `glmnet` with the `\"poisson\"` option." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [], + "source": [ + "fit = glmnet(x = x.copy(), y = y.copy(), family = 'poisson')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The optional input arguments of `glmnet` for `\"poisson\"` family are similar to those for others.\n", + "\n", + "`offset` is a useful argument particularly in Poisson models.\n", + "\n", + "When dealing with rate data in Poisson models, the counts collected are often based on different exposures, such as length of time observed, area and years. A poisson rate $\\mu(x)$ is relative to a unit exposure time, so if an observation $y_i$ was exposed for $E_i$ units of time, then the expected count would be $E_i\\mu(x)$, and the log mean would be $\\log(E_i)+\\log(\\mu(x)$. In a case like this, we would supply an *offset* $\\log(E_i)$ for each observation.\n", + "Hence `offset` is a vector of length `nobs` that is included in the linear predictor. Other families can also use options, typically for different reasons.\n", + "\n", + "(Warning: if `offset` is supplied in `glmnet`, offsets must also also be supplied to `predict` to make reasonable predictions.)\n", + "\n", + "Again, we plot the coefficients to have a first sense of the result." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "image/png": "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\nIIZhGEaL+P82rrVwmcP3yQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "glmnetPlot(fit);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Like before, we can extract the coefficients and make predictions at certain $\\lambda$'s by using `coef` and `predict` respectively. The optional input arguments are similar to those for other families. In function `predict`, the option `type`, which is the type of prediction required, has its own specialties for Poisson family. That is,\n", + "* \"link\" (default) gives the linear predictors like others\n", + "* \"response\" gives the fitted mean\n", + "* \"coefficients\" computes the coefficients at the requested values for `s`, which can also be realized by `coef` function\n", + "* \"nonzero\" returns a a list of the indices of the nonzero coefficients for each value of `s`.\n", + "\n", + "For example, we can do as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.61123371],\n", + " [ 0.45819758],\n", + " [-0.77060709],\n", + " [ 1.34015128],\n", + " [ 0.043505 ],\n", + " [-0.20325967],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0.01816309],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ]])" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "glmnetCoef(fit, s = np.float64([1.0]))" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 2.49442322, 2.54623385],\n", + " [ 10.35131198, 10.33773624],\n", + " [ 0.11797039, 0.10639897],\n", + " [ 0.97134115, 0.92329512],\n", + " [ 1.11334721, 1.07256799]])" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "glmnetPredict(fit, x[0:5,:], ptype = 'response', s = np.float64([0.1, 0.01]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We may also use cross-validation to find the optimal $\\lambda$'s and thus make inferences." + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "warnings.filterwarnings('ignore')\n", + "cvfit = cvglmnet(x.copy(), y.copy(), family = 'poisson')\n", + "warnings.filterwarnings('default')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Options are almost the same as the Gaussian family except that for `type.measure`,\n", + "* \"deviance\" (default) gives the deviance\n", + "* \"mse\" stands for mean squared error\n", + "* \"mae\" is for mean absolute error.\n", + "\n", + "We can plot the `cvglmnet` object." + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAElCAYAAADtFjXiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXmYXFW1t99fCDIkhqBIwiDpEEBxIqDgEIZmCIL3UxD5\nPi92JA0IDhhzQVBQQncTrgLm4oDiFSUJuQk4c0FkipIKEgUioSFABEy6EwQCDkxJQEOyvj/qVFOp\nrqo+1V2nTu2q9T5PPXX2qV3n/Gqns9fZa6+9tswMx3Ecp/kYlrYAx3EcJx3cADiO4zQpbgAcx3Ga\nFDcAjuM4TYobAMdxnCbFDYDjOE6T4gbAqSmSNklaJukhSfdLOluS0tY1GCR9QdIjkv6n4Pxhkp6P\nfuf9km5P6P5zJJ2QxLWd5mB42gKcpmO9mR0AIGkn4DpgFNA51AtLGmZmm4d6nQr4LHCkmT1V5LM7\nzewjpb4oaSsz25ScNMcZGB8BOKlhZn8DzgA+D9kOXNJlku6R1C3p9Oi8JF0ZPW3fJunXuSdfST2S\nLpH0R+BESXtKukXSUkmLJe0T1dtJ0s+ja98j6f3R+cOip/Rlku6TNKJQZzRKWS7pQUlfiM59H9gT\nuEXS9CI/r9+oJnpi/76ku4FLJW0v6WpJd0f3/ki5dog++66kFdGoYue880dGv+EBST+StHVe+3wt\n+o33Stpf0q2SHpf06cr/1ZyGwsz85a+avYAXi5z7B/Am4HTgK9G51wFLgXHAx4CbovNjovonROUe\n4Jy8a/0GmBAdHwT8NjpeAHwgOn4z8Eh0fCPw/uh4e2BYgbYDgAeAbYERwEPAftFnq4Adi/yew4Dn\ngWXR6/zo/Bzgxrx6/wl8IjreAXgU2K5MO3wUuC06vwvwHHACsA2wJu93XwN8Ia99zoiOLwe6o9+5\nE7A27b8Hf6X7cheQU08cDbxT0v+NyqOAvYGDgZ8BmNkzkhYVfO8nANHT+weAn+XNK2wdvR8F7Jt3\nfqSk7YElwDclLQB+aWZPFlz7YOB6M3sluscvgUPIGgVR5Ek/opQL6GcFv/fDks6Nyq8D9ijTDoeS\ndZlhZk9L+m30+VuAVWa2MipfA3wO+E5U/lX0vhwYYWYbgA2SXpE0ysxeLPEbnAbHDYCTKpL2BDaZ\n2V+jznmamS0sqPNvA1xmffQ+DHjOojmGwlsB7zWzjQXnL5V0E/BvwBJJR5vZY5X/ktisLyh/zMwe\n30Jo/HZQieNC/hm9b847BjC8D2hqfA7AqTV9HZWkNwHfB66ITt0GfE7S8OjzvfOe0k+M5gLGAK3F\nLmxmLwE9kk7Mu8e7osPbgel55/eL3vc0s4fN7DKyrpa3Flz2d8DxkraNRhgfBe4c1C/vz23AF/I0\nTcw7X6wd7gQ+Hs0R7AIcHtV/FBgXGVOATwKZKml0Ghi3/k6t2VbSMrLujo3APDP7ZvTZj4AWYFn0\nFPwscDzwC+AI4GHgCeA+4IXoO4XpbNuA/5Z0Adm/7x8DD5Lt/L8n6QFgK7Kd6eeA/5B0OLApuv4t\n+Rczs/slzSVrHAy4ysweLHHvgSisfzHwLUkPkjWMPcBHSrWDmV0vKdcOa4DfRxr/KekU4OeStoq0\n/iCGRk8F3OTIzP8GnPpH0ggzWy/pDcA9wCQzezZtXY4TMj4CcELhJkmjyU7qXuSdv+MMHR8BOI7j\nNCk+Cew4jtOkuAFwHMdpUurGAERL4p+JIiJy5/aT9Ie8ZezvSVNjOYrpj85Pi5buL5d0SVr6KkHS\n9Ejv8lzqg1CQtE9eaof7Jb0Q4G/YQdLPor+bhyW9N21NlRCFqS6TdGPaWiql1P/jUKhUf90YALLL\n5D9YcO4yoMPM9gc6gG/UXFV8+umX1Ap8GHinmb0TmJWCroqQ9HbgNOA9wETg/+TFl9c9ZvaYme0f\nLQZ7N9mFV9enLKtSvg3cbGb7AvsBK1LWUynTgUfSFjFIivVDIVGR/roxAGZ2F9ncJvlsJpsjBWA0\nULhMv24oof+zwCVm9mpU5281F1Y5+wL3mNk/LZut8k6y+WZC5ChgpZk9kbaQuEgaBRxiZnMAzOzV\nkFI1SNod+BDZtQzBUeL/cTBUqr9uDEAJzgJmSVpDdjRwfsp6KmUf4FBlsz0uqmcXVh4PAYdI2jFa\nffohssnTQuTjRLlzAmI88DdlM4cuk3SVpO3SFlUB3wTOxReZBUG9G4DPAtPNbA+yxmB2ynoqZTjZ\nbJHvA74E/DRlPQNiZn8CLgUWAjcD95NdJRsUUTrkj7Bl8rUQGE42A+n3IjfWBuC8dCXFI8pV9IyZ\ndVM+UZ5TJ9S7AZhqZv8LYGY/J5veNySeAH4JYGZLgc2S3piupIExszlm9h4zayWb1jjJ5GhJcSxw\nn5n9NW0hFfIX4Akz+2NU/jlZgxACk4CPSFpFduR1uKR5KWtyylBvBqDwqeFJSYdBdsML6r8jKtT/\nv2Rz2KDsxiRbm9nf0xBWCVGSNiTtQTb52bXpKhoUJxGe+wczewZ4Ivp7ATiSQCZUzewrZraHme0J\n/Dtwh5mdnLauQRD66CW2/rpJBSHpWrJZHt8Y+fw7yG6M8Z0owdUrZHePqktK6J8NzJG0nGwa3lD+\nM/wiyrmzEfhcSJOQANHcxVHU8d/LAHwBWBC5sVYBp6Ssp2ko9v84NyEfApXq91QQjuM4TUpNXECF\nC0OiCJPbJT2q7B6vOwx0DcdxHKe61GoOoHBhyHnAb8zsLcAdhBfe6TiOEzyJG4ASC0OOI7tvKdH7\n8UnrcBzHcbakFiOAYgtDxkTRDpjZWmDnGuhwHMdx8kjUABRZGFIKn4l2HMepMUmHgeYWhnwI2A54\nvaT/AdZKGmNmz0gaS3bP035IcsPgOI4zCMxswLUAiY4ASiwM+STwK6A9qjYVuKHMNVJ5dXRU4xod\nqemvThskq78abextX58v15/uKy5prQS+BJgs6VGyKx3rLk9+V9fQr9Hb2zv0i6RI0vqr0cal8LZP\nF9cfBjVbCWxmi4HF0fE/yK7UdBzHcVKi3nIBNRTt7e1pSxgSIesPWTu4/rQJXX9c6joVhCRLS58E\nddw0DYG3seMkgyQs7UngZieTyaQtYUiErD9k7eD60yZ0/XFxA1CCjo60FTQ+3saOky7uAnIcx2kw\n3AXkOI7jlMUNQIKE7kcMWX/I2sH1p00S+nt7e8lkMmQyGebOndt3nOaag7rZEcxxHKeRaWlpoaWl\nBYCurq66CDX1OQDHcZwa09XVRUeCURA+BzBEOjvTVtD4eBs7Trq4AShBNfLUuB+0PEnmAvK2TxfX\nHwZuABzHcZoUnwMoeW9PU5A03sZOs1IvcwAeBeQ4jpMAvb29fSGevb29fRFAufd6wF1ACRK6HzFk\n/SFrB9efNtXQ39LSQmtrK62traxevbrv2A1AAHiemuTxNnacdPE5AMdxnIQp9PnXyxyAjwAcx3Ga\nFDcACeJ+0PQIWTu4/rQJXX9cEjUAkraRdI+k+yUtl9QRne+Q9BdJy6LXMUnqcBzHcfqTaBiomf1T\n0uFmtkHSVsASSbdEH19uZpcnef+0aW1tTVvCkAhZf8jawfWnTej645K4C8jMNkSH25A1OLlZ3QEn\nKNLE89Qkj7ex46RL4gZA0jBJ9wNrgYVmtjT66POSuiX9SNIOSeuoFM8F5LmA0sT1p0ul+usx138c\najEC2Gxm+wO7AwdJehtwJbCnmU0kaxga2hXkOE5jE8Kir2LULBWEmb0oKQMcU+D7/yHwq1Lfa29v\n72vE0aNHM3HixD7/XM5K12s5d65e9NSbfsiQySSjv7W1NfX2c/31o6eW+nPUUm8mGnlAZakmEl0I\nJmknYKOZvSBpO+A24BJgmZmtjeqcBRxoZp8o8n1PBtfAeBs7jUixRV7NuhBsF2CRpG7gHuA2M7sZ\nuEzSg9H5w4CzEtaRCoVPBKERsv6QtYPrT5vQ9ccl6TDQ5cABRc6fnOR9q4HnqUkeb2PHSRdfCVyC\naoQo5vvSQyRp/UmGgXrbp4vrDwPfD8BxHKdCQsj1HwcfASRI6H7EkPWHrB1cf9oMpD/UsM9C3AA4\njuM0KW4AEiR0P2LI+kPWDq4/bULXHxc3ACXwPDXJ423sOOniBqAEngvIcwGlietPl3z9oeb5iYNH\nATmO45ShpaWlb3K3q6uL9vb2VPVUEx8BJEjofsSQ9YesHVx/2oSuPy5uABzHcZoUNwAJ0kh+0NAI\nWTu4/rQJXX9c3ACUwPPUJI+3seOkixuAEnguIM8FlCauP11C1x8XNwCO4zhNihuABAndjxiy/pC1\ng+tPm9D1x8UNgOM4TpPiBiBBQvcjhqw/ZO3g+tMmdP1xcQNQAs9Tkzzexo6TLm4ASuC5gDwXUJq4\n/nQJXX9cEjUAkraRdI+k+yUtl9QRnd9R0u2SHpV0m6QdktThOI7j9CdRA2Bm/wQON7P9gYnAsZIO\nAs4DfmNmbwHuAM5PUkdahO5HDFl/yNrB9adN6PrjkrgLyMw2RIfbkM0+asBxwDXR+WuA45PW4TiO\n42xJ4gZA0jBJ9wNrgYVmthQYY2bPAJjZWmDnpHWkQeh+xJD1h6wdXH/ahK4/LonvB2Bmm4H9JY0C\nrpf0drKjgC2qlfp+e3t7Xy7u0aNHM3HixL7hWe4fKYlyR8fQr9fd3Z2YvlqUk9Y/dWqGTKZ+fq+X\nvQzZ/P/d3d10d3ezdu1ajjnmGADWrl1LT08POXL1ByrXQn8m2qwmpz82ZlazFzAD+CKwguwoAGAs\nsKJEfXMcx0mLzs7OsuVK6/SuWmWdbW32yZYW62xrs95Vq6qo9jWivnPAPjnREYCknYCNZvaCpO2A\nycAlwI1AO3ApMBW4IUkdjuM4abO6p4crJk+ma+VKRgDre3vpuPtupi1cyLjx41PRlPQcwC7AIknd\nwD3AbWZ2M9mOf7KkR4EjyRqFhqNwSBgaIesPWTu4/rRJQv/cGTP6On+AEUDXypXMnTGj6veKS6Ij\nADNbDhxQ5Pw/gKOSvLfjOE49sfnJJ/s6/xwjgM1PPZWGHMBXAidKbrImVELWH7J2cP1pk4T+Ybvt\nxvqCc+uBYbvuWvV7xcUNQAk8T03yeBs7zcTHzp/BlB2G9xmB9UDHhAm0z5yZmiY3ACXwXECeCyhN\nXH+6JKF/xk238rsTDmZWWxsnt7Qwq60t1QlgqME6AMdxnGbnuZc3c8OGr/GL037LRye9g66uLjrq\nYFNsNwAJ4n7Q9AhZO7j+tKmW/tU9PcydMYM/37ScD4zZiwM+UzgNnC5uABzHcRKgX9z/C9AxeTLT\nFi5MW1ofPgeQIO4HTY+QtYPrT5tq6K/HuP9C3ACUoA7ccw2Pt7HTyNRj3H8hbgBKUI0QRfeDlifJ\nMFBv+3Rx/fUZ919I7DkASdvba7n9Hcdxgqe3t5fe3t6+41wmzZaWlsqyahZh7EemcvLPMsz7V3Yk\nkIv7nzZzJnPnzRvStavFgCMASR+Q9Ajwp6i8n6QrE1fWALgfND1C1g6uv1a0tLTQ2tpKa2srq1ev\n7jvOGYWh0PWHK1k/vb2u4v4LiTMC+CbwQbIZPDGzByQdmqgqx3GcgJn/2/t4Zut7ufaCa3nDqO3q\nJu6/kFhzAGb2RMGpTQloaTjcD5oeIWsH1582Q9X/xZs6OeFN5/GGUdtVR1BCxDEAT0j6AGCStpZ0\nDtkNXRoaz1OTPN7GTiOxuqeHrilT6L5qNqNv+y0zjp2ctqQBiWMAPgOcCewGPAlMjMoNjecC8lxA\naeL606VS/blFX+csWMD1T61h2YqXmXf8/2F13haS9ciABsDM/mZmbWY2xsx2NrMpZvb3WohzHMcJ\ngRAWfRUjThTQNZJG55V3lDQ7WVmNQbP7QdMkZO3g+tOmUv0hLPoqRhwX0LvM7PlcwcyeA/ZPTpLj\nOE5YhLDoqxhxDMAwSTvmCpLegCeRi0Wz+UHriZC1g+tPm0r1H3nGTE4eNqGuNnuJQ5yO/L+AP0j6\nGSDgROA/41xc0u7APGAMsBm4ysyukNQBnA48G1X9ipndWqn4JKnDkN2Gw9vYaQQ2m3HR13fjgC8u\nZNZTM1i5ZAkTJk1i2syZdbXoqxgDGgAzmyfpPuDw6NQJZvZIzOu/CpxtZt2SRgL3ScrlQr3czC6v\nXHJt8FxAngsoTVx/usTRn8v1/8ffLubJEXO48tsZ9tpnft0u+ipGXFfOn4DncvUl7WFmawb6kpmt\nBdZGx+skrSAbTgrZ0YTjOE7NKJf7pxL65foHOj5UX7n+4xAnCmga8AywELgJ+HX0XhGSWsiuIbgn\nOvV5Sd2SfiRph0qvFwLN5getJ0LWDq4/KUrl/ik0AAPpDzXss5A4I4DpwFuGEvsfuX9+DkyPRgJX\nAheZmUm6GLgcOK3Yd9vb2/v+cUaPHs3EiRP7hme5f6R6LXd3d9eVnmbT72Uvlyv39PSQyWRKljOZ\nDD15C7nyy5uffJKl0fnW6H0psOrhh9lz771r/nsymQxz584FKhzNmFnZF7AIGD5QvTLfHw7cSrbz\nL/b5OODBEp+Z4zhOEnR2dpYtl6vz6aOPt3VglvdaB9bZ1lbRdZIi6jsH7J/jhIGuAjKSzpd0du4V\n38QwG3jEzL6dOyFpbN7nJwAPVXC9muB5apLH29gJkeefh1tW/BfTd94juLDPQuIYgDVk/f+vA16f\n9xoQSZOANuAISfdLWibpGOAySQ9K6gYOA84alPoE8VxAngsoTVx/uhTqzyV6WzlnLse/fQpHHiFm\n3J2p61z/cYgTBjro/6ZmtgTYqshHdRXz7ziOU4r+ET+9XPi7u4GFdMwPK+yzkDhRQG+S9A1JN0u6\nI/eqhbjQyU3WhErI+kPWDq4/bfL1F4v4uWhVeBE/xYjjAlpAdh3AeKAL6IW+CXDHcZyGJtREb3GI\nYwDeaGZXAxvNbLGZnQockbCuhqDR/KAhEbJ2cP1pk68/1ERvcYhjADZG709L+jdJ+wNvSFBTXRCo\nSy8ovI2dEGifOZNP7fiG4CN+ihFnIdjF0UrdLwJXAKOow6idauO5gDwXUJq4/nTJ1z9mtzfzsxO3\nZrueY3n1zyuCSfQWhzhRQLm0Dy/wWkI4x3GcpqDrupvYfvsJzF54c9ARP8Uo6QKS9KXo/QpJ3yl8\n1U5iuDSSHzQ0QtYOrr8a9Pb2kslk+tIk5I5zyeDKka//qvuvZMpbP5ec0BQpNwJYEb3/sRZCHMdx\nqklLS0tfXpyuri7a29srvsbf/j6aV3rfwyX/eWJ1xdUJJQ2Amf0qOlxuZstqpKehaCQ/aGiErB1c\nf9qMHzeOrilT6PnVCibvvi/PPfsUoxrA519InCig/5K0QtJMSe9IXFGd4Hlqksfb2KlHcit/z1mw\ngJteXMaCRxZwxeTJrM7LDNooDGgAzOxwspO/fwV+IGm5pAsSV5YyngvIcwGlietPj7kzZnBkA+T6\nj0OcEQBmttbMvgN8BugGLkxUleM4TkpsfvJJtis41ygrfwuJkwtoX0mdkh4iuw7g98DuiStrAEL3\ng4asP2Tt4PrTZNhuu3FgwblGWflbSJwRwGyy+wEfbWatZvZ9M3s2YV2O4zipcHLXRUzZYZuGXPlb\nSJw5gPcDVxFzDwDnNUL2g0LY+kPWDq4/TX6ybCU3feCNXHbSJ4LO9R+HOC6gD5P1+98alSdKujFp\nYWnTQIv96hZvY6ce+frvZ3LsW9rpunYBE9rb6Zg/vyE7f4jnAuoEDgKeBzCzbrKpoRsazwXkuYDS\nxPWnw3duWMyGYU/x00sTDFGrI2JlAzWzFwrOWRJiHMdx0qQrM5Mp477Ctq+LkyczfOIYgIclfQLY\nStLeknKRQM4AhOwHhbD1h6wdXH8tye33+8h/X8vYnzzPuZMnBaV/KMQxANOAtwP/BK4DXgT+I87F\nJe0ebSH5cLSA7AvR+R0l3S7pUUm3RemmHcdxakr+qt+frH2Me5++j9kf/jfWPv102tJqQpx00BuA\nr0avSnkVONvMuiWNBO6TdDtwCvAbM7tM0peB84HzBnH9uiZUP2iOkPWHrB1c/2Do7e3ty/TZ29vb\nlwgu916MYvv9dq1cyaxf/xpOOikxfePGjesbZeQnras1ZQ2ApKnAdOAt0akVwHfMbF6ci5vZWmBt\ndLxO0gqyi8iOAw6Lql0DZKgzA9DZ6blqksbb2Kkmg8n+Wcv9ftPs6EtRbj+AqWRdPV8EdgV2A74E\nTJf0yUpvJKkFmAjcDYwxs2egz0jsXOn1ksZzAXkuoDRx/bWh1H6/q7faKg05NafcCOCzwEfNrDfv\n3B2SPgb8GPifuDeJ3D8/B6ZHI4HCKKKSUUXt7e19VnP06NFMnDixb3iZ+yOr13J3d3dd6ak3/ZAh\nk6mf3+vl5ir39PTwwWM/xCnX38GcDU+zFHgZ+O2ECRxz6qlkMhl68jKAFivnU6pci9+TiTa9gfIu\nr36YWdEX8MhgPitSdzjZRWTT886tIDsKABgLrCjxXUuLFG/dNHgbO0nR2dlZtpw717ng1/a6U/ey\nGSedZJ9sabHOtjbrXbWq4utUWidpor5zwP65XBTQy4P8rJDZkcH4dt65G4H26HgqcEMF13Mcxxky\nmzZv5tKlFzD94Eu56NprG37VbzHKGYB9JT1Y5LUceGuci0uaBLQBR0i6X9IySccAlwKTJT0KHAlc\nMtQfUo8UDglDI2T9IWsH158kubj/ZVfNZtwtq/nsoRP71aln/dWk3BzAvkO9uJktAUrNphw11Osn\nieepSR5vY6fW5OL+c6Gf69dCxwePZtrChWlLS4VyewKvrqWQesNzAXkuoDRx/clQMu5/xgzYe+++\nevWqv9o0R8ILx3Ecysf9D8szANWgHhd+FRJrS0hncITuRwxZf8jawfUnRam4/8Ldvqqhv6WlhdbW\nVlpbW2lvb+87rpfOH9wAOI7TRLRdOJP24ROaYrevOAzoAooieTqBcVF9kY0x3TNZaeETuh8xZP0h\nawfXH4fB5P65867xPH3gQmbtOYOVS5YwYdIkps2c2S/0M/T2j0ucEcDVwOXAwcCBwHui94bGc9Qk\nj7exMxTyXSyrV68e0MWycSNcfDF8/dLxdMyf35Rx/4XEMQAvmNktZvasmf0990pcWcp4LiDPBZQm\nrr/6TP/BL3j9u3/FIYcMXLce9SdBnCigRZK+AfyS7J4AAJjZssRUOY7jVIHVPT3MnTGDP9+1hHu3\n+xufOOuHaUuqK+IYgPdG7+/JO2fAEdWX01iE7kcMWX/I2sH1V4N+i76AjssuYPXk9w7o9qkH/bUg\nzoYwh9dCiOM4TjUpt+irY/78NKXVDQPOAUjaQdLlkv4Yvf7Lt3CMR+h+xJD1h6wdXH81GMpmL5Xq\n7+3tJZPJkMlk+hZ9ZTKZviileiWOC2g28BDw/6LyJ4E5wAlJiaoHPE9N8ngbO0mSW/SVbwSKLfqq\nBvW0urcS4kQBTTCzDjNbFb26gIZfA+C5gDwXUJq4/qHTPnMmX95tcIu+6kF/LYgzAnhZ0sFmdhf0\nLQyrZD8Ax3GcmjNu/HhWvXMhp+8yg+F/K73oq5mJMwL4LPA9Sb2SVgPfBT6TrKzGoB78oEMhZP0h\nawfXX0i+j33u3LmxfOyrVsG9S8dz1aLKF32F3v5xiRMF1A3sJ2lUVH4xcVWO4zh55PvYu7q6aG9v\nH/A73/kOnHYajByZrLaQiRMFND3q/F8CLo929To6eWnhE7ofMWT9IWsH1z9UXnllG+bNg2nTBvf9\ntPXXijguoFOjp/6jgTeSjQJqyC0c8/E8NcnjbexUm9x2j/fP+R77vvEQNm3sSeQ+oYZ9FhLHACh6\n/xAwz8wezjvXsHguIM8FlCauv3JyK3/PWbCAW5/5C7f/+S6umDyZ1T2VG4GB9IeQ6z8OcQzAfZJu\nJ2sAbpP0emBznItLulrSM5IezDvXIekvkSspt0m84zjOkCi18nfujBlpyqpr4hiA04DzgAPNbAOw\nNXBKzOvPAT5Y5PzlZnZA9Lo15rWCI3Q/Ysj6Q9YOrn8wDGXlbyGht39c4hiA9wOPmtnzkqYAFwAv\nxLl4tHbguSIfNbwLyXGc2hJ3u0fnNeIYgO8DGyTtB3wRWAnMG+J9Py+pW9KPGjmvkPtx0yNk7eD6\nB8OUjpl8cuSoqmz3GHr7xyXOSuBXzcwkHQd818yulnTaEO55JXBRdM2Lye42VvJ67e3tfRMro0eP\nZuLEiX3Ds9w/UhLljo6hX6+7uzsxfbUoJ61/6tQMmUz9/F4vh1HOUfj5D69ezZ92+2++8e5fs+r3\nSxi2114cc+qpfYu/Cuv39PSQyWRKljOZDD09PX1bT3Z3d/Pyyy/3XWft2rWMHTs29fZobW0lEy2Q\ng/JbYvbDzMq+gMXA+cBjwFiyo4blA30v7/vjgAcr/Sz63BzHaT56enps0aJFtmjRIpszZ07fcU9P\nj3V2dvarf8EFF9n48WaLF2fLhXWKfWcwdUIh6jsH7J/jjAA+DnwCOM3M1kraA/hGfBODyPP5Sxpr\nZmuj4glkM406juP0UenK3+7u/dl7bzj00OS1NRIDzgGY2Vozu9zMfheV15hZrDkASdcCvwf2kbRG\n0inAZZIelNQNHAacNQT9dU3hkDU0QtYfsnZw/XFZ3dPDhSdNYd0tl7KPpgwq5r8Yobd/XEqOACTd\nZWYHS3qJ7BaQyn83s1EDXdzMPlHk9JzBinUcx8mRv+XjRcD62+6iY/LdTFu4MG1pwVDSAJjZwdH7\n62snp7HITdaESsj6Q9YOrj8O5bZ8ZO+9B33dXDqHTF6aBwh305dyxJkDIAoBPSQq3mlmD5ar3wh0\ndnqumqTxNnaGQrmFX8OGYAAasaMvRaxsoMACYOfotUDSIHPshYPnAvJcQGni+gfmHyNGJ7bwK/T2\nj0vcVBDvNbMLzexC4H3A6cnKchzHKc+Nu8BpO46uysKvZiWOC0jAprzyJjyVQyzcj5seIWsH1z8Q\n837zR/6y4z2c/Zs7mXX5paxcMrgtH3OLvIB+/v5mII4BmAPcI+n6qHw8cHVykhzHcUpjBt+7dAz/\ncfx8DjrgnRw0fz5dXV10dHRUfK1m8vcXI846gMvJZv/8R/Q6xcy+lbSwRiB0P2LI+kPWDs2lP+5+\nv7nNXh7xkE62AAAV70lEQVS68qdsXno+Z34wuc3dQ2//uJRbB7At2c3f9wKWA1ea2au1EpY2g3iY\ncCrE29iBeKt+82P+RwDreYSOY7Ix/5W4fJwtKTcCuAZ4D9nO/1hgVk0U1QnVCE90P255kgwB9bZP\nl2rrr/VmL6G3f1zKzQG8zczeCdmdvYB7ayPJcRxnS6q12Uu5Sd9mnAsoNwLYmDtoJtdPNQndjxiy\n/pC1g+svpFqbvcTdyzf09o9LOQOwn6QXo9dLwLtyx5JerJVAx3GcjQd/iCk7DPeY/ypTLhfQVrUU\n0oiE7kcMWX/I2sH15/OvTcasxy7mtK9ewawH7hp0zH8lhN7+cYmzErgp8Rw1yeNt7JQjF/b5x6uu\nYp+bn+fcE46mY/58JrS30zF/vkf/VAE3ACXwXECeCyhNGll/nLj/XNjnOQsWcNszT3P3o0/zvQ8e\nXVG+//z75CZ8i60vqFR/IxErG6jjOE61iBP3X41Uz80a2VMJPgJIkND9iCHrD1k7uP5qhX0OltDb\nPy5uABzHqTs27VydsE+nPG4AEiR0P2LI+kPWDq5/7YiZfGbkhNTCPkNv/7gkagAkXS3pGUkP5p3b\nUdLtkh6VdJukHZLUMFg8T03yeBs7xbj3Xrjp5vF8cfFCZrW1cXJLC7Pa2jzvTwLIzJK7uHQwsA6Y\nZ2bvis5dCvzdzC6T9GVgRzM7r8T3LUl9juOkSy6N8+qeHubOmMGf71rC8n/uwSlfmsP0s/bcok7h\ndwqvM3Xq1L4In97e3r4J4GacDJaEmQ24b0uiUUBmdpekcQWnjwMOi46vATJAUQPgOE7j0z/TZy8X\nfvdoVh9f2RN/M3b0QyWNOYCdzewZADNbS3af4YYkdD9iyPpD1g6Noz9OzH+xkM+LViWX6TMOobd/\nXOphHUBZH097e3ufVR89ejQTJ07sC9HK/SPVa7m7u7uu9DSbfi/XV7m9vb0vAVvu856eHsZFIZ/Z\n2tBK1gisevjhLTriwk457d9TT+VMZGChwu0szSzRFzAOeDCvvAIYEx2PBVaU+a45jtMYdHZ2Fj3X\n2dZm67I7Pfa91oF1trUV/V6p6zivEfWdA/bPtXABiS03kb8RaI+OpwI31EBDxXiemuTxNnYA9j1u\nBlNGbeeZPlMg6TDQa4HfA/tIWiPpFOASYLKkR4Ejo3Ld4bmAPBdQmjS6/lyitz/PvoZLTp3Je865\nteKQz6Hk+hmq/kYh6SigT5T46Kgk7+s4Tv3SP+qnh45rsvv7zp03r1+IZyk86mfo1MMkcMOSm6wJ\nlZD1h6wdwtWfv+Xi3Llzt4jFz1GNRG9JE2r7V4obAMdxqkacTJ/lEr0NqxMD0Cx4LqAECd2PGLL+\nkLVDY+t/5Y07132it9DbPy4+AiiB56lJHm/j5uNfGzcxe9Rf6Rk9ijnPvxjNAWSjfqbNnMncefOK\nfi/ftZSb8AWfBxgqbgBKUI0QxdD9iEnrTzIM1Ns+XVpbW1m8eDFAX56flUuWcNjPf8q/DhzJRX9Y\nyqyLL4q9v2+tO/rQ2z8ubgAcx0mM/hE/cP5LLWw3Y2s65s8vmtjNqR0+B5AgofsRQ9YfsnYIQ3+5\nPD85/cUifr6+ujfVPD9xCKH9q4GPABzHGRTlIn5y/vq0t3Z0yuMGIEFC9yOGrD9k7dAY+hcvXswr\no7NbO+YbgTgRP2lP+obe/nFxA1CCzk7PVZM03saNSW7S9/Hf/YEVz72D3lFvZvaLT/SL+CmHR/fU\nBp8DKIHnAvJcQGkSqv7cpO9BCxYwf80q7nzpRsaOFhccd1xQWzuG2v6V4iMAx3Fike+WKdxyMUdu\n0ndpVB4BfG3NGmYdcgij29s94qfOcAOQIKH7EUPWH7J2qE/9cdI8vLI66+ppzTs3UJqHtP39xajH\n9k8CNwCO4wya/EVeX17+CNc/+RAXUNmkr/v708PnABIkdD9iyPpD1g5h6M/5+89ZsIB5vb1c+Iuf\nst/f/8VZu+/OLVGdUDd3CaH9q4GPAErgrsrk8TauX8r5+3PHxRZ5zX1xHZ2tR/CTt76V6/7851hp\nHpz0cANQAs8F5LmA0iRt/UNJ67z9Sy8x9447SqZ5qEeffyFpt3+tcAPgOE5s8n3+z6yDFcC+eZ/H\nWeRVTx19s5OaAZDUC7wAbAY2mtlBaWlJikwmE/STRMj6Q9YOtdcfJ8SzWGK3z201nPM2vcq+bLnI\nK3Qfeuh/P3FJcwSwGWg1s+dS1OA4DvFcPsV8/lduepWTW1oYAVv4+3tWr66RcmcopGkARINHIYX+\nBBGy/pC1Q33oz3f3dD72GMuW3FPU5/+O8eMZdthhW/j7c7mAQvD3F6Me2r8WpGkADFgoaRNwlZn9\nMEUt/fA8NcnjbVy/9HP39PZyytaq2Odf7x19s5PmE/gkMzsA+BBwpqSDU9TSD88F5LmA0iRp/cVy\n+f/4uus49/jjWTl3LmcfcQSnFbh75mw0vjxyZN9+vuVi/L39wyC1EYCZPR29/1XS9cBBwF2F9drb\n2/ueIEaPHs3EiRP7hme5f6R6LXd3d9eVnnrTDxkymfr5vc1Ubmlp6XPNrF69msMPO4zvt7XR/tRT\nHEu2cz8V+Cjw72RZCmz/5jcz64ADWLlkCcP22otjTj21L8Y/k8mwdu1axo4dS3d3Ny+//DLf+ta3\nmDhx4hb3q4ff32jlTGTIgYpGXDKz2JWrhaTtgWFmtk7SCOB2oMvMbi+oZ2noy94bUrp10+BtXBsG\nWtTV1dUFjz/OOQsW9EvhMAvoyC+3tRXdytG3dqwvJGFmGqheWiOAMcD1kizSsKCw83ccpzqUivBZ\n3dND15QprFyyhJc2bOBvbJnDZwSwMTqOm8ffCYtU5gDMrMfMJprZ/mb2TjO7JA0dSZMbooVKyPpD\n1g7J6y/M4zP/2Wf5NpAfvLkeWNHSUjKPf/48Qi7CJ1OwJ3CohK4/Lr4SuAQ+mk0eb+NkKObyWfv0\n09z3k5/wzAMP0PX44zy/bh0XF0zyzgQuid5zT/yXL1zI3Hnzirp3ykX45O7v1DepzAHEJc05AMdp\nBLq6umg/+eR+K3hP32o4X9/0KuMK6p88Zgxstx0TJk2iPVrUVcy/7z7/+qbe5wAcx6kCpSZ4h2+1\nFb/9wQ9YuWQJZ8+dy8W9vVs87f9w06t9T/s51gMTjjoK9t472CRuTmU09ErctAndjxiy/pC1Q3z9\nLS0tjB83jsU/+hF3dHWx+Ec/Yuthw/jfU07p8+/P6+3larb0748AVm27bayY/vx7tba20traSnt7\ne99xsc6/Wdo/dHwE4DgBUfjEv+022/C7c87hsqee6luxO+2GGzh33botnvi76B/SuevRRzPr9a9n\n5ZIl/fL2+9N+c+BzAI4TGPk5etYDF/f29kvPkN/Z57gAuJi8kM4oqsdj+hsPnwMYIp6nJnm8jcvT\n29vL3X/4A3defTWvPvkkw3fbjX0//GH+fPnlfG3Nmr4J3Q5gGvRN6ObH7+foC+mEort0+RN/c+Ij\ngJL3Hvoq1UzgOcWT1p/kSuAQ2z6/w1/z2GO86c1vZtPjj/P9v/61r7P//IiRfGn9urJP/OuBk0aO\n5LrIDZT/xJ8L6Yyz5eNQCLH98wldv48AHKeOKfd0/401a1gKHPjEE8yAvhW6I4Dvrl/Xz71TbMXu\nl2fPZtZVVxX174M/2TtZfARQ8t6epyZpmq2Nc777zU8+yYZRo3jh/vv55hNP9D2lTxs5knPXlX+6\nh9d8+fl18jdlac/r7Lu6upg6dWqiT/tO/eEjAMdJmfwO/2/Dh/PSAw9s4c4pfLq/Yl3xp/vNeeX1\nwIMjR7K+wL1zeYF7J+fDHzduXF/nnwvjdJwcbgASJHQ/Ysj6a609v7MftttuvP3DH2bR2We/Fp5J\n/w5/Jls+3ee7cjJAa/S9nAEo5t4Zs99+vOfjH6dn9eq6mrwN+W8HwtcfFzcAJfAouOQJpY0LO/fc\nYqlyT/ef++UvOe/ll/vl2ins8Es93efKX9ljD4btvz8nP/AAEyZN4vhPf5qNmzZx2Kc+xbijjtrC\nndMMHZZTXXwOwGkqCjvzo844g99cdVXJzr2Yr/5Lu+7KSxs39nPnTOe1UMxSsfgdZBdl5eoUJl/7\n6OzZ/Cbv6f7dH/84Y3fZxX33TkXEnQNwA+AEQaUdd7E6R51xBtefeuoWSdHOHD6cL7/6KvtSWede\nLI9OnMna/A7/7DFjeHnPPdn2uecYvttuTDzxRHYeO5bRo0d7h+8MiaYzANXoIKpVJ1de9dBD7PmO\nd9T03tX8DT+cOZNxr76aur5iT+GFHfdX9tiDl8366twC/KSgzpnbb8+XN2wYMIY+Tuee/yRf7Fyx\nWPzCDv/Q007jfe9/f8lcOiG7dFx/usQ1AJhZ3b6y8gamd9Uq++KECbYuG1Vo68CmDh9uj+SVv7DH\nHnb6m99ckzq58qIU7l3N3zC3jvSdBdYblXPnOgvKF+SVF5Wok1/OvS4coFx4rvBehefWgX16zBj7\n2kUX2WePPNJOf+tb7bNHHmnXXXut9fT0xPqbXrRoUax69YrrT5eo7xy4j41TKa1XXAPQ2dbW11nE\n7SCSrpPmvZvhNwym4zawrw7y3vmd+6d22sna3vjGLQzUGWPG2BlHHWUXHn64dba1We+qVZX9j3Wc\nKhLXADREFNBzK1ZssZcp9I+wGEH/3Nfl6nTSQSddg77OUO5dL3WSvvdQ2nh9QZ31BZ+XqrNs221Z\n/8orr0XrbLUV523a1Pd5zpW0Ps/dlIvE6XjxRYbtuisXRC6qWTNmsPmppxi26658pWClreOEQGoG\nQNIxwLfI/h+92swuHey1dtx3X9YvW7aFERhsB5Gr00UnnXQN+jrDKB7LXS19tahTuD9ste9daRvn\nx8Pn5gBy5cKOO38OIFenY8IEvhrF0Oc67jPOOIOf5pXPLtK5n12ic++YP7/fuWoRug/a9YdBKgZA\n0jDgu8CRwFPAUkk3mNmfBnO99pkz6bj77qLRHVD6ya5cHYZwnVz5NuDAQdy7HuqcOXw4YxO+dyVt\nXPgUfvoAHfc9L7zAjG9+c4s6uXw4kw49dIu/n8IyJNu5x6G7uzvoDsj1h0FaI4CDgMfNbDWApB8D\nxwGDMgDjxo9n2sKFWzy1DdRBDFSHBTCrrW1Q18mV71iyhBcmTar43vVQ5/QzzuCrn/88HTvtlNi9\nK2njYk/h5Truzs5OJh16aNE6IfD888+nLWFIuP5AiDNRUO0X8DHgqrzyFOA7RepVf3YkJtW4dUdH\nx9AvkiJJ60/yn9fbPl1cf7oQcxLY9wROkFwSrlAJWX/I2sH1p03o+uOSykIwSe8DOs3smKh8HlmL\ndWlBvdqLcxzHaQCsXlcCS9oKeJTsJPDTwL3ASWa2ouZiHMdxmpRUJoHNbJOkzwO381oYqHf+juM4\nNaSucwE5juM4yRHMJLCkL0raLOkNaWupBEkXSXpA0v2SbpU0Nm1NcZF0maQVkrol/ULSqLQ1VYKk\nEyU9JGmTpAPS1hMXScdI+pOkxyR9OW09lSDpaknPSHowbS2VIml3SXdIeljScklfSFtTJUjaRtI9\nUV+zXFLHQN8JwgBI2h2YzJaLU0PhMjPbz8z2B35N/xTx9cztwNvNbCLwOHB+ynoqZTnwUWBx2kLi\nkrdI8oPA24GTJL01XVUVMYes9hB5FTjbzN4OvB84M6S2N7N/AodHfc1E4FhJB5X7ThAGAPgmcG7a\nIgaDma3LKxamtKlrzOw3ZpbTezewe5p6KsXMHjWzx4GB0+LWD32LJM1sI5BbJBkEZnYX8FzaOgaD\nma01s+7oeB2wAtgtXVWVYWYbosNtyM7xlvXx170BkPQR4AkzW562lsEi6WJJa4BPABemrWeQnEo2\nxY6TLLsBT+SV/0JgnVAjIKmF7FP0PekqqQxJwyTdD6wFFprZ0nL16yIbqKSFwJj8U2Qt1wXAV8i6\nf/I/qyvK6P+qmf3KzC4ALoj8udOAztqrLM5A2qM6XwU2mtm1KUgsSxz9jlMJkkYCPwemF4zg655o\nxL5/NF/3v5LeZmaPlKpfFwbAzCYXOy/pHUAL8IAkkXVB3CfpIDN7toYSy1JKfxGuBW6mjgzAQNol\ntQMfAo6oiaAKqaDtQ+FJYI+88u7ROacGSBpOtvP/HzO7IW09g8XMXpS0CDgGKGkA6toFZGYPmdlY\nM9vTzMaTHQ7vX0+d/0BI2iuveDxZv2IQRCm7zwU+Ek0whUzdjRxLsBTYS9I4Sa8D/h24MWVNlSLC\nae9CZgOPmNm30xZSKZJ2krRDdLwdWc9J2QSbdW0AimCE94d1iaQHJXUDR5HdXzwUrgBGAgslLZN0\nZdqCKkHS8ZKeAN4H3CSp7ucwzGwTkFsk+TDw45AWSUq6Fvg9sI+kNZJOSVtTXCRNAtqAI6JQymXR\nQ1Ao7AIsivqae4DbzOzmcl/whWCO4zhNSmgjAMdxHKdKuAFwHMdpUtwAOI7jNCluABzHcZoUNwCO\n4zhNihsAx3GcJsUNgBM0kl4a4vd/FuV9QVJPtdONS1oUJxV1nHtLWphb6OM41cANgBM6g17IIult\nwDAz6x3qtapAnHvPA85MWojTPLgBcBoGSd+INsJ4QNL/i85J0pWSHpF0m6RfSzoh+kobkJ/vpd8q\nc0kHSvq9pPsk3SVp7+j8VEnXS7pd0ipJZ0o6K1o9+ntJo/Muc3K0svRBSQdG339DpGe5pB/m3zu6\n7tLos0/lXedXwElVaSzHwQ2A0yBI+hjwLjN7J9kcKN+QNAY4AdjDzN4GnEx2o48ck4D7Brj0CuBg\nM3s32c18vp732dvJ5nc6CPhPYJ2ZHUB274ST8+ptF23ScSbZXDNE1/pdpPd6tkwAd4qZHQgcCEyX\ntCOAmT0PvC5XdpyhUhfZQB2nCkwCrgMws2clZch2zAcDP4vOPxNlSMyxC/DXAa47GpgXPfkbW/6f\nWRRtwLFB0vPATdH55cA78+rldP1O0usjP/6hZHcrw8xulpS/icp/SDo+Ot4d2Bu4Nyr/FdiVQDdd\nceoLHwE4jUpuX4ByvAxsO0CdmcAd0ZP6hwvq52dItbzyZrY0FIU6iu0KJwBJh5FNvf3eaCvO7oJ7\nbhvpdpwh4wbACZ2c7/x3wMejHZHeBBxC9ql5CXBiNBcwBmjN++4KID9dd/71cozitXz8g81s+XEA\nSQcDL5jZS8CdZOcgkHQs2ZEGwA7Ac2b2z2g/2vcVXGsM0DtIHY6zBe4CckLHAMzseknvAx4g+4R9\nbuQK+gXZJ+qHyW61eB/wQvTdXwOHA3fkXesBSRYd/xS4jKwL6IKoflkdJc6/ImkZ2f9vOSPSBVwn\n6d/Jpk9eE52/FfiMpIeBR4E/5C4k6d3A3Xn7NDvOkPB00E7DI2mEma2P4uzvASZFxmFbsp3/JAvg\nP4KkbwE3mNmiASs7Tgx8BOA0AzdFYZlbAxfldpQzs1ckdZDddP0vaQqMyXLv/J1q4iMAx3GcJsUn\ngR3HcZoUNwCO4zhNihsAx3GcJsUNgOM4TpPiBsBxHKdJcQPgOI7TpPx/CyuTbnYl7h4AAAAASUVO\nRK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "cvglmnetPlot(cvfit)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also show the optimal $\\lambda$'s and the corresponding coefficients." + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 2.72128916e-02, 1.85696196e-01],\n", + " [ 6.20006263e-01, 5.75373801e-01],\n", + " [ -9.85744959e-01, -9.32121975e-01],\n", + " [ 1.52693390e+00, 1.47056730e+00],\n", + " [ 2.32156777e-01, 1.96923579e-01],\n", + " [ -3.37405607e-01, -3.04694503e-01],\n", + " [ 1.22308275e-03, 0.00000000e+00],\n", + " [ -1.35769399e-02, 0.00000000e+00],\n", + " [ 0.00000000e+00, 0.00000000e+00],\n", + " [ 0.00000000e+00, 0.00000000e+00],\n", + " [ 1.69722836e-02, 0.00000000e+00],\n", + " [ 0.00000000e+00, 0.00000000e+00],\n", + " [ 3.10187944e-02, 2.58501705e-02],\n", + " [ -2.92817638e-02, 0.00000000e+00],\n", + " [ 3.38822516e-02, 0.00000000e+00],\n", + " [ -6.66067519e-03, 0.00000000e+00],\n", + " [ 1.83937264e-02, 0.00000000e+00],\n", + " [ 0.00000000e+00, 0.00000000e+00],\n", + " [ 4.54888769e-03, 0.00000000e+00],\n", + " [ -3.45423073e-02, 0.00000000e+00],\n", + " [ 1.20550886e-02, 9.92954798e-03]])" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "optlam = np.array([cvfit['lambda_min'], cvfit['lambda_1se']]).reshape([2,])\n", + "cvglmnetCoef(cvfit, s = optlam)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `predict` method is similar and we do not repeat it here." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cox Models" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Cox proportional hazards model is commonly used for the study of the relationship beteween predictor variables and survival time. In the usual survival analysis framework, we have data of the form $(y_1, x_1, \\delta_1), \\ldots, (y_n, x_n, \\delta_n)$ where $y_i$, the observed time, is a time of failure if $\\delta_i$ is 1 or right-censoring if $\\delta_i$ is 0. We also let $t_1 < t_2 < \\ldots < t_m$ be the increasing list of unique failure times, and $j(i)$ denote the index of the observation failing at time $t_i$.\n", + "\n", + "The Cox model assumes a semi-parametric form for the hazard\n", + "\n", + "\n", + "$$\n", + "h_i(t) = h_0(t) e^{x_i^T \\beta},\n", + "$$\n", + "\n", + "\n", + "where $h_i(t)$ is the hazard for patient $i$ at time $t$, $h_0(t)$ is a shared baseline hazard, and $\\beta$ is a fixed, length $p$ vector. In the classic setting $n \\geq p$, inference is made via the partial likelihood\n", + "\n", + "\n", + "$$\n", + "L(\\beta) = \\prod_{i=1}^m \\frac{e^{x_{j(i)}^T \\beta}}{\\sum_{j \\in R_i} e^{x_j^T \\beta}},\n", + "$$\n", + "\n", + "\n", + "where $R_i$ is the set of indices $j$ with $y_j \\geq t_i$ (those at risk at time $t_i$).\n", + "\n", + "Note there is no intercept in the Cox mode (its built into the baseline hazard, and like it, would cancel in the partial likelihood.)\n", + "\n", + "We penalize the negative log of the partial likelihood, just like the other models, with an elastic-net penalty.\n", + "\n", + "We use a pre-generated set of sample data and response. Users can load their own data and follow a similar procedure. In this case $x$ must be an $n\\times p$ matrix of covariate values — each row corresponds to a patient and each column a covariate. $y$ is an $n \\times 2$ matrix, with a column \"time\" of failure/censoring times, and \"status\" a 0/1 indicator, with 1 meaning the time is a failure time, and zero a censoring time." + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [], + "source": [ + "# Import relevant modules and setup for calling glmnet\n", + "%reset -f\n", + "%matplotlib inline\n", + "\n", + "import sys\n", + "sys.path.append('../test')\n", + "sys.path.append('../lib')\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", + "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", + "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", + "from cvglmnetPlot import cvglmnetPlot; from cvglmnetPredict import cvglmnetPredict\n", + "\n", + "# parameters\n", + "baseDataDir= '../data/'\n", + "\n", + "# load data\n", + "x = np.loadtxt(baseDataDir + 'CoxExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'CoxExampleY.dat', dtype = np.float64, delimiter = ',')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `Surv` function in the package `survival` can create such a matrix. Note, however, that the `coxph` and related linear models can handle interval and other fors of censoring, while glmnet can only handle right censoring in its present form.\n", + "\n", + "We apply the `glmnet` function to compute the solution path under default settings." + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Warning: Cox model has no intercept!\n" + ] + } + ], + "source": [ + "fit = glmnet(x = x.copy(), y = y.copy(), family = 'cox')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "All the standard options are available such as `alpha`, `weights`, `nlambda` and `standardize`. Their usage is similar as in the Gaussian case and we omit the details here. Users can also refer to the help file `help(glmnet)`.\n", + "\n", + "We can plot the coefficients." + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "image/png": "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\nrkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "glmnetPlot(fit);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As before, we can extract the coefficients at certain values of $\\lambda$." + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.37693638],\n", + " [-0.09547797],\n", + " [-0.13595972],\n", + " [ 0.09814146],\n", + " [-0.11437545],\n", + " [-0.38898545],\n", + " [ 0.242914 ],\n", + " [ 0.03647596],\n", + " [ 0.34739813],\n", + " [ 0.03865115],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ],\n", + " [ 0. ]])" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "glmnetCoef(fit, s = np.float64([0.05]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since the Cox Model is not commonly used for prediction, we do not give an illustrative example on prediction. If needed, users can refer to the help file by typing `help(predict.glmnet)`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Currently, cross-validation is not implemented for cox case. But this is not difficult to do using the existing `glmnet` calls that work perfectly well for this case. (TBD: `cvglmnet` to be implemented for cox)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References\n", + "\n", + "

Jerome Friedman, Trevor Hastie and Rob Tibshirani. (2008).
\n", + "
Regularization Paths for Generalized Linear Models via Coordinate Descent
\n", + "Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010.

\n", + "

Noah Simon, Jerome Friedman, Trevor Hastie and Rob Tibshirani. (2011).
\n", + "Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent
\n", + "Journal of Statistical Software, Vol. 39(5) 1-13.

\n", + "

Robert Tibshirani, Jacob Bien, Jerome Friedman, Trevor Hastie, Noah Simon, Jonathan Taylor, Ryan J. Tibshirani. (2010).
\n", + "Strong Rules for Discarding Predictors in Lasso-type Problems
\n", + "Journal of the Royal Statistical Society: Series B (Statistical Methodology), 74(2), 245-266.

\n", + "

Noah Simon, Jerome Friedman and Trevor Hastie (2013).
\n", + "A Blockwise Descent Algorithm for Group-penalized Multiresponse and Multinomial Regression
" + ] + } + ], + "metadata": { + "celltoolbar": "Raw Cell Format", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/_sources/glmnet_vignette.ipynb.txt b/docs/_sources/glmnet_vignette.ipynb.txt index 0319135..6cd9c0a 100644 --- a/docs/_sources/glmnet_vignette.ipynb.txt +++ b/docs/_sources/glmnet_vignette.ipynb.txt @@ -176,12 +176,12 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = scipy.float64)\n", - "y = scipy.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = scipy.float64)\n", + "x = np.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = np.float64)\n", + "y = np.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = np.float64)\n", "\n", "# create weights\n", - "t = scipy.ones((50, 1), dtype = scipy.float64)\n", - "wts = scipy.row_stack((t, 2*t))" + "t = np.ones((50, 1), dtype = np.float64)\n", + "wts = np.row_stack((t, 2*t))" ] }, { @@ -394,7 +394,7 @@ } ], "source": [ - "glmnetCoef(fit, s = scipy.float64([0.5]), exact = False)" + "glmnetCoef(fit, s = np.float64([0.5]), exact = False)" ] }, { @@ -436,7 +436,7 @@ ], "source": [ "fc = glmnetPredict(fit, x[0:5,:], ptype = 'response', \\\n", - " s = scipy.float64([0.05]))\n", + " s = np.float64([0.05]))\n", "print(fc)" ] }, @@ -595,7 +595,7 @@ }, "outputs": [], "source": [ - "foldid = scipy.random.choice(10, size = y.shape[0], replace = True)\n", + "foldid = np.random.choice(10, size = y.shape[0], replace = True)\n", "cv1=cvglmnet(x = x.copy(),y = y.copy(),foldid=foldid,alpha=1)\n", "cv0p5=cvglmnet(x = x.copy(),y = y.copy(),foldid=foldid,alpha=0.5)\n", "cv0=cvglmnet(x = x.copy(),y = y.copy(),foldid=foldid,alpha=0)" @@ -635,10 +635,10 @@ "f.add_subplot(2,2,3)\n", "cvglmnetPlot(cv0)\n", "f.add_subplot(2,2,4)\n", - "plt.plot( scipy.log(cv1['lambdau']), cv1['cvm'], 'r.')\n", + "plt.plot( np.log(cv1['lambdau']), cv1['cvm'], 'r.')\n", "plt.hold(True)\n", - "plt.plot( scipy.log(cv0p5['lambdau']), cv0p5['cvm'], 'g.')\n", - "plt.plot( scipy.log(cv0['lambdau']), cv0['cvm'], 'b.')\n", + "plt.plot( np.log(cv0p5['lambdau']), cv0p5['cvm'], 'g.')\n", + "plt.plot( np.log(cv0['lambdau']), cv0['cvm'], 'b.')\n", "plt.xlabel('log(Lambda)')\n", "plt.ylabel(cv1['name'])\n", "plt.xlim(-6, 4)\n", @@ -676,7 +676,7 @@ } ], "source": [ - "cl = scipy.array([[-0.7], [0.5]], dtype = scipy.float64)\n", + "cl = np.array([[-0.7], [0.5]], dtype = np.float64)\n", "tfit=glmnet(x = x.copy(),y= y.copy(), cl = cl)\n", "glmnetPlot(tfit);" ] @@ -724,7 +724,7 @@ } ], "source": [ - "pfac = scipy.ones([1, 20])\n", + "pfac = np.ones([1, 20])\n", "pfac[0, 4] = 0; pfac[0, 9] = 0; pfac[0, 14] = 0\n", "pfit = glmnet(x = x.copy(), y = y.copy(), penalty_factor = pfac)\n", "glmnetPlot(pfit, label = True);" @@ -764,9 +764,9 @@ } ], "source": [ - "scipy.random.seed(101)\n", - "x = scipy.random.rand(100,10)\n", - "y = scipy.random.rand(100,1)\n", + "np.random.seed(101)\n", + "x = np.random.rand(100,10)\n", + "y = np.random.rand(100,1)\n", "fit = glmnet(x = x, y = y)\n", "glmnetPlot(fit);" ] @@ -857,8 +857,8 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'MultiGaussianExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'MultiGaussianExampleY.dat', dtype = scipy.float64, delimiter = ',')" + "x = np.loadtxt(baseDataDir + 'MultiGaussianExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'MultiGaussianExampleY.dat', dtype = np.float64, delimiter = ',')" ] }, { @@ -947,7 +947,7 @@ } ], "source": [ - "f = glmnetPredict(mfit, x[0:5,:], s = scipy.float64([0.1, 0.01]))\n", + "f = glmnetPredict(mfit, x[0:5,:], s = np.float64([0.1, 0.01]))\n", "print(f[:,:,0], '\\n')\n", "print(f[:,:,1])" ] @@ -1126,8 +1126,8 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'BinomialExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'BinomialExampleY.dat', dtype = scipy.float64)" + "x = np.loadtxt(baseDataDir + 'BinomialExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'BinomialExampleY.dat', dtype = np.float64)" ] }, { @@ -1222,7 +1222,7 @@ } ], "source": [ - "glmnetPredict(fit, newx = x[0:5,], ptype='class', s = scipy.array([0.05, 0.01]))" + "glmnetPredict(fit, newx = x[0:5,], ptype='class', s = np.array([0.05, 0.01]))" ] }, { @@ -1500,8 +1500,8 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'MultinomialExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'MultinomialExampleY.dat', dtype = scipy.float64)" + "x = np.loadtxt(baseDataDir + 'MultinomialExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'MultinomialExampleY.dat', dtype = np.float64)" ] }, { @@ -1681,8 +1681,8 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'PoissonExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'PoissonExampleY.dat', dtype = scipy.float64, delimiter = ',')" + "x = np.loadtxt(baseDataDir + 'PoissonExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'PoissonExampleY.dat', dtype = np.float64, delimiter = ',')" ] }, { @@ -1799,7 +1799,7 @@ } ], "source": [ - "glmnetCoef(fit, s = scipy.float64([1.0]))" + "glmnetCoef(fit, s = np.float64([1.0]))" ] }, { @@ -1825,7 +1825,7 @@ } ], "source": [ - "glmnetPredict(fit, x[0:5,:], ptype = 'response', s = scipy.float64([0.1, 0.01]))" + "glmnetPredict(fit, x[0:5,:], ptype = 'response', s = np.float64([0.1, 0.01]))" ] }, { @@ -1930,7 +1930,7 @@ } ], "source": [ - "optlam = scipy.array([cvfit['lambda_min'], cvfit['lambda_1se']]).reshape([2,])\n", + "optlam = np.array([cvfit['lambda_min'], cvfit['lambda_1se']]).reshape([2,])\n", "cvglmnetCoef(cvfit, s = optlam)" ] }, @@ -2008,8 +2008,8 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'CoxExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'CoxExampleY.dat', dtype = scipy.float64, delimiter = ',')" + "x = np.loadtxt(baseDataDir + 'CoxExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'CoxExampleY.dat', dtype = np.float64, delimiter = ',')" ] }, { @@ -2126,7 +2126,7 @@ } ], "source": [ - "glmnetCoef(fit, s = scipy.float64([0.05]))" + "glmnetCoef(fit, s = np.float64([0.05]))" ] }, { diff --git a/docs/glmnet_vignette.ipynb b/docs/glmnet_vignette.ipynb index 816a581..9325480 100644 --- a/docs/glmnet_vignette.ipynb +++ b/docs/glmnet_vignette.ipynb @@ -129,7 +129,10 @@ "cell_type": "code", "execution_count": 1, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -155,7 +158,10 @@ "cell_type": "code", "execution_count": 2, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -166,7 +172,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -176,12 +183,12 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = scipy.float64)\n", - "y = scipy.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = scipy.float64)\n", + "x = np.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = np.float64)\n", + "y = np.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = np.float64)\n", "\n", "# create weights\n", - "t = scipy.ones((50, 1), dtype = scipy.float64)\n", - "wts = scipy.row_stack((t, 2*t))" + "t = np.ones((50, 1), dtype = np.float64)\n", + "wts = np.row_stack((t, 2*t))" ] }, { @@ -195,7 +202,10 @@ "cell_type": "code", "execution_count": 3, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -218,6 +228,9 @@ "execution_count": 4, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "scrolled": true }, "outputs": [ @@ -272,7 +285,10 @@ "cell_type": "code", "execution_count": 5, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -302,6 +318,9 @@ "execution_count": 6, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "scrolled": true }, "outputs": [ @@ -337,7 +356,10 @@ "cell_type": "code", "execution_count": 7, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -359,7 +381,10 @@ "cell_type": "code", "execution_count": 8, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -394,7 +419,7 @@ } ], "source": [ - "glmnetCoef(fit, s = scipy.float64([0.5]), exact = False)" + "glmnetCoef(fit, s = np.float64([0.5]), exact = False)" ] }, { @@ -419,7 +444,10 @@ "cell_type": "code", "execution_count": 9, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -436,7 +464,7 @@ ], "source": [ "fc = glmnetPredict(fit, x[0:5,:], ptype = 'response', \\\n", - " s = scipy.float64([0.05]))\n", + " s = np.float64([0.05]))\n", "print(fc)" ] }, @@ -459,7 +487,10 @@ "cell_type": "code", "execution_count": 10, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -494,7 +525,10 @@ "cell_type": "code", "execution_count": 11, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -516,7 +550,10 @@ "cell_type": "code", "execution_count": 12, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -558,7 +595,10 @@ "cell_type": "code", "execution_count": 13, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -591,11 +631,14 @@ "cell_type": "code", "execution_count": 14, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ - "foldid = scipy.random.choice(10, size = y.shape[0], replace = True)\n", + "foldid = np.random.choice(10, size = y.shape[0], replace = True)\n", "cv1=cvglmnet(x = x.copy(),y = y.copy(),foldid=foldid,alpha=1)\n", "cv0p5=cvglmnet(x = x.copy(),y = y.copy(),foldid=foldid,alpha=0.5)\n", "cv0=cvglmnet(x = x.copy(),y = y.copy(),foldid=foldid,alpha=0)" @@ -612,7 +655,10 @@ "cell_type": "code", "execution_count": 15, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -635,10 +681,10 @@ "f.add_subplot(2,2,3)\n", "cvglmnetPlot(cv0)\n", "f.add_subplot(2,2,4)\n", - "plt.plot( scipy.log(cv1['lambdau']), cv1['cvm'], 'r.')\n", + "plt.plot( np.log(cv1['lambdau']), cv1['cvm'], 'r.')\n", "plt.hold(True)\n", - "plt.plot( scipy.log(cv0p5['lambdau']), cv0p5['cvm'], 'g.')\n", - "plt.plot( scipy.log(cv0['lambdau']), cv0['cvm'], 'b.')\n", + "plt.plot( np.log(cv0p5['lambdau']), cv0p5['cvm'], 'g.')\n", + "plt.plot( np.log(cv0['lambdau']), cv0['cvm'], 'b.')\n", "plt.xlabel('log(Lambda)')\n", "plt.ylabel(cv1['name'])\n", "plt.xlim(-6, 4)\n", @@ -661,7 +707,10 @@ "cell_type": "code", "execution_count": 16, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -676,7 +725,7 @@ } ], "source": [ - "cl = scipy.array([[-0.7], [0.5]], dtype = scipy.float64)\n", + "cl = np.array([[-0.7], [0.5]], dtype = np.float64)\n", "tfit=glmnet(x = x.copy(),y= y.copy(), cl = cl)\n", "glmnetPlot(tfit);" ] @@ -711,7 +760,10 @@ "cell_type": "code", "execution_count": 17, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -726,7 +778,7 @@ } ], "source": [ - "pfac = scipy.ones([1, 20])\n", + "pfac = np.ones([1, 20])\n", "pfac[0, 4] = 0; pfac[0, 9] = 0; pfac[0, 14] = 0\n", "pfit = glmnet(x = x.copy(), y = y.copy(), penalty_factor = pfac)\n", "glmnetPlot(pfit, label = True);" @@ -751,7 +803,10 @@ "cell_type": "code", "execution_count": 18, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -766,9 +821,9 @@ } ], "source": [ - "scipy.random.seed(101)\n", - "x = scipy.random.rand(100,10)\n", - "y = scipy.random.rand(100,1)\n", + "np.random.seed(101)\n", + "x = np.random.rand(100,10)\n", + "y = np.random.rand(100,1)\n", "fit = glmnet(x = x, y = y)\n", "glmnetPlot(fit);" ] @@ -784,7 +839,10 @@ "cell_type": "code", "execution_count": 19, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -838,7 +896,10 @@ "cell_type": "code", "execution_count": 20, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -849,7 +910,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -859,8 +921,8 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'MultiGaussianExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'MultiGaussianExampleY.dat', dtype = scipy.float64, delimiter = ',')" + "x = np.loadtxt(baseDataDir + 'MultiGaussianExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'MultiGaussianExampleY.dat', dtype = np.float64, delimiter = ',')" ] }, { @@ -874,7 +936,10 @@ "cell_type": "code", "execution_count": 21, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -894,7 +959,10 @@ "cell_type": "code", "execution_count": 22, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -927,7 +995,10 @@ "cell_type": "code", "execution_count": 23, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -949,7 +1020,7 @@ } ], "source": [ - "f = glmnetPredict(mfit, x[0:5,:], s = scipy.float64([0.1, 0.01]))\n", + "f = glmnetPredict(mfit, x[0:5,:], s = np.float64([0.1, 0.01]))\n", "print(f[:,:,0], '\\n')\n", "print(f[:,:,1])" ] @@ -967,7 +1038,10 @@ "cell_type": "code", "execution_count": 24, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -987,7 +1061,10 @@ "cell_type": "code", "execution_count": 25, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1016,7 +1093,10 @@ "cell_type": "code", "execution_count": 26, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1038,7 +1118,10 @@ "cell_type": "code", "execution_count": 27, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1107,7 +1190,10 @@ "cell_type": "code", "execution_count": 28, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -1118,7 +1204,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -1128,8 +1215,8 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'BinomialExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'BinomialExampleY.dat', dtype = scipy.float64)" + "x = np.loadtxt(baseDataDir + 'BinomialExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'BinomialExampleY.dat', dtype = np.float64)" ] }, { @@ -1145,7 +1232,10 @@ "cell_type": "code", "execution_count": 29, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ @@ -1163,7 +1253,10 @@ "cell_type": "code", "execution_count": 30, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1205,7 +1298,10 @@ "cell_type": "code", "execution_count": 31, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1224,7 +1320,7 @@ } ], "source": [ - "glmnetPredict(fit, newx = x[0:5,], ptype='class', s = scipy.array([0.05, 0.01]))" + "glmnetPredict(fit, newx = x[0:5,], ptype='class', s = np.array([0.05, 0.01]))" ] }, { @@ -1249,7 +1345,10 @@ "cell_type": "code", "execution_count": 32, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -1271,7 +1370,10 @@ "cell_type": "code", "execution_count": 33, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1293,7 +1395,10 @@ "cell_type": "code", "execution_count": 34, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1315,7 +1420,10 @@ "cell_type": "code", "execution_count": 35, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1344,7 +1452,10 @@ "cell_type": "code", "execution_count": 36, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1403,7 +1514,10 @@ "cell_type": "code", "execution_count": 37, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1481,7 +1595,10 @@ "cell_type": "code", "execution_count": 38, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ @@ -1492,7 +1609,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -1502,8 +1620,8 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'MultinomialExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'MultinomialExampleY.dat', dtype = scipy.float64)" + "x = np.loadtxt(baseDataDir + 'MultinomialExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'MultinomialExampleY.dat', dtype = np.float64)" ] }, { @@ -1524,7 +1642,10 @@ "cell_type": "code", "execution_count": 39, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -1542,7 +1663,10 @@ "cell_type": "code", "execution_count": 40, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1575,7 +1699,10 @@ "cell_type": "code", "execution_count": 41, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1609,7 +1736,10 @@ "cell_type": "code", "execution_count": 42, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1636,9 +1766,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "Poisson regression is used to model count data under the assumption of Poisson error, or otherwise non-negative data where the mean and variance are proportional. Like the Gaussian and binomial model, the Poisson is a member of the exponential family of distributions. We usually model its positive mean on the log scale: $\\log \\mu(x) = \\beta_0+\\beta' x$.\n", "The log-likelihood for observations $\\{x_i,y_i\\}_1^N$ is given my\n", @@ -1662,7 +1790,10 @@ "cell_type": "code", "execution_count": 43, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ @@ -1673,7 +1804,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -1683,15 +1815,13 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'PoissonExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'PoissonExampleY.dat', dtype = scipy.float64, delimiter = ',')" + "x = np.loadtxt(baseDataDir + 'PoissonExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'PoissonExampleY.dat', dtype = np.float64, delimiter = ',')" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "We apply the function `glmnet` with the `\"poisson\"` option." ] @@ -1700,7 +1830,10 @@ "cell_type": "code", "execution_count": 44, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ @@ -1709,9 +1842,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "The optional input arguments of `glmnet` for `\"poisson\"` family are similar to those for others.\n", "\n", @@ -1729,7 +1860,10 @@ "cell_type": "code", "execution_count": 45, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1749,9 +1883,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "Like before, we can extract the coefficients and make predictions at certain $\\lambda$'s by using `coef` and `predict` respectively. The optional input arguments are similar to those for other families. In function `predict`, the option `type`, which is the type of prediction required, has its own specialties for Poisson family. That is,\n", "* \"link\" (default) gives the linear predictors like others\n", @@ -1766,7 +1898,10 @@ "cell_type": "code", "execution_count": 46, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1801,14 +1936,17 @@ } ], "source": [ - "glmnetCoef(fit, s = scipy.float64([1.0]))" + "glmnetCoef(fit, s = np.float64([1.0]))" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1827,14 +1965,12 @@ } ], "source": [ - "glmnetPredict(fit, x[0:5,:], ptype = 'response', s = scipy.float64([0.1, 0.01]))" + "glmnetPredict(fit, x[0:5,:], ptype = 'response', s = np.float64([0.1, 0.01]))" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "We may also use cross-validation to find the optimal $\\lambda$'s and thus make inferences." ] @@ -1843,7 +1979,10 @@ "cell_type": "code", "execution_count": 48, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -1868,7 +2007,10 @@ "cell_type": "code", "execution_count": 49, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1897,7 +2039,10 @@ "cell_type": "code", "execution_count": 50, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1932,7 +2077,7 @@ } ], "source": [ - "optlam = scipy.array([cvfit['lambda_min'], cvfit['lambda_1se']]).reshape([2,])\n", + "optlam = np.array([cvfit['lambda_min'], cvfit['lambda_1se']]).reshape([2,])\n", "cvglmnetCoef(cvfit, s = optlam)" ] }, @@ -1945,18 +2090,14 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "## Cox Models" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "The Cox proportional hazards model is commonly used for the study of the relationship beteween predictor variables and survival time. In the usual survival analysis framework, we have data of the form $(y_1, x_1, \\delta_1), \\ldots, (y_n, x_n, \\delta_n)$ where $y_i$, the observed time, is a time of failure if $\\delta_i$ is 1 or right-censoring if $\\delta_i$ is 0. We also let $t_1 < t_2 < \\ldots < t_m$ be the increasing list of unique failure times, and $j(i)$ denote the index of the observation failing at time $t_i$.\n", "\n", @@ -1989,7 +2130,10 @@ "cell_type": "code", "execution_count": 51, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ @@ -2000,7 +2144,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -2010,8 +2155,8 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'CoxExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'CoxExampleY.dat', dtype = scipy.float64, delimiter = ',')" + "x = np.loadtxt(baseDataDir + 'CoxExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'CoxExampleY.dat', dtype = np.float64, delimiter = ',')" ] }, { @@ -2027,7 +2172,10 @@ "cell_type": "code", "execution_count": 52, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -2055,7 +2203,10 @@ "cell_type": "code", "execution_count": 53, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -2084,7 +2235,10 @@ "cell_type": "code", "execution_count": 54, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -2128,7 +2282,7 @@ } ], "source": [ - "glmnetCoef(fit, s = scipy.float64([0.05]))" + "glmnetCoef(fit, s = np.float64([0.05]))" ] }, { @@ -2182,9 +2336,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.4.5" + "version": "3.6.9" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 4 } diff --git a/glmnet_python.egg-info/PKG-INFO b/glmnet_python.egg-info/PKG-INFO new file mode 100644 index 0000000..a802c64 --- /dev/null +++ b/glmnet_python.egg-info/PKG-INFO @@ -0,0 +1,100 @@ +Metadata-Version: 1.1 +Name: glmnet-python +Version: 0.2.0 +Summary: Python version of glmnet, from Stanford University +Home-page: https://github.com/bbalasub1/glmnet_python +Author: Trevor Hastie, Balakumar B.J. +Author-email: bbalasub@gmail.com +License: GPL-2 +Description: # Glmnet for python + + [![PyPI version](https://badge.fury.io/py/glmnet-py.svg)](https://badge.fury.io/py/glmnet-py) + [![GPL Licence](https://badges.frapsoft.com/os/gpl/gpl.svg?v=103)](https://opensource.org/licenses/GPL-2.0/) + [![Documentation Status](https://readthedocs.org/projects/glmnet-python/badge/?version=latest)](http://glmnet-python.readthedocs.io/en/latest/?badge=latest) + + ## Install + + Using pip (recommended) + + pip install glmnet_py + + Complied from source + + git clone https://github.com/bbalasub1/glmnet_python.git + cd glmnet_python + python setup.py install + (use python setup.py install --user if you get a permission denied message. This does a local install for the user) + + Requirement: Python 3, Linux + + Currently, the checked-in version of GLMnet.so is compiled for the following config: + + **Linux:** Linux version 2.6.32-573.26.1.el6.x86_64 (gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC) ) + **OS:** CentOS 6.7 (Final) + **Hardware:** 8-core Intel(R) Core(TM) i7-2630QM + **gfortran:** version 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) + + + ## Documentation + Read the Docs: [![Documentation Status](https://readthedocs.org/projects/glmnet-python/badge/?version=latest)](http://glmnet-python.readthedocs.io/en/latest/?badge=latest) or click [me](http://glmnet-python.readthedocs.io/en/latest/glmnet_vignette.html) + + + ## Usage + import glmnet_python + from glmnet import glmnet + + For more examples, see [iPython notebook](https://github.com/bbalasub1/glmnet_python/blob/master/test/glmnet_examples.ipynb "iPython Notebook") + + + + ## Introduction + + This is a python version of the popular `glmnet` library (beta release). Glmnet fits the entire lasso or elastic-net regularization path for `linear` regression, `logistic` and `multinomial` regression models, `poisson` regression and the `cox` model. + + The underlying fortran codes are the same as the `R` version, and uses a cyclical path-wise coordinate descent algorithm as described in the papers linked below. + + Currently, `glmnet` library methods for gaussian, multi-variate gaussian, binomial, multinomial, poisson and cox models are implemented for both normal and sparse matrices. + + Additionally, cross-validation is also implemented for gaussian, multivariate gaussian, binomial, multinomial and poisson models. CV for cox models is yet to be implemented. + + CV can be done in both serial and parallel manner. Parallellization is done using `multiprocessing` and `joblib` libraries. + + During installation, the fortran code is compiled in the local machine using `gfortran`, and is called by the python code. + + *The best starting point to use this library is to start with the Jupyter notebooks in the `test` directory ([iPython notebook](https://github.com/bbalasub1/glmnet_python/blob/master/test/glmnet_examples.ipynb "iPython Notebook")). Detailed explanations of function calls and parameter values along with plenty of examples are provided there to get you started.* + + ## Authors: + + Algorithm was designed by Jerome Friedman, Trevor Hastie and Rob Tibshirani. Fortran code was written by Jerome Friedman. R wrapper (from which the MATLAB wrapper was adapted) was written by Trevor Hastie. + + The original MATLAB wrapper was written by Hui Jiang (14 Jul 2009), and was updated and is maintained by Junyang Qian (30 Aug 2013). + + This python wrapper (which was adapted from the MATLAB and R wrappers) was originally written by B. J. Balakumar (5 Sep 2016). + + List of other contributors along with a summary of their contributions is included in the contributors.dat file. + + B. J. Balakumar, bbalasub@gmail.com (Sep 5, 2016). Department of Statistics, Stanford University, Stanford, CA + + REFERENCES: + * Friedman, J., Hastie, T. and Tibshirani, R. (2008) Regularization Paths for Generalized Linear Models via Coordinate Descent, + http://www.jstatsoft.org/v33/i01/ + *Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010* + + * Simon, N., Friedman, J., Hastie, T., Tibshirani, R. (2011) Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent, + http://www.jstatsoft.org/v39/i05/ + *Journal of Statistical Software, Vol. 39(5) 1-13* + + * Tibshirani, Robert., Bien, J., Friedman, J.,Hastie, T.,Simon, N.,Taylor, J. and Tibshirani, Ryan. (2010) Strong Rules for Discarding Predictors in Lasso-type Problems, + http://www-stat.stanford.edu/~tibs/ftp/strong.pdf + *Stanford Statistics Technical Report* + + +Keywords: glm glmnet ridge lasso elasticnet +Platform: UNKNOWN +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Science/Research +Classifier: Topic :: Scientific/Engineering :: Mathematics +Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2) +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Operating System :: Unix diff --git a/glmnet_python.egg-info/SOURCES.txt b/glmnet_python.egg-info/SOURCES.txt new file mode 100644 index 0000000..dad132d --- /dev/null +++ b/glmnet_python.egg-info/SOURCES.txt @@ -0,0 +1,59 @@ +MANIFEST.in +README.md +setup.cfg +setup.py +data/BinomialExample.RData +data/BinomialExampleX.dat +data/BinomialExampleY.dat +data/CVXResults.RData +data/CoxExample.RData +data/CoxExampleX.dat +data/CoxExampleY.dat +data/MultiGaussianExample.RData +data/MultiGaussianExampleX.dat +data/MultiGaussianExampleY.dat +data/MultinomialExample.RData +data/MultinomialExampleX.dat +data/MultinomialExampleY.dat +data/PoissonExample.RData +data/PoissonExampleX.dat +data/PoissonExampleY.dat +data/QuickStartExample.RData +data/QuickStartExampleX.dat +data/QuickStartExampleY.dat +data/SparseExample.RData +data/convertToDat.R +glmnet_python/GLMnet.so +glmnet_python/__init__.py +glmnet_python/coxnet.py +glmnet_python/cvcompute.py +glmnet_python/cvelnet.py +glmnet_python/cvfishnet.py +glmnet_python/cvglmnet.py +glmnet_python/cvglmnetCoef.py +glmnet_python/cvglmnetPlot.py +glmnet_python/cvglmnetPredict.py +glmnet_python/cvlognet.py +glmnet_python/cvmrelnet.py +glmnet_python/cvmultnet.py +glmnet_python/dataprocess.py +glmnet_python/elnet.py +glmnet_python/fishnet.py +glmnet_python/glmnet.py +glmnet_python/glmnetCoef.py +glmnet_python/glmnetControl.py +glmnet_python/glmnetPlot.py +glmnet_python/glmnetPredict.py +glmnet_python/glmnetPrint.py +glmnet_python/glmnetSet.py +glmnet_python/loadGlmLib.py +glmnet_python/lognet.py +glmnet_python/mrelnet.py +glmnet_python/printDict.py +glmnet_python/structtype.py +glmnet_python/wtmean.py +glmnet_python.egg-info/PKG-INFO +glmnet_python.egg-info/SOURCES.txt +glmnet_python.egg-info/dependency_links.txt +glmnet_python.egg-info/requires.txt +glmnet_python.egg-info/top_level.txt \ No newline at end of file diff --git a/glmnet_python.egg-info/dependency_links.txt b/glmnet_python.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/glmnet_python.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/glmnet_python.egg-info/requires.txt b/glmnet_python.egg-info/requires.txt new file mode 100644 index 0000000..ebc1a51 --- /dev/null +++ b/glmnet_python.egg-info/requires.txt @@ -0,0 +1 @@ +joblib>=0.10.3 diff --git a/glmnet_python.egg-info/top_level.txt b/glmnet_python.egg-info/top_level.txt new file mode 100644 index 0000000..aac4a62 --- /dev/null +++ b/glmnet_python.egg-info/top_level.txt @@ -0,0 +1 @@ +glmnet_python diff --git a/glmnet_python/.ipynb_checkpoints/Untitled-checkpoint.ipynb b/glmnet_python/.ipynb_checkpoints/Untitled-checkpoint.ipynb new file mode 100644 index 0000000..7fec515 --- /dev/null +++ b/glmnet_python/.ipynb_checkpoints/Untitled-checkpoint.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/glmnet_python/GLMnet.so b/glmnet_python/GLMnet.so index 28ffdcc7920330f7b44746703554c18e69760867..8f1cc76aeeb4a98ff6462bbe956a931c017c7ed7 100755 GIT binary patch literal 454320 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%0A_l$1o1!-2f0_hU(osDS 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πTJ? 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 A}4nxIM#FW%i`ZXYaWq2d-%IC=poRz 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

X{AJ4+fej7Vi{Zd0zo8L2 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

WJJu8kiSl=gQ&F0T<7bh7$CBTgR?OH$Z8! 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

V%qLVQZ=3~8# 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%0DB!SgxuoHBaOh5A;lzHByyA(`A_- zkf%0TfrbFAB%q0sLxOOP`P_7qtom$h4JwfIA+?-RQJ>7DlA>l?054WXePtW3E>wFevhmI5z%=b3 zP$ba*DR?GPla9L5FjGb3VH}wh#fPmY%;4&@hkYnb-YMGVxnnxP?-#Wi42p zG4-lNfK4x+SdzTRR$TbUiU$^GYNG}B$?a$Cw$R$;i6y}j1Bqa8TH(-#TnLA_5U|N1 zOWHZ1oVP+b+bg2yKJBZB6g(zCczQu9Leuu-%E}GERF-s&@jR5lqV$Z1=diCqvN8$z zSDgesAtom?T$7W?UmFo70bWCmdqFhP*3ItHvaZQ$xgJI(xhn}+Y!z+~4`Hh;iy2!b z^}V)AkPK`oJJ#vON_GU3#>#VP#)?|U{uT6Xn#2#Mft?(h+^|;KRQ;nLB5gxkD?KaK zT1nuUVXdU%KTXV)bZXdE$$ohjdu1qd+k^B=G+1zeISa-fgT(-X!IEOP!yw5{J7chH z88$zV%ejDSu=IkOJ1WnaG1-Npmy$f$5S{55w#lUy>`KcN5^Dde65x4)9jb{e-5@a1 z^h6d)XXuG&8+D||mXc|jf7J^ZPMJz#YArN`sEiDqkjxrZLs&DUHah-(HK%$o2&Sm= z{5bT5wӮpRo+DHpCuM-)HUJR!cjlp{oIs+?vtq~4F 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

}t5&fXA-h#9{mLrvXaD2v-ZYPwCxq#FMyt@8 zteS9U2rFW>N^8){YN1gEy@!0Q;mWM4Jkaj1DrQWcwXyZ1JZegfyL@~Rxy!U37h+kX zp7HLIKnoJ>#x&$tX(Tu;iDCiQtPmf8%q4mzxe$a-3`GJzGuQoHCBWcKq@p}yE9=*Y z4Ms)tfC{lOdAY`1RKj6JbIZ;~V_e6?;1R0)GT7CR180&pK z2*cP&S(m-N#Z!^vUVz}e30WEg4V&>v;U1w|@X7Irb2QuVIV(OK0}Ztc>?!~1>-t^= zJvk2P2Wll6Xt)fJiE(Qwf~%PBTL{GdWUMIs8559inpDxiSfU<&?DW0?q+<~PG z%Z+rbi9E8qvlz0O*X|UF)l385w*8uyfoGK=tp}Zw6lABw6BP1FDqo$Jlji6pqEwRW zVkAF$Ob2H+e#;}Mn=MMavbYu1M6yJO zT59Z|F}<;a#w*Ci4jMx#XmE0+bShA42aQl^Vh625sG@P_V=!{I#i~LKcA-|}H7&TO zDfC86fqW(Hpy};%9DI&{2}GEm*OGlL&O)zd$7u=0<&$c7=GYn>eIWCfPeh++Sc+hi zTPvHWC9YlJ4_L8COJKzhkWmk(!j}zYxG~FgBk=JNWjrK9%pZRkxIF_5b3p=A^zSgX zSu4b%=7SV0!g`@n)*+KF6r%V4F3nlh54v9nc%u`Cid8NL*L@OwLMve81xl>>x0_zPr34y!Vr z5wuk@c_g)iKwuU?lvCF*R;PJYH4e1p2HHaRjkmjE8E<#I}Ao1U=ASEtsC(3muW z##uNhYQp*lxmd9nLGy{4DUG0Y0-ceuyYOjb>~4ILg+j(o;B$B~_Ndvm&IhHa^E0fX zk+Ba0Wa4+Lq|WWg2hx3q$vIGGiGvo-8h-1y&d|<)MBKN-W%=J>O-LoE>1SLTv(eGd z@(gx0f~MG2x)vj7N@7pk_KcvhSFz)PnX@m!Jk8@GPtypRq_Oh!IjkcV!K{)EJ59o5 z{TxB!KI`W~2~53y&X&k^%6b?CC|xGVTY@YE-gofY z4t<~jdF>Np3gXowF`*{&L}%sg5vnO z7&2F}KO4OSb`zkN@VpQ(Cac|!;sO{>19!#}*cwigC;L3ZY1FdF3b9|qX{KbUbsD0= zO&V0&1~Ph2p@bjX^yGO$VFu-_WQDo#40-|jzDU5)ZZgv>6rvD8EsmJJU|78uwYiIQTUJxdEbSE9Kiuz+)IOKUA0FH^r=F6o^^w993e zfE}t@CDl?NYkEn=XAWMjFBgGqDYQZh5Im?>=p&f1zJ8XSu@5X@xWcZ<-RV5GgpgR*2-cS|NUWS|LGc zXRNiXrsWi{Tw^8<1R0i;Mka~~S=m`dU|122G{WM7H} z1i&r^sd&hK9Ac2tp)C&$m1d3RVAWC!iq=@}so4aorP*Y#S{c~JRTF&d+SIwS+w!}= zqgXj87!nFhN_~&S1dCTBt6%c^_k zqgBWOM7?YdTNn-?@5&|fJq44Jo@^@Ep1H0A<1%RqFW-#kjAx`r&=elYq^9tMIxX=Y z1c0sVf@AVjQ+UdC&F9pN-4)@dtz@eviCDuUSJLw+LR?6)9LE%=gVyk5kjFMs z*7ll=kE8WS;~8ss%tOvXZ7;TF3bEv&O}cmnpWTvSnv|6zal>qOCL&E_O*ohm<=NT6 ztl<@UmFAmcu$6}_FozVU&kx2}Yj|-sC5z3*hddr{RmR^|sMSd@+B1k3iCrKD@q}>3 zkO?WxLou^sozmA5XS2YTS%Q~gx8s3^W4#*5L6}LGvQk~1DE;?FNyFUqAk06e*_oDO zK+c_Q4a|c2wlG8{iRS4!odq}6lI%8|*6=huFgy0OhUay`cUDe8lccbQm$8G&-{Q1{ zFk^jfnM0lpG}A?BG*b1mYF;dNk62t`T3W2+^_DRY}kk z+f^TdV6y#GE12A0-&ZhcslzxhOX&_kCa$=I1Emjpc>jV)F?gGKOHlb^6uXCr&w~W2Wi4a5H28f47t7s$i$axgt68AuW)(-cz0 zkf{!kiQ{U7OpA~Y$h6et92R#aT6HvoZ-REsj=cd~4rT*$uV^Gbjq)iApQdhO@HxD? ztvlJ)EslDG>vkTiV(Ru?Kqey9Qnwzh+b&Z#ESn7*;F1@rB%Ti=p9rpeF^>pKpjk^R z`e&~DF3OGp(oU2(&x#4WrH@t#@AR4%eevK^?Dv=}4u(`lz67Q=>bG*TtfgoyIiX00 z97zC5)4gT8&CBj{K`Xl#I3)zug;91Ta8CcZLs)o#;mcP`v4XT^T#1(^#S()pA0Jph zipyT1gDG?dkAaf^LC=LJC2`n`Ms}rIc7<>;sTb0H{hNkKcd&40XqaHPVYvu{F;1Bm z!VB`}Njp8d11seyxh|VWQtZI#23a;YE=pSB#0y?2EO9RC4@KJJzUOX>i5`m=c?y@K zLUWAqDO|4Z`!U0Le2>oz=h<1h&Btj5ZI;3e=kb6*ak`10gkHrDr{ICBV2LvWB`}sa z69~r3+{cYqOPt+=8dM!&Epgt7()ulN(r+zsepPi5AxoT6U2BOmG{feh4M6Dsts01J zAWjMm#1;e(s(~QeGBekQ#kRVpShn@d^1f{A){B#D>ra48e0y0cwiRZ{I+}-}fgrm@ z=OhCjk_IBkE?@{69D@`bTmwP!TMY!iJq<*FM;yd@e{c3Lqw7KKVZl z1XczwM#lX4&9($ia{cGGL#2#A+bM%JA$@1K|l%rhs^K2=IM15HiSP z8_BsawmM~*IcyDt3{zaBHv$vZ>&gpuCLUZu*7UEXfe^wO4FoA2&_Mi-1@?(Po(4i| zBpQf&Dp;wc2I3O>{r8OPKL0;Z1M#)|_ospQBGP>n8i*&M#_{l`)5=YZs@1@|&?+=sQa&N|VO>rjv;y!?EQ)G_2b z9FU2JN`zdpSo*+A>wt#AY{RGqqC?0Kh~I#vg;Ai5ZfzfsOq-Hq+Kf-LO5b8w|NAr6Fn{q&YohgV8`}k?f`>))VA^0S$yy%W4r4 zq@Gb`*s!NGOwik~b`2BkHtbG>4Wxl+iOLE(wHfDou>J?7#6VB#CI6j&lJ@h~@T<6( z$C5wux?_+w)w2JjqkWc~uRF}srSpDH#;(9AyH@%O`}n-lC;@cTixFkV6RG@d+9LH^Od4QHOOB|B(tlQXxO(NDlSf74!iB#i8xam9InhxgI8;$2V*F2>M_66Nloo+QmvtP zaX@Prl)vp311Z3ZR;kT6TME#OvsBZlvZV4n+rba)8ZN@AR%i>mp&&v@bEs8}@i4|% z?nuDmj5t;pPf=%9-&bGnnl;Gy4K`aei({K7+t?nwOLjaD;$TpX1hsgRGY3_mG7&r3 z+=%Lu756hFKhN;5LBVE*TMmOmo9+Zyfg7OdCZmoa%~BqU3$&x7SwcNYXvd_H4ODg*IUsd6 zC8_&i$p-&*tflTFpk!D!xRJy(^XF55Onmd-gu24*Kj0>gZc5amN=793u%yC0$Ji?E zLh-{@+QAx_Dy6YXKc6pET7-i5He8BhNd^8gj0Np5I#bGQF7Ubo(;^1szyU^p$8bn_ z8aZ=4&2Ay+_5%9=w-4CX=B!J`i^3qT_x21Kdk-* z)u<>VE6Lc<_cEbnlFkO-YJW~#7Ds&R$fdS zAHK^Gl*Rx!3b)G^JTmY(NW?zSula0nhKx@ar(tRso$;VF`nSEm$)||lbX3_&`uRmgnikYJceG$EV8w$>Mh}bi6bywS@i%u-MR08cR zvPgW|46)V)l3ZFNiF2-i=vzgxjS=zLD>|Fdp7Jz=|IHCJi1%JxA;95}w@ZuSWdZm- z&OAG|bJn=WX2sr}HSWJ=#a@^-?os60$u7c&NyJj#DrScx@6$K3+?ng1;Z%)h;~9)6 zBT!dXnPlO1J6;K(4;+0BT+nPf?w_zy7>cYZN`m)2)_hehwiCv)*dC`3eMDTJarKcF z8*62-ei2wB07vd5j`9`cF17QHq@_HKi!yxclEoWg-UzfLszgOM~I z(znI}(YIeh;zG;;epBq8`E}x#gHCb9F9+{%uE`wt)o5hne|U+VaVf~{H@_~Wz-d!c zp4d>#ubUAVHoyJ?bZ_2DprM03ub)eyE1TrFwYlggB65lghYi!i_c-;=Xv61FEeG}Q zbN@5#5t*(cu~E;Zyu#UVtw&PWFGf2ik0`aY(r;H(-?#4_%-)2%cUuqxe!UdT7wI|f z!AmwvVCwrCn-GWDk*o+dpf-rFzxx^=`FjT}{qWv9VAYhZU?_~kkkuNrvRddvgTHrR z8b0;Q13Bq-wVEf#2yq5XdjJkf$iv@YZfPwU*EH|KmD6WOU_q(zMmqK0D7d#zRQS|9 z(GIlgz)*b|EbjJp)XT0idQb?XdEJKKLHB|wEq=&4#77Ue(&EFj`$~)7Elx^{PXaO# z{caUoFDd$xkBl5WN=I(0^=q-Sy3Fc?ff^I&xe0 zJv_1V#nue?+2K$toZ5LFT9W3r90SwSl?vupfU!E4E$DhkU5F8u`qIpe$|=1&u6Llg zNT8xcv;!Rk=8-x5gGBx1KyB!N$y!{)_x1hh{uRkg~pS7 z0Y)_+R0x+!o+ca1e6b{lWUzpuMEs~RNNWT|F9m{3@%=i#h~~W6=8Q=S*jn%q+%EJY z>Bi={(zDe^+XLj!8iNp{15?aJBMS+QG zF+2SA_m)Ab=iN+hr}ulXK-HzGuzZsgK_Y2cme0#0iIRvuoyP3Q=Q-FyCt1W?eL?C6 zQ11nJe>Z)Wle1`V16}0YU^_|GT8yDD=LV%G+PE&Z8BCC{IbzxDo|^=kK(VYOqPZ-m zyvBw#u9OX+9RNizR$>demgp2O?xSk5>Cp&~WUf6;7=ye9L+C@U8N-cqTn{p@FJwlK z0tB8`CvRfrQ5H4)RLjaL_8adhmX^4ToA{`MT9na=&B|68J=jOU;+i}MZ&V$G+HpuA z=j5X;SBz-*ShHl9mRb~Vg-$xcbDJzw=Gt4NSe9^dZ%8XEO6x2!f95SO(LEb${gm@a z185EBg%&&M8$@<5BP%`zJqpP5;T9tM941`8zk>;vMX)dG@mrn_x@H?{s-nLrMa+`F zwOuFTE^*WxZY;=Ayrui#FX>{k|Go?zgd z_~c1QBsuG&lSD%a4QiIeiACVn+$cB$>XjaOaq_-d%{$UwT>>&7nQ)veAIE9s0L)zX zE{ZDCf1B=d#1pJ}%SQU_`0mkVv5*M5FhW??f)~`&u)1PRG0LD$NoAwi*9599jz zF??VbMeqkAjXwC}i+9NpLs|&DH2^v?@Sz{Na!_4q1PbE;kYv;xnGeyL7U(4Q~&Y_+r*DE zmEE4&nK(z0Fr}>yR|N)1!6DMbaYb^Ahh(iHF;acv5Jf_-K|+z%A~}APAc-iF^E@PH zD-r=kbvjNHn$T;Ibo!8-J6e#WE0Syv$p}Rvpg_{BNa!_4=K890up+r{q|oFs_*6n{ zV=D9$f&$5DiiBQ+WR-91T&GAbS0vYZNSYLhfC98le29bz8cnkGpA1E_S1xmhw z>n??&*Wl{b0tu9S1L|7}MX!M}{XwAQ8&IVRs zy(UL976i(6_P0(EO87cE+Zeq=pyV649#SZJ4X#B#DES7|4;6}D1GU}_=i-9dTp|fFh8} z0(5CQ#v=U|Oqgn<-XDsUN)Zo>?kswglRA=c-oP;qTBSFDv7+{tqHWWQ+B4&~VV#HX zSkVsr$Lq|Hbz=`~f9+_vkMD{V-P=-huP4i}K-^d_>TD_M^g^YyEqL-XR@4m~Ubunw z{Dk8~hs~a>qHe#4*m$wYCF1r$ki8zICMpWIie02$!9KrJLWftv_E=FzOHsR5u71kN zC!2GNx|3q;9FWsj&JcoNIVJJ~mh=5kGBe6mny-{0B*9Wj!-97b&!&5xg9~0 z2J@0gUtUk4<(jKH(oA|0x(8_q``!RrPxADqi4{H7QuLHp0AHU>G#BkaE}_E7DqpYj zrs$V8Cya?5(~CMXulp2xKF3E#?D28i5sHx#dve@wV_gN?ubS9W^r+?xkl5MuM2TY^&ASfDTz43mrez4zi?(I1eixj+xoTTlbI~>si7cU^6|P@%ZCd5S zAN4IH7x~T(lieVlsJUuL4QU6iZN%^UGce4gML5T+2ZBzKt9Ov?p8wEq*W;(0xcQBd zk(L7rkIHc(&AZ$NXpcWL37*WO;eUOk3*|^UBO2e1H18NGDI-Xdcq|{Y0YZKYeCD?X z)5vT1+k?M@Fu5Lqzc1h~pA#+qF1H+v61&U112K=!4_2kJ@hk(Da(J5cYQ}c(=FOu||JZ;Jl`fUJy2>2U3I#0=)I0S~9#6Kl(C=A{QKVizS z`qz}n(}pmvFS$J2U#3i%Fsyz#Wy(;-nXevGrVg(jQ-@OT%d4Er>z%SnUwcfOGKBW? zm8&3s2>qkHqS9G%v9n~k*X~m%kH3{RX5WwAeq#1Tb5FN^5-q_d(%75UU8a*`!Tsv%yWK@_Ul_H=T@UxCNAGdl;Z}ZekJ|(H?DO}yIUj== z!wdGf5xA2|_qa`PS6{Tp-2``3IpE<=Tn%`*SFPFOj)9Wx+wnbaA>7*@+vC>4UHAAN zcLUsg&+TzL;GS^iUUwJVpU>Xwj)kIR_P_0Q=fdqccdy$7cl+1(x|`wtX5n793vTwx zz3xb;R*To{b@Sn-e|xXH6mI^Wz3v9MZ>`(scEEkRb)UNnZe;U5cP!MpKl|}McP`xA zxAwWK;QsyXeeM>xTi)I0cELS)&py|Is1w7noP#x96{eNlu-3@TB9kbu< zfLl9$zqnE~_q&_nzIDZZw+rq=-`?+zgi`m4p8ak< z+~<4uyG!BDJ*3y&0QaQqUbh|Yt>b&$9=N@y_qsXI^Z#cJ@e2a+U-RNGK=^wD#IHd7_>=lie>38j z3=n@W;=eyY{0oSGc7XVOh|kRJKY#9bo{jiVQwX#5PtQ(c1&>3}DF`nF54aj*A{oCS zt@(hp8S(V=mk$8oiHIr(-1nyLc7IM{dw32^YyQ~U1LFr=m$5EAee+>LHOC?RcL0AB zPAVOZzU9G>xV!nlwFksAu1im^9A$tJP52#vKX}1z_w5`XeEPRX`0$_qSs(s?0RGXY z-R=|6)qD8U1LfH{+6R9ecwKeNZueA-2@l>^o@);dmS-N|zX9uWw|&MBzuH%vBR^wP zkdCVX|JE;dyW>%=B>wZ8(?>jJ!Gzv-0`8w%ce}JH;=!$G&RCnCK2;h8!K4TIbkVPN zyW8P= zw_~6@u5Css&l`aM+n7CW8+c-}JRM%Y>N&`kM(KDI=A4G(_PEcF_ra&17~CXW2jI@iu=tpNCE{mA0e6NEF8%xdaawb_Nx=MX2KEWam=|%{8#wk5A}Ku%RLY9%`^A9H({Re!>6Yo>6L?UD**Ry@m}{Ef%<(D z?b>6rmwtO2;39MOy1N78d4Vtgo4xT&dOQXA(O=!`?m>S~=I@8!=(Qi=GcfL-pSRaN zFUJpG?Zf|y*DnY^8Soj6kWm8k{)IP=R(iG6{$39FQCIDCe-)s|EgpP!2>v^Ozu}vE z-6_j_5Ej7HiY@MAXab1x3G*A3{mPXzky3c!8+`}^D#GkxVqf7d@A zu9;y9!gAjU_&ffx&;4Bhub;1<;`IZT;|0J^e`TNB7U&1xKsiqJ+MjS4XvfZ1_qo?* z_{uS2FW{~Xz?}%ViEr+6CkOiL571w)v*eO_Y98QDgDlz-$oEG^Ecm08@hD`q0&qWg zXP?WHS6(}$7YL15uA32m|KInyzx2nCxL@&%ct`S-_6OW-$hsRp<-;@Lm%je{(kE>J zrTqc_p9k-EU-84IPxrUy9X0{skHfgHJ$Ao)H&;)d{IbR0PP?a@3|OyufPZt*epeR# z7Jfv7SKbE1pIy4&y(iF){_#1_Ye(jP8{j+2_PfXT3*QmwS5E=Htzy4>4f?rP-Vwj{ z(PIavbVO?Z&cJ+_S+(DNE%VAADe5yWLKM(*GU>{2dEjw~JaGkMH>B!6_?kPhh{=2lzQJ zy6!gv{fhI$f!_QFF!`zaNzZ*SAnaEt#~C@|^YTfS&EFi(0r**eNyxt}xvS$Wl32&Vlp{ZzAC9s}`NtS|&{O=j z98gh+{|w3;_~9(3_$?hZ^rQcuW!f{G(;U+-3yoWC+^dXxopEn5?%l?{&$z!g?u*8K z)409HJ(N5ezt0*s*SMz{caCuv8n@cGR~h#@C>bI1 zH*T(RPc!Zu<1RFAwQ;X9?sdk!#khAH_detP-ncIs_f6yW8uw7@4w%1jbB%kNapxF! zp>eB?dzEpoGwvY&%}9p4q}lu7x#)XPf5V}~{XJoThW zT8FH@yPW;Q2j1=ib^+;M)Q&m+_-JnhR zf&Oz?kjGiRNF6DE*5!QS{~5OH1?A!kN7-v^dds)1`>2Vq{Lk`Fiy$8#d8y5u3-j3sLdm0Tddrus`;19v%WvVVJ0J1n`POgw zzI7Lw^ejJd*z%iTryL))ZVa>YjCB_=5I>v0O>gU8jW~b$E;H{~*UocHPf~`{HzABP zvGb~(m#u5_0f_vVm;YA}k3W6B;q%rl3?;B$ir)NPg+G7#RfgYKH?q@~Ou!wRPJPg^ zhSFO(!n#Imu;4-~&x4O^O?umY-9`?vt|wraMB)6e52t@i%iC>S>TLZ#TYnq22_LM# z1>5$Hrnl~KnHExA+kQ6m$M|4++dsO~RL<#6Q^_S<-f;SRLg{-<`ko=C-xf;mSh-?^ z<{!>4>~9ODw{qslA*O#A=}9qLe=FByne?f5QjEZ2jk&^m9#m zTTcrgPX7iXn17xHFs@C{ePREPu>4t<+if;)i7@|uWb)_zC;!i;vtjgyNF-6+hZ_2u z{!j5KAAh#|wp}QHr^{* zHEa1rr-<+qOnBC>2<j_#0o-@|>qqd_B?=|5I$#C$KGZ}CXgpffx zAMu(>8?sl1@KGlGyFVo~&Pthbe$s^39HZg3oX48*$1c`-$=(b=PLgni_5VNJz#o#K z<&-@R0DRemUw;!m@RPkpxbynKv%p2Nj`f}Jyhg~`4Se3+ z5B_Hj{Fv92&a!6<_`jI&v87sH+3Q01>n40%rnZ-y-9Y#*6aM6%@qwT0aq*2a97-=grcr-AS-Cj1X?D!lB~B7Ca}KRncL zcbM>>)heEH!1DK)39lgo$4|~`zzXF}C+UNzyrc@rP_$zCAbf5Mvu`6nz# zjX-v(<`2^6A0zcV1h5HE;e#5C+PC284@WT;XZ`Sbk_kUd4r}4;u{OUm&4kZcrSNi=5T9q5@Ua_|K5}LR z;j>NnuZ-Mc>GO37R~-KT%MJYFQN<%?RRB;g;eFS4mmBy4Cn+7|Y!l$GHsLQktOb`d zQV74+gx^%IbdWu37N86_>`InY)l`?%HjIAwJW^$m@S7w48aB_(Ih`^q^b#k0OP zucQRNnE~II&h$l<*OV-&thuPPvP87qC8do`4wToml@+)$m^*dSHl=En6aAQ=O`6TnLo!0;jJ2lB&`s0iNL0RxPWR z&pfB1sY*hpL z^|hjTCG%#SQCvj&mDkslEG?}rudJ}dG!>h9-kce;XPxPkELmJr*HBklT~bqDQc+h| zQ&(7c_E}#!XWlt8=9Emx&2!3Y8jxpWWkY>!MJ4W5PAoy;Y5`O{>x?r?Cgx7eo#K=& zU4Ch49V#B8Lv>B{6%}+Rr zR=e|w><)PN}5|augWlg0dMQP=- zD?*u=as@Eg;kxWHY&l6UDJg9Tq4wGq<*KZ&sjTKe@CXG=OX_MGYbDSUsHPER1+>>h z$!Y{L3*}T>b6Joi$v#!StfIWcsjWw!o@Sa5JxIH+>3Zy2S~>=6QWm*pN#(NTXhsFL z4UBR()-Tug!SF0uT*?31);bdBqy*b*hT$cv>9tmh zw&GwiW4^xD>zQb{`dV+mNnw*ih=l-~D{ClWUvlsd;L?#%4}sO1d)-SbYr1-%xE0mq zcEq5*b<0Qufg`Q#cqwc0zD)JO+Ab)8lLB`&Hiug6zKWf{6-h3rC_ w8cS9vd|l0Dq$V2G*CJ*1+q4VD40w{XVX$N9_yBI%NnLK5%4>5|f)eNd1E-I-kN^Mx diff --git a/glmnet_python/Untitled.ipynb b/glmnet_python/Untitled.ipynb new file mode 100644 index 0000000..14a5065 --- /dev/null +++ b/glmnet_python/Untitled.ipynb @@ -0,0 +1,100 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import cvglmnet\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "X = np.random.rand(50,3)\n", + "y = np.random.rand(50)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Option grouped=false enforced in cv.glmnet, since < 3 observations per fold\n" + ] + } + ], + "source": [ + "fit1 = cvglmnet.cvglmnet(x=X,y=y,nfolds=20)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from cvglmnetPlot import cvglmnetPlot" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "

" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "cvglmnetPlot(fit1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/glmnet_python/__pycache__/__init__.cpython-36.pyc b/glmnet_python/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3caa67d394a69a7822c1a46516f43542102cfab7 GIT binary patch literal 1359 zcmcJO$&S-N5I}7wlf~KhJ+lMDHtdUp5E4jS5E_YFAFxcyGviT}+p?X3IrA6%0e^t_ z1Af6*PJ93tPIPq=1|d#Jq?PAauI}n?+kLxIvA=)#^!m%1VSF`y`;C-8QUCa}X&7LD zi3XX%G}$e*gr%<;k@2jP?8%y!QOs%Py~2Bwo9df^EEcIKirUxECR^Crb6BF1C~41Q znaZN9y?_;}h>G?iR;eng+HI^+P1LlPuugSR*Ivd3HAF*u1)J0qP3=`|QA@P6*RV}( z(bita4s}FFdjq@F6`_njw70NNebLw6#sLk)Kzj#=G!#SaT^!L!jI{S~Ok*+D z-p2_|#6ty)yP5e&d(AXQnmx zO)PPqc#cn@jFOk%)Qjar@dzpKl2=}$g4`ldW-sgjCEqVCqsR|9Tqd7N?@&dRRnh~0 z#_7WB^jDqo%9ovg#mmaIRsJAa4bRQwJGCNJC_g*(aG|Ou%A6>n zm(gSN83V?Uk!A3~jmC@#W2&&XD{RL(oG0_hbDYRhx6({}7N?es(`@J_$7#+DLoa|d zdm{ZH&4V8WE_rD|4fBx)>Dqtnq`(vWzwP{GCu!bsTtvtDXhauzcE*oe`^S>JeHTIQ zFTOh`JWGyc@JHl0e&8pLb3Hsu3y(;`9KFYU3gTx9WwW5#*eaX<(5$LiHS6Y2G7>`! literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/coxnet.cpython-36.pyc b/glmnet_python/__pycache__/coxnet.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..772698ccf91399eed21964d747c15309737168f4 GIT binary patch literal 3127 zcmaJ@TW=e=6`s4~u`OSs*z$cGuXm$te9h%y>n;ieo5cc!yXY>qfFG(IiIhCbTm%l~ zS_btJcOMtXV;}okpg*8Lpud8TEl?nTp)c)6N>SuVS_vf2`Obxhhlk`mnVLmh|f5$o6?W7kbE5{zmA%%6$Rq=9Bmuz1zP?u*D$zoYYbO}L$Icw zu$H#9W(-#+yruaXH@lWtCFU#h)?{bgCiboQ+T@P#ZcU&T`$0*o#?T|qa4p5EhijnL zh0%3k>k&_^lhV)j&=8hJN)yBqb^)=)YQbt%)Cx#Vcm>20ZUJ$HuaWn2`C_)9Gb`o_ z$edUzAWLLpxWUWa8L@F|4mYtLUsS|G$I>e+|7;Dn#MV0-?6_K|LdxA)Sk0l$-y(0r zZK7-|qS7%jmIy47u^q9aZ4u?zRw3_gXS8iVwzTcS9ot>8Td-9~(e?q^p0f4E^X`eg zLd*(zZ##C8BxB&>HMJ13bUhzib(AP#QOkoKS2B`WHi_8 z6r!_)8Y;{+iB-!dT;)#W3sc;@SX3Np@8h24#qyN)jHuq>?!Dv0CVXs*Ks-=$ipStS z5ua-M;V6UR5p*|ALp!DW9`f!YFr2Z3~$fgIWuwPzg6AMaY{QOkFIDyuV~5x{i>uH4|~-y28SCmEq}pgcuMFQy5c zkA3C6kmWSE4x)7YtlgZx3^^Xc(bE=C#xNzManxiX8|Zg2_+pH=;5hhYaP#HwLY78p z=ZoMxOAp%G!NhXxY1%>2{ueJUY3o(MXx@)`u2&hhT74F_28Y47A>$DuLL6x}(P5PL zSxU)a2g}sIx9U>>@2eADN4a#Gl!wwL^h%b}ejF>pB5hfU!=y>VKG0s6=MLyNwxS1+9{jY+ucQ-Wvc6jC(Kun-H!NQ4E7`F ze;*%RW(hqCW0D<>jzXh1;Fnoi;6__{*c-5WFsq>D|3GKBp1o);niaEb&Y^jhQ+CYd zkNrKz^sOo+Rcqyc^h#sgT+fHGN6b}o8*x=F4|G{0s`nuW@9Fi{Jy~j?xLXYrbJ|ak2K8;swp6E1mDbW3 co$5jeWcdvDTR)~>mcZpI|Bj{RL6p{i0Sb*u^8f$< literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/cvcompute.cpython-36.pyc b/glmnet_python/__pycache__/cvcompute.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..17cc44a90b50742be3a76c5a36adc9704d25daca GIT binary patch literal 927 zcmZ8fO>WdM6t*4br|HayMFkWIh!8>=3AKxEM+m890gKs;1X3gzh1i*-Bz8!gPFtMS z06UJr0pJ9j#amXr0xO;;2o-F-zwiC{+0RGgap-*i@#d?8&`)%25zwCkwGV+Y6eETi zDRE3dI;B%Nv4at#%>9UB%E$suy~_{bbD?-6k}_JAmEbDMI+3bEii2pud6bl`jMB5g zcMyihvZ_19BbD=L&5Kp8IEyNth$s;(TAW1dLgj^sGFh_r@fOUvNQZ>Qvq)y!RGSfA zL7Qkk#l~AJ3#8NnuqHr0&@oU;F+vJye2O=i;diuopvbACu|*i!M=QJ`JqCxxQ161}X;&kN#}E%VApRceJ&?h_p5C`UjezfHw81lU{!)e7-QW}S`b8hW z8NoZ!gHP{dP^}N4lR?{6yE@dn8=^fOFc`oml93qKdo zofxO&!nkdo)Z7qJ8^7U$5xgx#Dm$Sdvr5hlm4dg%nJ07OUh+mlt)eYNX51zbE8f_T zWt_IF3}r>CZ0Rad!%3c z4mpOt(^`E)&0Vm59UbPf;)hAe^mrOD5Ch60Xrz^+jXLY_Giy*mib}-2<-)W|d@J P$)9*&wU$vRIU>IS4~p|B literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/cvelnet.cpython-36.pyc b/glmnet_python/__pycache__/cvelnet.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4868ead6c5dd7cfbe2a959b5ff20a192de90f304 GIT binary patch literal 1693 zcmZ8h&5k2A5VqZa`JYTOKgndZYH>j$!7Qtl04>9c6|e{a17eU?Y5{|%?IfM_-`JhZ zBywK}99NnL;053bIPx66a++7*0_7yE7P@6u_2;sy>Z@`;YBp=#-+ur8?+QYHqE{XZ z^bcUjConM-Ach%&?v6WbXg$-uMc47ziT6bb6aRLYQD)U(7CmgtpoTKB~@?q`M zwBRD8u^-Myagy@FAI{RSh_dv=Kj+-1vCLksoz!Y~;1-=7W8K`Ce0rW!}gt>&jF0 zsV5#6h*eabRaYi6uqd!{R+!bMwm4Ika(bw=3No>jHL(?**dwyS@a^oOvH{XnE?CzO zQP~`!vUM{qJk?y`kI;ADmOIK-J5y4&6;eBWG^wmmxyu@Amo-mOQB}K&sP+)|(TbEE zILqGHu@)e>?5d7xs5Yyq?$2aMPLXO&Kwn{uu6}%uz`m|pFgMuF3sSZqz9y^n4Q|jK z)i7DG_6q_T>;ckN7OQVFAmu)=;!Mdc7LV1wYV;7>?V|D^eG71Jjeq?gya%|u#wT#r z?q&_5JXrJ693a-2A~@|dJhc@Q%A)=K0l(LZA5`3z3Os*I@qBOPR&cVjJ+-(iO(%5lus` ztwfrMa_uobq_emXruBqpCI_Zv>p2x^l#U+zSsE|=nbR({@S|u4}`nxX1;c)A;y6JGqF`LR&FUHA!=AXDOH3 zmeCT3I(vEs0VniEJA$So4(DX~LYU~aOY@wk;F1bK7uthU_=pSb$T7`fubd^?iDXJs zZ5L6@b%k#0B5c?%O!naCN)*~&|0nKg3nCMBgX0^G7h>1gncswVO?DAD%MFd%+mfa2 zDd%}mHK55&2GzB}=aDP|4{~G)Ewl?<#!LoI3iSX^BJEs{qi`I!;4izJ1i%6RcRdmv z-RGK-g9{`N|()LUkKg;I&B&<_5N5R7elEKx?g$3U1>Lj23B=`?v#kExaA% zXuH!`!V7B++#~M#t6?M&?}CqG{Os7%-o*vW!ix*-q_YGH+J}{ORo7M7)W=w_lY3=) Y2QXbZh2EdV{E4|Q(v-)<-7s(cAHI0U^8f$< literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/cvfishnet.cpython-36.pyc b/glmnet_python/__pycache__/cvfishnet.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..41c210f4b1bd82b47fee495157826780b160e247 GIT binary patch literal 1991 zcmZ8iO>Y}T7@pY=f7@|vH?fnZ+9MW_3Y7zD3$)Ni0+oO$QYA}ZZFa`?#`~4owG&&j z2+8GGsXu^oCAe_qmvERXr~Cy@JhMrv3P(Hd%ro!2AJ4q==3cW|tNi)bPY-H@{6pUP znV3JqmmXnYWJDNcMnFdfq#2l@IWnontiTGbkyXs?zz*$^jd`7wS>+`il~|S4UXoFn z8PCbEvHqy`Rg`fNxq;&?r$HF;%$Y1AFZ1K*(0R_e;|6K`cJHuOyM%jkJfy05rT(4Z z%=a&<%GlWJ)rM;o7KDWd(*2o)?#hQ5|Gfquuo?4QgT2o^~ zv9^08Z$g%23Hq&FlDDQL-@5oYE6dh~J|RDfye&(zJvZ`gNo0FKPAeOdcVt8SA#J%m zAbB^^maD8jr5l=evzqKkLvBy#fXFV}dS&K4>|0l-87x5Smh8!<+-7xo>sMo9JS1}K z6!Q(GE!q{ZnuZ(;PQMXuqpmB}1Wm9LzIXuvMNL zuc`Q6?#gDLux^*+{pb*QslaDhNAGM5pnaf~0{sP+x>qLHt-HaJ+7R7yD@% zN6r(z^xeqg>&`bQy$_$CEnL*2^Hhjfth*X>9-pLffKt2yho-8q>qE*6Q;xyqs?7Mr zT?Co1QJzBAsVHMuw_dm+@}uc}Cys)Zvwq)Qx_;oE1l*a#!np|}j2REo2hNRUXOVIy zC@lPNbg6}Y9`R(7@=TQjH#}kP0+7wJRl+f`+zUUw#G@dW`kk-8{x;Ds(3y&Ok#P3u z1h0@gJc3UT>G{#y7x{sc`pDmT=-hMSla!04t52p*!UaMMn6ka4aL-lwocq&RmMVIz zOm7(~%Uh;QS&aW4p@#ABJ8@d~!WPFp(}oW&3I5M#{?k046kV zs^VVXl(1k$Xd>YBOk~*C9p;WQ5vHhXoL(rp65Co&HyBmYsrqnL>tiO@~(-+Omwameqw0gLZm_0n;& z%4Tu&zm>O~_~{It`4Bv#wO+3@59tI0sav#yKg+0LY(O?>$*_z*ZBYwffzcY!9_`RJ zZ5eIj4(&j@MQhN9H1@8~Yi;~tuR;4psaQ3%G{jSQ^7Q@cpMEC#mWpov2op&p?U9U} zQi(o^zGXf-;P! zLtA`)1!S%&p;|bku9}tj0(ima)$l|w-@`D%mlpqgkaP#>G-!bj>Cv#F%HuJMz3~_q wy$F+4;jSp&qU^2;P$yg*dB?oYS7;xq@(_=H5%AA66=?&5z6I^3QLi2S2Y)LO?EnA( literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/cvglmnet.cpython-36.pyc b/glmnet_python/__pycache__/cvglmnet.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..979deda5b1786956b1784a8d58722633cebc4cc6 GIT binary patch literal 12116 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 literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/cvglmnetCoef.cpython-36.pyc b/glmnet_python/__pycache__/cvglmnetCoef.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..707b52ea641bf021286aa768c9e69819046ccae8 GIT binary patch literal 3823 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 literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/cvlognet.cpython-36.pyc b/glmnet_python/__pycache__/cvlognet.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5b5790b20154d815eaaf60c0bea15c2952819cba GIT binary patch literal 4189 zcmZ`+&2JmW72i)TNl_FfQ6lx}wfsrNb?l^vB9)UmNevXO)u2g{mT9A|I7@1&{SQ|)?JMn>pNamDP?EP$F|DmJof)CtHqe@(IWXI%PBbgD23FfreLJ)V zcH2gOo;j@ef!;2#Dl4%vdJdaol@GLbkr{7mt%b=e<)1{U&m%8%yQ8R+265zeyfE~c zdpLGGC%teG`RQ%A?3Q^h%wRPCOWn zQvX4xO#Jx0fKo(x110&s4YObpGnvI~R`}G;%EDpJvB5W4F>^?5RwSi+b~Yy*F?a0n z*Hf4#=2&$~#uL{TLF#9^It!Y_RR9OvjK1q$fDNMG=mOe6mV`K|iEw#kL zRL`oIu?6_1Mz$yxMUBD5zc;!DR+|yc7BB~C4J})MTqj!sttbjJ+Ok*@%NrV7KGyix zX^G8Yx38gFeX8pk+Lc+mN-gO*<8K^m@i(IQSm#A>HP!4|R)khIB(EPE6)me{r?RqT zeN7X3-{~1s9kjW+maROmMNi9C&mN~0u{_n^)PDOx)({2JI5x7T&_rWR>(5WMY)#a$ z-t|r{fiau6c zCaVE;mp(GH%fbYuAuhv?89pJ~*Z|HT>oV-O&SOn0QJMnifpoPVxF($%K(Rt7=(QZD zke6e_$abFNs4@3{IIbWDCB(qwAB!EVTxn`ejk(L3xbo}>Xy1zd0p22bExrr6YbfjR zWo2rJd7PFNLA!0_tEPG#5@<|1*EOuaszxTfcMUPS2EBpmJ;KB$B6F>-(7`UV%jDty z7ISl7L-IA|f~z5}J+(|+ZEA#&=oiqbtaNIFXZxuQ>SSy`wPLC(8+O27QT#&eh!wVT zY>}p_m+QGjr&^t1oJrXFnJBVFwc<0J%q!<7^Md-9^b+tx(O;cf*>!Q9UBy}2LVFFZ zh4wnyrPL)ZSaSpIjoioCP3U|XGdF2QEU{Ws+n|%wN_TKRcf}2{%WmKtwb0%~i+d2L z-DNHGOOI`S2maq>yBO`_>V9E=viN!s#e)D>_nZDn;6)vOvh)!5?)Tn)H1cp6yFcbU z=96Wjx%Ur~IK(}i6WiwfU%oMEJPeXf=p{+e4LY8>`_+<`EsJa>QksLrN9CdNMjdIZ z1=3-D*BgZ?$NjDG0#y!Gbg}ais!8=-k4Hh&d&P~TaO_TQc_&^FdWWI!c4O`yp6fn{ znI9%Ubk8?*M~TmR|2q2W4}bdR@2@`5A?qEyBvtOGBOVZ;|3|GN8wkyC+^a^4&?}If-Oy8h_WdCX2FVix!yXEL|9oxM`P*xgpZ@$gE$?-| zL&w{>lDFI>03QFpdce^M_fDmA>Ic1}G?DtgG&?5)X?0E#CauUD__Ev$(t{!Q;mp<* zX%Bf2rP5B0yrD0RXebM#D0nmiFhf6*ra$&&!Q&J(X(hn~wKwq2q(#O`D~|j`n)~6#KW<){lPFDb21sLheJPN()Kv_#?rxde$VI9p7=bb#ooSj0Gfk=mr64kLEAJ4 zeQ5_tG}q5|S@bX>*od z(TloeR8d#ZT4>8COKQAiRE>gO)$171XBk8%?oCiF6k1i#D@H|kv8JZijG9r_SJBH? zE$J_zN1v+~jGDfV6|TOc?|^FuJJm5NL&jA|EbG@%ng;P$m?!D@(5rx2P@@X927eE_ zcL+Q5qpOg>q!Q{+(GdpIj*Xx9|j+ z;IZ*k8yFWTJ;BUuMP^~n5!P&_t)!ig3K$iUSQfgJE;(wX3tf$hX$eVtQJ7ORD~S>w zE^}YqOq_zyDsvYN-=^w1Ra>Z}(+#~e^&|cRB3+^CHqi?wN$Pcu)gyzYuM*87aH})Y zE}ouWCPp-tx+nERX^h8hd#HGRMREu{dDW)g9aJBpB!o8&(a0mcggE3;tHSq+>%!ZM zV5CP+d3y<$>@!~eBl!h|JZT9e*7W6m?H8C%zTHsCJiI|31&^>A8vXfEe@*Nx_a#wm zB%(;U`z4B)aF7BPu>yZSgvJWTNNA@zJnOJR12JUI22wflFnPO<#3Cz4Dfr8z1^zf` zVh)K3@Ss}KagMN&RR{yQylh@k=RvKio#sX5d`?s;1;fk&{!|qqsU~V^g_WQg(imW< zCKg1Eb`@pBxIBw-6@J3w%`0fpETd6z=XLa+{0BeYp{e<&FrZ62i0CrxcKIbt$^x!y z7UNdMZI9=0kOSf_$;#2<@m><+0xfh#1G!`EQ4U@GK}+9nm85fUz~auq0dC6CU^vc?0lh@(S;!v2fP@~X)m0+2W&*>Jc&^K2;DOdjs9d}8n literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/cvmrelnet.cpython-36.pyc b/glmnet_python/__pycache__/cvmrelnet.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c8130ddab6f4cedecf4b29e411bfb0a332aa3c2 GIT binary patch literal 1805 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 literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/dataprocess.cpython-36.pyc b/glmnet_python/__pycache__/dataprocess.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a661e35f6aed90b623e443d6d991f1841cf92a0b GIT binary patch literal 1755 zcmaJ>JC7Vi5bo}I?%W+9FvmkS8d-om$(y|4mbL7{{fy*7(`X&%b&|As`1#e6^V9^y}Z=0r`2*BFN z?g(yptD0PDJ--pfuuu}OL~+%KX(@YoPQfTHJaNAVTVt|)WNbd_)zHM*&jccLwJgU9 z6?*dIox_W!l83w$&EdVWs-?-=nYn1{r?{<<4%(Rwv#h8KlVvZVKL&(2^K08mYX$4% zI?u5PxOQOsu#wk40eMU&WZ@WUm~p-#V=Aa%mtp6ek|q6)EZL`Q;VwLA1-m51?c62B ze-^&+CO&fg>8(zGNgcw-B3OirkqIVY7j$7a8nZD2KO@kMg!`?th&m=bXyVshG}&2_ za{{~%{10p1?22GXzoH_Sv;lK<<%_ ze0FO=ACr#00<~YA^yT%9O`Ii}xMTJ`d*GfAC`r6@q}%KvFQ-!5Xk3)#z@#CFi(1G> z>8@$uW(Lj%AS?jC3A60rHejGB0enoXpob865*?R?HhELECvRYQ7^_d_x3*CP3mb9bS$aYE)Sl!xDQ%jwd#eJDL z3c+b{X1AiYE*-NQL+W5U%F?AJye7=6Nn#v(>hLk7Zb3~ya4YK5F-^gQay`?b^u;Ea5YM>95%|ECK~`@J$=DjX@hauaP#il)-w&j z!$zNATi#cyQOS^4n^&;AGps?0e&6nD`5Rrz-!_D2)LkS!xx@#SPZJ&KY zdoz9h7TSz+?R0z{4C#F!B=D(EU!~8}oAf#jhada<2v|RY$=DYv@o{d{ypmaFqbwWd z7~FTW?7@_mtABzl6HT6FDgZa?btId4HQf51VAp$CBNsX@4Lyaj9QI~yM&d4r5DNX! z2BakPEMdL=e|oTP#fut0nqk0EmB1ZSKzWuWk#+P;Th?gn^`HLGMNj8NI~)4vH(yL- hZU#sATp`r|Egu^m5A`@fuxTViRd?BQH$o?*e*x<$ssaE2 literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/elnet.cpython-36.pyc b/glmnet_python/__pycache__/elnet.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d90c5893f875140382daf2fbc1aaab788c335de6 GIT binary patch literal 3725 zcmd^BPjB1E73c7uXjzUOTXv+_k-3iJwY-V#*!j0xH!aZJ6blsTqFHPK0njQx`%zY6?c*_-*#Vwq3g$4dJf!mgX3XW z@hyhbp4W*e#;H$#9(R5b9R?K%;`tcGMKMsazZ5hr*Uq#-B`0ki#o*={;ntZxsPbxV zLL$o=WRq7bn8Jd_t+F<_Np)(p^gohsv~NgLSM;6S%I(+W4DYAf85u0+HeWs?)PAY6 zBrnjy8Tma)N_?5xRgF3~G-Y9*Tl|@u)J9~RP7PKPlNJXn7}Kt30~5$CuC*Poo1)YF z7A<{i3^cAQq&Px!ZcHGU%Y+x^Gl5uqdctd(mnLjVd}acf;qw#7Jgp6C`E;kd{l{C`j*tFcc`m;hkP%5H~7YcuS6z&KctfL_3^o4+)chY z!C4}gzQftp>DoJdxA@kCuS6z&Kccq>cU8XcB5(KT`e0jW+t7A6d1JD#c%?lLY(e2z ziD%?oo8!)yR>C^PDj!F9QEFIo6Qg2eqj_Fe^O%26q&dED#kYJ#TfCwzU1)q2nfZX<=6Cpqyv{$8WAS^# z-0~e*)rj_nBr^Nu5##?&_W$2AyFxU+(_X}hYQC}9cQ{k8N&QU6x$2(xXz2M@zC>q- zJw$_yH384n_Tr$%U25~%E4`}WL|TJ9`$``oO^L1X^&tj%oo|e6H~8jA-sD>&c`Luc zH?ZS&`P3VmaqQ*_dY!5~|L>n`L}`1_s+92iWsUDu&@ZDLXna@Aroe2)W*2PmvwWow z*}%s{xyjemUjly!dL1X?zG4Ym`5(a_;sI=y`2&pkkU!uL!Tk}C8D8YIv2*k>U*iui zqw~l7(S>%PC7bW^kQjBYMA^?*@V9)zUH*j5ga2c+3urgdmeJlsyNGrl?GoB8v^UV+ zYcE2oK*AS;R6WoT{nm(MO`h1mZ^B{)?ec*}WqS+y6I=@JJbx>16rvcU$3BbvBnX9- z_|b6~5a9BW{U*u+O16TkrE%>y>Q`@*2%u_z?HIF^D=o1zf=okQyPyh76TvnJ-8938&w3qUL2b!J5GJDd zl^^%Q&ty7Dd?Ru^d!bT_)oh9sdMm(v~p7ldf?5!z_(^ zc_<1#Yh@|Rg-N3TDRFpNcuFvG$B9;lG8)SmO>UUw(I?6M) zEK@awN|-Q1R^zbK&HLC`*kkxQZ7THRuF!*6=t+ojBFqGzMOe+a6D7jzNyW~OunLYa zMn;7R225C>9p%Dq`kg55dp6b+){Dh7- zp~HrsOs<~aN7-XH6sxxH8L6z={(V-KkkO2W$3b0JsbWQ-Y+6?Gj47dHTXLUTwlPmi zWKMU;3fiJx(o4i4wr(1ZW0LvF*EV4z(Xw7v_0oH4X@_DX61j$VUX`oyB!1C1lpLau zy$+c(-|hY1Jxfjru}gRz!$w_JGIYbyZ8hqWUIbbpbEJqFmq`sXDx=RCdyD9+NZnR> ztJ|W`z?KLa*a1ne)9tfWnbW$gKq=cWZH#u&`D`84xh@yK66l+rW~oH{|CR{ B#O?q9 literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/fishnet.cpython-36.pyc b/glmnet_python/__pycache__/fishnet.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a92ddb02ee340fdcec7db73a2aef6b60153c9d7c GIT binary patch literal 3537 zcmeHKO>Y~=8Q$41t|*F@WLly=Os{1{F=Jbwjvb_GS|Esvpn+;MMhoZ=V#rxiOD}hc z*`+EP!%Ng01L$uQz4X}MGS{9A^cVEfJ~N~!dhO)UbGVq9_kHGl-g)Pp*_q|h!b0)) zfB)xquYAM!mof7*A^#R7eT<43rv@X;jL4~}TkF(9Yeja?KDCL#Z07vcICYr$tx4J~tt?DpzeS@cV19GxccNY#WV`;iLEzIUO(wu&zjZ$DD!#>##z~#X zVw6z!yQud~*levT5Wmk*?xTE(l8S<1WX7d2TFpq;6gDHTjZ4BeGmDv*sA!pR|yaC3+& zia9?;F`u)U7o{9h5=%K`iEWJ5Gp{=*)-TCu1JM`7tq#$%@P0H$n_}~t!7M!|g?Qb0 za7ri(mjt}KnpXzXoHA>omSZX;&%DPr!6=Ke9<#tOCi3bFUvrVS$*2ms;m+w%?=v;7 z8db%6&D|1PIj%zT+y|^S!*wU)Zj0?)%nG^Tj%WK3yY~U^j@Zd@6_V$E%>2eWJBbpgm$+qsJUuM?FJd! znC~I>45H_V{dU6|BhGtBaRwQCo}WR+tWqACMz8y)TKS#1+?vrA#G=x$b8`_*xC>%= z#(GZNen+dkqusgI#0EUx75Bt_@j&?zPoRG!KGt%5oMZ6_*7t~UMdI(U3QN=R{-0I& zCBr|J;k(2TkGjh^SM4i@U*WW!Q~IU(J&FBEkAa?lWVcyy+(Qh=^Opq7jqdVjU2HNU z)_*Y944hXr$mJh!wJ4;mu$u747-U~;O>MWt_Eg>$J5zZltB5VUfxBXfku`&rUYl1g zKfybH2UdkO+zO+;iMF7%eP}CeLF`owv0p{M@^)+hT@^T4^{H4@XUyn8?CP1i{NFm# zT||m2@j6m4)=<_(P2V)QWmp-kLp=l7BAP#Zyo+bz(`)V6h#!84p)gjML_GF#m~G-td@eS{b9U?4fS2cN5$!hGCA3ev%aE2K z9iqLBb_Z<*ZC&@=frRx0wgTw@?JC+T+Ul{v*3hm)e~!!k!3ih0h~FH=L5F7HdEoOP z?I&>>q<)-aem~&7Fw1cBw-fHaOu{t9$3UC*!f5#7l_W3fmULJ)><7|GI19M6TS1LOh5fC77%&3lZ%#865!a(-g^*b{FBoGVDn= zX}8lLlZAGep5fC;I;{vsZ~u!QU%?PRU)Aq&6^AtAzO-mOl*K>MXb^m*@+hq+h^0$Y zy#j?czPGYxPo)#a+0mhNTMAAwUIT!1-UK{JWq~1^4GQ7qAHF_$_0=Dx*J`k2(2N3U zCvlLT7SsMD)P{7LLmsqGy&K?MjV_%&S3a#Cy+9C2M_R!}Upka?I+O);1s!Y#D;@Nt zN1JI94YEKMDDR{R&!o-5R#yK^k_$N(rj4{uc^XJ7R+G13 z(UW$ZG%=m{9OlyOGHIUorP+#*n*ikk23QE`w4+`aOM9RcH#@^FID_+)NgIK2=^*GZ zlkRvMOBeeIdr3z!St?I$;ujIcw4&ZXI;a|)7j-0bzrism#ZIS63L%9`van$hTo}W& zq)Z)b4~5eRF`?2n5wa9Veb_818&~ZUbl9-nm#(Uzx$vSgYi0*1huC9`mzBBM#r8{7 z)ujh~UO`qn%>HKZ7UcgN?42dOV2?&D*&Dwljs7q@OX8e1Sd30>3sX>*sxsW4sJ6*OEuf$upKbvS@vn zf6e$gZpkaba|w@Uxu`2zhHiP7t$J24lOpgcSw!nWssX8(E@bs6Ox5GoE9k7%U0G=0 w&1p68n#6-1lBxdW@S3XBE32*a!pu|*9nw4QC2SA{U#J5z^-$TS8lhzV51-bZL;wH) literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/glmnet.cpython-36.pyc b/glmnet_python/__pycache__/glmnet.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d40055f447cc2987f3176b6a6ff5778d9d8dae67 GIT binary patch literal 15611 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 kQLPlbT=dtBqVnYnZCIp^NF+I#$X`|tn! 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 SRftM-{U%n1QoB;Be)-=SMlW;# literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/glmnetPlot.cpython-36.pyc b/glmnet_python/__pycache__/glmnetPlot.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..836be63b9898d5595d4189d3470898a3b83cdfe0 GIT binary patch literal 7175 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 literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/glmnetPredict.cpython-36.pyc b/glmnet_python/__pycache__/glmnetPredict.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..92559a2be3e7acba51d2478c0c0319d11a0bb996 GIT binary patch literal 10506 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 literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/glmnetPrint.cpython-36.pyc b/glmnet_python/__pycache__/glmnetPrint.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..438c8acffcd77b046b6c042d43bdf530048bcdcd GIT binary patch literal 2078 zcmb_d-EP}96qal^Y1MVuZVD9G#knb90g7xV8!)8H5Z89n1di+3&Q@gT0@|c(W|F9p zR2&EC)%G&OUSMxBz_)vgUG0!^5@QHyJNw5}S_mx3l(? zu)UA3`V2qRIdiB>OTRg1E-eooze1)Pj^lY-AMNpA8Yd~!eaTZDCcBWC29VV-i17uR z=#ROf2kp+VH8|>zj^6fmJ;29qj(e&+Nr+s4h(OQSZ3r3BGawomnan_GmH~-HI<+Qd zF7!M&9X1a;yI{So0jfq^`#62n>z|IGIXFB$>GVd!Vpp6qo7)H5n$g=GSD;O#qvla} zWj~rp#h!QCo$GC(f%z6@OynskZh>21H5Qy@_ zB8-*yjL8Z50m?2pNhb{0RTdMTBHpTGG12_8aHYj6nmE2Q_6@t;qgJOkM1BwZ-K}jL zXr7MVydA7~X~t6_k%t84MBzfkr^feq0mld>VQ?ThqX|g^7)f@Cp}rwXb7pB8h%t=# zSk1U3DYu9Ygw)tU4k)uO=jdIt^Z}37egJbxGDHd02={~ejH6HtuP4n>xB2>R+Jr|a z$uQIYe;waP#&yAl$rj?8@|466d0LC=P0ryMxt#_!Ad`ONKF=sIqB7kC`PK#JhL=2D zpf!AlYeKtZG{Xh`g`SD@F5K!WRo z7>{v4<>P&&Ns4NrA)|S*u+1_ebz&5P0vu}817>HU0@Jp(aGIh-q~dyUKNvuZ#2j6v zoCN0l8KDe12c1Eu*XpdKai4h;M3Ht>L1-b|r#*l{2-WR+{c9fvY?{YJ@@tF($>`$& zS61JLEM*e6yhcj9s9wZ&f(nThpsb-K5EQ0L;}K)Z=shUl&9u&TYqj}&9$p}Ltwf|l zA*Z#=ot+x5H)@vuW06af=XD0KJ4E9-kt~4kMI6G;PPO3&(Ae7Eh66T+?Ruk*sE3^n zG`qvMMOi7zPq3;bLxzFeRwPFG1Zykmp%`i5DTjn%)~P}rc+h#*Jn46D*}H;0NV5>n z0u@P^3Yn0&s*r%a9~;8@#v|K*1gE#H)IuJXdU z!Fg;wx@(y}zES15^P#Mro3ioq%NIZ3U5EGEM(_Ih6QB`1ftOgW@E6-MntRL5RqOim zm()yKo8q%9(P&vld%wJVWbdzK#n7~Tgw#!$Us;wB`_k<#U4FI^qjt`--yP{8l7GIc z&9Fq(NK8eo;NU#7$MC^kaZ6^4<%MujiMRo9E|LOwP~k bfZcKJ^AwGikH1L-&13d$1AEF`|CQ3e__knZ literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/glmnetSet.cpython-36.pyc b/glmnet_python/__pycache__/glmnetSet.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..827f17acf7b4db9ff6e36dba3d9a4e84c7970d92 GIT binary patch literal 10547 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 I0g}=G1#it=Q~&?~ literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/printDict.cpython-36.pyc b/glmnet_python/__pycache__/printDict.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b99089f3e3d26e16119193ed164e03e54f1d6ea5 GIT binary patch literal 488 zcmZ8d%}&BV5T4nVADdt}k$Bq!9JqkW)ff{wcp@63D2X+UOYL)KjLn_Z}ywa?3bBNrQ*Clzuul9z#D8FM(-nnt`Z3tfIz{XV1U9pho-$e zaZckPG@5HQmpll^ihDz~Fx=xJ7@0tYUYu|>oXU}D@e3^lAFG&~SS^M#sePqP5KdZ- zGa~2p$sH?%V}kaH9)>AQVFg{dxqQT=Zct!~hNY0=4y^DiPOY(3BZbh1dj}!ERLM3g z$E*gz`tGw3uBq~h(5K1rX?n|QV{cb;-q`=)rSq3rGR~WJX5Yy~XN4%AJF`s^$*iD# zFOp4`p^o!8ULY<~_~^8KT1(rT3Dus==Akrhlo(%y|J3@gF72xoCE3=mD&;G1hyb^d oVI7MYmr3==spPssja+w~Si5ad-k6mS=1MGP@~}Wk=WDguC$H~xO8@`> literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/structtype.cpython-36.pyc b/glmnet_python/__pycache__/structtype.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99d3ef1a60541e8cb871bc1380cac3f59f213819 GIT binary patch literal 400 zcmZ9Gy-ve05XWt&(8y|6X0KhE0Vae{H?}S?W#Ht*hD5UC5Zgjwg{NR(=M8w4tULn? z6PHA4B~HH6|2};8J72H)&->T?2O;De{a^{I9lAfmph!+`h@y(U5yf6vPE~SCHj5X< z@2c7hd{U@rZ7)hAy%(X9K}ciV^Qg5@8ta`5wQGcXz+oS{SO(#1TVq26C#(!c7M$;7 z43+CHMNvrH6$@S>!NDl19lBp(&;&_H&J;x&Ht>0C=v%$tBtr_&NUH$`4q%;%X4ETy zrzp+b`6S&5?wP{xMOHbhGij8|9*u2ufVM}L=3jQavTgfr1X_+j3`0t%e2*|o0Od-6 Wsc^h9t5cjE(yJNjdd#Np3;G9yduh=C literal 0 HcmV?d00001 diff --git a/glmnet_python/__pycache__/wtmean.cpython-36.pyc b/glmnet_python/__pycache__/wtmean.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cb6905967aebef67360346c2daa05223a16c065e GIT binary patch literal 1105 zcma)4&2AGh5VpO$$#&J!@*^aKge=6NIi!Ews)9f*LZ~7jnqG1sGHWNkL_<}Jo9jADOvgU{p~D3=m)w$1neikdKCmm zJ;X65Iqnf2@bDw*1w7&n&>?T~7<9zR0ctHUg%L`2S)NuoGlEJc+e#GWd%@|6$c7^W zMj@D7qur747R@xJNm>@;${l8s8aQF6nSQiEd8R~avQko(mvTr2OGh*<^Qw?*N%Ere z`mjr%zIlH5@>!>Qu${F3q=W($%xpVNi%J{%4xs7Q9@S|!o=~O~o6vGVb@oBf4n3v& z{>?m9z5Rc0HfgB_BDPbxl_22)DGVQ`#jY;O;n>9uJJ82C7jgAG~9j%)u<-m zgBP3}2h*?)ISj-nxHBMk&@=>`W*wY+osYwid?DTsx14* zx;D3B8{|UTNRQZ9SR%)^sl;>c 0: ca = ca[0:ninmax, :] - df = scipy.sum(scipy.absolute(ca) > 0, axis=0) + df = np.sum(np.absolute(ca) > 0, axis=0) ja = ia[0:ninmax] - 1 # ia is 1-indexed in fortran - oja = scipy.argsort(ja) + oja = np.argsort(ja) ja1 = ja[oja] - beta = scipy.zeros([nvars, lmu], dtype = scipy.float64) + beta = np.zeros([nvars, lmu], dtype = np.float64) beta[ja1, :] = ca[oja, :] else: - beta = scipy.zeros([nvars, lmu], dtype = scipy.float64) - df = scipy.zeros([1, lmu], dtype = scipy.float64) + beta = np.zeros([nvars, lmu], dtype = np.float64) + df = np.zeros([1, lmu], dtype = np.float64) fit = dict() fit['beta'] = beta @@ -170,7 +171,7 @@ def coxnet(x, is_sparse, irs, pcs, y, weights, offset, parm, fit['lambdau'] = alm fit['npasses'] = nlp_r.value fit['jerr'] = jerr_r.value - fit['dim'] = scipy.array([nvars, lmu], dtype = scipy.integer) + fit['dim'] = np.array([nvars, lmu], dtype = np.integer) fit['offset'] = is_offset fit['class'] = 'coxnet' diff --git a/glmnet_python/cvcompute.py b/glmnet_python/cvcompute.py index 7dcac66..eef8e4b 100644 --- a/glmnet_python/cvcompute.py +++ b/glmnet_python/cvcompute.py @@ -4,24 +4,24 @@ Compute the weighted mean and SD within folds, and hence the SE of the mean """ -import scipy +import numpy as np from wtmean import wtmean def cvcompute(mat, weights, foldid, nlams): if len(weights.shape) > 1: - weights = scipy.reshape(weights, [weights.shape[0], ]) - wisum = scipy.bincount(foldid, weights = weights) - nfolds = scipy.amax(foldid) + 1 - outmat = scipy.ones([nfolds, mat.shape[1]])*scipy.NaN - good = scipy.zeros([nfolds, mat.shape[1]]) - mat[scipy.isinf(mat)] = scipy.NaN + weights = np.reshape(weights, [weights.shape[0], ]) + wisum = np.bincount(foldid, weights = weights) + nfolds = np.amax(foldid) + 1 + outmat = np.ones([nfolds, mat.shape[1]])*np.NaN + good = np.zeros([nfolds, mat.shape[1]]) + mat[np.isinf(mat)] = np.NaN for i in range(nfolds): tf = foldid == i mati = mat[tf, ] wi = weights[tf, ] outmat[i, :] = wtmean(mati, wi) good[i, 0:nlams[i]] = 1 - N = scipy.sum(good, axis = 0) + N = np.sum(good, axis = 0) cvcpt = dict() cvcpt['cvraw'] = outmat cvcpt['weights'] = wisum diff --git a/glmnet_python/cvelnet.py b/glmnet_python/cvelnet.py index e9f6349..f4d6533 100644 --- a/glmnet_python/cvelnet.py +++ b/glmnet_python/cvelnet.py @@ -3,7 +3,7 @@ Internal cvglmnet function. See also cvglmnet. """ -import scipy +import numpy as np from glmnetPredict import glmnetPredict from wtmean import wtmean from cvcompute import cvcompute @@ -31,29 +31,29 @@ def cvelnet(fit, \ if len(offset) > 0: y = y - offset - predmat = scipy.ones([y.size, lambdau.size])*scipy.NAN - nfolds = scipy.amax(foldid) + 1 + predmat = np.ones([y.size, lambdau.size])*np.NAN + nfolds = np.amax(foldid) + 1 nlams = [] for i in range(nfolds): which = foldid == i fitobj = fit[i].copy() fitobj['offset'] = False preds = glmnetPredict(fitobj, x[which, ]) - nlami = scipy.size(fit[i]['lambdau']) + nlami = np.size(fit[i]['lambdau']) predmat[which, 0:nlami] = preds nlams.append(nlami) # convert nlams to scipy array - nlams = scipy.array(nlams, dtype = scipy.integer) + nlams = np.array(nlams, dtype = np.integer) - N = y.shape[0] - scipy.sum(scipy.isnan(predmat), axis = 0) - yy = scipy.tile(y, [1, lambdau.size]) + N = y.shape[0] - np.sum(np.isnan(predmat), axis = 0) + yy = np.tile(y, [1, lambdau.size]) if ptype == 'mse': cvraw = (yy - predmat)**2 elif ptype == 'deviance': cvraw = (yy - predmat)**2 elif ptype == 'mae': - cvraw = scipy.absolute(yy - predmat) + cvraw = np.absolute(yy - predmat) if y.size/nfolds < 3 and grouped == True: print('Option grouped=false enforced in cv.glmnet, since < 3 observations per fold') @@ -67,7 +67,7 @@ def cvelnet(fit, \ cvm = wtmean(cvraw, weights) sqccv = (cvraw - cvm)**2 - cvsd = scipy.sqrt(wtmean(sqccv, weights)/(N-1)) + cvsd = np.sqrt(wtmean(sqccv, weights)/(N-1)) result = dict() result['cvm'] = cvm diff --git a/glmnet_python/cvfishnet.py b/glmnet_python/cvfishnet.py index 6dbd3bd..4bf7ef7 100644 --- a/glmnet_python/cvfishnet.py +++ b/glmnet_python/cvfishnet.py @@ -3,7 +3,7 @@ Internal cvglmnet function. See also cvglmnet. """ -import scipy +import numpy as np from glmnetPredict import glmnetPredict from wtmean import wtmean from cvcompute import cvcompute @@ -34,8 +34,8 @@ def cvfishnet(fit, \ else: is_offset = False - predmat = scipy.ones([y.size, lambdau.size])*scipy.NAN - nfolds = scipy.amax(foldid) + 1 + predmat = np.ones([y.size, lambdau.size])*np.NAN + nfolds = np.amax(foldid) + 1 nlams = [] for i in range(nfolds): which = foldid == i @@ -43,23 +43,23 @@ def cvfishnet(fit, \ if is_offset: off_sub = offset[which] else: - off_sub = scipy.empty([0]) + off_sub = np.empty([0]) preds = glmnetPredict(fitobj, x[which, ], offset = off_sub) - nlami = scipy.size(fit[i]['lambdau']) + nlami = np.size(fit[i]['lambdau']) predmat[which, 0:nlami] = preds nlams.append(nlami) - # convert nlams to scipy array - nlams = scipy.array(nlams, dtype = scipy.integer) + # convert nlams to np array + nlams = np.array(nlams, dtype = np.integer) - N = y.shape[0] - scipy.sum(scipy.isnan(predmat), axis = 0) - yy = scipy.tile(y, [1, lambdau.size]) + N = y.shape[0] - np.sum(np.isnan(predmat), axis = 0) + yy = np.tile(y, [1, lambdau.size]) if ptype == 'mse': cvraw = (yy - predmat)**2 elif ptype == 'deviance': cvraw = devi(yy, predmat) elif ptype == 'mae': - cvraw = scipy.absolute(yy - predmat) + cvraw = np.absolute(yy - predmat) if y.size/nfolds < 3 and grouped == True: print('Option grouped=false enforced in cvglmnet, since < 3 observations per fold') @@ -73,7 +73,7 @@ def cvfishnet(fit, \ cvm = wtmean(cvraw, weights) sqccv = (cvraw - cvm)**2 - cvsd = scipy.sqrt(wtmean(sqccv, weights)/(N-1)) + cvsd = np.sqrt(wtmean(sqccv, weights)/(N-1)) result = dict() result['cvm'] = cvm @@ -88,8 +88,8 @@ def cvfishnet(fit, \ # end of cvfishnet #========================= def devi(yy, eta): - deveta = yy*eta - scipy.exp(eta) - devy = yy*scipy.log(yy) - yy + deveta = yy*eta - np.exp(eta) + devy = yy*np.log(yy) - yy devy[yy == 0] = 0 result = 2*(devy - deveta) return(result) diff --git a/glmnet_python/cvglmnet.py b/glmnet_python/cvglmnet.py index a539d54..6fd4d0f 100644 --- a/glmnet_python/cvglmnet.py +++ b/glmnet_python/cvglmnet.py @@ -20,8 +20,8 @@ ======================= INPUT ARGUMENTS - x nobs x nvar scipy 2D array of x parameters (as in glmnet). - y nobs x nc scipy Response y as in glmnet. + x nobs x nvar np 2D array of x parameters (as in glmnet). + y nobs x nc np Response y as in glmnet. family Response type as family in glmnet. options Options as in glmnet. ptype loss to use for cross-validation. Currently five options, not @@ -126,8 +126,8 @@ class Type of regression - internal usage. EXAMPLES: # Gaussian - x = scipy.random.rand(100, 10) - y = scipy.random.rand(100, 1) + x = np.random.rand(100, 10) + y = np.random.rand(100, 1) cvfit = cvglmnet(x = x, y = y) cvglmnetPlot(cvfit) print( cvglmnetCoef(cvfit) ) @@ -136,27 +136,27 @@ class Type of regression - internal usage. cvglmnetPlot(cvfit1) # Binomial - x = scipy.random.rand(100, 10) - y = scipy.random.rand(100,1) + x = np.random.rand(100, 10) + y = np.random.rand(100,1) y = (y > 0.5)*1.0 fit = cvglmnet(x = x, y = y, family = 'binomial', ptype = 'class') cvglmnetPlot(fit) # poisson - x = scipy.random.rand(100,10) - y = scipy.random.poisson(size = [100, 1])*1.0 + x = np.random.rand(100,10) + y = np.random.poisson(size = [100, 1])*1.0 cvfit = cvglmnet(x = x, y = y, family = 'poisson') cvglmnetPlot(cvfit) # Multivariate Gaussian: - x = scipy.random.rand(100, 10) - y = scipy.random.rand(100,3) + x = np.random.rand(100, 10) + y = np.random.rand(100,3) cvfit = cvglmnet(x = x, y = y, family = 'mgaussian') cvglmnetPlot(cvfit) # Multinomial - x = scipy.random.rand(100,10) - y = scipy.random.rand(100,1) + x = np.random.rand(100,10) + y = np.random.rand(100,1) y[y < 0.3] = 1.0 y[y < 0.6] = 2.0 y[y < 1.0] = 3.0 @@ -199,7 +199,7 @@ class Type of regression - internal usage. import multiprocessing from glmnetSet import glmnetSet from glmnetPredict import glmnetPredict -import scipy +import numpy as np from glmnet import glmnet from cvelnet import cvelnet from cvlognet import cvlognet @@ -212,7 +212,7 @@ def cvglmnet(*, x, family = 'gaussian', ptype = 'default', nfolds = 10, - foldid = scipy.empty([0]), + foldid = np.empty([0]), parallel = 1, keep = False, grouped = True, @@ -227,18 +227,18 @@ def cvglmnet(*, x, # we should not really need this. user must supply the right shape # if y.shape[0] != nobs: - # y = scipy.transpose(y) + # y = np.transpose(y) # convert 1d python array of size nobs to 2d python array of size nobs x 1 if len(y.shape) == 1: - y = scipy.reshape(y, [y.size, 1]) + y = np.reshape(y, [y.size, 1]) # we should not really need this. user must supply the right shape # if (len(options['offset']) > 0) and (options['offset'].shape[0] != nobs): - # options['offset'] = scipy.transpose(options['offset']) + # options['offset'] = np.transpose(options['offset']) if len(options['weights']) == 0: - options['weights'] = scipy.ones([nobs, 1], dtype = scipy.float64) + options['weights'] = np.ones([nobs, 1], dtype = np.float64) # main call to glmnet glmfit = glmnet(x = x, y = y, family = family, **options) @@ -246,34 +246,34 @@ def cvglmnet(*, x, is_offset = glmfit['offset'] options['lambdau'] = glmfit['lambdau'] - nz = glmnetPredict(glmfit, scipy.empty([0]), scipy.empty([0]), 'nonzero') + nz = glmnetPredict(glmfit, np.empty([0]), np.empty([0]), 'nonzero') if glmfit['class'] == 'multnet': - nnz = scipy.zeros([len(options['lambdau']), len(nz)]) + nnz = np.zeros([len(options['lambdau']), len(nz)]) for i in range(len(nz)): - nnz[:, i] = scipy.transpose(scipy.sum(nz[i], axis = 0)) - nz = scipy.ceil(scipy.median(nnz, axis = 1)) + nnz[:, i] = np.transpose(np.sum(nz[i], axis = 0)) + nz = np.ceil(np.median(nnz, axis = 1)) elif glmfit['class'] == 'mrelnet': - nz = scipy.transpose(scipy.sum(nz[0], axis = 0)) + nz = np.transpose(np.sum(nz[0], axis = 0)) else: - nz = scipy.transpose(scipy.sum(nz, axis = 0)) + nz = np.transpose(np.sum(nz, axis = 0)) if len(foldid) == 0: - ma = scipy.tile(scipy.arange(nfolds), [1, int(scipy.floor(nobs/nfolds))]) - mb = scipy.arange(scipy.mod(nobs, nfolds)) - mb = scipy.reshape(mb, [1, mb.size]) - population = scipy.append(ma, mb, axis = 1) - mc = scipy.random.permutation(len(population)) + ma = np.tile(np.arange(nfolds), [1, int(np.floor(nobs/nfolds))]) + mb = np.arange(np.mod(nobs, nfolds)) + mb = np.reshape(mb, [1, mb.size]) + population = np.append(ma, mb, axis = 1) + mc = np.random.permutation(len(population)) mc = mc[0:nobs] foldid = population[mc] - foldid = scipy.reshape(foldid, [foldid.size,]) + foldid = np.reshape(foldid, [foldid.size,]) else: - nfolds = scipy.amax(foldid) + 1 + nfolds = np.amax(foldid) + 1 if nfolds < 3: raise ValueError('nfolds must be bigger than 3; nfolds = 10 recommended') cpredmat = list() - foldid = scipy.reshape(foldid, [foldid.size, ]) + foldid = np.reshape(foldid, [foldid.size, ]) if parallel != 1: if parallel == -1: num_cores = multiprocessing.cpu_count() @@ -318,10 +318,10 @@ def cvglmnet(*, x, CVerr = dict() CVerr['lambdau'] = options['lambdau'] - CVerr['cvm'] = scipy.transpose(cvm) - CVerr['cvsd'] = scipy.transpose(cvsd) - CVerr['cvup'] = scipy.transpose(cvm + cvsd) - CVerr['cvlo'] = scipy.transpose(cvm - cvsd) + CVerr['cvm'] = np.transpose(cvm) + CVerr['cvsd'] = np.transpose(cvsd) + CVerr['cvup'] = np.transpose(cvm + cvsd) + CVerr['cvlo'] = np.transpose(cvm - cvsd) CVerr['nzero'] = nz CVerr['name'] = cvname CVerr['glmnet_fit'] = glmfit @@ -330,10 +330,10 @@ def cvglmnet(*, x, CVerr['foldid'] = foldid if ptype == 'auc': cvm = -cvm - CVerr['lambda_min'] = scipy.amax(options['lambdau'][cvm <= scipy.amin(cvm)]).reshape([1]) + CVerr['lambda_min'] = np.amax(options['lambdau'][cvm <= np.amin(cvm)]).reshape([1]) idmin = options['lambdau'] == CVerr['lambda_min'] semin = cvm[idmin] + cvsd[idmin] - CVerr['lambda_1se'] = scipy.amax(options['lambdau'][cvm <= semin]).reshape([1]) + CVerr['lambda_1se'] = np.amax(options['lambdau'][cvm <= semin]).reshape([1]) CVerr['class'] = 'cvglmnet' return(CVerr) diff --git a/glmnet_python/cvglmnetCoef.py b/glmnet_python/cvglmnetCoef.py index e0f0adf..711ce2f 100644 --- a/glmnet_python/cvglmnetCoef.py +++ b/glmnet_python/cvglmnetCoef.py @@ -69,7 +69,7 @@ """ -import scipy +import numpy as np from glmnetCoef import glmnetCoef def cvglmnetCoef(obj, s = None): @@ -77,7 +77,7 @@ def cvglmnetCoef(obj, s = None): if s is None or len(s) == 0: s = obj['lambda_1se'] - if isinstance(s, scipy.ndarray): + if isinstance(s, np.ndarray): lambdau = s elif isinstance(s, str): sbase = ['lambda_1se', 'lambda_min'] diff --git a/glmnet_python/cvglmnetPlot.py b/glmnet_python/cvglmnetPlot.py index f55a97d..f9a866e 100644 --- a/glmnet_python/cvglmnetPlot.py +++ b/glmnet_python/cvglmnetPlot.py @@ -44,11 +44,11 @@ EXAMPLES: - scipy.random.seed(1) - x=scipy.random.normal(size = (100,20)) - y=scipy.random.normal(size = (100,1)) - g2=scipy.random.choice(2,size = (100,1))*1.0 - g4=scipy.random.choice(4,size = (100,1))*1.0 + np.random.seed(1) + x=np.random.normal(size = (100,20)) + y=np.random.normal(size = (100,1)) + g2=np.random.choice(2,size = (100,1))*1.0 + g4=np.random.choice(4,size = (100,1))*1.0 plt.figure() fit1=cvglmnet(x = x.copy(),y = y.copy()) @@ -64,43 +64,43 @@ """ -import scipy +import numpy as np def cvglmnetPlot(cvobject, sign_lambda = 1.0, **options): import matplotlib.pyplot as plt - sloglam = sign_lambda*scipy.log(cvobject['lambdau']) + sloglam = sign_lambda*np.log(cvobject['lambdau']) fig = plt.gcf() ax1 = plt.gca() #fig, ax1 = plt.subplots() plt.errorbar(sloglam, cvobject['cvm'], cvobject['cvsd'], \ - ecolor = (0.5, 0.5, 0.5), \ + ecolor = (0.5, 0.5, 0.5),zorder=10, \ **options ) #plt.hold(True) plt.plot(sloglam, cvobject['cvm'], linestyle = 'dashed',\ - marker = 'o', markerfacecolor = 'r') + marker = 'o',zorder=5, markerfacecolor = 'r') xlim1 = ax1.get_xlim() ylim1 = ax1.get_ylim() - xval = sign_lambda*scipy.log(scipy.array([cvobject['lambda_min'], cvobject['lambda_min']])) - plt.plot(xval, ylim1, color = 'b', linestyle = 'dashed', \ - linewidth = 1) + xval = sign_lambda*np.log(np.array([cvobject['lambda_min'], cvobject['lambda_min']])) + plt.plot(xval, ylim1, color = 'k', linestyle = 'dashed', \ + linewidth = 1,zorder=2) if cvobject['lambda_min'] != cvobject['lambda_1se']: - xval = sign_lambda*scipy.log([cvobject['lambda_1se'], cvobject['lambda_1se']]) - plt.plot(xval, ylim1, color = 'b', linestyle = 'dashed', \ - linewidth = 1) + xval = sign_lambda*np.log([cvobject['lambda_1se'], cvobject['lambda_1se']]) + plt.plot(xval, ylim1, color = 'k', linestyle = 'dashed', \ + linewidth = 1,zorder=2) ax2 = ax1.twiny() ax2.xaxis.tick_top() atdf = ax1.get_xticks() - indat = scipy.ones(atdf.shape, dtype = scipy.integer) + indat = np.ones(atdf.shape, dtype = np.integer) if sloglam[-1] >= sloglam[1]: for j in range(len(sloglam)-1, -1, -1): indat[atdf <= sloglam[j]] = j diff --git a/glmnet_python/cvglmnetPredict.py b/glmnet_python/cvglmnetPredict.py index 7d325c5..04cdfaa 100644 --- a/glmnet_python/cvglmnetPredict.py +++ b/glmnet_python/cvglmnetPredict.py @@ -67,23 +67,23 @@ cvglmnet and glmnetPredict. EXAMPLES: - x = scipy.random.rand(100, 10) - y = scipy.random.rand(100, 1) + x = np.random.rand(100, 10) + y = np.random.rand(100, 1) cvfit = cvglmnet(x = x, y = y) cvglmnetPredict(cvfit, x[0:5, :], 'lambda_min') - cvglmnetPredict(cvfit, x[0:5, :], scipy.array([0.0866, 0.2323])) + cvglmnetPredict(cvfit, x[0:5, :], np.array([0.0866, 0.2323])) """ from cvglmnetCoef import cvglmnetCoef from glmnetPredict import glmnetPredict -import scipy +import numpy as np def cvglmnetPredict(obj, newx = None, s = 'lambda_1se', **options): if newx is None: CVpred = cvglmnetCoef(obj) return(CVpred) - if type(s) == scipy.ndarray and s.dtype == 'float64': + if type(s) == np.ndarray and s.dtype == 'float64': lambdau = s elif s in ['lambda_1se', 'lambda_min']: lambdau = obj[s] @@ -92,5 +92,5 @@ def cvglmnetPredict(obj, newx = None, s = 'lambda_1se', **options): CVpred = glmnetPredict(obj['glmnet_fit'], newx, lambdau, **options) - return(CVpred) + return (CVpred) \ No newline at end of file diff --git a/glmnet_python/cvlognet.py b/glmnet_python/cvlognet.py index adae68c..1b90cdb 100644 --- a/glmnet_python/cvlognet.py +++ b/glmnet_python/cvlognet.py @@ -3,7 +3,7 @@ Internal function called by cvglmnet. See also cvglmnet """ -import scipy +import numpy as np from glmnetPredict import glmnetPredict from wtmean import wtmean from cvcompute import cvcompute @@ -33,15 +33,15 @@ def cvlognet(fit, \ prob_max = 1 - prob_min nc = y.shape[1] if nc == 1: - classes, sy = scipy.unique(y, return_inverse = True) + classes, sy = np.unique(y, return_inverse = True) nc = len(classes) - indexes = scipy.eye(nc, nc) + indexes = np.eye(nc, nc) y = indexes[sy, :] else: - classes = scipy.arange(nc) + 1 # 1:nc + classes = np.arange(nc) + 1 # 1:nc N = y.size - nfolds = scipy.amax(foldid) + 1 + nfolds = np.amax(foldid) + 1 if (N/nfolds < 10) and (type == 'auc'): print('Warning: Too few (<10) observations per fold for type.measure=auc in cvlognet') print('Warning: changed to type.measure = deviance. Alternately, use smaller value ') @@ -53,8 +53,8 @@ def cvlognet(fit, \ grouped = False is_offset = not(len(offset) == 0) - predmat = scipy.ones([y.shape[0], lambdau.size])*scipy.NAN - nfolds = scipy.amax(foldid) + 1 + predmat = np.ones([y.shape[0], lambdau.size])*np.NAN + nfolds = np.amax(foldid) + 1 nlams = [] for i in range(nfolds): which = foldid == i @@ -62,46 +62,46 @@ def cvlognet(fit, \ if is_offset: off_sub = offset[which, ] else: - off_sub = scipy.empty([0]) - preds = glmnetPredict(fitobj, x[which, ], scipy.empty([0]), 'response', False, off_sub) - nlami = scipy.size(fit[i]['lambdau']) + off_sub = np.empty([0]) + preds = glmnetPredict(fitobj, x[which, ], np.empty([0]), 'response', False, off_sub) + nlami = np.size(fit[i]['lambdau']) predmat[which, 0:nlami] = preds nlams.append(nlami) - # convert nlams to scipy array - nlams = scipy.array(nlams, dtype = scipy.integer) + # convert nlams to np array + nlams = np.array(nlams, dtype = np.integer) if ptype == 'auc': - cvraw = scipy.zeros([nfolds, lambdau.size])*scipy.NaN - good = scipy.zeros([nfolds, lambdau.size]) + cvraw = np.zeros([nfolds, lambdau.size])*np.NaN + good = np.zeros([nfolds, lambdau.size]) for i in range(nfolds): good[i, 0:nlams[i]] = 1 which = foldid == i for j in range(nlams[i]): cvraw[i,j] = auc_mat(y[which,], predmat[which,j], weights[which]) - N = scipy.sum(good, axis = 0) - sweights = scipy.zeros([nfolds, 1]) + N = np.sum(good, axis = 0) + sweights = np.zeros([nfolds, 1]) for i in range(nfolds): - sweights[i]= scipy.sum(weights[foldid == i], axis = 0) + sweights[i]= np.sum(weights[foldid == i], axis = 0) weights = sweights else: - ywt = scipy.sum(y, axis = 1, keepdims = True) - y = y/scipy.tile(ywt, [1, y.shape[1]]) + ywt = np.sum(y, axis = 1, keepdims = True) + y = y/np.tile(ywt, [1, y.shape[1]]) weights = weights*ywt - N = y.shape[0] - scipy.sum(scipy.isnan(predmat), axis = 0, keepdims = True) - yy1 = scipy.tile(y[:,0:1], [1, lambdau.size]) - yy2 = scipy.tile(y[:,1:2], [1, lambdau.size]) + N = y.shape[0] - np.sum(np.isnan(predmat), axis = 0, keepdims = True) + yy1 = np.tile(y[:,0:1], [1, lambdau.size]) + yy2 = np.tile(y[:,1:2], [1, lambdau.size]) if ptype == 'mse': cvraw = (yy1 - (1 - predmat))**2 + (yy2 - (1 - predmat))**2 elif ptype == 'deviance': - predmat = scipy.minimum(scipy.maximum(predmat, prob_min), prob_max) - lp = yy1*scipy.log(1-predmat) + yy2*scipy.log(predmat) - ly = scipy.log(y) + predmat = np.minimum(np.maximum(predmat, prob_min), prob_max) + lp = yy1*np.log(1-predmat) + yy2*np.log(predmat) + ly = np.log(y) ly[y == 0] = 0 - ly = scipy.dot(y*ly, scipy.array([1.0, 1.0]).reshape([2,1])) - cvraw = 2*(scipy.tile(ly, [1, lambdau.size]) - lp) + ly = np.dot(y*ly, np.array([1.0, 1.0]).reshape([2,1])) + cvraw = 2*(np.tile(ly, [1, lambdau.size]) - lp) elif ptype == 'mae': - cvraw = scipy.absolute(yy1 - (1 - predmat)) + scipy.absolute(yy2 - (1 - predmat)) + cvraw = np.absolute(yy1 - (1 - predmat)) + np.absolute(yy2 - (1 - predmat)) elif ptype == 'class': cvraw = yy1*(predmat > 0.5) + yy2*(predmat <= 0.5) @@ -117,7 +117,7 @@ def cvlognet(fit, \ cvm = wtmean(cvraw, weights) sqccv = (cvraw - cvm)**2 - cvsd = scipy.sqrt(wtmean(sqccv, weights)/(N-1)) + cvsd = np.sqrt(wtmean(sqccv, weights)/(N-1)) result = dict() result['cvm'] = cvm @@ -137,35 +137,35 @@ def cvlognet(fit, \ #========================= def auc_mat(y, prob, weights = None): if weights == None or len(weights) == 0: - weights = scipy.ones([y.shape[0], 1]) + weights = np.ones([y.shape[0], 1]) wweights = weights*y wweights = wweights.flatten() - wweights = scipy.reshape(wweights, [1, wweights.size]) + wweights = np.reshape(wweights, [1, wweights.size]) ny= y.shape[0] - a = scipy.zeros([ny, 1]) - b = scipy.ones([ny, 1]) - yy = scipy.vstack((a, b)) - pprob = scipy.vstack((prob,prob)) + a = np.zeros([ny, 1]) + b = np.ones([ny, 1]) + yy = np.vstack((a, b)) + pprob = np.vstack((prob,prob)) result = auc(yy, pprob, wweights) return(result) #========================= def auc(y, prob, w): if len(w) == 0: - mindiff = scipy.amin(scipy.diff(scipy.unique(prob))) - pert = scipy.random.uniform(0, mindiff/3, prob.size) - t, rprob = scipy.unique(prob + pert, return_inverse = True) - n1 = scipy.sum(y, keepdims = True) + mindiff = np.amin(np.diff(np.unique(prob))) + pert = np.random.uniform(0, mindiff/3, prob.size) + t, rprob = np.unique(prob + pert, return_inverse = True) + n1 = np.sum(y, keepdims = True) n0 = y.shape[0] - n1 - u = scipy.sum(rprob[y == 1]) - n1*(n1 + 1)/2 + u = np.sum(rprob[y == 1]) - n1*(n1 + 1)/2 result = u/(n1*n0) else: - op = scipy.argsort(prob) + op = np.argsort(prob) y = y[op] w = w[op] - cw = scipy.cumsum(w) + cw = np.cumsum(w) w1 = w[y == 1] - cw1 = scipy.cumsum(w1) - wauc = scipy.sum(w1*(cw[y == 1] - cw1)) + cw1 = np.cumsum(w1) + wauc = np.sum(w1*(cw[y == 1] - cw1)) sumw = cw1[-1] sumw = sumw*(c1[-1] - sumw) result = wauc/sumw diff --git a/glmnet_python/cvmrelnet.py b/glmnet_python/cvmrelnet.py index 40e8540..c3fe8f8 100644 --- a/glmnet_python/cvmrelnet.py +++ b/glmnet_python/cvmrelnet.py @@ -3,7 +3,7 @@ Internal function called by cvglmnet. See also cvglmnet """ -import scipy +import numpy as np from glmnetPredict import glmnetPredict from wtmean import wtmean from cvcompute import cvcompute @@ -34,27 +34,27 @@ def cvmrelnet(fit, \ if len(offset) > 0: y = y - offset - predmat = scipy.ones([nobs, nc, lambdau.size])*scipy.NAN - nfolds = scipy.amax(foldid) + 1 + predmat = np.ones([nobs, nc, lambdau.size])*np.NAN + nfolds = np.amax(foldid) + 1 nlams = [] for i in range(nfolds): which = foldid == i fitobj = fit[i].copy() fitobj['offset'] = False preds = glmnetPredict(fitobj, x[which, ]) - nlami = scipy.size(fit[i]['lambdau']) + nlami = np.size(fit[i]['lambdau']) predmat[which, 0:nlami] = preds nlams.append(nlami) # convert nlams to scipy array - nlams = scipy.array(nlams, dtype = scipy.integer) + nlams = np.array(nlams, dtype = np.integer) - N = nobs - scipy.reshape(scipy.sum(scipy.isnan(predmat[:, 1, :]), axis = 0), (1, -1)) - bigY = scipy.tile(y[:, :, None], [1, 1, lambdau.size]) + N = nobs - np.reshape(np.sum(np.isnan(predmat[:, 1, :]), axis = 0), (1, -1)) + bigY = np.tile(y[:, :, None], [1, 1, lambdau.size]) if ptype == 'mse': - cvraw = scipy.sum((bigY - predmat)**2, axis = 1).squeeze() + cvraw = np.sum((bigY - predmat)**2, axis = 1).squeeze() elif ptype == 'mae': - cvraw = scipy.sum(scipy.absolute(bigY - predmat), axis = 1).squeeze() + cvraw = np.sum(np.absolute(bigY - predmat), axis = 1).squeeze() if y.size/nfolds < 3 and grouped == True: print('Option grouped=false enforced in cv.glmnet, since < 3 observations per fold') @@ -68,7 +68,7 @@ def cvmrelnet(fit, \ cvm = wtmean(cvraw, weights) sqccv = (cvraw - cvm)**2 - cvsd = scipy.sqrt(wtmean(sqccv, weights)/(N-1)) + cvsd = np.sqrt(wtmean(sqccv, weights)/(N-1)) result = dict() result['cvm'] = cvm diff --git a/glmnet_python/cvmultnet.py b/glmnet_python/cvmultnet.py index aa3efed..f14a2ba 100644 --- a/glmnet_python/cvmultnet.py +++ b/glmnet_python/cvmultnet.py @@ -3,7 +3,7 @@ Internal function called by cvglmnet. See also cvglmnet """ -import scipy +import numpy as np from glmnetPredict import glmnetPredict from wtmean import wtmean from cvcompute import cvcompute @@ -33,16 +33,16 @@ def cvmultnet(fit, \ prob_max = 1 - prob_min nc = y.shape if nc[1] == 1: - classes, sy = scipy.unique(y, return_inverse = True) + classes, sy = np.unique(y, return_inverse = True) nc = len(classes) - indexes = scipy.eye(nc, nc) + indexes = np.eye(nc, nc) y = indexes[sy, :] else: nc = nc[1] is_offset = not(len(offset) == 0) - predmat = scipy.ones([y.shape[0], nc, lambdau.size])*scipy.NAN - nfolds = scipy.amax(foldid) + 1 + predmat = np.ones([y.shape[0], nc, lambdau.size])*np.NAN + nfolds = np.amax(foldid) + 1 nlams = [] for i in range(nfolds): which = foldid == i @@ -50,39 +50,39 @@ def cvmultnet(fit, \ if is_offset: off_sub = offset[which, ] else: - off_sub = scipy.empty([0]) - preds = glmnetPredict(fitobj, x[which, ], scipy.empty([0]), 'response', False, off_sub) - nlami = scipy.size(fit[i]['lambdau']) + off_sub = np.empty([0]) + preds = glmnetPredict(fitobj, x[which, ], np.empty([0]), 'response', False, off_sub) + nlami = np.size(fit[i]['lambdau']) predmat[which, 0:nlami] = preds nlams.append(nlami) - # convert nlams to scipy array - nlams = scipy.array(nlams, dtype = scipy.integer) + # convert nlams to np array + nlams = np.array(nlams, dtype = np.integer) - ywt = scipy.sum(y, axis = 1, keepdims = True) - y = y/scipy.tile(ywt, [1, y.shape[1]]) + ywt = np.sum(y, axis = 1, keepdims = True) + y = y/np.tile(ywt, [1, y.shape[1]]) weights = weights*ywt - N = y.shape[0] - scipy.sum(scipy.isnan(predmat[:,1,:]), axis = 0, keepdims = True) - bigY = scipy.tile(y[:, :, None], [1, 1, lambdau.size]) + N = y.shape[0] - np.sum(np.isnan(predmat[:,1,:]), axis = 0, keepdims = True) + bigY = np.tile(y[:, :, None], [1, 1, lambdau.size]) if ptype == 'mse': - cvraw = scipy.sum((bigY - predmat)**2, axis = 1).squeeze() + cvraw = np.sum((bigY - predmat)**2, axis = 1).squeeze() elif ptype == 'deviance': - predmat = scipy.minimum(scipy.maximum(predmat, prob_min), prob_max) - lp = bigY*scipy.log(predmat) - ly = bigY*scipy.log(bigY) + predmat = np.minimum(np.maximum(predmat, prob_min), prob_max) + lp = bigY*np.log(predmat) + ly = bigY*np.log(bigY) ly[y == 0] = 0 - cvraw = scipy.sum(2*(ly - lp), axis = 1).squeeze() + cvraw = np.sum(2*(ly - lp), axis = 1).squeeze() elif ptype == 'mae': - cvraw = scipy.sum(scipy.absolute(bigY - predmat), axis = 1).squeeze() + cvraw = np.sum(np.absolute(bigY - predmat), axis = 1).squeeze() elif ptype == 'class': - classid = scipy.zeros([y.shape[0], lambdau.size])*scipy.NaN + classid = np.zeros([y.shape[0], lambdau.size])*np.NaN for i in range(lambdau.size): classid[:, i] = glmnet_softmax(predmat[:,:,i]) classid = classid.reshape([classid.size,1]) yperm = bigY.transpose((0,2,1)) yperm = yperm.reshape([yperm.size, 1]) idx = sub2ind(yperm.shape, range(len(classid)), classid.transpose()) - cvraw = scipy.reshape(1 - yperm[idx], [-1, lambdau.size]); + cvraw = np.reshape(1 - yperm[idx], [-1, lambdau.size]); if grouped == True: cvob = cvcompute(cvraw, weights, foldid, nlams) @@ -92,7 +92,7 @@ def cvmultnet(fit, \ cvm = wtmean(cvraw, weights) sqccv = (cvraw - cvm)**2 - cvsd = scipy.sqrt(wtmean(sqccv, weights)/(N-1)) + cvsd = np.sqrt(wtmean(sqccv, weights)/(N-1)) result = dict() result['cvm'] = cvm @@ -115,16 +115,16 @@ def sub2ind(array_shape, rows, cols): #========================= def glmnet_softmax(x): d = x.shape - nas = scipy.any(scipy.isnan(x), axis = 1) - if scipy.any(nas): - pclass = scipy.zeros([d[0], 1])*scipy.NaN - if scipy.sum(nas) < d[0]: + nas = np.any(np.isnan(x), axis = 1) + if np.any(nas): + pclass = np.zeros([d[0], 1])*np.NaN + if np.sum(nas) < d[0]: pclass2 = glmnet_softmax(x[~nas, :]) pclass[~nas] = pclass2 result = pclass else: maxdist = x[:, 1] - pclass = scipy.ones([d[0], 1]) + pclass = np.ones([d[0], 1]) for i in range(1, d[1], 1): t = x[:, i] > maxdist pclass[t] = i diff --git a/glmnet_python/elnet.py b/glmnet_python/elnet.py index 0f462cd..d0aba5c 100644 --- a/glmnet_python/elnet.py +++ b/glmnet_python/elnet.py @@ -5,7 +5,7 @@ # import packages/methods -import scipy +import numpy as np import ctypes from loadGlmLib import loadGlmLib @@ -17,7 +17,7 @@ def elnet(x, is_sparse, irs, pcs, y, weights, offset, gtype, parm, lempty, glmlib = loadGlmLib() # pre-process data - ybar = scipy.dot(scipy.transpose(y), weights) + ybar = np.dot(np.transpose(y), weights) ybar = ybar/sum(weights) nulldev = (y - ybar)**2 * weights # ka @@ -44,15 +44,15 @@ def elnet(x, is_sparse, irs, pcs, y, weights, offset, gtype, parm, lempty, ###################################### # force inputs into fortran order and into the correct scipy datatype copyFlag = False - x = x.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - irs = irs.astype(dtype = scipy.int32, order = 'F', copy = copyFlag) - pcs = pcs.astype(dtype = scipy.int32, order = 'F', copy = copyFlag) - y = y.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - weights = weights.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - jd = jd.astype(dtype = scipy.int32, order = 'F', copy = copyFlag) - vp = vp.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - cl = cl.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - ulam = ulam.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) + x = x.astype(dtype = np.float64, order = 'F', copy = copyFlag) + irs = irs.astype(dtype = np.int32, order = 'F', copy = copyFlag) + pcs = pcs.astype(dtype = np.int32, order = 'F', copy = copyFlag) + y = y.astype(dtype = np.float64, order = 'F', copy = copyFlag) + weights = weights.astype(dtype = np.float64, order = 'F', copy = copyFlag) + jd = jd.astype(dtype = np.int32, order = 'F', copy = copyFlag) + vp = vp.astype(dtype = np.float64, order = 'F', copy = copyFlag) + cl = cl.astype(dtype = np.float64, order = 'F', copy = copyFlag) + ulam = ulam.astype(dtype = np.float64, order = 'F', copy = copyFlag) ###################################### # --------- ALLOCATE OUTPUTS --------- @@ -61,28 +61,28 @@ def elnet(x, is_sparse, irs, pcs, y, weights, offset, gtype, parm, lempty, lmu = -1 lmu_r = ctypes.c_int(lmu) # a0 - a0 = scipy.zeros([nlam], dtype = scipy.float64) - a0 = a0.astype(dtype = scipy.float64, order = 'F', copy = False) + a0 = np.zeros([nlam], dtype = np.float64) + a0 = a0.astype(dtype = np.float64, order = 'F', copy = False) a0_r = a0.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # ca - ca = scipy.zeros([nx, nlam], dtype = scipy.float64) - ca = ca.astype(dtype = scipy.float64, order = 'F', copy = False) + ca = np.zeros([nx, nlam], dtype = np.float64) + ca = ca.astype(dtype = np.float64, order = 'F', copy = False) ca_r = ca.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # ia - ia = -1*scipy.ones([nx], dtype = scipy.int32) - ia = ia.astype(dtype = scipy.int32, order = 'F', copy = False) + ia = -1*np.ones([nx], dtype = np.int32) + ia = ia.astype(dtype = np.int32, order = 'F', copy = False) ia_r = ia.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) # nin - nin = -1*scipy.ones([nlam], dtype = scipy.int32) - nin = nin.astype(dtype = scipy.int32, order = 'F', copy = False) + nin = -1*np.ones([nlam], dtype = np.int32) + nin = nin.astype(dtype = np.int32, order = 'F', copy = False) nin_r = nin.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) # rsq - rsq = -1*scipy.ones([nlam], dtype = scipy.float64) - rsq = rsq.astype(dtype = scipy.float64, order = 'F', copy = False) + rsq = -1*np.ones([nlam], dtype = np.float64) + rsq = rsq.astype(dtype = np.float64, order = 'F', copy = False) rsq_r = rsq.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # alm - alm = -1*scipy.ones([nlam], dtype = scipy.float64) - alm = alm.astype(dtype = scipy.float64, order = 'F', copy = False) + alm = -1*np.ones([nlam], dtype = np.float64) + alm = alm.astype(dtype = np.float64, order = 'F', copy = False) alm_r = alm.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # nlp nlp = -1 @@ -186,21 +186,21 @@ def elnet(x, is_sparse, irs, pcs, y, weights, offset, gtype, parm, lempty, ninmax = max(nin) # fix first value of alm (from inf to correct value) if lempty: - t1 = scipy.log(alm[1]) - t2 = scipy.log(alm[2]) - alm[0] = scipy.exp(2*t1 - t2) + t1 = np.log(alm[1]) + t2 = np.log(alm[2]) + alm[0] = np.exp(2*t1 - t2) # create return fit dictionary if ninmax > 0: ca = ca[0:ninmax, :] - df = scipy.sum(scipy.absolute(ca) > 0, axis=0) + df = np.sum(np.absolute(ca) > 0, axis=0) ja = ia[0:ninmax] - 1 # ia is 1-indexed in fortran - oja = scipy.argsort(ja) + oja = np.argsort(ja) ja1 = ja[oja] - beta = scipy.zeros([nvars, lmu], dtype = scipy.float64) + beta = np.zeros([nvars, lmu], dtype = np.float64) beta[ja1, :] = ca[oja, :] else: - beta = scipy.zeros([nvars, lmu], dtype = scipy.float64) - df = scipy.zeros([1, lmu], dtype = scipy.float64) + beta = np.zeros([nvars, lmu], dtype = np.float64) + df = np.zeros([1, lmu], dtype = np.float64) fit = dict() fit['a0'] = a0 @@ -211,7 +211,7 @@ def elnet(x, is_sparse, irs, pcs, y, weights, offset, gtype, parm, lempty, fit['lambdau'] = alm fit['npasses'] = nlp_r.value fit['jerr'] = jerr_r.value - fit['dim'] = scipy.array([nvars, lmu], dtype = scipy.integer) + fit['dim'] = np.array([nvars, lmu], dtype = np.integer) fit['offset'] = is_offset fit['class'] = 'elnet' diff --git a/glmnet_python/fishnet.py b/glmnet_python/fishnet.py index 7b022ab..e71b8fd 100644 --- a/glmnet_python/fishnet.py +++ b/glmnet_python/fishnet.py @@ -3,7 +3,7 @@ Internal function called by glmnet. See also glmnet, cvglmnet """ # import packages/methods -import scipy +import numpy as np import ctypes from loadGlmLib import loadGlmLib @@ -14,7 +14,7 @@ def fishnet(x, is_sparse, irs, pcs, y, weights, offset, parm, # load shared fortran library glmlib = loadGlmLib() - if scipy.any( y < 0): + if np.any( y < 0): raise ValueError('negative responses not permitted for Poisson family') if len(offset) == 0: @@ -30,16 +30,16 @@ def fishnet(x, is_sparse, irs, pcs, y, weights, offset, parm, ###################################### # force inputs into fortran order and scipy float64 copyFlag = False - x = x.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - irs = irs.astype(dtype = scipy.int32, order = 'F', copy = copyFlag) - pcs = pcs.astype(dtype = scipy.int32, order = 'F', copy = copyFlag) - y = y.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - weights = weights.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - offset = offset.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - jd = jd.astype(dtype = scipy.int32, order = 'F', copy = copyFlag) - vp = vp.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - cl = cl.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - ulam = ulam.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) + x = x.astype(dtype = np.float64, order = 'F', copy = copyFlag) + irs = irs.astype(dtype = np.int32, order = 'F', copy = copyFlag) + pcs = pcs.astype(dtype = np.int32, order = 'F', copy = copyFlag) + y = y.astype(dtype = np.float64, order = 'F', copy = copyFlag) + weights = weights.astype(dtype = np.float64, order = 'F', copy = copyFlag) + offset = offset.astype(dtype = np.float64, order = 'F', copy = copyFlag) + jd = jd.astype(dtype = np.int32, order = 'F', copy = copyFlag) + vp = vp.astype(dtype = np.float64, order = 'F', copy = copyFlag) + cl = cl.astype(dtype = np.float64, order = 'F', copy = copyFlag) + ulam = ulam.astype(dtype = np.float64, order = 'F', copy = copyFlag) ###################################### # --------- ALLOCATE OUTPUTS --------- @@ -48,28 +48,28 @@ def fishnet(x, is_sparse, irs, pcs, y, weights, offset, parm, lmu = -1 lmu_r = ctypes.c_int(lmu) # a0 - a0 = scipy.zeros([nlam], dtype = scipy.float64) - a0 = a0.astype(dtype = scipy.float64, order = 'F', copy = False) + a0 = np.zeros([nlam], dtype = np.float64) + a0 = a0.astype(dtype = np.float64, order = 'F', copy = False) a0_r = a0.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # ca - ca = scipy.zeros([nx, nlam], dtype = scipy.float64) - ca = ca.astype(dtype = scipy.float64, order = 'F', copy = False) + ca = np.zeros([nx, nlam], dtype = np.float64) + ca = ca.astype(dtype = np.float64, order = 'F', copy = False) ca_r = ca.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # ia - ia = -1*scipy.ones([nx], dtype = scipy.int32) - ia = ia.astype(dtype = scipy.int32, order = 'F', copy = False) + ia = -1*np.ones([nx], dtype = np.int32) + ia = ia.astype(dtype = np.int32, order = 'F', copy = False) ia_r = ia.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) # nin - nin = -1*scipy.ones([nlam], dtype = scipy.int32) - nin = nin.astype(dtype = scipy.int32, order = 'F', copy = False) + nin = -1*np.ones([nlam], dtype = np.int32) + nin = nin.astype(dtype = np.int32, order = 'F', copy = False) nin_r = nin.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) # dev - dev = -1*scipy.ones([nlam], dtype = scipy.float64) - dev = dev.astype(dtype = scipy.float64, order = 'F', copy = False) + dev = -1*np.ones([nlam], dtype = np.float64) + dev = dev.astype(dtype = np.float64, order = 'F', copy = False) dev_r = dev.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # alm - alm = -1*scipy.ones([nlam], dtype = scipy.float64) - alm = alm.astype(dtype = scipy.float64, order = 'F', copy = False) + alm = -1*np.ones([nlam], dtype = np.float64) + alm = alm.astype(dtype = np.float64, order = 'F', copy = False) alm_r = alm.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # nlp nlp = -1 @@ -176,22 +176,22 @@ def fishnet(x, is_sparse, irs, pcs, y, weights, offset, parm, ninmax = max(nin) # fix first value of alm (from inf to correct value) if ulam[0] == 0.0: - t1 = scipy.log(alm[1]) - t2 = scipy.log(alm[2]) - alm[0] = scipy.exp(2*t1 - t2) + t1 = np.log(alm[1]) + t2 = np.log(alm[2]) + alm[0] = np.exp(2*t1 - t2) # create return fit dictionary - dd = scipy.array([nvars, lmu], dtype = scipy.integer) + dd = np.array([nvars, lmu], dtype = np.integer) if ninmax > 0: ca = ca[0:ninmax, :] - df = scipy.sum(scipy.absolute(ca) > 0, axis = 0) + df = np.sum(np.absolute(ca) > 0, axis = 0) ja = ia[0:ninmax] - 1 # ia is 1-indexed in fortran - oja = scipy.argsort(ja) + oja = np.argsort(ja) ja1 = ja[oja] - beta = scipy.zeros([nvars, lmu], dtype = scipy.float64) + beta = np.zeros([nvars, lmu], dtype = np.float64) beta[ja1, :] = ca[oja, :] else: - beta = scipy.zeros([nvars, lmu], dtype = scipy.float64) - df = scipy.zeros([1, lmu], dtype = scipy.float64) + beta = np.zeros([nvars, lmu], dtype = np.float64) + df = np.zeros([1, lmu], dtype = np.float64) fit = dict() fit['a0'] = a0 diff --git a/glmnet_python/glmnet.py b/glmnet_python/glmnet.py index 5d46e1e..a293ab2 100644 --- a/glmnet_python/glmnet.py +++ b/glmnet_python/glmnet.py @@ -22,11 +22,11 @@ INPUT ARGUMENTS: --------------- - x Input scipy 2D array of nobs x nvars (required). Each row is an + x Input np 2D array of nobs x nvars (required). Each row is an observation vector. Can be in sparse matrix format. Must be in - scipy csc_matrix format + np csc_matrix format - y Response variable (scipy 2D array of size nobs x 1, nobs x nc, etc). (required) + y Response variable (np 2D array of size nobs x 1, nobs x nc, etc). (required) For family = 'gaussian', Quantitative column vector For family = 'poisson' (non-negative counts), Quantitative column vector For family = 'binomial', should be either a column vector with two @@ -49,7 +49,7 @@ nlambda = 100 (number of lambda values) lambdau depends on data, nlambda and lambda_min (user supplied lambda sequence) standardize = True (variable standardization) - weights = all ones scipy vector (observation weights) + weights = all ones np vector (observation weights) For more details see help for glmnetSet OUTPUT ARGUMENTS: @@ -87,59 +87,59 @@ class Type of regression - internal usage EXAMPLES: -------- # Gaussian - x = scipy.random.rand(100, 10) - y = scipy.random.rand(100, 1) + x = np.random.rand(100, 10) + y = np.random.rand(100, 1) fit = glmnet(x = x, y = y) fit = glmnet(x = x, y = y, alpha = 0.5) glmnetPrint(fit) - glmnetPredict(fit, scipy.empty([0]), scipy.array([0.01]), 'coef') # extract coefficients at a single value of lambdau - glmnetPredict(fit, x[0:10,:], scipy.array([0.01, 0.005])) # make predictions + glmnetPredict(fit, np.empty([0]), np.array([0.01]), 'coef') # extract coefficients at a single value of lambdau + glmnetPredict(fit, x[0:10,:], np.array([0.01, 0.005])) # make predictions # Multivariate Gaussian: - x = scipy.random.rand(100, 10) - y = scipy.random.rand(100,3) + x = np.random.rand(100, 10) + y = np.random.rand(100,3) fit = glmnet(x, y, 'mgaussian') glmnetPlot(fit, 'norm', False, '2norm') # Binomial - x = scipy.random.rand(100, 10) - y = scipy.random.rand(100,1) + x = np.random.rand(100, 10) + y = np.random.rand(100,1) y = (y > 0.5)*1.0 fit = glmnet(x = x, y = y, family = 'binomial', alpha = 0.5) # Multinomial - x = scipy.random.rand(100,10) - y = scipy.random.rand(100,1) + x = np.random.rand(100,10) + y = np.random.rand(100,1) y[y < 0.3] = 1.0 y[y < 0.6] = 2.0 y[y < 1.0] = 3.0 fit = glmnet(x = x, y = y, family = 'multinomial', mtype = 'grouped') # poisson - x = scipy.random.rand(100,10) - y = scipy.random.poisson(size = [100, 1])*1.0 + x = np.random.rand(100,10) + y = np.random.poisson(size = [100, 1])*1.0 fit = glmnet(x = x, y = y, family = 'poisson') # cox N = 1000; p = 30; nzc = p/3; - x = scipy.random.normal(size = [N, p]) - beta = scipy.random.normal(size = [nzc, 1]) - fx = scipy.dot(x[:, 0:nzc], beta/3) - hx = scipy.exp(fx) - ty = scipy.random.exponential(scale = 1/hx, size = [N, 1]) - tcens = scipy.random.binomial(1, 0.3, size = [N, 1]) + x = np.random.normal(size = [N, p]) + beta = np.random.normal(size = [nzc, 1]) + fx = np.dot(x[:, 0:nzc], beta/3) + hx = np.exp(fx) + ty = np.random.exponential(scale = 1/hx, size = [N, 1]) + tcens = np.random.binomial(1, 0.3, size = [N, 1]) tcens = 1 - tcens - y = scipy.column_stack((ty, tcens)) + y = np.column_stack((ty, tcens)) fit = glmnet(x = x.copy(), y = y.copy(), family = 'cox') glmnetPlot(fit) # sparse example N = 1000000; - x = scipy.random.normal(size = [N,10]) + x = np.random.normal(size = [N,10]) x[x < 3.0] = 0.0 - xs = scipy.sparse.csc_matrix(x, dtype = scipy.float64) - y = scipy.random.binomial(1, 0.5, size =[N,1]) + xs = scipy.sparse.csc_matrix(x, dtype = np.float64) + y = np.random.binomial(1, 0.5, size =[N,1]) y = y*1.0 st = time.time() fit = glmnet.glmnet(x = xs, y = y, family = 'binomial') @@ -236,7 +236,8 @@ class Type of regression - internal usage # import packages/methods from glmnetSet import glmnetSet from glmnetControl import glmnetControl -import scipy +import numpy as np +import scipy.sparse from elnet import elnet from lognet import lognet from coxnet import coxnet @@ -245,17 +246,17 @@ class Type of regression - internal usage def glmnet(*, x, y, family='gaussian', **options): - # check inputs: make sure x and y are scipy, float64 arrays + # check inputs: make sure x and y are np, float64 arrays # fortran order is not checked as we force a convert later if not( isinstance(x, scipy.sparse.csc.csc_matrix) ): - if not( isinstance(x, scipy.ndarray) and x.dtype == 'float64'): - raise ValueError('x input must be a scipy float64 ndarray') + if not( isinstance(x, np.ndarray) and x.dtype == 'float64'): + raise ValueError('x input must be a np float64 ndarray') else: if not (x.dtype == 'float64'): raise ValueError('x input must be a float64 array') - if not( isinstance(y, scipy.ndarray) and y.dtype == 'float64'): - raise ValueError('y input must be a scipy float64 ndarray') + if not( isinstance(y, np.ndarray) and y.dtype == 'float64'): + raise ValueError('y input must be a np float64 ndarray') # create options if options is None: @@ -279,28 +280,28 @@ def glmnet(*, x, y, family='gaussian', **options): #print(options) ## error check options parameters - alpha = scipy.float64(options['alpha']) + alpha = np.float64(options['alpha']) if alpha > 1.0 : print('Warning: alpha > 1.0; setting to 1.0') - options['alpha'] = scipy.float64(1.0) + options['alpha'] = np.float64(1.0) if alpha < 0.0 : print('Warning: alpha < 0.0; setting to 0.0') - options['alpha'] = scipy.float64(0.0) + options['alpha'] = np.float64(0.0) - parm = scipy.float64(options['alpha']) - nlam = scipy.int32(options['nlambda']) + parm = np.float64(options['alpha']) + nlam = np.int32(options['nlambda']) nobs, nvars = x.shape # check weights length weights = options['weights'].copy() if len(weights) == 0: - weights = scipy.ones([nobs, 1], dtype = scipy.float64) + weights = np.ones([nobs, 1], dtype = np.float64) elif len(weights) != nobs: raise ValueError('Error: Number of elements in ''weights'' not equal to number of rows of ''x''') - # check if weights are scipy nd array - if not( isinstance(weights, scipy.ndarray) and weights.dtype == 'float64'): - raise ValueError('weights input must be a scipy float64 ndarray') + # check if weights are np nd array + if not( isinstance(weights, np.ndarray) and weights.dtype == 'float64'): + raise ValueError('weights input must be a np float64 ndarray') # check y length nrowy = y.shape[0] @@ -321,18 +322,18 @@ def glmnet(*, x, y, family='gaussian', **options): exclude = options['exclude'] # TBD: test this if not (len(exclude) == 0): - exclude = scipy.unique(exclude) - if scipy.any(exclude < 0) or scipy.any(exclude >= nvars): + exclude = np.unique(exclude) + if np.any(exclude < 0) or np.any(exclude >= nvars): raise ValueError('Error: Some excluded variables are out of range') else: - jd = scipy.append(len(exclude), exclude + 1) # indices are 1-based in fortran + jd = np.append(len(exclude), exclude + 1) # indices are 1-based in fortran else: - jd = scipy.zeros([1,1], dtype = scipy.integer) + jd = np.zeros([1,1], dtype = np.integer) # check vp vp = options['penalty_factor'] if len(vp) == 0: - vp = scipy.ones([1, nvars]) + vp = np.ones([1, nvars]) # inparms inparms = glmnetControl() @@ -345,12 +346,12 @@ def glmnet(*, x, y, family='gaussian', **options): if any(cl[1,:] < 0): raise ValueError('Error: The lower bound on cl must be non-negative') - cl[0, cl[0, :] == scipy.float64('-inf')] = -1.0*inparms['big'] - cl[1, cl[1, :] == scipy.float64('inf')] = 1.0*inparms['big'] + cl[0, cl[0, :] == np.float64('-inf')] = -1.0*inparms['big'] + cl[1, cl[1, :] == np.float64('inf')] = 1.0*inparms['big'] if cl.shape[1] < nvars: if cl.shape[1] == 1: - cl = cl*scipy.ones([1, nvars]) + cl = cl*np.ones([1, nvars]) else: raise ValueError('Error: Require length 1 or nvars lower and upper limits') else: @@ -358,7 +359,7 @@ def glmnet(*, x, y, family='gaussian', **options): exit_rec = 0 - if scipy.any(cl == 0.0): + if np.any(cl == 0.0): fdev = inparms['fdev'] if fdev != 0: optset = dict() @@ -366,12 +367,12 @@ def glmnet(*, x, y, family='gaussian', **options): glmnetControl(optset) exit_rec = 1 - isd = scipy.int32(options['standardize']) - intr = scipy.int32(options['intr']) + isd = np.int32(options['standardize']) + intr = np.int32(options['intr']) if (intr == True) and (family == 'cox'): print('Warning: Cox model has no intercept!') - jsd = scipy.int32(options['standardize_resp']) + jsd = np.int32(options['standardize_resp']) thresh = options['thresh'] lambdau = options['lambdau'] lambda_min = options['lambda_min'] @@ -387,16 +388,16 @@ def glmnet(*, x, y, family='gaussian', **options): if (lambda_min >= 1): raise ValueError('ERROR: lambda_min should be less than 1') flmin = lambda_min - ulam = scipy.zeros([1,1], dtype = scipy.float64) + ulam = np.zeros([1,1], dtype = np.float64) else: flmin = 1.0 if any(lambdau < 0): raise ValueError('ERROR: lambdas should be non-negative') - ulam = -scipy.sort(-lambdau) # reverse sort + ulam = -np.sort(-lambdau) # reverse sort nlam = lambdau.size - maxit = scipy.int32(options['maxit']) + maxit = np.int32(options['maxit']) gtype = options['gtype'] if len(gtype) == 0: if (nvars < 500): @@ -429,15 +430,15 @@ def glmnet(*, x, y, family='gaussian', **options): is_sparse = False if scipy.sparse.issparse(x): is_sparse = True - tx = scipy.sparse.csc_matrix(x, dtype = scipy.float64) + tx = scipy.sparse.csc_matrix(x, dtype = np.float64) x = tx.data; x = x.reshape([len(x), 1]) irs = tx.indices + 1 pcs = tx.indptr + 1 - irs = scipy.reshape(irs, [len(irs),]) - pcs = scipy.reshape(pcs, [len(pcs),]) + irs = np.reshape(irs, [len(irs),]) + pcs = np.reshape(pcs, [len(pcs),]) else: - irs = scipy.empty([0]) - pcs = scipy.empty([0]) + irs = np.empty([0]) + pcs = np.empty([0]) if scipy.sparse.issparse(y): y = y.todense() diff --git a/glmnet_python/glmnetCoef.py b/glmnet_python/glmnetCoef.py index 574552a..9fa0907 100644 --- a/glmnet_python/glmnetCoef.py +++ b/glmnet_python/glmnetCoef.py @@ -14,8 +14,8 @@ Fewer input arguments (more often) are allowed in the call, but must come in the order listed above. To set default values on the way, use - scipy.empty([0]). - For example, ncoef = glmnetCoef(fit,scipy.empty([0]),False). + np.empty([0]). + For example, ncoef = glmnetCoef(fit,np.empty([0]),False). INPUT ARGUMENTS: obj Fitted "glmnet" model object. @@ -28,7 +28,7 @@ algorithm. Note that exact = True is not implemented. OUTPUT ARGUMENTS: - result A (nvars+1) x length(s) scipy 2D array with each column being the + result A (nvars+1) x length(s) np 2D array with each column being the coefficients at an s. Note that the first row are the intercepts (0 if no intercept in the original model). @@ -61,14 +61,14 @@ glmnet, glmnetPrint, glmnetPredict, and cvglmnet. EXAMPLES: - x = scipy.random.rand(100,20); - y = scipy.random.rand(100,1); + x = np.random.rand(100,20); + y = np.random.rand(100,1); fit = glmnet(x = x.copy(),y = y.copy()); - ncoef = glmnetCoef(fit,scipy.array([0.01, 0.001])); + ncoef = glmnetCoef(fit,np.array([0.01, 0.001])); """ -import scipy +import numpy as np from glmnetPredict import glmnetPredict def glmnetCoef(obj, s = None, exact = False): @@ -79,7 +79,7 @@ def glmnetCoef(obj, s = None, exact = False): if exact and len(s) > 0: raise NotImplementedError('exact = True not implemented in glmnetCoef') - result = glmnetPredict(obj, scipy.empty([0]), s, 'coefficients') + result = glmnetPredict(obj, np.empty([0]), s, 'coefficients') return(result) diff --git a/glmnet_python/glmnetControl.py b/glmnet_python/glmnetControl.py index fae3b60..f9681a3 100644 --- a/glmnet_python/glmnetControl.py +++ b/glmnet_python/glmnetControl.py @@ -70,19 +70,19 @@ """ def glmnetControl(pars = None): - import scipy + import numpy as np # default options ivals = dict(); - ivals["fdev"] = scipy.float64(1e-5) - ivals["devmax"] = scipy.float64(0.999) - ivals["eps"] = scipy.float64(1e-6) - ivals["big"] = scipy.float64(9.9e35) - ivals["mnlam"] = scipy.float64(5) - ivals["pmin"] = scipy.float64(1e-5) - ivals["exmx"] = scipy.float64(250) - ivals["prec"] = scipy.float64(1e-10) - ivals["mxit"] = scipy.float64(100) + ivals["fdev"] = np.float64(1e-5) + ivals["devmax"] = np.float64(0.999) + ivals["eps"] = np.float64(1e-6) + ivals["big"] = np.float64(9.9e35) + ivals["mnlam"] = np.float64(5) + ivals["pmin"] = np.float64(1e-5) + ivals["exmx"] = np.float64(250) + ivals["prec"] = np.float64(1e-10) + ivals["mxit"] = np.float64(100) # quick return if no user opts if pars == None: diff --git a/glmnet_python/glmnetPlot.py b/glmnet_python/glmnetPlot.py index 76b9437..bbaad9e 100644 --- a/glmnet_python/glmnetPlot.py +++ b/glmnet_python/glmnetPlot.py @@ -59,10 +59,10 @@ EXAMPLES: import matplotlib.pyplot as plt - scipy.random.seed(1) - x=scipy.random.normal(size = (100,20)) - y=scipy.random.normal(size = (100,1)) - g4=scipy.random.choice(4,size = (100,1))*1.0 + np.random.seed(1) + x=np.random.normal(size = (100,20)) + y=np.random.normal(size = (100,1)) + g4=np.random.choice(4,size = (100,1))*1.0 fit1=glmnet(x = x.copy(),y = y.copy()) glmnetPlot(fit1) plt.figure() @@ -71,7 +71,7 @@ plt.figure() glmnetPlot(fit3) """ -import scipy +import numpy as np def glmnetPlot(x, xvar = 'norm', label = False, ptype = 'coef', **options): @@ -93,7 +93,7 @@ def glmnetPlot(x, xvar = 'norm', label = False, ptype = 'coef', **options): for i in range(len(beta)): which = nonzeroCoef(beta[i]) nzbeta[i] = beta[i][which, :] - norm = norm + scipy.sum(scipy.absolute(nzbeta[i]), axis = 0) + norm = norm + np.sum(np.absolute(nzbeta[i]), axis = 0) else: norm = 0 @@ -114,11 +114,11 @@ def glmnetPlot(x, xvar = 'norm', label = False, ptype = 'coef', **options): if i < ncl - 1: plt.figure() else: - dfseq = scipy.round_(scipy.mean(x['dfmat'], axis = 0)) + dfseq = np.round_(np.mean(x['dfmat'], axis = 0)) coefnorm = beta[1]*0 for i in range(len(beta)): - coefnorm = coefnorm + scipy.absolute(beta[i])**2 - coefnorm = scipy.sqrt(coefnorm) + coefnorm = coefnorm + np.absolute(beta[i])**2 + coefnorm = np.sqrt(coefnorm) if x['class'] == 'multnet': mstr = 'Coefficient 2Norms' handle = plotCoef(coefnorm, norm, x['lambdau'], dfseq, x['dev'], @@ -146,11 +146,11 @@ def getFromList(xvar, xvarbase, errMsg): # end of getFromList() # ========================================= def nonzeroCoef(beta, bystep = False): - result = scipy.absolute(beta) > 0 + result = np.absolute(beta) > 0 if len(result.shape) == 1: - result = scipy.reshape(result, [result.shape[0], 1]) + result = np.reshape(result, [result.shape[0], 1]) if not bystep: - result = scipy.any(result, axis = 1) + result = np.any(result, axis = 1) return(result) # end of nonzeroCoef() @@ -169,12 +169,12 @@ def plotCoef(beta, norm, lambdau, df, dev, label, xvar, xlab, ylab, **options): beta = beta[which, :] if xvar == 'norm': if len(norm) == 0: - index = scipy.sum(scipy.absolute(beta), axis = 0) + index = np.sum(np.absolute(beta), axis = 0) else: index = norm iname = 'L1 Norm' elif xvar == 'lambda': - index = scipy.log(lambdau) + index = np.log(lambdau) iname = 'Log Lambda' elif xvar == 'dev': index = dev @@ -189,7 +189,7 @@ def plotCoef(beta, norm, lambdau, df, dev, label, xvar, xlab, ylab, **options): ax1 = plt.gca() # plot x vs y - beta = scipy.transpose(beta) + beta = np.transpose(beta) ax1.plot(index, beta, **options) ax2 = ax1.twiny() @@ -199,7 +199,7 @@ def plotCoef(beta, norm, lambdau, df, dev, label, xvar, xlab, ylab, **options): ylim1 = ax1.get_ylim() atdf = ax1.get_xticks() - indat = scipy.ones(atdf.shape, dtype = scipy.integer) + indat = np.ones(atdf.shape, dtype = np.integer) if index[-1] >= index[1]: for j in range(len(index)-1, -1, -1): indat[atdf <= index[j]] = j diff --git a/glmnet_python/glmnetPredict.py b/glmnet_python/glmnetPredict.py index 9b732a9..e5ee403 100644 --- a/glmnet_python/glmnetPredict.py +++ b/glmnet_python/glmnetPredict.py @@ -56,7 +56,7 @@ DETAILS: The shape of the objects returned are different for "multinomial" objects. glmnetCoef(fit, ...) is equivalent to - glmnetPredict(fit,scipy.empty([]),scipy.empty([]),'coefficients"). + glmnetPredict(fit,np.empty([]),np.empty([]),'coefficients"). LICENSE: GPL-2 @@ -86,32 +86,33 @@ EXAMPLES: - x = scipy.random.normal(size = [100,20]) - y = scipy.random.normal(size = [100,1]) - g2 = scipy.random.choice(2, size = [100, 1])*1.0 # must be float64 - g4 = scipy.random.choice(4, size = [100, 1])*1.0 # must be float64 + x = np.random.normal(size = [100,20]) + y = np.random.normal(size = [100,1]) + g2 = np.random.choice(2, size = [100, 1])*1.0 # must be float64 + g4 = np.random.choice(4, size = [100, 1])*1.0 # must be float64 fit1 = glmnet(x = x.copy(),y = y.copy()); - print( glmnetPredict(fit1,x[0:5,:],scipy.array([0.01,0.005])) ) - print( glmnetPredict(fit1, scipy.empty([0]), scipy.empty([0]), 'coefficients') ) + print( glmnetPredict(fit1,x[0:5,:],np.array([0.01,0.005])) ) + print( glmnetPredict(fit1, np.empty([0]), np.empty([0]), 'coefficients') ) fit2 = glmnet(x = x.copy(), y = g2.copy(), family = 'binomial'); - print(glmnetPredict(fit2, x[2:5,:],scipy.empty([0]), 'response')) - print(glmnetPredict(fit2, scipy.empty([0]), scipy.empty([0]), 'nonzero')) + print(glmnetPredict(fit2, x[2:5,:],np.empty([0]), 'response')) + print(glmnetPredict(fit2, np.empty([0]), np.empty([0]), 'nonzero')) fit3 = glmnet(x = x.copy(), y = g4.copy(), family = 'multinomial'); - print(glmnetPredict(fit3, x[0:3,:], scipy.array([0.01, 0.5]), 'response')) + print(glmnetPredict(fit3, x[0:3,:], np.array([0.01, 0.5]), 'response')) """ -import scipy +import numpy as np +import scipy.sparse import scipy.interpolate def glmnetPredict(fit,\ - newx = scipy.empty([0]), \ - s = scipy.empty([0]), \ + newx = np.empty([0]), \ + s = np.empty([0]), \ ptype = 'link', \ exact = False, \ - offset = scipy.empty([0])): + offset = np.empty([0])): typebase = ['link', 'response', 'coefficients', 'nonzero', 'class'] indxtf = [x.startswith(ptype.lower()) for x in typebase] @@ -136,7 +137,7 @@ def glmnetPredict(fit,\ raise NotImplementedError('exact = True option is not implemented in python') # we convert newx to full here since sparse and full operations do not seem to - # be overloaded completely in scipy. + # be overloaded completely in np. if scipy.sparse.issparse(newx): newx = newx.todense() @@ -145,15 +146,15 @@ def glmnetPredict(fit,\ if fit['class'] == 'lognet': a0 = fit['a0'] else: - a0 = scipy.transpose(fit['a0']) + a0 = np.transpose(fit['a0']) - a0 = scipy.reshape(a0, [1, a0.size]) # convert to 1 x N for appending - nbeta = scipy.row_stack( (a0, fit['beta']) ) - if scipy.size(s) > 0: + a0 = np.reshape(a0, [1, a0.size]) # convert to 1 x N for appending + nbeta = np.row_stack( (a0, fit['beta']) ) + if np.size(s) > 0: lambdau = fit['lambdau'] lamlist = lambda_interp(lambdau, s) - nbeta = nbeta[:, lamlist['left']]*scipy.tile(scipy.transpose(lamlist['frac']), [nbeta.shape[0], 1]) \ - + nbeta[:, lamlist['right']]*( 1 - scipy.tile(scipy.transpose(lamlist['frac']), [nbeta.shape[0], 1])) + nbeta = nbeta[:, lamlist['left']]*np.tile(np.transpose(lamlist['frac']), [nbeta.shape[0], 1]) \ + + nbeta[:, lamlist['right']]*( 1 - np.tile(np.transpose(lamlist['frac']), [nbeta.shape[0], 1])) if ptype == 'coefficients': result = nbeta @@ -163,7 +164,7 @@ def glmnetPredict(fit,\ result = nonzeroCoef(nbeta[1:nbeta.shape[0], :], True) return(result) # use scipy.sparse.hstack instead of column_stack for sparse matrices - result = scipy.dot(scipy.column_stack( (scipy.ones([newx.shape[0], 1]) , newx) ) , nbeta) + result = np.dot(np.column_stack( (np.ones([newx.shape[0], 1]) , newx) ) , nbeta) if fit['offset']: if len(offset) == 0: @@ -171,16 +172,16 @@ def glmnetPredict(fit,\ if offset.shape[1] == 2: offset = offset[:, 1] - result = result + scipy.tile(offset, [1, result.shape[1]]) + result = result + np.tile(offset, [1, result.shape[1]]) # fishnet if fit['class'] == 'fishnet' and ptype == 'response': - result = scipy.exp(result) + result = np.exp(result) # lognet if fit['class'] == 'lognet': if ptype == 'response': - pp = scipy.exp(-result) + pp = np.exp(-result) result = 1/(1 + pp) elif ptype == 'class': result = (result > 0)*1 + (result <= 0)*0 @@ -202,13 +203,13 @@ def glmnetPredict(fit,\ lambdau = fit['lambdau'] lamlist = lambda_interp(lambdau, s) for i in range(nclass): - kbeta = scipy.row_stack( (a0[i, :], nbeta[i]) ) - kbeta = kbeta[:, lamlist['left']]*scipy.tile(scipy.transpose(lamlist['frac']), [kbeta.shape[0], 1]) \ - + kbeta[:, lamlist['right']]*( 1 - scipy.tile(scipy.transpose(lamlist['frac']), [kbeta.shape[0], 1])) + kbeta = np.row_stack( (a0[i, :], nbeta[i]) ) + kbeta = kbeta[:, lamlist['left']]*np.tile(np.transpose(lamlist['frac']), [kbeta.shape[0], 1]) \ + + kbeta[:, lamlist['right']]*( 1 - np.tile(np.transpose(lamlist['frac']), [kbeta.shape[0], 1])) nbeta[i] = kbeta else: for i in range(nclass): - nbeta[i] = scipy.row_stack( (a0[i, :], nbeta[i]) ) + nbeta[i] = np.row_stack( (a0[i, :], nbeta[i]) ) nlambda = len(fit['lambdau']) if ptype == 'coefficients': @@ -228,33 +229,33 @@ def glmnetPredict(fit,\ return(result) npred = newx.shape[0] - dp = scipy.zeros([nclass, nlambda, npred], dtype = scipy.float64) + dp = np.zeros([nclass, nlambda, npred], dtype = np.float64) for i in range(nclass): - qq = scipy.column_stack( (scipy.ones([newx.shape[0], 1]), newx) ) - fitk = scipy.dot( qq, nbeta[i] ) - dp[i, :, :] = dp[i, :, :] + scipy.reshape(scipy.transpose(fitk), [1, nlambda, npred]) + qq = np.column_stack( (np.ones([newx.shape[0], 1]), newx) ) + fitk = np.dot( qq, nbeta[i] ) + dp[i, :, :] = dp[i, :, :] + np.reshape(np.transpose(fitk), [1, nlambda, npred]) if fit['offset']: if len(offset) == 0: raise ValueError('No offset provided for prediction, yet used in fit of glmnet') if offset.shape[1] != nclass: raise ValueError('Offset should be dimension %d x %d' % (npred, nclass)) - toff = scipy.transpose(offset) + toff = np.transpose(offset) for i in range(nlambda): dp[:, i, :] = dp[:, i, :] + toff if ptype == 'response': - pp = scipy.exp(dp) - psum = scipy.sum(pp, axis = 0, keepdims = True) - result = scipy.transpose(pp/scipy.tile(psum, [nclass, 1, 1]), [2, 0, 1]) + pp = np.exp(dp) + psum = np.sum(pp, axis = 0, keepdims = True) + result = np.transpose(pp/np.tile(psum, [nclass, 1, 1]), [2, 0, 1]) if ptype == 'link': - result = scipy.transpose(dp, [2, 0, 1]) + result = np.transpose(dp, [2, 0, 1]) if ptype == 'class': - dp = scipy.transpose(dp, [2, 0, 1]) + dp = np.transpose(dp, [2, 0, 1]) result = list() for i in range(dp.shape[2]): t = softmax(dp[:, :, i]) - result = scipy.append(result, fit['label'][t['pclass']]) + result = np.append(result, fit['label'][t['pclass']]) # coxnet if fit['class'] == 'coxnet': @@ -262,8 +263,8 @@ def glmnetPredict(fit,\ if len(s) > 0: lambdau = fit['lambdau'] lamlist = lambda_interp(lambdau, s) - nbeta = nbeta[:, lamlist['left']]*scipy.tile(scipy.transpose(lamlist['frac']), [nbeta.shape[0], 1]) \ - + nbeta[:, lamlist['right']]*( 1 - scipy.tile(scipy.transpose(lamlist['frac']), [nbeta.shape[0], 1])) + nbeta = nbeta[:, lamlist['left']]*np.tile(np.transpose(lamlist['frac']), [nbeta.shape[0], 1]) \ + + nbeta[:, lamlist['right']]*( 1 - np.tile(np.transpose(lamlist['frac']), [nbeta.shape[0], 1])) if ptype == 'coefficients': result = nbeta @@ -273,16 +274,16 @@ def glmnetPredict(fit,\ result = nonzeroCoef(nbeta, True) return(result) - result = scipy.dot(newx, nbeta) + result = np.dot(newx, nbeta) if fit['offset']: if len(offset) == 0: raise ValueError('No offset provided for prediction, yet used in fit of glmnet') - result = result + scipy.tile(offset, [1, result.shape[1]]) + result = result + np.tile(offset, [1, result.shape[1]]) if ptype == 'response': - result = scipy.exp(result) + result = np.exp(result) return(result) @@ -302,18 +303,18 @@ def lambda_interp(lambdau, s): # sfrac*left+(1-sfrac*right) if len(lambdau) == 1: nums = len(s) - left = scipy.zeros([nums, 1], dtype = scipy.integer) + left = np.zeros([nums, 1], dtype = np.integer) right = left - sfrac = scipy.zeros([nums, 1], dtype = scipy.float64) + sfrac = np.zeros([nums, 1], dtype = np.float64) else: - s[s > scipy.amax(lambdau)] = scipy.amax(lambdau) - s[s < scipy.amin(lambdau)] = scipy.amin(lambdau) + s[s > np.amax(lambdau)] = np.amax(lambdau) + s[s < np.amin(lambdau)] = np.amin(lambdau) k = len(lambdau) sfrac = (lambdau[0] - s)/(lambdau[0] - lambdau[k - 1]) lambdau = (lambdau[0] - lambdau)/(lambdau[0] - lambdau[k - 1]) coord = scipy.interpolate.interp1d(lambdau, range(k))(sfrac) - left = scipy.floor(coord).astype(scipy.integer, copy = False) - right = scipy.ceil(coord).astype(scipy.integer, copy = False) + left = np.floor(coord).astype(np.integer, copy = False) + right = np.ceil(coord).astype(np.integer, copy = False) # tf = left != right sfrac[tf] = (sfrac[tf] - lambdau[right[tf]])/(lambdau[left[tf]] - lambdau[right[tf]]) @@ -334,14 +335,14 @@ def lambda_interp(lambdau, s): def softmax(x, gap = False): d = x.shape maxdist = x[:, 0] - pclass = scipy.zeros([d[0], 1], dtype = scipy.integer) + pclass = np.zeros([d[0], 1], dtype = np.integer) for i in range(1, d[1], 1): l = x[:, i] > maxdist pclass[l] = i maxdist[l] = x[l, i] if gap == True: - x = scipy.absolute(maxdist - x) - x[0:d[0], pclass] = x*scipy.ones([d[1], d[1]]) + x = np.absolute(maxdist - x) + x[0:d[0], pclass] = x*np.ones([d[1], d[1]]) #gaps = pmin(x)# not sure what this means; gap is never called with True raise ValueError('gap = True is not implemented yet') @@ -357,9 +358,9 @@ def softmax(x, gap = False): # end of softmax # ========================================= def nonzeroCoef(beta, bystep = False): - result = scipy.absolute(beta) > 0 + result = np.absolute(beta) > 0 if not bystep: - result = scipy.any(result, axis = 1) + result = np.any(result, axis = 1) return(result) # end of nonzeroCoef # ========================================= diff --git a/glmnet_python/glmnetPrint.py b/glmnet_python/glmnetPrint.py index fd2a373..5e867dd 100644 --- a/glmnet_python/glmnetPrint.py +++ b/glmnet_python/glmnetPrint.py @@ -41,8 +41,8 @@ glmnet, glmnetSet, glmnetPredict and glmnetCoef methods. EXAMPLES: - x = scipy.random.normal(size=[100,20]) - y = scipy.random.normal(size=[100,1]) + x = np.random.normal(size=[100,20]) + y = np.random.normal(size=[100,1]) fit=glmnet(x = x,y = y); glmnetPrint(fit); diff --git a/glmnet_python/glmnetSet.py b/glmnet_python/glmnetSet.py index 9f7b9ca..ee026f1 100644 --- a/glmnet_python/glmnetSet.py +++ b/glmnet_python/glmnetSet.py @@ -29,8 +29,8 @@ # given values for these parameters. options = glmnetSet( alpha = 0.1, \ intr = False, \ - maxit = scipy.int32(1e6), \ - offset = scipy.empty([0]) ) + maxit = np.int32(1e6), \ + offset = np.empty([0]) ) # same as previous case, except we pass in a # dict() object instead opts = dict(); opts['alpha'] = 0.5; @@ -40,17 +40,17 @@ Parameter Default value Description .................................................................. -alpha +alpha The elasticnet mixing parameter, with 0 < alpha <= 1. The penalty is defined as (1-alpha)/2(||beta||_2)^2+alpha||beta||_1. Default is alpha = 1, which is the lasso penalty; Currently alpha = 0 the ridge penalty. -nlambda +nlambda The number of lambda values - default is -lambdau +lambdau A user supplied lambda sequence. Typical usage is to have the program compute its own lambda sequence based on nlambda and lambda_min. Supplying a value of @@ -70,7 +70,7 @@ details below for y standardization with family='gaussian'. -weights +weights Observation weights. Can be total counts if responses are proportion matrices. Default is 1 for each observation. @@ -79,7 +79,7 @@ Should intercept(s) be fitted (default=true) or set to zero (false). -offset +offset A vector of length nobs that is included in the linear predictor (a nobs x nc matrix for the "multinomial" family). Useful for the "poisson" @@ -88,7 +88,7 @@ supplied, then values must also be supplied to the predict function. -lambda_min +lambda_min Smallest value for lambda, as a fraction of lambda_max, the (data derived) entry value (i.e., the smallest value for which all coefficients are zero). @@ -101,28 +101,28 @@ and glmnet will exit gracefully when the percentage deviance explained is almost 1. -thresh +thresh Convergence threshold for coordinate descent. Each inner coordinate-descent loop continues until the maximum change in the objective after any coefficient update is less than thresh times the null deviance. Defaults value is 1E-4. -dfmax +dfmax Limit the maximum number of variables in the model. Useful for very large nvars, if a partial path is desired. Default is nvars + 1. -pmax +pmax Limit the maximum number of variables ever to be nonzero. Default is min(dfmax * 2 + 20, nvars). -exclude +exclude Indices of variables to be excluded from the model. Default is none. Equivalent to an infinite penalty factor (next item). -penalty_factor +penalty_factor Separate penalty factors can be applied to each coefficient. This is a number that multiplies lambda to allow differential shrinkage. Can be 0 for some @@ -133,11 +133,11 @@ factors are internally rescaled to sum to nvars, and the lambda sequence will reflect this change. -maxit +maxit Maximum number of passes over the data for all lambda values; default is 10^5. -cl +cl Two-row matrix with the first row being the lower limits for each coefficient and the second the upper limits. Can be presented as a single column (which @@ -187,25 +187,25 @@ """ def glmnetSet(opts = None): - import scipy + import numpy as np # default options options = { - "weights" : scipy.empty([0]), - "offset" : scipy.empty([0]), - "alpha" : scipy.float64(1.0), - "nlambda" : scipy.int32(100), - "lambda_min" : scipy.empty([0]), - "lambdau" : scipy.empty([0]), + "weights" : np.empty([0]), + "offset" : np.empty([0]), + "alpha" : np.float64(1.0), + "nlambda" : np.int32(100), + "lambda_min" : np.empty([0]), + "lambdau" : np.empty([0]), "standardize" : True, "intr" : True, - "thresh" : scipy.float64(1e-7), - "dfmax" : scipy.empty([0]), - "pmax" : scipy.empty([0]), - "exclude" : scipy.empty([0], dtype = scipy.integer), - "penalty_factor" : scipy.empty([0]), - "cl" : scipy.array([[scipy.float64(-scipy.inf)], [scipy.float64(scipy.inf)]]), - "maxit" : scipy.int32(1e5), + "thresh" : np.float64(1e-7), + "dfmax" : np.empty([0]), + "pmax" : np.empty([0]), + "exclude" : np.empty([0], dtype = np.integer), + "penalty_factor" : np.empty([0]), + "cl" : np.array([[np.float64(-np.inf)], [np.float64(np.inf)]]), + "maxit" : np.int32(1e5), "gtype" : [], "ltype" : 'Newton', "standardize_resp" : False, diff --git a/glmnet_python/lognet.py b/glmnet_python/lognet.py index d231ec7..284cdd9 100644 --- a/glmnet_python/lognet.py +++ b/glmnet_python/lognet.py @@ -4,7 +4,7 @@ """ # import packages/methods -import scipy +import numpy as np import ctypes from loadGlmLib import loadGlmLib @@ -26,12 +26,12 @@ def lognet(x, is_sparse, irs, pcs, y, weights, offset, parm, raise ValueError('x and y have different number of rows in call to glmnet') if nc == 1: - classes, sy = scipy.unique(y, return_inverse = True) + classes, sy = np.unique(y, return_inverse = True) nc = len(classes) - indexes = scipy.eye(nc, nc) + indexes = np.eye(nc, nc) y = indexes[sy, :] else: - classes = scipy.arange(nc) + 1 # 1:nc + classes = np.arange(nc) + 1 # 1:nc # if family == 'binomial': if nc > 2: @@ -42,14 +42,14 @@ def lognet(x, is_sparse, irs, pcs, y, weights, offset, parm, # if (len(weights) != 0): t = weights > 0 - if ~scipy.all(t): - t = scipy.reshape(t, (len(y), )) + if ~np.all(t): + t = np.reshape(t, (len(y), )) y = y[t, :] x = x[t, :] weights = weights[t] - nobs = scipy.sum(t) + nobs = np.sum(t) else: - t = scipy.empty([0], dtype = scipy.integer) + t = np.empty([0], dtype = np.integer) # if len(y.shape) == 1: mv = len(y) @@ -57,7 +57,7 @@ def lognet(x, is_sparse, irs, pcs, y, weights, offset, parm, else: mv, ny = y.shape - y = y*scipy.tile(weights, (1, ny)) + y = y*np.tile(weights, (1, ny)) # if len(offset) == 0: @@ -71,7 +71,7 @@ def lognet(x, is_sparse, irs, pcs, y, weights, offset, parm, raise ValueError('offset should have the same number of values as observations in binominal/multinomial call to glmnet') if nc == 1: if do[1] == 1: - offset = scipy.column_stack((offset, -offset), 1) + offset = np.column_stack((offset, -offset), 1) if do[1] > 2: raise ValueError('offset should have 1 or 2 columns in binomial call to glmnet') if (family == 'multinomial') and (do[1] != nc): @@ -85,16 +85,16 @@ def lognet(x, is_sparse, irs, pcs, y, weights, offset, parm, ###################################### # force inputs into fortran order and scipy float64 copyFlag = False - x = x.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - irs = irs.astype(dtype = scipy.int32, order = 'F', copy = copyFlag) - pcs = pcs.astype(dtype = scipy.int32, order = 'F', copy = copyFlag) - y = y.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - weights = weights.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - offset = offset.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - jd = jd.astype(dtype = scipy.int32, order = 'F', copy = copyFlag) - vp = vp.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - cl = cl.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - ulam = ulam.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) + x = x.astype(dtype = np.float64, order = 'F', copy = copyFlag) + irs = irs.astype(dtype = np.int32, order = 'F', copy = copyFlag) + pcs = pcs.astype(dtype = np.int32, order = 'F', copy = copyFlag) + y = y.astype(dtype = np.float64, order = 'F', copy = copyFlag) + weights = weights.astype(dtype = np.float64, order = 'F', copy = copyFlag) + offset = offset.astype(dtype = np.float64, order = 'F', copy = copyFlag) + jd = jd.astype(dtype = np.int32, order = 'F', copy = copyFlag) + vp = vp.astype(dtype = np.float64, order = 'F', copy = copyFlag) + cl = cl.astype(dtype = np.float64, order = 'F', copy = copyFlag) + ulam = ulam.astype(dtype = np.float64, order = 'F', copy = copyFlag) ###################################### # --------- ALLOCATE OUTPUTS --------- @@ -104,32 +104,32 @@ def lognet(x, is_sparse, irs, pcs, y, weights, offset, parm, lmu_r = ctypes.c_int(lmu) # a0, ca if nc == 1: - a0 = scipy.zeros([nlam], dtype = scipy.float64) - ca = scipy.zeros([nx, nlam], dtype = scipy.float64) + a0 = np.zeros([nlam], dtype = np.float64) + ca = np.zeros([nx, nlam], dtype = np.float64) else: - a0 = scipy.zeros([nc, nlam], dtype = scipy.float64) - ca = scipy.zeros([nx, nc, nlam], dtype = scipy.float64) + a0 = np.zeros([nc, nlam], dtype = np.float64) + ca = np.zeros([nx, nc, nlam], dtype = np.float64) # a0 - a0 = a0.astype(dtype = scipy.float64, order = 'F', copy = False) + a0 = a0.astype(dtype = np.float64, order = 'F', copy = False) a0_r = a0.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # ca - ca = ca.astype(dtype = scipy.float64, order = 'F', copy = False) + ca = ca.astype(dtype = np.float64, order = 'F', copy = False) ca_r = ca.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # ia - ia = -1*scipy.ones([nx], dtype = scipy.int32) - ia = ia.astype(dtype = scipy.int32, order = 'F', copy = False) + ia = -1*np.ones([nx], dtype = np.int32) + ia = ia.astype(dtype = np.int32, order = 'F', copy = False) ia_r = ia.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) # nin - nin = -1*scipy.ones([nlam], dtype = scipy.int32) - nin = nin.astype(dtype = scipy.int32, order = 'F', copy = False) + nin = -1*np.ones([nlam], dtype = np.int32) + nin = nin.astype(dtype = np.int32, order = 'F', copy = False) nin_r = nin.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) # dev - dev = -1*scipy.ones([nlam], dtype = scipy.float64) - dev = dev.astype(dtype = scipy.float64, order = 'F', copy = False) + dev = -1*np.ones([nlam], dtype = np.float64) + dev = dev.astype(dtype = np.float64, order = 'F', copy = False) dev_r = dev.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # alm - alm = -1*scipy.ones([nlam], dtype = scipy.float64) - alm = alm.astype(dtype = scipy.float64, order = 'F', copy = False) + alm = -1*np.ones([nlam], dtype = np.float64) + alm = alm.astype(dtype = np.float64, order = 'F', copy = False) alm_r = alm.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # nlp nlp = -1 @@ -243,39 +243,39 @@ def lognet(x, is_sparse, irs, pcs, y, weights, offset, parm, ninmax = max(nin) # fix first value of alm (from inf to correct value) if ulam[0] == 0.0: - t1 = scipy.log(alm[1]) - t2 = scipy.log(alm[2]) - alm[0] = scipy.exp(2*t1 - t2) + t1 = np.log(alm[1]) + t2 = np.log(alm[2]) + alm[0] = np.exp(2*t1 - t2) # create return fit dictionary if family == 'multinomial': - a0 = a0 - scipy.tile(scipy.mean(a0), (nc, 1)) + a0 = a0 - np.tile(np.mean(a0), (nc, 1)) dfmat = a0.copy() - dd = scipy.array([nvars, lmu], dtype = scipy.integer) + dd = np.array([nvars, lmu], dtype = np.integer) beta_list = list() if ninmax > 0: # TODO: is the reshape here done right? - ca = scipy.reshape(ca, (nx, nc, lmu)) + ca = np.reshape(ca, (nx, nc, lmu)) ca = ca[0:ninmax, :, :] ja = ia[0:ninmax] - 1 # ia is 1-indexed in fortran - oja = scipy.argsort(ja) + oja = np.argsort(ja) ja1 = ja[oja] - df = scipy.any(scipy.absolute(ca) > 0, axis=1) - df = scipy.sum(df) - df = scipy.reshape(df, (1, df.size)) + df = np.any(np.absolute(ca) > 0, axis=1) + df = np.sum(df) + df = np.reshape(df, (1, df.size)) for k in range(0, nc): - ca1 = scipy.reshape(ca[:,k,:], (ninmax, lmu)) + ca1 = np.reshape(ca[:,k,:], (ninmax, lmu)) cak = ca1[oja,:] - dfmat[k, :] = scipy.sum(scipy.absolute(cak) > 0, axis = 0) - beta = scipy.zeros([nvars, lmu], dtype = scipy.float64) + dfmat[k, :] = np.sum(np.absolute(cak) > 0, axis = 0) + beta = np.zeros([nvars, lmu], dtype = np.float64) beta[ja1, :] = cak beta_list.append(beta) else: for k in range(0, nc): - dfmat[k, :] = scipy.zeros([1, lmu], dtype = scipy.float64) - beta_list.append(scipy.zeros([nvars, lmu], dtype = scipy.float64)) + dfmat[k, :] = np.zeros([1, lmu], dtype = np.float64) + beta_list.append(np.zeros([nvars, lmu], dtype = np.float64)) # - df = scipy.zeros([1, lmu], dtype = scipy.float64) + df = np.zeros([1, lmu], dtype = np.float64) # if kopt == 2: grouped = True @@ -298,18 +298,18 @@ def lognet(x, is_sparse, irs, pcs, y, weights, offset, parm, fit['offset'] = is_offset fit['class'] = 'multnet' else: - dd = scipy.array([nvars, lmu], dtype = scipy.integer) + dd = np.array([nvars, lmu], dtype = np.integer) if ninmax > 0: ca = ca[0:ninmax,:]; - df = scipy.sum(scipy.absolute(ca) > 0, axis = 0); + df = np.sum(np.absolute(ca) > 0, axis = 0); ja = ia[0:ninmax] - 1; # ia is 1-indexes in fortran - oja = scipy.argsort(ja) + oja = np.argsort(ja) ja1 = ja[oja] - beta = scipy.zeros([nvars, lmu], dtype = scipy.float64); + beta = np.zeros([nvars, lmu], dtype = np.float64); beta[ja1, :] = ca[oja, :]; else: - beta = scipy.zeros([nvars,lmu], dtype = scipy.float64); - df = scipy.zeros([1,lmu], dtype = scipy.float64); + beta = np.zeros([nvars,lmu], dtype = np.float64); + df = np.zeros([1,lmu], dtype = np.float64); # fit = dict() fit['a0'] = a0 diff --git a/glmnet_python/mrelnet.py b/glmnet_python/mrelnet.py index 3613e49..006a97f 100644 --- a/glmnet_python/mrelnet.py +++ b/glmnet_python/mrelnet.py @@ -4,7 +4,7 @@ """ # import packages/methods -import scipy +import numpy as np import ctypes from wtmean import wtmean from loadGlmLib import loadGlmLib @@ -19,9 +19,9 @@ def mrelnet(x, is_sparse, irs, pcs, y, weights, offset, parm, # nr = y.shape[1] wym = wtmean(y, weights) - wym = scipy.reshape(wym, (1, wym.size)) - yt2 = (y - scipy.tile(wym, (y.shape[0], 1)))**2 - nulldev = scipy.sum(wtmean(yt2,weights)*scipy.sum(weights)) + wym = np.reshape(wym, (1, wym.size)) + yt2 = (y - np.tile(wym, (y.shape[0], 1)))**2 + nulldev = np.sum(wtmean(yt2,weights)*np.sum(weights)) if len(offset) == 0: offset = y*0 @@ -39,15 +39,15 @@ def mrelnet(x, is_sparse, irs, pcs, y, weights, offset, parm, ###################################### # force inputs into fortran order and scipy float64 copyFlag = False - x = x.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - irs = irs.astype(dtype = scipy.int32, order = 'F', copy = copyFlag) - pcs = pcs.astype(dtype = scipy.int32, order = 'F', copy = copyFlag) - y = y.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - weights = weights.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - jd = jd.astype(dtype = scipy.int32, order = 'F', copy = copyFlag) - vp = vp.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - cl = cl.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) - ulam = ulam.astype(dtype = scipy.float64, order = 'F', copy = copyFlag) + x = x.astype(dtype = np.float64, order = 'F', copy = copyFlag) + irs = irs.astype(dtype = np.int32, order = 'F', copy = copyFlag) + pcs = pcs.astype(dtype = np.int32, order = 'F', copy = copyFlag) + y = y.astype(dtype = np.float64, order = 'F', copy = copyFlag) + weights = weights.astype(dtype = np.float64, order = 'F', copy = copyFlag) + jd = jd.astype(dtype = np.int32, order = 'F', copy = copyFlag) + vp = vp.astype(dtype = np.float64, order = 'F', copy = copyFlag) + cl = cl.astype(dtype = np.float64, order = 'F', copy = copyFlag) + ulam = ulam.astype(dtype = np.float64, order = 'F', copy = copyFlag) ###################################### # --------- ALLOCATE OUTPUTS --------- @@ -56,28 +56,28 @@ def mrelnet(x, is_sparse, irs, pcs, y, weights, offset, parm, lmu = -1 lmu_r = ctypes.c_int(lmu) # a0 - a0 = scipy.zeros([nr, nlam], dtype = scipy.float64) - a0 = a0.astype(dtype = scipy.float64, order = 'F', copy = False) + a0 = np.zeros([nr, nlam], dtype = np.float64) + a0 = a0.astype(dtype = np.float64, order = 'F', copy = False) a0_r = a0.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # ca - ca = scipy.zeros([nx, nr, nlam], dtype = scipy.float64) - ca = ca.astype(dtype = scipy.float64, order = 'F', copy = False) + ca = np.zeros([nx, nr, nlam], dtype = np.float64) + ca = ca.astype(dtype = np.float64, order = 'F', copy = False) ca_r = ca.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # ia - ia = -1*scipy.ones([nx], dtype = scipy.int32) - ia = ia.astype(dtype = scipy.int32, order = 'F', copy = False) + ia = -1*np.ones([nx], dtype = np.int32) + ia = ia.astype(dtype = np.int32, order = 'F', copy = False) ia_r = ia.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) # nin - nin = -1*scipy.ones([nlam], dtype = scipy.int32) - nin = nin.astype(dtype = scipy.int32, order = 'F', copy = False) + nin = -1*np.ones([nlam], dtype = np.int32) + nin = nin.astype(dtype = np.int32, order = 'F', copy = False) nin_r = nin.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) # rsq - rsq = -1*scipy.ones([nlam], dtype = scipy.float64) - rsq = rsq.astype(dtype = scipy.float64, order = 'F', copy = False) + rsq = -1*np.ones([nlam], dtype = np.float64) + rsq = rsq.astype(dtype = np.float64, order = 'F', copy = False) rsq_r = rsq.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # alm - alm = -1*scipy.ones([nlam], dtype = scipy.float64) - alm = alm.astype(dtype = scipy.float64, order = 'F', copy = False) + alm = -1*np.ones([nlam], dtype = np.float64) + alm = alm.astype(dtype = np.float64, order = 'F', copy = False) alm_r = alm.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # nlp nlp = -1 @@ -182,54 +182,54 @@ def mrelnet(x, is_sparse, irs, pcs, y, weights, offset, parm, ninmax = max(nin) # fix first value of alm (from inf to correct value) if ulam[0] == 0.0: - t1 = scipy.log(alm[1]) - t2 = scipy.log(alm[2]) - alm[0] = scipy.exp(2*t1 - t2) + t1 = np.log(alm[1]) + t2 = np.log(alm[2]) + alm[0] = np.exp(2*t1 - t2) # create return fit dictionary if nr > 1: dfmat = a0.copy() - dd = scipy.array([nvars, lmu], dtype = scipy.integer) + dd = np.array([nvars, lmu], dtype = np.integer) beta_list = list() if ninmax > 0: # TODO: is the reshape here done right? - ca = scipy.reshape(ca, (nx, nr, lmu)) + ca = np.reshape(ca, (nx, nr, lmu)) ca = ca[0:ninmax, :, :] ja = ia[0:ninmax] - 1 # ia is 1-indexed in fortran - oja = scipy.argsort(ja) + oja = np.argsort(ja) ja1 = ja[oja] - df = scipy.any(scipy.absolute(ca) > 0, axis=1) - df = scipy.sum(df, axis = 0) - df = scipy.reshape(df, (1, df.size)) + df = np.any(np.absolute(ca) > 0, axis=1) + df = np.sum(df, axis = 0) + df = np.reshape(df, (1, df.size)) for k in range(0, nr): - ca1 = scipy.reshape(ca[:,k,:], (ninmax, lmu)) + ca1 = np.reshape(ca[:,k,:], (ninmax, lmu)) cak = ca1[oja,:] - dfmat[k, :] = scipy.sum(scipy.absolute(cak) > 0, axis = 0) - beta = scipy.zeros([nvars, lmu], dtype = scipy.float64) + dfmat[k, :] = np.sum(np.absolute(cak) > 0, axis = 0) + beta = np.zeros([nvars, lmu], dtype = np.float64) beta[ja1, :] = cak beta_list.append(beta) else: for k in range(0, nr): - dfmat[k, :] = scipy.zeros([1, lmu], dtype = scipy.float64) - beta_list.append(scipy.zeros([nvars, lmu], dtype = scipy.float64)) + dfmat[k, :] = np.zeros([1, lmu], dtype = np.float64) + beta_list.append(np.zeros([nvars, lmu], dtype = np.float64)) # - df = scipy.zeros([1, lmu], dtype = scipy.float64) + df = np.zeros([1, lmu], dtype = np.float64) # fit = dict() fit['beta'] = beta_list fit['dfmat']= dfmat else: - dd = scipy.array([nvars, lmu], dtype = scipy.integer) + dd = np.array([nvars, lmu], dtype = np.integer) if ninmax > 0: ca = ca[0:ninmax,:]; - df = scipy.sum(scipy.absolute(ca) > 0, axis = 0); + df = np.sum(np.absolute(ca) > 0, axis = 0); ja = ia[0:ninmax] - 1; # ia is 1-indexes in fortran - oja = scipy.argsort(ja) + oja = np.argsort(ja) ja1 = ja[oja] - beta = scipy.zeros([nvars, lmu], dtype = scipy.float64); + beta = np.zeros([nvars, lmu], dtype = np.float64); beta[ja1, :] = ca[oja, :]; else: - beta = scipy.zeros([nvars,lmu], dtype = scipy.float64); - df = scipy.zeros([1,lmu], dtype = scipy.float64); + beta = np.zeros([nvars,lmu], dtype = np.float64); + df = np.zeros([1,lmu], dtype = np.float64); fit['beta'] = beta fit['a0'] = a0 diff --git a/glmnet_python/wtmean.py b/glmnet_python/wtmean.py index c3c84aa..ad831fc 100644 --- a/glmnet_python/wtmean.py +++ b/glmnet_python/wtmean.py @@ -13,25 +13,25 @@ returns nan-removed weighted mean as a 1D array of size K """ -import scipy +import numpy as np def wtmean(mat,weights): if len(weights.shape) == 1: - weights = scipy.reshape(weights, [scipy.size(weights), 1]) + weights = np.reshape(weights, [np.size(weights), 1]) wmat = isfinite(mat)*weights mat[isnan(mat)] = 0 swmat = mat*wmat tf = weights != 0 tf = tf[:,0] - y = scipy.sum(swmat[tf, :], axis = 0)/scipy.sum(wmat, axis = 0) + y = np.sum(swmat[tf, :], axis = 0)/np.sum(wmat, axis = 0) return y # end of wtmean def isnan(x): - return ~scipy.isfinite(x) + return ~np.isfinite(x) # end of isnan def isfinite(x): - return scipy.isfinite(x) + return np.isfinite(x) # end of isfinite diff --git a/test/.ipynb_checkpoints/glmnet_examples-checkpoint.ipynb b/test/.ipynb_checkpoints/glmnet_examples-checkpoint.ipynb index 29d9e46..0a41d72 100644 --- a/test/.ipynb_checkpoints/glmnet_examples-checkpoint.ipynb +++ b/test/.ipynb_checkpoints/glmnet_examples-checkpoint.ipynb @@ -65,7 +65,10 @@ "cell_type": "code", "execution_count": 1, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -91,7 +94,10 @@ "cell_type": "code", "execution_count": 2, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -102,7 +108,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -112,12 +119,12 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = scipy.float64)\n", - "y = scipy.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = scipy.float64)\n", + "x = np.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = np.float64)\n", + "y = np.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = np.float64)\n", "\n", "# create weights\n", - "t = scipy.ones((50, 1), dtype = scipy.float64)\n", - "wts = scipy.row_stack((t, 2*t))" + "t = np.ones((50, 1), dtype = np.float64)\n", + "wts = np.row_stack((t, 2*t))" ] }, { @@ -131,7 +138,10 @@ "cell_type": "code", "execution_count": 3, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -154,6 +164,9 @@ "execution_count": 4, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "scrolled": true }, "outputs": [ @@ -208,7 +221,10 @@ "cell_type": "code", "execution_count": 5, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -238,6 +254,9 @@ "execution_count": 6, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "scrolled": true }, "outputs": [ @@ -273,7 +292,10 @@ "cell_type": "code", "execution_count": 7, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -295,7 +317,10 @@ "cell_type": "code", "execution_count": 8, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -330,7 +355,7 @@ } ], "source": [ - "glmnetCoef(fit, s = scipy.float64([0.5]), exact = False)" + "glmnetCoef(fit, s = np.float64([0.5]), exact = False)" ] }, { @@ -355,7 +380,10 @@ "cell_type": "code", "execution_count": 9, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -372,7 +400,7 @@ ], "source": [ "fc = glmnetPredict(fit, x[0:5,:], ptype = 'response', \\\n", - " s = scipy.float64([0.05]))\n", + " s = np.float64([0.05]))\n", "print(fc)" ] }, @@ -395,7 +423,10 @@ "cell_type": "code", "execution_count": 10, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -430,7 +461,10 @@ "cell_type": "code", "execution_count": 11, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -452,7 +486,10 @@ "cell_type": "code", "execution_count": 12, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -494,7 +531,10 @@ "cell_type": "code", "execution_count": 13, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -527,11 +567,14 @@ "cell_type": "code", "execution_count": 14, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ - "foldid = scipy.random.choice(10, size = y.shape[0], replace = True)\n", + "foldid = np.random.choice(10, size = y.shape[0], replace = True)\n", "cv1=cvglmnet(x = x.copy(),y = y.copy(),foldid=foldid,alpha=1)\n", "cv0p5=cvglmnet(x = x.copy(),y = y.copy(),foldid=foldid,alpha=0.5)\n", "cv0=cvglmnet(x = x.copy(),y = y.copy(),foldid=foldid,alpha=0)" @@ -548,7 +591,10 @@ "cell_type": "code", "execution_count": 15, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -571,10 +617,10 @@ "f.add_subplot(2,2,3)\n", "cvglmnetPlot(cv0)\n", "f.add_subplot(2,2,4)\n", - "plt.plot( scipy.log(cv1['lambdau']), cv1['cvm'], 'r.')\n", + "plt.plot( np.log(cv1['lambdau']), cv1['cvm'], 'r.')\n", "plt.hold(True)\n", - "plt.plot( scipy.log(cv0p5['lambdau']), cv0p5['cvm'], 'g.')\n", - "plt.plot( scipy.log(cv0['lambdau']), cv0['cvm'], 'b.')\n", + "plt.plot( np.log(cv0p5['lambdau']), cv0p5['cvm'], 'g.')\n", + "plt.plot( np.log(cv0['lambdau']), cv0['cvm'], 'b.')\n", "plt.xlabel('log(Lambda)')\n", "plt.ylabel(cv1['name'])\n", "plt.xlim(-6, 4)\n", @@ -597,7 +643,10 @@ "cell_type": "code", "execution_count": 16, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -612,7 +661,7 @@ } ], "source": [ - "cl = scipy.array([[-0.7], [0.5]], dtype = scipy.float64)\n", + "cl = np.array([[-0.7], [0.5]], dtype = np.float64)\n", "tfit=glmnet(x = x.copy(),y= y.copy(), cl = cl)\n", "glmnetPlot(tfit);" ] @@ -645,7 +694,10 @@ "cell_type": "code", "execution_count": 17, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -660,7 +712,7 @@ } ], "source": [ - "pfac = scipy.ones([1, 20])\n", + "pfac = np.ones([1, 20])\n", "pfac[0, 4] = 0; pfac[0, 9] = 0; pfac[0, 14] = 0\n", "pfit = glmnet(x = x.copy(), y = y.copy(), penalty_factor = pfac)\n", "glmnetPlot(pfit, label = True);" @@ -685,7 +737,10 @@ "cell_type": "code", "execution_count": 18, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -700,9 +755,9 @@ } ], "source": [ - "scipy.random.seed(101)\n", - "x = scipy.random.rand(100,10)\n", - "y = scipy.random.rand(100,1)\n", + "np.random.seed(101)\n", + "x = np.random.rand(100,10)\n", + "y = np.random.rand(100,1)\n", "fit = glmnet(x = x, y = y)\n", "glmnetPlot(fit);" ] @@ -718,7 +773,10 @@ "cell_type": "code", "execution_count": 19, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -773,7 +831,10 @@ "cell_type": "code", "execution_count": 20, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -784,7 +845,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -794,8 +856,8 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'MultiGaussianExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'MultiGaussianExampleY.dat', dtype = scipy.float64, delimiter = ',')" + "x = np.loadtxt(baseDataDir + 'MultiGaussianExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'MultiGaussianExampleY.dat', dtype = np.float64, delimiter = ',')" ] }, { @@ -809,7 +871,10 @@ "cell_type": "code", "execution_count": 21, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -829,7 +894,10 @@ "cell_type": "code", "execution_count": 22, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -862,7 +930,10 @@ "cell_type": "code", "execution_count": 23, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -884,7 +955,7 @@ } ], "source": [ - "f = glmnetPredict(mfit, x[0:5,:], s = scipy.float64([0.1, 0.01]))\n", + "f = glmnetPredict(mfit, x[0:5,:], s = np.float64([0.1, 0.01]))\n", "print(f[:,:,0], '\\n')\n", "print(f[:,:,1])" ] @@ -902,7 +973,10 @@ "cell_type": "code", "execution_count": 24, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -922,7 +996,10 @@ "cell_type": "code", "execution_count": 25, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -951,7 +1028,10 @@ "cell_type": "code", "execution_count": 26, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -973,7 +1053,10 @@ "cell_type": "code", "execution_count": 27, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1035,7 +1118,10 @@ "cell_type": "code", "execution_count": 28, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -1046,7 +1132,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -1056,8 +1143,8 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'BinomialExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'BinomialExampleY.dat', dtype = scipy.float64)" + "x = np.loadtxt(baseDataDir + 'BinomialExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'BinomialExampleY.dat', dtype = np.float64)" ] }, { @@ -1073,7 +1160,10 @@ "cell_type": "code", "execution_count": 29, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ @@ -1091,7 +1181,10 @@ "cell_type": "code", "execution_count": 30, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1133,7 +1226,10 @@ "cell_type": "code", "execution_count": 31, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1152,7 +1248,7 @@ } ], "source": [ - "glmnetPredict(fit, newx = x[0:5,], ptype='class', s = scipy.array([0.05, 0.01]))" + "glmnetPredict(fit, newx = x[0:5,], ptype='class', s = np.array([0.05, 0.01]))" ] }, { @@ -1177,7 +1273,10 @@ "cell_type": "code", "execution_count": 32, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -1199,7 +1298,10 @@ "cell_type": "code", "execution_count": 33, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1221,7 +1323,10 @@ "cell_type": "code", "execution_count": 34, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1243,7 +1348,10 @@ "cell_type": "code", "execution_count": 35, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1272,7 +1380,10 @@ "cell_type": "code", "execution_count": 36, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1331,7 +1442,10 @@ "cell_type": "code", "execution_count": 37, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1410,7 +1524,10 @@ "cell_type": "code", "execution_count": 38, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ @@ -1421,7 +1538,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -1431,8 +1549,8 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'MultinomialExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'MultinomialExampleY.dat', dtype = scipy.float64)" + "x = np.loadtxt(baseDataDir + 'MultinomialExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'MultinomialExampleY.dat', dtype = np.float64)" ] }, { @@ -1453,7 +1571,10 @@ "cell_type": "code", "execution_count": 39, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -1471,7 +1592,10 @@ "cell_type": "code", "execution_count": 40, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1504,7 +1628,10 @@ "cell_type": "code", "execution_count": 41, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1538,7 +1665,10 @@ "cell_type": "code", "execution_count": 42, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1568,9 +1698,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "Poisson regression is used to model count data under the assumption of Poisson error, or otherwise non-negative data where the mean and variance are proportional. Like the Gaussian and binomial model, the Poisson is a member of the exponential family of distributions. We usually model its positive mean on the log scale: $\\log \\mu(x) = \\beta_0+\\beta' x$.\n", "The log-likelihood for observations $\\{x_i,y_i\\}_1^N$ is given my\n", @@ -1591,7 +1719,10 @@ "cell_type": "code", "execution_count": 43, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ @@ -1602,7 +1733,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -1612,15 +1744,13 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'PoissonExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'PoissonExampleY.dat', dtype = scipy.float64, delimiter = ',')" + "x = np.loadtxt(baseDataDir + 'PoissonExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'PoissonExampleY.dat', dtype = np.float64, delimiter = ',')" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "We apply the function `glmnet` with the `\"poisson\"` option." ] @@ -1629,7 +1759,10 @@ "cell_type": "code", "execution_count": 44, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ @@ -1638,9 +1771,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "The optional input arguments of `glmnet` for `\"poisson\"` family are similar to those for others.\n", "\n", @@ -1658,7 +1789,10 @@ "cell_type": "code", "execution_count": 45, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1678,9 +1812,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "Like before, we can extract the coefficients and make predictions at certain $\\lambda$'s by using `coef` and `predict` respectively. The optional input arguments are similar to those for other families. In function `predict`, the option `type`, which is the type of prediction required, has its own specialties for Poisson family. That is,\n", "* \"link\" (default) gives the linear predictors like others\n", @@ -1695,7 +1827,10 @@ "cell_type": "code", "execution_count": 46, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1730,14 +1865,17 @@ } ], "source": [ - "glmnetCoef(fit, s = scipy.float64([1.0]))" + "glmnetCoef(fit, s = np.float64([1.0]))" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1756,14 +1894,12 @@ } ], "source": [ - "glmnetPredict(fit, x[0:5,:], ptype = 'response', s = scipy.float64([0.1, 0.01]))" + "glmnetPredict(fit, x[0:5,:], ptype = 'response', s = np.float64([0.1, 0.01]))" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "We may also use cross-validation to find the optimal $\\lambda$'s and thus make inferences." ] @@ -1772,7 +1908,10 @@ "cell_type": "code", "execution_count": 48, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -1797,7 +1936,10 @@ "cell_type": "code", "execution_count": 49, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1826,7 +1968,10 @@ "cell_type": "code", "execution_count": 50, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1861,7 +2006,7 @@ } ], "source": [ - "optlam = scipy.array([cvfit['lambda_min'], cvfit['lambda_1se']]).reshape([2,])\n", + "optlam = np.array([cvfit['lambda_min'], cvfit['lambda_1se']]).reshape([2,])\n", "cvglmnetCoef(cvfit, s = optlam)" ] }, @@ -1874,9 +2019,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "[Back to Table of Contents]\n", "\n", @@ -1886,9 +2029,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "The Cox proportional hazards model is commonly used for the study of the relationship beteween predictor variables and survival time. In the usual survival analysis framework, we have data of the form $(y_1, x_1, \\delta_1), \\ldots, (y_n, x_n, \\delta_n)$ where $y_i$, the observed time, is a time of failure if $\\delta_i$ is 1 or right-censoring if $\\delta_i$ is 0. We also let $t_1 < t_2 < \\ldots < t_m$ be the increasing list of unique failure times, and $j(i)$ denote the index of the observation failing at time $t_i$.\n", "\n", @@ -1913,7 +2054,10 @@ "cell_type": "code", "execution_count": 51, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ @@ -1924,7 +2068,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -1934,8 +2079,8 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'CoxExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'CoxExampleY.dat', dtype = scipy.float64, delimiter = ',')" + "x = np.loadtxt(baseDataDir + 'CoxExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'CoxExampleY.dat', dtype = np.float64, delimiter = ',')" ] }, { @@ -1951,7 +2096,10 @@ "cell_type": "code", "execution_count": 52, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1979,7 +2127,10 @@ "cell_type": "code", "execution_count": 53, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -2008,7 +2159,10 @@ "cell_type": "code", "execution_count": 54, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -2052,7 +2206,7 @@ } ], "source": [ - "glmnetCoef(fit, s = scipy.float64([0.05]))" + "glmnetCoef(fit, s = np.float64([0.05]))" ] }, { @@ -2110,9 +2264,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.6.9" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 4 } diff --git a/test/example_binomial.py b/test/example_binomial.py index 5bced62..04450c4 100644 --- a/test/example_binomial.py +++ b/test/example_binomial.py @@ -4,7 +4,7 @@ sys.path.append('../test') sys.path.append('../lib') -import scipy +import numpy as np import importlib import matplotlib.pyplot as plt @@ -34,15 +34,15 @@ baseDataDir= '../data/' # load data -x = scipy.loadtxt(baseDataDir + 'BinomialExampleX.dat', dtype = scipy.float64, delimiter = ',') -y = scipy.loadtxt(baseDataDir + 'BinomialExampleY.dat', dtype = scipy.float64) +x = np.loadtxt(baseDataDir + 'BinomialExampleX.dat', dtype = np.float64, delimiter = ',') +y = np.loadtxt(baseDataDir + 'BinomialExampleY.dat', dtype = np.float64) # call glmnet fit = glmnet.glmnet(x = x.copy(), y = y.copy(), family = 'binomial') glmnetPlot.glmnetPlot(fit, xvar = 'dev', label = True); -glmnetPredict.glmnetPredict(fit, newx = x[0:5,], ptype='class', s = scipy.array([0.05, 0.01])) +glmnetPredict.glmnetPredict(fit, newx = x[0:5,], ptype='class', s = np.array([0.05, 0.01])) cvfit = cvglmnet.cvglmnet(x = x.copy(), y = y.copy(), family = 'binomial', ptype = 'class') diff --git a/test/example_cox.py b/test/example_cox.py index e737daa..a11966d 100644 --- a/test/example_cox.py +++ b/test/example_cox.py @@ -4,7 +4,7 @@ sys.path.append('../test') sys.path.append('../lib') -import scipy +import numpy as np import importlib import matplotlib.pyplot as plt @@ -34,8 +34,8 @@ baseDataDir= '../data/' # load data -x = scipy.loadtxt(baseDataDir + 'CoxExampleX.dat', dtype = scipy.float64, delimiter = ',') -y = scipy.loadtxt(baseDataDir + 'CoxExampleY.dat', dtype = scipy.float64, delimiter = ',') +x = np.loadtxt(baseDataDir + 'CoxExampleX.dat', dtype = np.float64, delimiter = ',') +y = np.loadtxt(baseDataDir + 'CoxExampleY.dat', dtype = np.float64, delimiter = ',') print(y[0:5, :]) @@ -44,5 +44,5 @@ glmnetPlot.glmnetPlot(fit) -c = glmnetCoef.glmnetCoef(fit, s = scipy.float64([0.05])) +c = glmnetCoef.glmnetCoef(fit, s = np.float64([0.05])) print(c) diff --git a/test/example_gaussian.py b/test/example_gaussian.py index 1b7e112..52fa36e 100644 --- a/test/example_gaussian.py +++ b/test/example_gaussian.py @@ -4,7 +4,7 @@ sys.path.append('../test') sys.path.append('../lib') -import scipy +import numpy as np import importlib import matplotlib.pyplot as plt @@ -34,12 +34,12 @@ baseDataDir= '../data/' # load data -x = scipy.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = scipy.float64) -y = scipy.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = scipy.float64) +x = np.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = np.float64) +y = np.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = np.float64) # create weights -t = scipy.ones((50, 1), dtype = scipy.float64) -wts = scipy.row_stack((t, 2*t)) +t = np.ones((50, 1), dtype = np.float64) +wts = np.row_stack((t, 2*t)) # call glmnet fit = glmnet.glmnet(x = x.copy(), y = y.copy(), family = 'gaussian', \ @@ -53,11 +53,11 @@ # any(fit['lambdau'] == 0.5) # -coefApprx = glmnetCoef.glmnetCoef(fit, s = scipy.float64([0.5]), exact = False) +coefApprx = glmnetCoef.glmnetCoef(fit, s = np.float64([0.5]), exact = False) print(coefApprx) # fc = glmnetPredict.glmnetPredict(fit, x[0:5,:], ptype = 'response', \ - s = scipy.float64([0.05])) + s = np.float64([0.05])) print(fc) # cvfit = cvglmnet.cvglmnet(x = x.copy(), y = y.copy(), ptype = 'mse', nfolds = 20) @@ -67,7 +67,7 @@ cvglmnetPredict.cvglmnetPredict(cvfit, newx = x[0:5,], s='lambda_min') #%% -foldid = scipy.random.choice(10, size = y.shape[0], replace = True) +foldid = np.random.choice(10, size = y.shape[0], replace = True) cv1=cvglmnet.cvglmnet(x = x.copy(),y = y.copy(),foldid=foldid,alpha=1) cv0p5=cvglmnet.cvglmnet(x = x.copy(),y = y.copy(),foldid=foldid,alpha=0.5) @@ -82,10 +82,10 @@ f.add_subplot(2,2,3) cvglmnetPlot.cvglmnetPlot(cv0) f.add_subplot(2,2,4) -plt.plot( scipy.log(cv1['lambdau']), cv1['cvm'], 'r.') +plt.plot( np.log(cv1['lambdau']), cv1['cvm'], 'r.') #plt.hold(True) -plt.plot( scipy.log(cv0p5['lambdau']), cv0p5['cvm'], 'g.') -plt.plot( scipy.log(cv0['lambdau']), cv0['cvm'], 'b.') +plt.plot( np.log(cv0p5['lambdau']), cv0p5['cvm'], 'g.') +plt.plot( np.log(cv0['lambdau']), cv0['cvm'], 'b.') plt.xlabel('log(Lambda)') plt.ylabel(cv1['name']) plt.xlim(-6, 4) @@ -94,22 +94,22 @@ #%% plt.figure() -cl = scipy.array([[-0.7], [0.5]], dtype = scipy.float64) +cl = np.array([[-0.7], [0.5]], dtype = np.float64) tfit=glmnet.glmnet(x = x.copy(),y= y.copy(), cl = cl) glmnetPlot.glmnetPlot(tfit) #%% plt.figure() -pfac = scipy.ones([1, 20]) +pfac = np.ones([1, 20]) pfac[0, 4] = 0; pfac[0, 9] = 0; pfac[0, 14] = 0 pfit = glmnet.glmnet(x = x.copy(), y = y.copy(), penalty_factor = pfac) glmnetPlot.glmnetPlot(pfit, label = True) #%% plt.figure() -scipy.random.seed(101) -x = scipy.random.rand(100,10) -y = scipy.random.rand(100,1) +np.random.seed(101) +x = np.random.rand(100,10) +y = np.random.rand(100,1) fit = glmnet.glmnet(x = x, y = y) glmnetPlot.glmnetPlot(fit) diff --git a/test/example_glmnet.py b/test/example_glmnet.py index 68ae5d8..97f03dd 100644 --- a/test/example_glmnet.py +++ b/test/example_glmnet.py @@ -9,7 +9,7 @@ sys.path.append('../test') sys.path.append('../lib') -import scipy +import numpy as np import glmnet import importlib import pprint @@ -28,8 +28,8 @@ # call test functions if testType == 'gaussian': ## elnet caller - y = scipy.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = scipy.float64) - x = scipy.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = scipy.float64) + y = np.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = np.float64) + x = np.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = np.float64) fit = glmnet.glmnet(x = x, y = y, family = 'gaussian') #fit = glmnet.glmnet(x = x, y = y, family = 'gaussian', alpha = 0.5) print('fit:') @@ -37,40 +37,40 @@ if testType == 'binomial': # lognet caller - x = scipy.loadtxt(baseDataDir + 'BinomialExampleX.dat', dtype = scipy.float64, delimiter = ',') - y = scipy.loadtxt(baseDataDir + 'BinomialExampleY.dat', dtype = scipy.float64) + x = np.loadtxt(baseDataDir + 'BinomialExampleX.dat', dtype = np.float64, delimiter = ',') + y = np.loadtxt(baseDataDir + 'BinomialExampleY.dat', dtype = np.float64) fit = glmnet.glmnet(x = x, y = y, family = 'binomial') print('fit:') pprint.pprint(fit) if testType == 'multinomial': # multinomial caller - x = scipy.loadtxt(baseDataDir + 'MultinomialExampleX.dat', dtype = scipy.float64, delimiter = ',') - y = scipy.loadtxt(baseDataDir + 'MultinomialExampleY.dat', dtype = scipy.float64, delimiter = ',') + x = np.loadtxt(baseDataDir + 'MultinomialExampleX.dat', dtype = np.float64, delimiter = ',') + y = np.loadtxt(baseDataDir + 'MultinomialExampleY.dat', dtype = np.float64, delimiter = ',') fit = glmnet.glmnet(x = x, y = y, family = 'multinomial') print('fit:') pprint.pprint(fit) if testType == 'cox': # coxnet caller - x = scipy.loadtxt(baseDataDir + 'CoxExampleX.dat', dtype = scipy.float64, delimiter = ',') - y = scipy.loadtxt(baseDataDir + 'CoxExampleY.dat', dtype = scipy.float64, delimiter = ',') + x = np.loadtxt(baseDataDir + 'CoxExampleX.dat', dtype = np.float64, delimiter = ',') + y = np.loadtxt(baseDataDir + 'CoxExampleY.dat', dtype = np.float64, delimiter = ',') fit = glmnet.glmnet(x = x, y = y, family = 'cox') print('fit:') pprint.pprint(fit) if testType == 'mgaussian': # mgaussian caller - x = scipy.loadtxt(baseDataDir + 'MultiGaussianExampleX.dat', dtype = scipy.float64, delimiter = ',') - y = scipy.loadtxt(baseDataDir + 'MultiGaussianExampleY.dat', dtype = scipy.float64, delimiter = ',') + x = np.loadtxt(baseDataDir + 'MultiGaussianExampleX.dat', dtype = np.float64, delimiter = ',') + y = np.loadtxt(baseDataDir + 'MultiGaussianExampleY.dat', dtype = np.float64, delimiter = ',') fit = glmnet.glmnet(x = x, y = y, family = 'mgaussian') print('fit:') pprint.pprint(fit) if testType == 'poisson': # poisson caller - x = scipy.loadtxt(baseDataDir + 'PoissonExampleX.dat', dtype = scipy.float64, delimiter = ',') - y = scipy.loadtxt(baseDataDir + 'PoissonExampleY.dat', dtype = scipy.float64, delimiter = ',') + x = np.loadtxt(baseDataDir + 'PoissonExampleX.dat', dtype = np.float64, delimiter = ',') + y = np.loadtxt(baseDataDir + 'PoissonExampleY.dat', dtype = np.float64, delimiter = ',') fit = glmnet.glmnet(x = x, y = y, family = 'poisson') print('fit:') pprint.pprint(fit) diff --git a/test/example_mgaussian.py b/test/example_mgaussian.py index 8cce70c..4910b01 100644 --- a/test/example_mgaussian.py +++ b/test/example_mgaussian.py @@ -4,7 +4,7 @@ sys.path.append('../test') sys.path.append('../lib') -import scipy +import numpy as np import importlib import matplotlib.pyplot as plt import time @@ -35,8 +35,8 @@ baseDataDir= '../data/' # load data -x = scipy.loadtxt(baseDataDir + 'MultiGaussianExampleX.dat', dtype = scipy.float64, delimiter = ',') -y = scipy.loadtxt(baseDataDir + 'MultiGaussianExampleY.dat', dtype = scipy.float64, delimiter = ',') +x = np.loadtxt(baseDataDir + 'MultiGaussianExampleX.dat', dtype = np.float64, delimiter = ',') +y = np.loadtxt(baseDataDir + 'MultiGaussianExampleY.dat', dtype = np.float64, delimiter = ',') # call glmnet mfit = glmnet.glmnet(x = x.copy(), y = y.copy(), family = 'mgaussian') @@ -44,7 +44,7 @@ plt.figure() glmnetPlot(mfit, xvar = 'lambda', label = True, ptype = '2norm') -f = glmnetPredict.glmnetPredict(mfit, x[0:5,:], s = scipy.float64([0.1, 0.01])) +f = glmnetPredict.glmnetPredict(mfit, x[0:5,:], s = np.float64([0.1, 0.01])) print(f[:,:,0]) print(f[:,:,1]) diff --git a/test/example_multinomial.py b/test/example_multinomial.py index 8d1ed8a..0bf4b19 100644 --- a/test/example_multinomial.py +++ b/test/example_multinomial.py @@ -4,7 +4,7 @@ sys.path.append('../test') sys.path.append('../lib') -import scipy +import numpy as np import importlib import matplotlib.pyplot as plt import warnings @@ -35,8 +35,8 @@ baseDataDir= '../data/' # load data -x = scipy.loadtxt(baseDataDir + 'MultinomialExampleX.dat', dtype = scipy.float64, delimiter = ',') -y = scipy.loadtxt(baseDataDir + 'MultinomialExampleY.dat', dtype = scipy.float64, delimiter = ',') +x = np.loadtxt(baseDataDir + 'MultinomialExampleX.dat', dtype = np.float64, delimiter = ',') +y = np.loadtxt(baseDataDir + 'MultinomialExampleY.dat', dtype = np.float64, delimiter = ',') # call glmnet fit = glmnet.glmnet(x = x.copy(), y = y.copy(), family = 'multinomial', mtype = 'grouped') diff --git a/test/example_poisson.py b/test/example_poisson.py index 2ca51f5..2eb4e52 100644 --- a/test/example_poisson.py +++ b/test/example_poisson.py @@ -4,7 +4,7 @@ sys.path.append('../test') sys.path.append('../lib') -import scipy +import numpy as np import importlib import matplotlib.pyplot as plt @@ -34,19 +34,19 @@ baseDataDir= '../data/' # load data -x = scipy.loadtxt(baseDataDir + 'PoissonExampleX.dat', dtype = scipy.float64, delimiter = ',') -y = scipy.loadtxt(baseDataDir + 'PoissonExampleY.dat', dtype = scipy.float64, delimiter = ',') +x = np.loadtxt(baseDataDir + 'PoissonExampleX.dat', dtype = np.float64, delimiter = ',') +y = np.loadtxt(baseDataDir + 'PoissonExampleY.dat', dtype = np.float64, delimiter = ',') # call glmnet fit = glmnet.glmnet(x = x.copy(), y = y.copy(), family = 'poisson') glmnetPlot.glmnetPlot(fit) -glmnetCoef.glmnetCoef(fit, s = scipy.float64([1.0])) +glmnetCoef.glmnetCoef(fit, s = np.float64([1.0])) -f = glmnetPredict.glmnetPredict(fit, x[0:5,:], ptype = 'response', s = scipy.float64([0.1, 0.01])) +f = glmnetPredict.glmnetPredict(fit, x[0:5,:], ptype = 'response', s = np.float64([0.1, 0.01])) print(f) cvfit = cvglmnet.cvglmnet(x.copy(), y.copy(), family = 'poisson') -optlam = scipy.array([cvfit['lambda_min'], cvfit['lambda_1se']]).reshape(2,) +optlam = np.array([cvfit['lambda_min'], cvfit['lambda_1se']]).reshape(2,) cvglmnetCoef.cvglmnetCoef(cvfit, s = optlam) diff --git a/test/glmnet_examples.ipynb b/test/glmnet_examples.ipynb index 29d9e46..0a41d72 100644 --- a/test/glmnet_examples.ipynb +++ b/test/glmnet_examples.ipynb @@ -65,7 +65,10 @@ "cell_type": "code", "execution_count": 1, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -91,7 +94,10 @@ "cell_type": "code", "execution_count": 2, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -102,7 +108,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -112,12 +119,12 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = scipy.float64)\n", - "y = scipy.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = scipy.float64)\n", + "x = np.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = np.float64)\n", + "y = np.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = np.float64)\n", "\n", "# create weights\n", - "t = scipy.ones((50, 1), dtype = scipy.float64)\n", - "wts = scipy.row_stack((t, 2*t))" + "t = np.ones((50, 1), dtype = np.float64)\n", + "wts = np.row_stack((t, 2*t))" ] }, { @@ -131,7 +138,10 @@ "cell_type": "code", "execution_count": 3, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -154,6 +164,9 @@ "execution_count": 4, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "scrolled": true }, "outputs": [ @@ -208,7 +221,10 @@ "cell_type": "code", "execution_count": 5, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -238,6 +254,9 @@ "execution_count": 6, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "scrolled": true }, "outputs": [ @@ -273,7 +292,10 @@ "cell_type": "code", "execution_count": 7, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -295,7 +317,10 @@ "cell_type": "code", "execution_count": 8, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -330,7 +355,7 @@ } ], "source": [ - "glmnetCoef(fit, s = scipy.float64([0.5]), exact = False)" + "glmnetCoef(fit, s = np.float64([0.5]), exact = False)" ] }, { @@ -355,7 +380,10 @@ "cell_type": "code", "execution_count": 9, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -372,7 +400,7 @@ ], "source": [ "fc = glmnetPredict(fit, x[0:5,:], ptype = 'response', \\\n", - " s = scipy.float64([0.05]))\n", + " s = np.float64([0.05]))\n", "print(fc)" ] }, @@ -395,7 +423,10 @@ "cell_type": "code", "execution_count": 10, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -430,7 +461,10 @@ "cell_type": "code", "execution_count": 11, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -452,7 +486,10 @@ "cell_type": "code", "execution_count": 12, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -494,7 +531,10 @@ "cell_type": "code", "execution_count": 13, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -527,11 +567,14 @@ "cell_type": "code", "execution_count": 14, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ - "foldid = scipy.random.choice(10, size = y.shape[0], replace = True)\n", + "foldid = np.random.choice(10, size = y.shape[0], replace = True)\n", "cv1=cvglmnet(x = x.copy(),y = y.copy(),foldid=foldid,alpha=1)\n", "cv0p5=cvglmnet(x = x.copy(),y = y.copy(),foldid=foldid,alpha=0.5)\n", "cv0=cvglmnet(x = x.copy(),y = y.copy(),foldid=foldid,alpha=0)" @@ -548,7 +591,10 @@ "cell_type": "code", "execution_count": 15, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -571,10 +617,10 @@ "f.add_subplot(2,2,3)\n", "cvglmnetPlot(cv0)\n", "f.add_subplot(2,2,4)\n", - "plt.plot( scipy.log(cv1['lambdau']), cv1['cvm'], 'r.')\n", + "plt.plot( np.log(cv1['lambdau']), cv1['cvm'], 'r.')\n", "plt.hold(True)\n", - "plt.plot( scipy.log(cv0p5['lambdau']), cv0p5['cvm'], 'g.')\n", - "plt.plot( scipy.log(cv0['lambdau']), cv0['cvm'], 'b.')\n", + "plt.plot( np.log(cv0p5['lambdau']), cv0p5['cvm'], 'g.')\n", + "plt.plot( np.log(cv0['lambdau']), cv0['cvm'], 'b.')\n", "plt.xlabel('log(Lambda)')\n", "plt.ylabel(cv1['name'])\n", "plt.xlim(-6, 4)\n", @@ -597,7 +643,10 @@ "cell_type": "code", "execution_count": 16, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -612,7 +661,7 @@ } ], "source": [ - "cl = scipy.array([[-0.7], [0.5]], dtype = scipy.float64)\n", + "cl = np.array([[-0.7], [0.5]], dtype = np.float64)\n", "tfit=glmnet(x = x.copy(),y= y.copy(), cl = cl)\n", "glmnetPlot(tfit);" ] @@ -645,7 +694,10 @@ "cell_type": "code", "execution_count": 17, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -660,7 +712,7 @@ } ], "source": [ - "pfac = scipy.ones([1, 20])\n", + "pfac = np.ones([1, 20])\n", "pfac[0, 4] = 0; pfac[0, 9] = 0; pfac[0, 14] = 0\n", "pfit = glmnet(x = x.copy(), y = y.copy(), penalty_factor = pfac)\n", "glmnetPlot(pfit, label = True);" @@ -685,7 +737,10 @@ "cell_type": "code", "execution_count": 18, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -700,9 +755,9 @@ } ], "source": [ - "scipy.random.seed(101)\n", - "x = scipy.random.rand(100,10)\n", - "y = scipy.random.rand(100,1)\n", + "np.random.seed(101)\n", + "x = np.random.rand(100,10)\n", + "y = np.random.rand(100,1)\n", "fit = glmnet(x = x, y = y)\n", "glmnetPlot(fit);" ] @@ -718,7 +773,10 @@ "cell_type": "code", "execution_count": 19, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -773,7 +831,10 @@ "cell_type": "code", "execution_count": 20, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -784,7 +845,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -794,8 +856,8 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'MultiGaussianExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'MultiGaussianExampleY.dat', dtype = scipy.float64, delimiter = ',')" + "x = np.loadtxt(baseDataDir + 'MultiGaussianExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'MultiGaussianExampleY.dat', dtype = np.float64, delimiter = ',')" ] }, { @@ -809,7 +871,10 @@ "cell_type": "code", "execution_count": 21, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -829,7 +894,10 @@ "cell_type": "code", "execution_count": 22, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -862,7 +930,10 @@ "cell_type": "code", "execution_count": 23, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -884,7 +955,7 @@ } ], "source": [ - "f = glmnetPredict(mfit, x[0:5,:], s = scipy.float64([0.1, 0.01]))\n", + "f = glmnetPredict(mfit, x[0:5,:], s = np.float64([0.1, 0.01]))\n", "print(f[:,:,0], '\\n')\n", "print(f[:,:,1])" ] @@ -902,7 +973,10 @@ "cell_type": "code", "execution_count": 24, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -922,7 +996,10 @@ "cell_type": "code", "execution_count": 25, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -951,7 +1028,10 @@ "cell_type": "code", "execution_count": 26, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -973,7 +1053,10 @@ "cell_type": "code", "execution_count": 27, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1035,7 +1118,10 @@ "cell_type": "code", "execution_count": 28, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -1046,7 +1132,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -1056,8 +1143,8 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'BinomialExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'BinomialExampleY.dat', dtype = scipy.float64)" + "x = np.loadtxt(baseDataDir + 'BinomialExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'BinomialExampleY.dat', dtype = np.float64)" ] }, { @@ -1073,7 +1160,10 @@ "cell_type": "code", "execution_count": 29, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ @@ -1091,7 +1181,10 @@ "cell_type": "code", "execution_count": 30, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1133,7 +1226,10 @@ "cell_type": "code", "execution_count": 31, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1152,7 +1248,7 @@ } ], "source": [ - "glmnetPredict(fit, newx = x[0:5,], ptype='class', s = scipy.array([0.05, 0.01]))" + "glmnetPredict(fit, newx = x[0:5,], ptype='class', s = np.array([0.05, 0.01]))" ] }, { @@ -1177,7 +1273,10 @@ "cell_type": "code", "execution_count": 32, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -1199,7 +1298,10 @@ "cell_type": "code", "execution_count": 33, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1221,7 +1323,10 @@ "cell_type": "code", "execution_count": 34, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1243,7 +1348,10 @@ "cell_type": "code", "execution_count": 35, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1272,7 +1380,10 @@ "cell_type": "code", "execution_count": 36, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1331,7 +1442,10 @@ "cell_type": "code", "execution_count": 37, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1410,7 +1524,10 @@ "cell_type": "code", "execution_count": 38, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ @@ -1421,7 +1538,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -1431,8 +1549,8 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'MultinomialExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'MultinomialExampleY.dat', dtype = scipy.float64)" + "x = np.loadtxt(baseDataDir + 'MultinomialExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'MultinomialExampleY.dat', dtype = np.float64)" ] }, { @@ -1453,7 +1571,10 @@ "cell_type": "code", "execution_count": 39, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -1471,7 +1592,10 @@ "cell_type": "code", "execution_count": 40, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1504,7 +1628,10 @@ "cell_type": "code", "execution_count": 41, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1538,7 +1665,10 @@ "cell_type": "code", "execution_count": 42, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1568,9 +1698,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "Poisson regression is used to model count data under the assumption of Poisson error, or otherwise non-negative data where the mean and variance are proportional. Like the Gaussian and binomial model, the Poisson is a member of the exponential family of distributions. We usually model its positive mean on the log scale: $\\log \\mu(x) = \\beta_0+\\beta' x$.\n", "The log-likelihood for observations $\\{x_i,y_i\\}_1^N$ is given my\n", @@ -1591,7 +1719,10 @@ "cell_type": "code", "execution_count": 43, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ @@ -1602,7 +1733,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -1612,15 +1744,13 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'PoissonExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'PoissonExampleY.dat', dtype = scipy.float64, delimiter = ',')" + "x = np.loadtxt(baseDataDir + 'PoissonExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'PoissonExampleY.dat', dtype = np.float64, delimiter = ',')" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "We apply the function `glmnet` with the `\"poisson\"` option." ] @@ -1629,7 +1759,10 @@ "cell_type": "code", "execution_count": 44, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ @@ -1638,9 +1771,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "The optional input arguments of `glmnet` for `\"poisson\"` family are similar to those for others.\n", "\n", @@ -1658,7 +1789,10 @@ "cell_type": "code", "execution_count": 45, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1678,9 +1812,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "Like before, we can extract the coefficients and make predictions at certain $\\lambda$'s by using `coef` and `predict` respectively. The optional input arguments are similar to those for other families. In function `predict`, the option `type`, which is the type of prediction required, has its own specialties for Poisson family. That is,\n", "* \"link\" (default) gives the linear predictors like others\n", @@ -1695,7 +1827,10 @@ "cell_type": "code", "execution_count": 46, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1730,14 +1865,17 @@ } ], "source": [ - "glmnetCoef(fit, s = scipy.float64([1.0]))" + "glmnetCoef(fit, s = np.float64([1.0]))" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1756,14 +1894,12 @@ } ], "source": [ - "glmnetPredict(fit, x[0:5,:], ptype = 'response', s = scipy.float64([0.1, 0.01]))" + "glmnetPredict(fit, x[0:5,:], ptype = 'response', s = np.float64([0.1, 0.01]))" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "We may also use cross-validation to find the optimal $\\lambda$'s and thus make inferences." ] @@ -1772,7 +1908,10 @@ "cell_type": "code", "execution_count": 48, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ @@ -1797,7 +1936,10 @@ "cell_type": "code", "execution_count": 49, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1826,7 +1968,10 @@ "cell_type": "code", "execution_count": 50, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1861,7 +2006,7 @@ } ], "source": [ - "optlam = scipy.array([cvfit['lambda_min'], cvfit['lambda_1se']]).reshape([2,])\n", + "optlam = np.array([cvfit['lambda_min'], cvfit['lambda_1se']]).reshape([2,])\n", "cvglmnetCoef(cvfit, s = optlam)" ] }, @@ -1874,9 +2019,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "[Back to Table of Contents]\n", "\n", @@ -1886,9 +2029,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "The Cox proportional hazards model is commonly used for the study of the relationship beteween predictor variables and survival time. In the usual survival analysis framework, we have data of the form $(y_1, x_1, \\delta_1), \\ldots, (y_n, x_n, \\delta_n)$ where $y_i$, the observed time, is a time of failure if $\\delta_i$ is 1 or right-censoring if $\\delta_i$ is 0. We also let $t_1 < t_2 < \\ldots < t_m$ be the increasing list of unique failure times, and $j(i)$ denote the index of the observation failing at time $t_i$.\n", "\n", @@ -1913,7 +2054,10 @@ "cell_type": "code", "execution_count": 51, "metadata": { - "collapsed": true + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } }, "outputs": [], "source": [ @@ -1924,7 +2068,8 @@ "import sys\n", "sys.path.append('../test')\n", "sys.path.append('../lib')\n", - "import scipy, importlib, pprint, matplotlib.pyplot as plt, warnings\n", + "import numpy as np\n", + "import importlib, pprint, matplotlib.pyplot as plt, warnings\n", "from glmnet import glmnet; from glmnetPlot import glmnetPlot \n", "from glmnetPrint import glmnetPrint; from glmnetCoef import glmnetCoef; from glmnetPredict import glmnetPredict\n", "from cvglmnet import cvglmnet; from cvglmnetCoef import cvglmnetCoef\n", @@ -1934,8 +2079,8 @@ "baseDataDir= '../data/'\n", "\n", "# load data\n", - "x = scipy.loadtxt(baseDataDir + 'CoxExampleX.dat', dtype = scipy.float64, delimiter = ',')\n", - "y = scipy.loadtxt(baseDataDir + 'CoxExampleY.dat', dtype = scipy.float64, delimiter = ',')" + "x = np.loadtxt(baseDataDir + 'CoxExampleX.dat', dtype = np.float64, delimiter = ',')\n", + "y = np.loadtxt(baseDataDir + 'CoxExampleY.dat', dtype = np.float64, delimiter = ',')" ] }, { @@ -1951,7 +2096,10 @@ "cell_type": "code", "execution_count": 52, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -1979,7 +2127,10 @@ "cell_type": "code", "execution_count": 53, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -2008,7 +2159,10 @@ "cell_type": "code", "execution_count": 54, "metadata": { - "collapsed": false + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [ { @@ -2052,7 +2206,7 @@ } ], "source": [ - "glmnetCoef(fit, s = scipy.float64([0.05]))" + "glmnetCoef(fit, s = np.float64([0.05]))" ] }, { @@ -2110,9 +2264,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.6.9" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 4 } diff --git a/test/misc/example_elnet.py b/test/misc/example_elnet.py index 390acc4..45ac9b4 100644 --- a/test/misc/example_elnet.py +++ b/test/misc/example_elnet.py @@ -2,7 +2,7 @@ # Sample caller code for elnet # -import scipy +import numpy as np import ctypes from glmnet import glmnet from glmnetControl import glmnetControl @@ -22,12 +22,12 @@ # type.multinomial=c("ungrouped","grouped")){ baseDataDir= '/home/bbalasub/Desktop/Summer2016/glmnet/glmnet_R/' -y = scipy.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = scipy.float64) -x = scipy.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = scipy.float64) +y = np.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = np.float64) +x = np.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = np.float64) # convert x and y to 'F' (fortran) order and scipy float64 -y = y.astype(dtype = scipy.float64, order = 'C', copy = True) -x = x.astype(dtype = scipy.float64, order = 'C', copy = True) +y = y.astype(dtype = np.float64, order = 'C', copy = True) +x = x.astype(dtype = np.float64, order = 'C', copy = True) # call elnet directly # subroutine elnet (ka,parm,no,ni,x,y,w,jd,vp,cl,ne,nx,nlam,flmin,u 787 @@ -50,31 +50,31 @@ # y y_r = y.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # w -w = scipy.ones([no], dtype = scipy.float64) -w = w.astype(dtype = scipy.float64, order = 'F', copy = True) +w = np.ones([no], dtype = np.float64) +w = w.astype(dtype = np.float64, order = 'F', copy = True) w_r = w.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # jd -jd = scipy.ones([1], dtype = scipy.int32) -jd = jd.astype(dtype = scipy.int32, order = 'F', copy = True) +jd = np.ones([1], dtype = np.int32) +jd = jd.astype(dtype = np.int32, order = 'F', copy = True) jd_r = jd.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) # vp -vp = scipy.ones([ni], dtype = scipy.float64) -vp = vp.astype(dtype = scipy.float64, order = 'F', copy = True) +vp = np.ones([ni], dtype = np.float64) +vp = vp.astype(dtype = np.float64, order = 'F', copy = True) vp_r = vp.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # cl options = glmnetSet() inparms = glmnetControl() cl = options['cl'] -cl[0, cl[0, :] == scipy.double('-inf')] = -1.0*inparms['big'] -cl[1, cl[1, :] == scipy.double('inf')] = 1.0*inparms['big'] +cl[0, cl[0, :] == np.double('-inf')] = -1.0*inparms['big'] +cl[1, cl[1, :] == np.double('inf')] = 1.0*inparms['big'] if cl.shape[1] < ni: if cl.shape[1] == 1: - cl = cl*scipy.ones([1, ni], dtype = scipy.float64) + cl = cl*np.ones([1, ni], dtype = np.float64) else: raise ValueError('ERROR: Require length 1 or nvars lower and upper limits') else: cl = cl[:, 0:ni-1] -cl = cl.astype(dtype = scipy.float64, order = 'F', copy = True) +cl = cl.astype(dtype = np.float64, order = 'F', copy = True) cl_r = cl.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # ne ne = ni + 1 @@ -89,8 +89,8 @@ flmin = 1.0e-4 flmin_r = ctypes.c_double(flmin) # ulam -ulam = scipy.zeros([1], dtype = scipy.float64) -ulam = ulam.astype(dtype = scipy.float64, order = 'F', copy = True) +ulam = np.zeros([1], dtype = np.float64) +ulam = ulam.astype(dtype = np.float64, order = 'F', copy = True) ulam_r = ulam.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # thr thr = 1.0e-7 @@ -111,28 +111,28 @@ lmu = -1 lmu_r = ctypes.c_int(lmu) # a0 -a0 = scipy.zeros([nlam], dtype = scipy.float64) -a0 = a0.astype(dtype = scipy.float64, order = 'F', copy = True) +a0 = np.zeros([nlam], dtype = np.float64) +a0 = a0.astype(dtype = np.float64, order = 'F', copy = True) a0_r = a0.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # ca -ca = scipy.zeros([nx, nlam], dtype = scipy.float64) -ca = ca.astype(dtype = scipy.float64, order = 'F', copy = True) +ca = np.zeros([nx, nlam], dtype = np.float64) +ca = ca.astype(dtype = np.float64, order = 'F', copy = True) ca_r = ca.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # ia -ia = -1*scipy.ones([nx], dtype = scipy.int32) -ia = ia.astype(dtype = scipy.int32, order = 'F', copy = True) +ia = -1*np.ones([nx], dtype = np.int32) +ia = ia.astype(dtype = np.int32, order = 'F', copy = True) ia_r = ia.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) # nin -nin = -1*scipy.ones([nlam], dtype = scipy.int32) -nin = nin.astype(dtype = scipy.int32, order = 'F', copy = True) +nin = -1*np.ones([nlam], dtype = np.int32) +nin = nin.astype(dtype = np.int32, order = 'F', copy = True) nin_r = nin.ctypes.data_as(ctypes.POINTER(ctypes.c_int)) # rsq -rsq = -1*scipy.ones([nlam], dtype = scipy.float64) -rsq = rsq.astype(dtype = scipy.float64, order = 'F', copy = True) +rsq = -1*np.ones([nlam], dtype = np.float64) +rsq = rsq.astype(dtype = np.float64, order = 'F', copy = True) rsq_r = rsq.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # alm -alm = -1*scipy.ones([nlam], dtype = scipy.float64) -alm = alm.astype(dtype = scipy.float64, order = 'F', copy = True) +alm = -1*np.ones([nlam], dtype = np.float64) +alm = alm.astype(dtype = np.float64, order = 'F', copy = True) alm_r = alm.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) # nlp nlp = -1 diff --git a/test/misc/example_elnet2.py b/test/misc/example_elnet2.py index c64b56b..99f120f 100644 --- a/test/misc/example_elnet2.py +++ b/test/misc/example_elnet2.py @@ -4,7 +4,7 @@ @author: bbalasub """ -import scipy +import numpy as np import ctypes import glmnet import importlib @@ -15,7 +15,7 @@ # unless a new python console is started baseDataDir= '/home/bbalasub/Desktop/Summer2016/glmnet/glmnet_R/' -y = scipy.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = scipy.float64) -x = scipy.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = scipy.float64) +y = np.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = np.float64) +x = np.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = np.float64) fit = glmnet.glmnet(x = x, y = y) diff --git a/test/misc/temp.py b/test/misc/temp.py index beeff0e..682e9ec 100644 --- a/test/misc/temp.py +++ b/test/misc/temp.py @@ -1,7 +1,8 @@ import sys sys.path.append('../../test') sys.path.append('../../lib') -import scipy +import numpy as np +import scipy.sparse import glmnet from glmnetPlot import glmnetPlot from glmnetPredict import glmnetPredict @@ -19,13 +20,13 @@ if section == 1: # create x and y - scipy.random.seed(1) - x = scipy.random.normal(size = [10,3]) - y = scipy.random.binomial(1, 0.5, size =[10,1])*1.0 + np.random.seed(1) + x = np.random.normal(size = [10,3]) + y = np.random.binomial(1, 0.5, size =[10,1])*1.0 x[x < 0.0] = 0.0 # x is made sparse - xs = scipy.sparse.csc_matrix(x, dtype = scipy.float64) + xs = scipy.sparse.csc_matrix(x, dtype = np.float64) print("xs = ", xs.todense()) # nobs, nvars can be obtained from sparse x @@ -35,22 +36,22 @@ # tfs = xs[:,0] > 1.0 tfs = tfs.toarray(); - tf = scipy.reshape(tfs, [len(tfs), ]) + tf = np.reshape(tfs, [len(tfs), ]) elif section == 2: # sparse caller for glmnet baseDataDir= '../../data/' # load data - x = scipy.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = scipy.float64) - y = scipy.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = scipy.float64) - xs = scipy.sparse.csc_matrix(x, dtype = scipy.float64) - scipy.random.seed(1) - lambda_min = scipy.random.rand(y.size) - exclude = scipy.array([0, 1, 2, 3]) - penalty_factor = scipy.ones(x.shape[1]) + x = np.loadtxt(baseDataDir + 'QuickStartExampleX.dat', dtype = np.float64) + y = np.loadtxt(baseDataDir + 'QuickStartExampleY.dat', dtype = np.float64) + xs = scipy.sparse.csc_matrix(x, dtype = np.float64) + np.random.seed(1) + lambda_min = np.random.rand(y.size) + exclude = np.array([0, 1, 2, 3]) + penalty_factor = np.ones(x.shape[1]) penalty_factor[0] = 500 - pmax = scipy.array([18]) + pmax = np.array([18]) fit = glmnet.glmnet(x = xs.copy(), y = y.copy(), family = 'gaussian', exclude = exclude) print(fit['a0']) print(fit['beta'][:,-1]) @@ -58,10 +59,10 @@ elif section == 3: N = 1000; family = 'binomial' - x = scipy.random.normal(size = [N,10]) + x = np.random.normal(size = [N,10]) x[x < 2.0] = 0.0 - xs = scipy.sparse.csc_matrix(x, dtype = scipy.float64) - y = scipy.random.normal(size = [N,1]) + xs = scipy.sparse.csc_matrix(x, dtype = np.float64) + y = np.random.normal(size = [N,1]) y[y > 0] = 1.0 y[y < 0] = 0.0 st = time.time() @@ -78,10 +79,10 @@ elif section == 4: N = 1000; family = 'binomial' - x = scipy.random.normal(size = [N,10]) + x = np.random.normal(size = [N,10]) x[x < 2.0] = 0.0 - xs = scipy.sparse.csc_matrix(x, dtype = scipy.float64) - y = scipy.random.normal(size = [N,1]) + xs = scipy.sparse.csc_matrix(x, dtype = np.float64) + y = np.random.normal(size = [N,1]) y[y > 0] = 1.0 y[y < 0] = 0.0 st = time.time() @@ -91,10 +92,10 @@ elif section == 5: import matplotlib.pyplot as plt - scipy.random.seed(1) - x=scipy.random.normal(size = (100,20)) - y=scipy.random.normal(size = (100,1)) - g4=scipy.random.choice(4,size = (100,1))*1.0 + np.random.seed(1) + x=np.random.normal(size = (100,20)) + y=np.random.normal(size = (100,1)) + g4=np.random.choice(4,size = (100,1))*1.0 fit1=glmnet.glmnet(x = x.copy(),y = y.copy()) glmnetPlot(fit1) plt.figure() @@ -104,43 +105,43 @@ glmnetPlot(fit3) elif section == 6: - x = scipy.random.rand(100, 10) - y = scipy.random.rand(100, 1) + x = np.random.rand(100, 10) + y = np.random.rand(100, 1) fit = glmnet.glmnet(x = x, y = y) - f = glmnetPredict(fit, x[0:5, :], scipy.array([0.0866, 0.2323])) + f = glmnetPredict(fit, x[0:5, :], np.array([0.0866, 0.2323])) print(f) elif section == 7: - x = scipy.random.normal(size = [100,20]) - y = scipy.random.normal(size = [100,1]) - g2 = scipy.random.choice(2, size = [100, 1])*1.0 - g4 = scipy.random.choice(4, size = [100, 1])*1.0 + x = np.random.normal(size = [100,20]) + y = np.random.normal(size = [100,1]) + g2 = np.random.choice(2, size = [100, 1])*1.0 + g4 = np.random.choice(4, size = [100, 1])*1.0 fit1 = glmnet.glmnet(x = x.copy(),y = y.copy()); - print( glmnetPredict(fit1,x[0:5,:],scipy.array([0.01,0.005])) ) - print( glmnetPredict(fit1, scipy.empty([0]), scipy.empty([0]), 'coefficients') ) + print( glmnetPredict(fit1,x[0:5,:],np.array([0.01,0.005])) ) + print( glmnetPredict(fit1, np.empty([0]), np.empty([0]), 'coefficients') ) fit2 = glmnet.glmnet(x = x.copy(), y = g2.copy(), family = 'binomial'); - print(glmnetPredict(fit2, x[2:5,:],scipy.empty([0]), 'response')) - print(glmnetPredict(fit2, scipy.empty([0]), scipy.empty([0]), 'nonzero')) + print(glmnetPredict(fit2, x[2:5,:],np.empty([0]), 'response')) + print(glmnetPredict(fit2, np.empty([0]), np.empty([0]), 'nonzero')) fit3 = glmnet.glmnet(x = x.copy(), y = g4.copy(), family = 'multinomial'); - print(glmnetPredict(fit3, x[0:3,:], scipy.array([0.01]), 'response')) - print(glmnetPredict(fit3, x[0:3,:], scipy.array([0.01, 0.5]), 'response')) + print(glmnetPredict(fit3, x[0:3,:], np.array([0.01]), 'response')) + print(glmnetPredict(fit3, x[0:3,:], np.array([0.01, 0.5]), 'response')) elif section == 8: - x=scipy.random.rand(100,20); - y=scipy.random.rand(100,1); + x=np.random.rand(100,20); + y=np.random.rand(100,1); fit=glmnet.glmnet(x = x.copy(),y = y.copy()); - ncoef=glmnetCoef(fit,scipy.array([0.01, 0.001])); + ncoef=glmnetCoef(fit,np.array([0.01, 0.001])); elif section == 9: - scipy.random.seed(1) - x=scipy.random.normal(size = (100,20)) - y=scipy.random.normal(size = (100,1)) - g2=scipy.random.choice(2,size = (100,1))*1.0 - g4=scipy.random.choice(4,size = (100,1))*1.0 + np.random.seed(1) + x=np.random.normal(size = (100,20)) + y=np.random.normal(size = (100,1)) + g2=np.random.choice(2,size = (100,1))*1.0 + g4=np.random.choice(4,size = (100,1))*1.0 plt.figure() fit1=cvglmnet(x = x.copy(),y = y.copy())