From eb509b1666b6e5edd3801dcd48647e2ee00201d9 Mon Sep 17 00:00:00 2001 From: Morten Hjorth-Jensen Date: Thu, 24 Sep 2020 06:04:50 +0200 Subject: [PATCH] test --- .../_build/.doctrees/logistic.doctree | Bin 0 -> 156271 bytes .../jupyter_execute/gettingstarted_118_12.png | Bin 0 -> 25853 bytes .../_build/jupyter_execute/logistic.ipynb | 891 ++++++++++++++++++ .../_build/jupyter_execute/logistic.py | 544 +++++++++++ .../_build/jupyter_execute/logistic_42_0.png | Bin 0 -> 23100 bytes .../_build/jupyter_execute/logistic_7_0.png | Bin 0 -> 9911 bytes .../_build/jupyter_execute/logistic_7_1.png | Bin 0 -> 6754 bytes .../_build/jupyter_execute/logistic_7_2.png | Bin 0 -> 10184 bytes .../_build/latex/reports/logistic.log | 151 +++ 9 files changed, 1586 insertions(+) create mode 100644 doc/src/LectureNotes/_build/.doctrees/logistic.doctree create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/gettingstarted_118_12.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/logistic.ipynb create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/logistic.py create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/logistic_42_0.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/logistic_7_0.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/logistic_7_1.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/logistic_7_2.png create mode 100644 doc/src/LectureNotes/_build/latex/reports/logistic.log diff --git a/doc/src/LectureNotes/_build/.doctrees/logistic.doctree b/doc/src/LectureNotes/_build/.doctrees/logistic.doctree new file mode 100644 index 0000000000000000000000000000000000000000..813f302b2032aa554ba2d4db35787e6ee63d2d3e GIT binary patch literal 156271 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

3OvUWX7A1+r~996b(xYI$dG#E@Yc9JYT zBTp0;SdKE5EPZ6GW(-CDJrI#j3%puu{QJtrMf6{;7;BuKr5VBh2aS8+4JG_$>C^zB zfDytcU^R{sr$^i%OYcV{H;kOZwepyw$0&mv!-ODsj)mOwuD6x-j-}I-OKTNH=@Ado zH02=K9SQAH;=oZZpc8Wu6ouyO441$K6Zx7&(J*#LPH1iUBui)AElOI4FI2Q-@#rMh z4FnW~Y@V?kFQ$xO3`A0STxmkDmY&97kZTq2foC9{l3*6O%Q2$s>GTj`7mNv~ekm^# zFsG@6Vn`MVHB6K|wz|2w36F+i+08IoM`rkqSwP0KS^5CAAdJ)kIixt!42{Xs6DV&y zKDPw6Oh?_$ST|Hsbn~$4CJ7OlX?kwb+69BOT-~+a1i3&?n3o86KqjM;oIdh?$1bNxTH? z5qkbEge2^EK^If46#qUl1@UOD40qP`*IWm>xQ)IjQU`1gbP&wiuqX$6VBy2}ltah# z-Gk4UWH|4fo)9Jgss|}TpcVg%4l*Ot*=f$tp(98|0!s+qU_lsXw_v17r5psLVqoj$ z564LQ9R@#6h2p-}_n@EsE?thpeeT~&m!Hw)r*!!nf|~um(B;TcTt3F`NZ&Yy%W=9q zf}N=TSLpH~T|S`8`zLVuC0%}mlg|Ag(&c*wF1P8@!oidNWx5Pb5f_V0dbO9_Y>kIv+h0OB(v`8#7Smd zNc>~geN1=Ex`a5%tfQ|i2-eZbD`uTIK9o-Bs>sqY)$#C(A@PF5h!QfF3XT=$oL(Z} zAe>N0e=Qv3+RdO}7%R-7PnIyARK0Se`%3un%8TeT7U=`yxMa;;sR3ioU%Q~U)+t1Y z<*6jR$&ceh_+*ITCEUW<)7QvwQV`lgs63`HJn7YaxlJz>pUR6_B@KsOGtwdpcc=Lu Db&r8V literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/gettingstarted_118_12.png b/doc/src/LectureNotes/_build/jupyter_execute/gettingstarted_118_12.png new file mode 100644 index 0000000000000000000000000000000000000000..d3b03a64d0785dc95a5f6fa713bd7577a9f02c26 GIT binary patch literal 25853 zcmb5W1z40@*FKI)NFRez!XTstlok#mA|29=lt_0o3JM|!3L+g!H_{CQ(%sF_4MPt# zGrv7}&U@7NeBbx~dtF@c%oDTs+WT4SUiZ3}0gCdH#01v}u&}U*rJg)e#=<(U0e*}w z;(||l#%&6~FKma0QYsh0KhKNCZ^1FX?GsH0EG)vyn4fcflisJ`Lw-jI4acW8rj9O# z_9j?XhK{zDHjb9&&u%!I*gKfpSo3gjb8xZUc<$(EE6BA23kA)>tdG6A`6rd`z?=Q7pGQMvvQu{oIq z+k)?Jj7OBhykkZS&HD2V8(QMkL;G|)b`7M){fvSI{Dk0DVaS8=ypkAY23ED~MD0>* zYTLSV)J_9Rv2Ke|#gp_>W2XF%?pP%?1yMB|EhQ*KaOjpTMq6kUzaXncBjEybK|K76 zkw(j-g-rV1M+|>Bc8MHLUzl=VV|U+M7DJXdk%Sc5pRsjTnWTQ&dudf+6yw4(9|GK0PfvT8vp4EnG4k=X2XJCJ|b{`|jO4 z*TWhAqivgF1PqeUFE8}ID^BRCipuxvHdU7@s=Q7Pvh}Ln8|ENos3C2e-eL=N%oxCk z@36C*029VKkC{8J4g}QK*AwsOXcqd3`QqBm1~BzyJZ0J}nwp!3jX+Oi08T0enZlsWn6Ab@&TXJW@q1$fy6&|;FAHAOY3IkY?y1kWt zKDUn3qurIsO1}P7xw%hIbDaH*nk6iR zKu&K%j{6h9+$Ps|T!m>Xh((ZlPpxZ_&hc)GR3gXAx8DT@M%^>N%wyV-n4bQ&7PX&; zHQ_X@o2_3PPsL+;*J|t@YC8n71;wN5srGOIqd8wU+Zd=>^!ySSm7{W=FFixMfJPth zdff$5dREpEIgkC-MzCcX#7Q4~|0)r9xYw^BF#YlZubXU^TF!_Ey!zaTS%O!jpwp^p z!U^Nah(_*%_CrAK1UR0 zua%5j3t{O&kWRS7*B+UgGDby33GcMr#=3g-s%@9RQcs?~D5G5T_l&f7X;afhgAikvnDe+*M}lYq40TXS?Y{iwQ$$2zIrAsccuKm!MqUp(192u6^1yQ+ zp3w6;E_#3X`0eP!$+u=&qsa=VSlfF1KR>+9(J2pA5Ji6K=;$EsKJvvOB)7D4t90IA zVP|D$&v8UHj~g7Uj}p-ce%kF43NZ?K@Y#7|Y#W&G!iVs1)s>?NcJ0T$xWpq?rIXKL zH4iwe_bzvfoUny4DNI?)g|f=qJ>|yyQ*{`f5xTfv2h;@ zvrXLhSBo1Lwq0XsoJU@fiX39S1dHe#xZ$x;Jj{Q*oFuT8T{z+b^Kt{*pU={_fkY@M z<7wLEkY;9f_Jy5xPMGcMMNPA~#9X{D{RGX;W16;Bkby1}avWix))T@Oah_^47pB}W_J$@Jj@ z--+>U*;>W#T!p)UWg9#BV6tJ1axW^)wXN!2o~r_0Ht5>@cNa*7^GjlGXT<0GGDwB? zP4RRKH#|U0h`YH7RJ-rbf`!W+JaE1Ggt8njVZ-XNloUP#149g3cYFJ7PEMP`5I5xh@X=tNw?v_7Cl>$q_bYCwqotMpG==vi z_hrXi^3^!3bjRh=?^6xHTPvdWt5Dqa-7j-1azx;06MWbSyB4S1%JFPFLUy#GNnxdZ zcm za~s$|`dL=eC%Xm$t<@;|(8?=bYlX*EXra~z`(YEqoEC_Fmv>LB+tJCEy7yaeKEy;@ zfk$_wLLW9ttwD3O41K^dT;;j~!tm7>79pEi-Lm=gQlYm@F`qwFO-A73y?BHF8N}@G zm=nr(LT<^%|2W310lh>A=9yPB>u=U4NB#H!GuAiup&mOwKgsQD@BGi_cN88lbz`n% ze#Qt)#QbRqD*e}U&%P&};6nB<58Sy^|H}h1Z>WvSJrTm(EOn_6vze}P`Cnv^Qcf>R zGk+5O_mD&HEy1IN`8oVGh<0`^6P39?$kAp>Pk*W8vao}m>c*Z{_y6oL%8>GXwWq2s zs<6P-v#qJLqtxQr)x01suN|$DagxWuT{8)EW)IIFj8^(saK>Z!I(ZTKcQDaf|Zu25-a>yvtHP%Ry!Qs(Ce?0s*Sq##7|xi$dmJ zO_;?gHQ_f$468l0`2Kmdb|w{0g#JTIl;iv2OsBNg7KX$v1>ViK*!`H{IAl6q53CIA` zt$_@e1B$%)vUSD;P1dw(Y2`O-Xy!KcWnzZ#8Rc3R<6L;kH-?-#Ttxzx^jn?{Sgk#w zpAHov7RZuhZl+dMGTLZOZ{+iI6VP#&xF9d`Ep}74y&Un%QZ4(fT|=GnW&Fd21pCo) zr&vOdh(V3(+)p*o6;8Hoqr~MkXm=8{YOFw>sXfALRMy*-Cas(-scUTFVGTYnI9q^k%~V9qEQj6uTGlHM{mhDA$+?$P;6ahfva7d@ugF( z$xd1P{%Dp%1JRu=02ZWQr|7_yg1`eq=8i$|v;Cg!~rP3!hZpmcKTWdZl$@fu}bO>|?+jD)c4^nB4Ow`cIhBTcm!&fVLb6e8N(7 z7PuHiqZ(gktu^7X)y;Mrt(S@W+`Mgn=x7+k`2I_GqnKA%7@Tr&YUMN$Kf#tOPX((P7Xse+Sq3FU3XHaRzN+qdE|y z3r&+~8q)XOh9{=@@oq1O*M=Jsp~R8=0x>)ac|!W!qLC_`8Bl|lr;JbxF=HB1!tE#3=(?|1Qp*s^Y~xi+baddi(IY}_xKi4PBDYe9k# z{?MuFwc2GtcQ6GXE8kIErb-Ln`TkVEDbtrs4Nbbs#`NH0L$P{Z-lX49e&@zX0Csr6 z`$s;+QqH=zbttmflS*alvTrx3s1!9c9_#7(WM@~zC|k=58~TK2e{#$(C@8qY33C)_ z11O-St4m(uO34_Kba88S4XV++B*V>LVRYmdP@U$;Y1EP6a9BYfi8T)2Q7$OFDRiAc zfz9k7HoFLJfZT_!6YrxJhsktCDuW{QT9fr*a{U>#)v>KDz2!PyNAB|c97rK`gh*s3 ztTqq1c6p@O$_F!X93fPykLdf?oSz$8U|i5%NtGVg%4s_$8ucz;Qk!x3T4wsH2fDMg z;Ba))&b!1T-|F(8rZk5;8848X(e*wGJYeJbk~~2pkffOva6Zl_`K#^k^=q(K+?n(9iXwUE-bBPxwAk>E(l%>b^nltHyqXy8oLGg_&93{=B`tgTbbS z=6bdIv5jwL4FbKZiR-Xv$~8~Ac8AlSDQ(fV-fjiia6VH{v<~ed8s9^C@d?{cV}{2N>Fb*TJjRbF|Z3_J-PqvRNP|3S}1bsIY~3E zu3DPjTBa?D+K#gG)tPr>tgdtK`R;IVFw%zff0ZD_B&yMTHhMWratlhYu@vMx7cfF2W!;K) zPQz$xEuKh81)aw6dLM3<+QeGqW|zBZWC*|eW4ao_L%ADaS))yHTj+Z3s&?C}lg5nn zm;SV^vo?9gmqNr(9?TL|Wjcy~Reh@LcJ-#^QFW~~&4is92l`ZEu@ zKLNC#jxo4W>XO4-MS!(3pF}p(x3e>1AkZ0*W3i?UyH^_d4`@^9{~(Mxll&Hg!IBke zB_f4?I-g$VkRN)6`2Ko8X1y?@xi#1Sc*7kux#7;lv;Tr#?_M)qll%NP_QJqLg?rJz zeiOJLT3hxX+y}mSi98I${$Oq+Sa8b^{W0ZlMGE=$t=Sul1JUam$Q+tPHYFth-BsT| zGp{|#yvA}lV9feqPHS)!adI?dUBK8l zR<|Fh^~VjdzTtma=odhJOV0mdntWUvpiMB@?!`JKNg9b-Z{!_j=9y@V+?m~OQ8RxU zXM?@v-ub1ar&?NV`@{O({&e0?KpssgU{4QHh!eG(aS~wF%rKGDEpc2D>L*KGajfig z58UthQ`=ueOuEnk3c+Z(=SvXngJ}FKj6L~=;-+1(tyONjl=q(hfl0qJozl!AR6zD2 z8>`XA0kSPNkWGfkNJ&ZcZJ?%oNdeixqFdp3HYSjf<6`oB$CW;umw=k$aoN;qYio;q z;K2)0Zk$AMe-c1YMW@I_SP$}^VfGTLx#o~1z?4kRb9j4{vylK zP;KjSoR_n+&p>K>uBEN*tKD1^ctl0t4jpZ+=h041X2V(j!4mF}57KxEC8b`*_T8PG zlEcU-9y4ysk$ma)v0{tnGP^lmo!V(1LJYgccXIgXme}LRxB-uRG}ua7cXABzKqg|v zv$M1FQ0QsQQw@zLhK7bICNR%k;<={xbAao@@##_qyb2Z$4h|;CC1=-C)YI#VzHjk- zD4VJ?hA*wGEV9IE{Cxh4K^6i6f|5*M%tx=-M>q;Nv0|!kkkQ+N!;3+BS))vEOWp4a=@coK7udgTKh_h zCtquY(X?Y;ip+vX5>|X))J&RA#|`#1CEOv7S~&9VVq0Hhs(?)J*04lxl6L;cf4z=bjyI0QP#NORPm6TauXdMhV}G5Ycexd>YT& zb3&zl*YlXo{5O2Z8RgmyRvoCa_34b@59TI3t#AYcipM6NSgjP}@#kt^AlTt!BzVw$ zCvEGnA}YUn2SJ33W{y!e%Z1ICWZ{{G)f)M{QvW>suw6N+W=J1wCd1+jY@ETpCj~mR zl@J<`94X(n(D>w#v`Q$XA$2^RB* z?Bxp46`@b*n+~O-WW5ssB%KKsHM2+fMiJFi_(Uu=xt?aoHoYgdUV}K0hsd@jB1X3p zyl3xyOBwd=ou!o9y)5jEPSr1S>YQcZdOR7{xcE4&Nv>nQ`iLsl)^YOa8B%}09Cdt( zf+=rcb$7PS*Vt)h>zLp@3Kw`3`MOW}aK4}N3T^jSNw`jKHJASat54i&B64nTQ&avi zuCeLElLQ9d2{rZgei3MY2rflQA<>lfKnT}nDqqW1tLfv7{QW9&*=+40itK+1ZI0UyVa)U^ILko`(t>=|n zD^iPYc%ffTU|RdRRrj{EMS1vrPWi`e98MCG8T2@6-c)lR^uL$SpK>#b}*bkSo}b881?6zi(R3-9Vq)HYO{1Ex`f;MBqs z8qKQ<58KORcdiZF8{NKoFs80j$4MIOFubL_S?Tb=rmNkcZ=k{jtG;KvP#{GH$D=5V z8kVhtQ~JL1*)p+-<-*Zn-^0HL+zrFGu1s-kFst1&Vm{*6sBko2X3#CNj+*Y$mN^== z#(&1ezZ7I&qjAk>W#_%rV68}i-3*yP>{NB^ZIUb@{H_ohhetl63K4d#&H;*zl zWn7-h*a`6~u&3N>rp~R&jyRDNk}gm=z4B9vS}5) z_3=56LS+B(O#^^tcV@EA5f+Hs-N5oZJUa3mZ3g~hJ~Br^!#RJ;Tjw-2#pF1vVq3R* zNB3&0g2IBcuCELx&~+FeSU|7WOy=TuEt4-LB7NN}DVnI=ru z_f4ZOLScDR&=zFouGDI z7$owJUmX9EnTM?JepV&S7c&F7lafu%sL+{tg=SsGBf`NPE*HV6OFmb$Ywvpc%3!Ls zgZVlWA9~>nTg`E_pxsqnuRP42&(f;A%E&;I-SqxCk8#T%ph6JpOp{G_0=7vm#On@V$Z36wpv-~>*736uodej;3(q`?C3B+ zLDO$S{d-m>XFYY#o9TX%lb}ABy4^Kcs{kh*r6cs%;9OVjdMi{YuzRWlGKP_0GDp$! z%>j?{E4qqdGp%`pTKeV4-EP< zHr-KJp#O#E1NiS}p6||*0mFZt{|z7h0)cmbyB^@jU(RFyjjn#?1n>A?42w7b>qtfX zq7pxoq5RwWn6;0J$7xMiiMcrpgYWLQgFCx^MtTWtQvd5n@zs7|IHP_W*l(v9Wd8%P zf3Z)ae_ojq zgM;gLS4Hly`yOl6hvT-Pd*TQ{q#vQGi`fG+?6iG-1)AiOU>7 zFF(C&C;0tYPYKyXAD#0AZEo2ma>%!BZ<)_x{uidZ8T4xxUb!@1M-gccNR8-xI6pVLdb!`q5!4vWf$SmkEpdphUv<2j zOLM-m=v8~Sf-do((%|tqa`sn&d2dv+_?+{VH6f1!ae76~-(E<#9t*O{+A#FltNn@i zQqAFPplsybSB-%b>RKY^eaR~KzqIMa;GJxets7vOIs2OFXM27v1^{BXcIH(;&%REX z=Uq14Z`%i@Fkf|;A5TR}(aOhkY2>{izlp!K0HQW@o&mh(M1Zn-7v95`x3l}{Gc?ig zZo0y;V{YP${aRkqu@VwNN~~t;8ZM|ST)d^@rNi-`rMuIcc8W?L+XzYkTA<0Sg;V4a z2*yHaqIOaxzgFzK@MCct(HI;5Y09`>ExFL$Xr-&V>OU>n^zx<{({6KLHR^7_qg71& z6V$jZ89e_{lGYH=ahMXkY=VeagH?zq%9SPh!>5JDa3So@-I?+GTtnHDW!Z-^{CkPh z5v_av(=WXeyPcphNv>q4=0ri1)SjcsF_{CTAL7U!%}d7N!aMxG%7@!Pb_7~r_`#wD zi{sQOnFF=U4kPAxW#0U;?w9szuC>*|pL|lUGsJ7~DuuqT^da4ljF+||*3J?cCK-ew z2%UYn#0^U0p2809sFb1_gefeTw(S8QjMnAyK*Wgd^Z^grRRmbv@-&}c=k_G@@( z9vYN=ZP7>skL#8Jt=FE?X4S4dNU`wiO86gAh1htzHHDO@#eBAfT^uRYy^ELOLaI@9 z6?KB6<3&icegQ`)HMLqPOByN4zj@Jh&b(}0r)(>_ErdoChhszYwp_N7YDR6<`NbM4 z&lV9ox>yGS9qt>4P7rsBvKi^;1Apv9*OjN?(eyehf;Vb)<3yiLLGHSRvdTVW4}Wi+ z(2N4wTbnz|E1AKvFUm_+z&%sSWOL-!SBzN?Hj{{oTOjy>T#1d`vPjouG8|O6BS12- z1Jngp8a3?Zqtt5N<=e;aRC|h~d>#|?ahw?6lub}QvJ1e@KEC{!jhOKjc^qk2yk8V& z1MzL;eqgo~6q@6e%aTnMYFu9IDr%n(x)0&F=;tR$9T|N#4vO`Q8_xLN)fcEwViKpi zBXHq?3gp&RHUQ_C+w)6dwpS_K%p^7S{e9+l#|a+zUA5P8D=u=#7t(2{WpNOL(^_K1}ViYB8@E#5wj!?X8c79qszs%s)67@x_QgSo5mv!vr+PeHw)7 zPS8Y*Tn~Gs1Q)m35CM(T3NAR3E$3uoaW`E2#YtYO$G^-V#g5>qzzv)5*NGXsmYKw| zpLfdrWEBO^nm*=%_&#v<-H5>*UaBVbN8K8cUrA-zr?b1``Hk%`g+Q$Oo5t1}s=wQy z!&fZLXwu!)k>x6F+}IBv0j5;?B+1QBTY2(W-;KR&1NE^-;C(PPQcQI+V4Xo%f9JvF%a6eryGo>)Mizm&AHoy?(x(Gi(xT&UY%hIk}1(hEFojZEiqj+ z5+)iPb-hTDxXxo8p+}`~_#_uH_}1&yL48*ePuCJ?WD#W?Ihlb-#m_mY=V z3s5R_5@oP{K0txdIU>c|hE&5q8Jb?ooNU3(RL+_y!^Cj~0M+SlYn z!|A1pZ&o)~yzu`iUZz(#I_hUe{-{J^xDVy;)VBbo_J#UCb;}=h%bcm7K)8ZJo?sXOC8bM*6u6LTk&jRAdLG)!3$D-u zoyT{K;ltL7Fa^kmDQk2dsKpqYvdxM$*X1w%EdQZec+9%yi~8j;R0|fyY5Ngh=XO|> z&8^%N1d0vpx@^rtjWXMtK&djlSqV4oNfZN02LIeM_GZlV)2C1Q#;u`p82Uv@bXbP7 z`a8I@4OI5k&5zbc3s?G52(f_1$aHg}{8M;1m&bu6P|pzj3A8*K)$aFYA~;OCVg)eD zpP(Qjp!ML>DzR(@?=nS&^%8~;v}KNcec$`kwJDgUvULZ@1bRwsV9D`W9*9k>a6i0r zKu6Qs-HmsHl{F9`;X**PNVlH@jErWDr$A$4BdBFt76=Dn)LTWJ|0#uon*8{z5r$0y zq9zu0P%okZTuN4-;FSPuDk>`a%lOZ}jWD*)Z6BIO_<#Fhza3!>H#fI0aT%S=Y;4K- z`T1=K&O3Ju1~XNQp7;9f?AQ-wYl?%?{`09S%oi6~jg!Ar%~DfRRQxlLoE?zRQ(K30 zpZ)F5NH2AaiUzP6Sdm;txEQ_*C@dV;M?L~Mz=f?YAvh?Y$^h98KhVj5IAfNco<0o} zU7X-S&uWnegt}+jiXc4Qh^f9}_8lvRE@4XWnYD*&6>4u{ z=#w8Ma7f_YUl6F7Px!qb!0l(8rsAGplj!`{4nHF|d7#q&sdxX)x&8$BYyo8a<@|4u zJN8%dckjwS`0$Jr{ptRn8OpBTD*n3w>Hm@;)C*|*LY@9Ioga?{B=ld?`@y|(fpPu( zfLMIBzMmun^=?-U|31dhbHdWOwq|5f6t7H1Qfagibq?xvHFkBb^@bR2nOdUJ&i`CluQchMs+KBoh zJcAR{3@eC}Y8nbW{`%uO2)Xzzl1X_V!tTsC!4fqm*ok7PKDwd`&Z_n8(XEd|Q2qZA z+!i05M1+fX*C?u7G;@6O3gXitTefg5{jGSy+Dyl$?Oxt(n-}lXt&s`relmE_-H_Ch zNu`YLef5+Br?r`3UBlH2`7+lj`KYE`DK=?nCqy=m5_h*7cPR4|6p{xiES=Wq+?l>} zPgm6B9|$ema|BTn;caMJFfgQ4z`fE>^3WlJi!}+o&%`?O<|Uo4J9xAW?Q6oaKz17a zso-Y4L?HRMXN?3{7zH3;8NnO+I8!a*)9@m+#sf!)vMy?JdX&OYMz{Bb&X=YXc6e^L z_x!T+!=Bc*R=;3>D51j{mMBFbL|%6g@u!hG3XyKo;*pUto4eDmIv`aus=wYULv2J) zACJLr@G%`iwpjo^KU`}WC=p^A%t2SQ&y30VqVrBKOUrzbnj0vtt;jr?$|J>$JH-o~ z_Wg23v??L{x-wkH41sZwJJiD%Y3n49J@9)U&Xq zy;zc8%#_O_D>T0@#H*4#x19daiO?2~{rsd~491&Ov9FMT(*t6VbFCn2P`DteUcnxc>No80g`(AS{Fvf>yPAhAW0F)Rk42Ge>9t>P zMgDQRta6745@`AKhm{i^7*3r)J+Au*@L6f4LY4?J_0b*bK5l#gkM2G&SY)+b=2X^t zSgeAmPS{-Ct;t(P&MUpfqjCJh#KeT!ZT=%hpt@d-m@2Y?#rqNS^{0?>*-QxwIxgqW z979mMbRy_e2M}+|oY>KNa?}zR?=E#tD^3=0kCfk^aHnC@B=EH%^gE9wa!8@GD;c@3 zvCy2WNqE7p9#VTzbr@I(1sromV)N7Cgelv3bwXEX0&fL;P zBLCF3Aw0j?Iy}J)9=zgml}aTK6>2lRDCEPb^>QxwWzCY6_giyq)i?wyWN={^qCJ9m z>UGtyveyM@;Lzpvg#K2kQ3>k??0Qv^U}qaQECB7XDZo&e3W#Q*X-a0Cw#risnki9r z&M)y26%d>#vCXh{OJwK3kCs_xA z7#ugfO$O8$_C^Z*4)AwN z+n7CH8)l{i;h@YeBP|UIt)s?ndU~_~kxD)I4RqttdDdmBW?@vY<{&KaO*&p-*Df&z zwND+pMlvkN<(^lAS?Yz3E6R%?|JPOk_Ajdb9#1P^6DZK+m$q zcadk*sE$^M(;&&eKyendioEX6651~8zhBL>_h9B9(ie00e+fE%yZj44-aqR!et(63 zd!POqol17e^$&i(IEdB<=D>6P&f!irjRPWbF3qwE)mfVVjG<}=d%dWkX~E0prB9r} zR(OVm$JOjw_kFtGa4XGVM)kJyR(`C?mQ}D&lb#u@!`*z9;+o@3Wi+YYsSpt*0bHckZq(@MOu&)> z(*4lQgVLUTem*&MW31#msC8>0WaiotL8k)h5FA~1Xp&1qu9d;OzCou}*-9pmh-Fi| zAH4bckUwdyX#pXMODaP0ra4(1ui-dL9c>mk(OR+eW#qWsT>WiiI1&(%gCIuMD=^#rZGx zn@ENT9cH>}aYMQ-h}5UBPd0EU;%U6Jd9>KxqNK#BZ5Pr%<*Xrlk;(wss<1lbTUYN7 zjcHhgSM!n{OtOwZvAWiAyK5*t4K2HnA<*D)^-Y~BByH6(Z)|VQ;`sIZYk7J|xYxxf zDqDHFWoO!n2P7;k%6)q;vaB~~NM6c#<55w4h{E@PpOaAsCQ?f8&U>JegZhQl-Ac`~ zGp8cDhUKM?{xJ3AZQKAQXZ2SnK=btIoFYxIT>nc2v8!z6-*uGg0I)AJR z))yl57tcf+Bl%XGLV9{SN8(@HL_8}Qo1%*Y-e0>vwuQD* z60SK~po$sQ3QKrp9?r8>1$AF+x4X`=W@eP1)sZ_g_~r z+HS5ub>2HFPL4sgdYPa-qoWcaM@q6XlFR&IabEVBno9uPC5jJL;<4#nb4-Wa^(N36 zD>NO~x&rpL(bJo(SG+xTQW31I{=+c*#U#0M(i#qYzfM)rL03Er&;v1H*G$t9$>pn- zqot&xg6ZC2W?}gXc!yN=T2(Dx|8RZls+wnH_pCw_l^W#WLc8Gxs76weQ_A0o)E70A zO5ad9d2|NHY=_1(O=|(z#wo2c^n*Dx)8!Gyo1& z7OMOPCHaP}L1!u7i+|YC@x}`VlgHEO#w?!;?!ltmPuLv_zO>_Sp(Hc%k{;75yJp;0 z=EhqCD#*Dh5BLJ6_vdhHM#XY2>@o=)3y$WA{C-i4X(qCPuNpQC!os6NRn za$YyeVtemL&OewR8z_1}FjTw0f5G#ZD#-2bVW?&)Eo~gZ8_8kMN`URh^xcS2juaE3 zmj%;$KRSs1wbeD)T;E5q5#}nK@v!7D(wt5YIuc}K(@edia`-V5jIcY1Py_~&RO*{T z`>zrmoSsR#qQa+(73il^YVjN@R76uOLp=a%R0evF%mEDrLZ>M5rB>10!Cl82I&QaP zC$5m6;^kJeJu!Rd?Ralsmf=I~ZR50F&VkH))aoE)v>edecU#NH-E4chXNtO**$uN) zOAjs~u=UvhtliXi6qyLE@D0h#5ve^;EIvk9;tlIxqGorq?>4yTIRE~7!d$IPqEq0Q zIY{mI_hF$tl?{gebr}>7)8aANvx{M8sSp_^K&}!f^xu$Dj+WXtzechiQ=u=7wvnCW zmlLOHrv<2TzEAL71`Ue+tc&9ZY2svVt@1B)=M11be`ZDQFqQw(Zt**}@*5~UE9U-G z?fvcYhmDsXYy2&z!-Qi3vzPxyRsB*@1mpi5W7-1|>CbWN_fh;-%lyBhCI0PffWkIAc0*(lu^5MckwuS6}`l5CmP6&52^ZSQsEjNWozY zL~IkFM-hXufrzfhX&h5XpP3E#q$@2gtx;gy$`}zE8k!uf19XaH>N-%+A%^qk$-#zZ zi6s?Qp;>n-;Ha@M+(Nm-k}_y*!jRfy#jIGMW6xlJb&yTB;uEHQ60}Ehb90|{362&p zfL1iU<>R<{j(-EuIXkU)owaP7` zz5z6c3+)jY3@auEWo&O4XeSw3=Q9}aQq;oT7>9m12ZZODu)MG5{m@i;UP6axH?u!O zrtcf~UM@4__uRjK@5RMZJv>mgvX0riC+m8dn-=U@npiOEaL{+Dual|txCfo%jeM)Ixr_QN+*XcbaN_h-p29%*6soHJr^ZF`O&^=u zH$k$84TDgNQ=@+X;mJ^XR}I<-t!-1Wd7}NPKItN8f&Jf9mY7as&=3x6r zKJg>F2m?))o`t}^l{f1L^`ZNv^>L8bQ6YcEsM(%Ww@%vh_2(};xE|k(1QoAS><+ZL z?RYWdHLdQ*Uk235)O0|%x^w~lbtGWI1+hIUGVr@3n09E zK3jt-nKCYznATxF&tSu4t6Ra>F|CSvDEE!4@ZpCxBx?B7PO@$k<}&2qU>GuKu<~wi ziu@1HqnaaHM>Kk4(k=GA6S{eOILfPqvg2LB)qqEshTSMp*hcKaubK++zu?Ih6-G;n%E$V|Qr~fT@3#K@ z`X`k)NS*olx+#6R(1}gEWzkz`hf2@;!c&)gd}Sq;8lgS8#oCoKm-nq-cTe%b&74a{ zn|(R$f=abI52R%HLU_1$5%9j`{F8bo)x;y+#ceOS-76L^bA;q1Dvg51>uW3}CJ|qz zQJkxVS!oT)lCoVlvbKz*~Zsn9hGtt^DKCC9x+@E@H$I zfR%HQytqUyane%0m#Hq1HjsF=$PL9v-tC4?Dd)N;ks_q= zD|%bJuJf0fRzkl5%VvJua`r^cZN?cidGdP_+3(7VroHFd&DEnc@@w%Y^Y(rb(6_3$ zYtu`xyiJ|0XFGFn=$5c@(&m<0vAZd`=#W1jM~Das&AkiviYG&z-0z4p4qbJMNksgi zQThjNEs^+%m<9vlyS9qNC}P988Oi?s1QniYJy~%I+VmqlIr#Y_fth!|E`WU+be(VW z>jHV;o15Z(ca2*E=g!lm z;DpyZ3+tcotG4ccoH=p`K#g&5Pk1^U^#?rtgVwZWA@&LCcJJ|AVzgtQ$~W@7*PrEf znVOy5MpT4Q_grpv=wQuB)=!pJ=E5NhxmF)T3Fz4Ft5%4XzM*-#qFK{q>EF#4{pHgf zQz9~K(Rdy|_*gxXH>M zUFQzddC`GurX8$6kk)oIK70J4=g82(2m7$LWUFt@mUqxo>9{}Ds%LBQRBA(atYO4_ z@mT}`bn|`f9fCs6*Q(qUoA=T!Xkif2ptqn6!%tkY;|-}n>N$;^4{=5uws!*F6~NKa z8n%!G_*3@-T^fh*37fGczBq`DQ`5=MbB-4tgfSR6)>G(domyFBOu(6&>4T8 z4*H$%;)~^P+B>OzYG1fZLN_*T2omTc1yq?cKIC^%8{ew$ILA9f*l*phwkwzJESIiL z$m`iz-nSc#euxw$QG|28!jX})Y>d)*by6ZR%AKlUfwmaiIHIZOA55-*cmXNM-}Hyw13x{};9n>BgY1>$a4>Wnf{$T8V= z{00M=o+pj>(PWW@6Q}U*YpGnqLSpH!_1+wx^SHv*V+K3qs2+UxEXh%G-PP6D$I-A_ zoImMvh^QG9mqI|59SZigc^w!eN$$1w>z6j3$QVGGrq?Vu4k=ODQccn^_3MP=&d@`u z4>P-f4_tZoK;#(X)p2Kh4OXuPI+h?f) z|2*Kwvzt}w?0>t+xR;tO?Z-&}GmA_E0XZ@@Fv&|4KL$YEA2$*A>xfBKSRO9@eV;UD zT90&O#b0BL0Y>@r#mdrg1t}ha*dfxTx|752Ic2hzR{jt+HJK!cCxOllRh-P_5&S;+ zZ&{TFo|?ZIWb*ld+YdXJMV`%m7X12;iT<7;^!FKpasOsouF2L(^S_^T`Nu^2|M&vd zj6Yd4d`|dmmB4h)Y+wg|{ca#$)%@6$Usm~F77#4<@2i~QvvBXXha>)Lyr!jYfPxt6)8v9b<5RA54XuZ~rF)WMhQ3!R+{lFhahe*S+G?(FJd8%!=#FR`SiW zj*bF?dzhQ57G(*(SD!n%e3KQ={Q&_NX<4xc30W~b!~Cu=t+$W?2Y-P1g$EUp!>7>~ zlbXaIGitmPtDcS*njEc^VeLYkR90`TsclX-{hMJDU*XcR;kQ2(Kg8YiEzD46Kqq<#w?53PdDRgYE@taSihInr?o27l@pARP z)#36K<&Egij+OE>YW8y$7sVYeUBc zt{*icYHQ=tPE3?enr5q?t(E5SXz+1G(Gq6q?Hnc4$S#dDWEh;I6D33(r2nbGUfZsx zzo^N&#>fyB{mH+PFj`diV@u3wpouO{IU0u8>0TOpMN`0C5G7*3D+)i{`06}pQxohR zR{6BVlgd)%KNoCVWVjwSH`gR`sfZ17MIufmH~WdWWzal zQ>g2Eyp8?hqc)Q~8EJCjOYuxcM5ktKRoevF?xdM&e)u*5!`3tQPlPYFFV%f5H9$$` zd*r!Uk7WHpOOQ}?p^&LAvelNY)eGtHoy;rYGhxLEt(-M@tUze{qJSCm9bI9sI}z*--CNV?ih}a*rVk)E+oL045?V_T zn4p}oE<{ivFnO>}Iy*pA!n!0!W5|hF)j~a0(o@|}qOtd+M1%ahS4Vn?5$B5~y5;7P z!3NE}G4A7g?(vAnkncT+V+!-hZdtETIN!!XMhqTz?%LJIY}bMyiFC!*SyKK`Qm(`m zTlXQljv4)szKw8s2`%++1>=(lIKfOw(hN}RNl9@<9rdNixE(D-906I%WbyICqZijF zbnr6K+bOvYMA@gOvxsq}N`Rdn)i>j{MfjE=pzrRdx)-|%?Ria9G2S8)@x0Q8SDxcR zQvMa*aNMx#)v`>0=H4_K2h2 zR4bCs=mqkTR5h#Xg-dBl2iJB*;ssYE%5Us`Y3Y2!mv+)$s;=pdxYK@UcP=?i|L}Nw z?!3mXruTW^8HVz_-oE2qt3u&kSIrz7sp-Vi*B9z0>H4b7uzT|VDm(Lds@ArT6HYoA zD?=fNvdNqZp_C|7BvT?|NZ1?OJZ4HGLgt}zgk(yY=XoC5*s{%IGTYcPKG$+O@B6&x zeV;#GA0Ho~>k7~K6ik6V7cgPn&@n^>n<1&WYdyUMe@W%keFUmVV`ogI>_3z=P!c-HpNaxY)- zN4_}cMrf>eMD|>bFXj__R?C;2_Q|!Am@v;d8ZueT@QuJH#-5%c?6p?i#pE|g9G0^m z63A@y$`iUcj1E>d;Dd&;UCcJu?MsV@7fdZlDXK-4hYdNUOGGkDzDSb#S_seU>BYHC zrliQ$=anaxL~ax%w`Fdxv|(fnOJt9qIli&Eb>wytcY5mWd;OSY!2%k_`ntMYmqkOA zT6`l=^7_g=B%qhnbiV(~++a!6XiZSbsTUPaf`_B0l26(|TgE$=YuZoYcMduG0iG z9IP&_3-vrvA0lRZDIG%B$LBjkLWO6S1GE|bw)V$Jsi~qGUFk0KXRFbbg(9t(E3Rl` zaj(Qfr}-L#+kQLuK01K^bZvWdRGtjG$>{1VW^CJ{WSl-Jgx+RoqNer``Nn3oS%@V? z&Ju-eX_?87xS2bGq8^d5d6ra5t&jY+eAYiw#nJlt6T=^eGO+QgyV`e@xyj2%-_9DO z!?Z0;XQA9Sm<@~t!f0{on%Ot?__ak`sjiM*rVQNLW(-frwn%!r$>9q_pl^Ltue4NX zo495t$b8tS!sD?Jv7@uprS5=_kuyg zlB7a>02;Zfr2~gszH3|GKrX+(#oFlRW{;wDczY|?B6+9P_nJFI8yT-H2D0J?r>Umg zJqzVwJ*un%PelepL+19xR?c;4`|roNv<1kG+wvS-S~+N9zr_vA$xOYx`~B19k^v?y zJqMP8_%U(JP%D)Fm)F-VY97-H8Wb|f%E}^+S1>_+4`%qiPN(woL6Pk0g1m2)4nw(B z=z|!MbL`IF(*muV`}9O<*E#)eB%RfM8l++HE&o< zT5mmYlknW4kl8sfaC^GCwr=nlap&@IE2*t>v=uL`nibX&ZL5_fC_||ExiM%pj4^CY zSZwgXilyDIYaa{o`q|M)Hr3u-`esiztYooie8J$4I-t=yd*$X$ZGnHD7AfE94dO}K(8x}F-M-ge{($XU?#Se8pX%o3faPW1cu5m3 zw9WP0)#6X2=kj$iE8a{QN&aJxb_jWmY6bRoQA&KaMa~EO zZ;q{YVHbf;?u1O~!t2x(4-JLvls7GvY1V)YX)#yb{7>|LquteCxlu-F#ksq)Kx zB8LlNl#>fW0^yt-)}O1FCFpJ~Y!#tekYwT-E#%2X9S#YyOt6*H#+)QA>b)veo@-c&5S8 zv2nY53O(~F!ROr?Uvy#gauWjdW?jvHGSJOkYQ>VuKl{5(NY52c1l1eAYeSTGH%o;wxMM>p8$E=esFuh2j!%J9s&syktH4X`?YpbQr%n zhCg4HJmO4}2vk3!TF1}BbfmXxhjgV!F-@P){Jj8h;~w}l6A#A zajeo?LQ>Q3Q4@ONUdSH)>bK_E)m?{(Ygw-3A7#-t}T@6|ub&Nft1V71#(9{t+ zB(xuW*-TrCe6Ew^J!7Z8jE3D+)hnZX6;UmwQ>^!%*yCPff7~|M9@w@Tt z2h7tn#_O4cR*7u=g|a4tQIf|I>0VD2)nPtQPp_Oif;7;XtzO<=XF?;M@p8{=lh)QF z|G=AiA-qN=THD#HDCpU%s_kii%R?Wu=pJqDdeJ`}=H!cMdTqe`eDLO%M!<2cAO>Ea zJ#SErxwyCxa0Xb#SY}B5!9C6z0ren`Ol}kv+1WC&O4IoHk8E+8)LKu~&ZXTmJXzZz zdbA&leQPHDeYYWy>qc;mz|qkW4J?~~!>(1L$eCyTqzEn7Whc$t1DXkLQ-{t)tXE)+ zx8p$7Lf?dy-jtiVKo-ekn$($+9ry#^FT%>qK5)2qmnAau@d^B-2#FXNh>>F1I-|ci zEaC7rBx+-&>9&!l=Nu)~x8r@XL9rKv*=5U8Cog<7h@Fb86)1a?OOQkEq8?sY!QhsN z>V~TE42>@e+QjeW4n#4vw0dSJzqVPOO;V8mGhxmq`lkh1iL;woUey|&z$(fY{wb>P zOT$k!Uj1lEu197KstU=Li-IQx(UUb)-mP)t>T4A?4ffgQ3|d3WZ{76nmbEPSG%w3s zp7VK;=ri!1YbJ`lS6$`(_@C6yo)Oi(q>kIU{ei^KriOHN4a3#2#q7)$(7lwR zF#K%ewS7FRd3^3C?}uXP4a7>*(FI<=qAZg~HBMBNOxtZ{AO@(d72rC9+_qo0pZ0bc z@te%eH01ttoz>rB{VmCM>O(b*iKi!*?;YZsRYyCY#3d!vK+r!idc;{)?~>w8ba!?0 z$Xz7Jqt@J?ztC!6aiI))ZQ0p6B;QR#-$>FN2qTJpYL^XkYc9-cq|-rQRi z;o+%E9}Wke$|G`$G|f~xGKnGAQ&6X%0_Ik^8Q6eiRy(f&OmAyo1xU4FK*lAvYv6DR zjgM~y(sEyp2?hM!x|WvbfRSN1e!L0DIviO>e`z?43-uT85U1MAKr?0$TEu5_BBsu_ zJ|Rg-oM+FTCF`>hf3KFH41G>ye7afe8X6j((Sxz{mp2~yQXJgpyhKFEKX~xHXqfTD ziDqETDk>{;3kuG?n+)bd&eE$R$-u-0*Z1zbN$4}ADz|`wR_W%C3>Lu*y*w0lx}ArY z7Xi$KMMb%w6_>zKb{U@qn~^TJ?rtqO{mjpyj_F*&AtEATBTnFnl72^tXn*Y3arTdI z-uw~N)SV))puot)jF>snM+WU06vj|I+SuCCEOIahq)$CS&2sK$&J9;2)z-?RizbOV-8gr{P z84kaOk014`VB5f5f@wk4qHkpu1o4knmq7^PKe^=K|72wOCGS~O6bsZxUHfP3DX%%& zhTQt4wf+(k&mV00FOBdowJ~(c_@es%+!gn4;%Uk*WWlYmYqIPQUS-3F1kIAb>;EF|<2JlCNRP;OGk3gQ4d z1*aCN=5cZ&zh8JMF$6T!eAohZZ+7*daYp2#K=Ce-u4W#ZA(b5+&qF-a*4E}&3tbKtc`dSSM=w-MJlB$=tlZ0IG&2k2bb z8?47_rl#*wui2LX`6xRx*P*PBdbakgrh}$Sa z0U039$)MMI&kO~k3ox=HerV3HZh$S&uG zi4Hm#h~W7WwPzn)+&O4-p#>ue(ecjMZ!i<3V1~!he@vpW=2+Vn`rn=9HjcO@$shib`(S^k4mJ$1r`@F zWE~0OpBpNRgYqgX27`h8;H8a<)lG)u`2=x^kn`dC0*&r1 zJYWEc1mvj%n(CJnz}40W409{o`|aVqout&7up`Z;1%&xTIysm-CY0a(N~ZrYCn1F~ z`?LQ?Lc_g#_YOh8Rcx<3PrU|Jv{y()3#XH1pai}(y)ySN|F*TXtjr34``W}Ci3;-Z zDHRHQ+-fb&&D>mET@L#HW%WIJ ZvQrxBQN=4u@Td|pB?UG4EIDJpe*w>7P}cwe literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/logistic.ipynb b/doc/src/LectureNotes/_build/jupyter_execute/logistic.ipynb new file mode 100644 index 000000000..f251ed680 --- /dev/null +++ b/doc/src/LectureNotes/_build/jupyter_execute/logistic.ipynb @@ -0,0 +1,891 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# Data Analysis and Machine Learning: Logistic Regression\n", + "\n", + " \n", + "**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n", + "\n", + "Date: **Oct 17, 2019**\n", + "\n", + "Copyright 1999-2019, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Logistic Regression\n", + "\n", + "In linear regression our main interest was centered on learning the\n", + "coefficients of a functional fit (say a polynomial) in order to be\n", + "able to predict the response of a continuous variable on some unseen\n", + "data. The fit to the continuous variable $y_i$ is based on some\n", + "independent variables $\\hat{x}_i$. Linear regression resulted in\n", + "analytical expressions for standard ordinary Least Squares or Ridge\n", + "regression (in terms of matrices to invert) for several quantities,\n", + "ranging from the variance and thereby the confidence intervals of the\n", + "parameters $\\hat{\\beta}$ to the mean squared error. If we can invert\n", + "the product of the design matrices, linear regression gives then a\n", + "simple recipe for fitting our data.\n", + "\n", + "\n", + "Classification problems, however, are concerned with outcomes taking\n", + "the form of discrete variables (i.e. categories). We may for example,\n", + "on the basis of DNA sequencing for a number of patients, like to find\n", + "out which mutations are important for a certain disease; or based on\n", + "scans of various patients' brains, figure out if there is a tumor or\n", + "not; or given a specific physical system, we'd like to identify its\n", + "state, say whether it is an ordered or disordered system (typical\n", + "situation in solid state physics); or classify the status of a\n", + "patient, whether she/he has a stroke or not and many other similar\n", + "situations.\n", + "\n", + "The most common situation we encounter when we apply logistic\n", + "regression is that of two possible outcomes, normally denoted as a\n", + "binary outcome, true or false, positive or negative, success or\n", + "failure etc.\n", + "\n", + "## Optimization and Deep learning\n", + "\n", + "Logistic regression will also serve as our stepping stone towards\n", + "neural network algorithms and supervised deep learning. For logistic\n", + "learning, the minimization of the cost function leads to a non-linear\n", + "equation in the parameters $\\hat{\\beta}$. The optimization of the\n", + "problem calls therefore for minimization algorithms. This forms the\n", + "bottle neck of all machine learning algorithms, namely how to find\n", + "reliable minima of a multi-variable function. This leads us to the\n", + "family of gradient descent methods. The latter are the working horses\n", + "of basically all modern machine learning algorithms.\n", + "\n", + "We note also that many of the topics discussed here on logistic \n", + "regression are also commonly used in modern supervised Deep Learning\n", + "models, as we will see later.\n", + "\n", + "\n", + "\n", + "## Basics\n", + "\n", + "We consider the case where the dependent variables, also called the\n", + "responses or the outcomes, $y_i$ are discrete and only take values\n", + "from $k=0,\\dots,K-1$ (i.e. $K$ classes).\n", + "\n", + "The goal is to predict the\n", + "output classes from the design matrix $\\hat{X}\\in\\mathbb{R}^{n\\times p}$\n", + "made of $n$ samples, each of which carries $p$ features or predictors. The\n", + "primary goal is to identify the classes to which new unseen samples\n", + "belong.\n", + "\n", + "Let us specialize to the case of two classes only, with outputs\n", + "$y_i=0$ and $y_i=1$. Our outcomes could represent the status of a\n", + "credit card user that could default or not on her/his credit card\n", + "debt. That is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y_i = \\begin{bmatrix} 0 & \\mathrm{no}\\\\ 1 & \\mathrm{yes} \\end{bmatrix}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Linear classifier\n", + "\n", + "Before moving to the logistic model, let us try to use our linear\n", + "regression model to classify these two outcomes. We could for example\n", + "fit a linear model to the default case if $y_i > 0.5$ and the no\n", + "default case $y_i \\leq 0.5$.\n", + "\n", + "We would then have our \n", + "weighted linear combination, namely" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "

\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\hat{y} = \\hat{X}^T\\hat{\\beta} + \\hat{\\epsilon},\n", + "\\label{_auto1} \\tag{1}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\hat{y}$ is a vector representing the possible outcomes, $\\hat{X}$ is our\n", + "$n\\times p$ design matrix and $\\hat{\\beta}$ represents our estimators/predictors.\n", + "\n", + "## Some selected properties\n", + "\n", + "The main problem with our function is that it takes values on the\n", + "entire real axis. In the case of logistic regression, however, the\n", + "labels $y_i$ are discrete variables. A typical example is the credit\n", + "card data discussed below here, where we can set the state of\n", + "defaulting the debt to $y_i=1$ and not to $y_i=0$ for one the persons\n", + "in the data set (see the full example below).\n", + "\n", + "One simple way to get a discrete output is to have sign\n", + "functions that map the output of a linear regressor to values $\\{0,1\\}$,\n", + "$f(s_i)=sign(s_i)=1$ if $s_i\\ge 0$ and 0 if otherwise. \n", + "We will encounter this model in our first demonstration of neural networks. Historically it is called the \"perceptron\" model in the machine learning\n", + "literature. This model is extremely simple. However, in many cases it is more\n", + "favorable to use a ``soft\" classifier that outputs\n", + "the probability of a given category. This leads us to the logistic function.\n", + "\n", + "\n", + "## The logistic function\n", + "\n", + "The perceptron is an example of a ``hard classification\" model. We\n", + "will encounter this model when we discuss neural networks as\n", + "well. Each datapoint is deterministically assigned to a category (i.e\n", + "$y_i=0$ or $y_i=1$). In many cases, it is favorable to have a \"soft\"\n", + "classifier that outputs the probability of a given category rather\n", + "than a single value. For example, given $x_i$, the classifier\n", + "outputs the probability of being in a category $k$. Logistic regression\n", + "is the most common example of a so-called soft classifier. In logistic\n", + "regression, the probability that a data point $x_i$\n", + "belongs to a category $y_i=\\{0,1\\}$ is given by the so-called logit function (or Sigmoid) which is meant to represent the likelihood for a given event," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "p(t) = \\frac{1}{1+\\mathrm \\exp{-t}}=\\frac{\\exp{t}}{1+\\mathrm \\exp{t}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that $1-p(t)= p(-t)$.\n", + "\n", + "## Examples of likelihood functions used in logistic regression and nueral networks\n", + "\n", + "\n", + "The following code plots the logistic function, the step function and other functions we will encounter from here and on." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/src/LectureNotes/_build/jupyter_execute/logistic_7_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/src/LectureNotes/_build/jupyter_execute/logistic_7_1.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/src/LectureNotes/_build/jupyter_execute/logistic_7_2.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "\n", + "\"\"\"The sigmoid function (or the logistic curve) is a\n", + "function that takes any real number, z, and outputs a number (0,1).\n", + "It is useful in neural networks for assigning weights on a relative scale.\n", + "The value z is the weighted sum of parameters involved in the learning algorithm.\"\"\"\n", + "\n", + "import numpy\n", + "import matplotlib.pyplot as plt\n", + "import math as mt\n", + "\n", + "z = numpy.arange(-5, 5, .1)\n", + "sigma_fn = numpy.vectorize(lambda z: 1/(1+numpy.exp(-z)))\n", + "sigma = sigma_fn(z)\n", + "\n", + "fig = plt.figure()\n", + "ax = fig.add_subplot(111)\n", + "ax.plot(z, sigma)\n", + "ax.set_ylim([-0.1, 1.1])\n", + "ax.set_xlim([-5,5])\n", + "ax.grid(True)\n", + "ax.set_xlabel('z')\n", + "ax.set_title('sigmoid function')\n", + "\n", + "plt.show()\n", + "\n", + "\"\"\"Step Function\"\"\"\n", + "z = numpy.arange(-5, 5, .02)\n", + "step_fn = numpy.vectorize(lambda z: 1.0 if z >= 0.0 else 0.0)\n", + "step = step_fn(z)\n", + "\n", + "fig = plt.figure()\n", + "ax = fig.add_subplot(111)\n", + "ax.plot(z, step)\n", + "ax.set_ylim([-0.5, 1.5])\n", + "ax.set_xlim([-5,5])\n", + "ax.grid(True)\n", + "ax.set_xlabel('z')\n", + "ax.set_title('step function')\n", + "\n", + "plt.show()\n", + "\n", + "\"\"\"tanh Function\"\"\"\n", + "z = numpy.arange(-2*mt.pi, 2*mt.pi, 0.1)\n", + "t = numpy.tanh(z)\n", + "\n", + "fig = plt.figure()\n", + "ax = fig.add_subplot(111)\n", + "ax.plot(z, t)\n", + "ax.set_ylim([-1.0, 1.0])\n", + "ax.set_xlim([-2*mt.pi,2*mt.pi])\n", + "ax.grid(True)\n", + "ax.set_xlabel('z')\n", + "ax.set_title('tanh function')\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Two parameters\n", + "\n", + "We assume now that we have two classes with $y_i$ either $0$ or $1$. Furthermore we assume also that we have only two parameters $\\beta$ in our fitting of the Sigmoid function, that is we define probabilities" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "p(y_i=1|x_i,\\hat{\\beta}) &= \\frac{\\exp{(\\beta_0+\\beta_1x_i)}}{1+\\exp{(\\beta_0+\\beta_1x_i)}},\\nonumber\\\\\n", + "p(y_i=0|x_i,\\hat{\\beta}) &= 1 - p(y_i=1|x_i,\\hat{\\beta}),\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\hat{\\beta}$ are the weights we wish to extract from data, in our case $\\beta_0$ and $\\beta_1$. \n", + "\n", + "Note that we used" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "p(y_i=0\\vert x_i, \\hat{\\beta}) = 1-p(y_i=1\\vert x_i, \\hat{\\beta}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Maximum likelihood\n", + "\n", + "In order to define the total likelihood for all possible outcomes from a \n", + "dataset $\\mathcal{D}=\\{(y_i,x_i)\\}$, with the binary labels\n", + "$y_i\\in\\{0,1\\}$ and where the data points are drawn independently, we use the so-called [Maximum Likelihood Estimation](https://en.wikipedia.org/wiki/Maximum_likelihood_estimation) (MLE) principle. \n", + "We aim thus at maximizing \n", + "the probability of seeing the observed data. We can then approximate the \n", + "likelihood in terms of the product of the individual probabilities of a specific outcome $y_i$, that is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "P(\\mathcal{D}|\\hat{\\beta})& = \\prod_{i=1}^n \\left[p(y_i=1|x_i,\\hat{\\beta})\\right]^{y_i}\\left[1-p(y_i=1|x_i,\\hat{\\beta}))\\right]^{1-y_i}\\nonumber \\\\\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "from which we obtain the log-likelihood and our **cost/loss** function" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathcal{C}(\\hat{\\beta}) = \\sum_{i=1}^n \\left( y_i\\log{p(y_i=1|x_i,\\hat{\\beta})} + (1-y_i)\\log\\left[1-p(y_i=1|x_i,\\hat{\\beta}))\\right]\\right).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The cost function rewritten\n", + "\n", + "Reordering the logarithms, we can rewrite the **cost/loss** function as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathcal{C}(\\hat{\\beta}) = \\sum_{i=1}^n \\left(y_i(\\beta_0+\\beta_1x_i) -\\log{(1+\\exp{(\\beta_0+\\beta_1x_i)})}\\right).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The maximum likelihood estimator is defined as the set of parameters that maximize the log-likelihood where we maximize with respect to $\\beta$.\n", + "Since the cost (error) function is just the negative log-likelihood, for logistic regression we have that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathcal{C}(\\hat{\\beta})=-\\sum_{i=1}^n \\left(y_i(\\beta_0+\\beta_1x_i) -\\log{(1+\\exp{(\\beta_0+\\beta_1x_i)})}\\right).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This equation is known in statistics as the **cross entropy**. Finally, we note that just as in linear regression, \n", + "in practice we often supplement the cross-entropy with additional regularization terms, usually $L_1$ and $L_2$ regularization as we did for Ridge and Lasso regression.\n", + "\n", + "## Minimizing the cross entropy\n", + "\n", + "The cross entropy is a convex function of the weights $\\hat{\\beta}$ and,\n", + "therefore, any local minimizer is a global minimizer. \n", + "\n", + "\n", + "Minimizing this\n", + "cost function with respect to the two parameters $\\beta_0$ and $\\beta_1$ we obtain" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial \\mathcal{C}(\\hat{\\beta})}{\\partial \\beta_0} = -\\sum_{i=1}^n \\left(y_i -\\frac{\\exp{(\\beta_0+\\beta_1x_i)}}{1+\\exp{(\\beta_0+\\beta_1x_i)}}\\right),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial \\mathcal{C}(\\hat{\\beta})}{\\partial \\beta_1} = -\\sum_{i=1}^n \\left(y_ix_i -x_i\\frac{\\exp{(\\beta_0+\\beta_1x_i)}}{1+\\exp{(\\beta_0+\\beta_1x_i)}}\\right).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## A more compact expression\n", + "\n", + "Let us now define a vector $\\hat{y}$ with $n$ elements $y_i$, an\n", + "$n\\times p$ matrix $\\hat{X}$ which contains the $x_i$ values and a\n", + "vector $\\hat{p}$ of fitted probabilities $p(y_i\\vert x_i,\\hat{\\beta})$. We can rewrite in a more compact form the first\n", + "derivative of cost function as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial \\mathcal{C}(\\hat{\\beta})}{\\partial \\hat{\\beta}} = -\\hat{X}^T\\left(\\hat{y}-\\hat{p}\\right).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we in addition define a diagonal matrix $\\hat{W}$ with elements \n", + "$p(y_i\\vert x_i,\\hat{\\beta})(1-p(y_i\\vert x_i,\\hat{\\beta})$, we can obtain a compact expression of the second derivative as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial^2 \\mathcal{C}(\\hat{\\beta})}{\\partial \\hat{\\beta}\\partial \\hat{\\beta}^T} = \\hat{X}^T\\hat{W}\\hat{X}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Extending to more predictors\n", + "\n", + "Within a binary classification problem, we can easily expand our model to include multiple predictors. Our ratio between likelihoods is then with $p$ predictors" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\log{ \\frac{p(\\hat{\\beta}\\hat{x})}{1-p(\\hat{\\beta}\\hat{x})}} = \\beta_0+\\beta_1x_1+\\beta_2x_2+\\dots+\\beta_px_p.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we defined $\\hat{x}=[1,x_1,x_2,\\dots,x_p]$ and $\\hat{\\beta}=[\\beta_0, \\beta_1, \\dots, \\beta_p]$ leading to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "p(\\hat{\\beta}\\hat{x})=\\frac{ \\exp{(\\beta_0+\\beta_1x_1+\\beta_2x_2+\\dots+\\beta_px_p)}}{1+\\exp{(\\beta_0+\\beta_1x_1+\\beta_2x_2+\\dots+\\beta_px_p)}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Including more classes\n", + "\n", + "Till now we have mainly focused on two classes, the so-called binary\n", + "system. Suppose we wish to extend to $K$ classes. Let us for the sake\n", + "of simplicity assume we have only two predictors. We have then\n", + "following model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1\n", + "5\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\log{\\frac{p(C=2\\vert x)}{p(K\\vert x)}} = \\beta_{20}+\\beta_{21}x_1,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and so on till the class $C=K-1$ class" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\log{\\frac{p(C=K-1\\vert x)}{p(K\\vert x)}} = \\beta_{(K-1)0}+\\beta_{(K-1)1}x_1,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the model is specified in term of $K-1$ so-called log-odds or\n", + "**logit** transformations.\n", + "\n", + "\n", + "## More classes\n", + "\n", + "In our discussion of neural networks we will encounter the above again\n", + "in terms of a slightly modified function, the so-called **Softmax** function.\n", + "\n", + "The softmax function is used in various multiclass classification\n", + "methods, such as multinomial logistic regression (also known as\n", + "softmax regression), multiclass linear discriminant analysis, naive\n", + "Bayes classifiers, and artificial neural networks. Specifically, in\n", + "multinomial logistic regression and linear discriminant analysis, the\n", + "input to the function is the result of $K$ distinct linear functions,\n", + "and the predicted probability for the $k$-th class given a sample\n", + "vector $\\hat{x}$ and a weighting vector $\\hat{\\beta}$ is (with two\n", + "predictors):" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "p(C=k\\vert \\mathbf {x} )=\\frac{\\exp{(\\beta_{k0}+\\beta_{k1}x_1)}}{1+\\sum_{l=1}^{K-1}\\exp{(\\beta_{l0}+\\beta_{l1}x_1)}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is easy to extend to more predictors. The final class is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "p(C=K\\vert \\mathbf {x} )=\\frac{1}{1+\\sum_{l=1}^{K-1}\\exp{(\\beta_{l0}+\\beta_{l1}x_1)}},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and they sum to one. Our earlier discussions were all specialized to\n", + "the case with two classes only. It is easy to see from the above that\n", + "what we derived earlier is compatible with these equations.\n", + "\n", + "To find the optimal parameters we would typically use a gradient\n", + "descent method. Newton's method and gradient descent methods are\n", + "discussed in the material on [optimization\n", + "methods](https://compphysics.github.io/MachineLearning/doc/pub/Splines/html/Splines-bs.html).\n", + "\n", + "\n", + "\n", + "\n", + "## A simple classification problem" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/src/LectureNotes/_build/jupyter_execute/logistic_42_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "from sklearn import datasets, linear_model\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "def generate_data():\n", + " np.random.seed(0)\n", + " X, y = datasets.make_moons(200, noise=0.20)\n", + " return X, y\n", + "\n", + "\n", + "def visualize(X, y, clf):\n", + " plot_decision_boundary(lambda x: clf.predict(x), X, y)\n", + "\n", + "def plot_decision_boundary(pred_func, X, y):\n", + " # Set min and max values and give it some padding\n", + " x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5\n", + " y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5\n", + " h = 0.01\n", + " # Generate a grid of points with distance h between them\n", + " xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))\n", + " # Predict the function value for the whole gid\n", + " Z = pred_func(np.c_[xx.ravel(), yy.ravel()])\n", + " Z = Z.reshape(xx.shape)\n", + " # Plot the contour and training examples\n", + " plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral)\n", + " plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Spectral)\n", + " plt.show()\n", + "\n", + "\n", + "def classify(X, y):\n", + " clf = linear_model.LogisticRegressionCV()\n", + " clf.fit(X, y)\n", + " return clf\n", + "\n", + "\n", + "def main():\n", + " X, y = generate_data()\n", + " # visualize(X, y)\n", + " clf = classify(X, y)\n", + " visualize(X, y, clf)\n", + "\n", + "if __name__ == \"__main__\":\n", + " main()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The Credit Card example\n", + "Here we use the the [credit card data](https://archive.ics.uci.edu/ml/datasets/default+of+credit+card+clients). \n", + "The data are from an extensive database from Taiwan and include more than ten predictors.\n", + "\n", + "For categorical data -Scikit-Learn- provides a so-called **one-hot encoder**.\n", + "This is called one-hot\n", + "encoding, because only one attribute will be equal to 1 (hot), while the others will be 0 (cold).\n", + "**Scikit-Learn** provides a OneHotEncoder encoder to convert integer categorical values into one-hot" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.preprocessing import OneHotEncoder\n", + "encoder = OneHotEncoder()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How to read the Credit Card data" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "ename": "ImportError", + "evalue": "Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0 for Excel support Use pip or conda to install xlrd.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0mfilename\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcwd\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'/default of credit card clients.xls'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0mnanDict\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 21\u001b[0;31m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_excel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheader\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mskiprows\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindex_col\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mna_values\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnanDict\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 22\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrename\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolumns\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m\"default payment next month\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m\"defaultPaymentNextMonth\"\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minplace\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/pandas/io/excel/_base.py\u001b[0m in \u001b[0;36mread_excel\u001b[0;34m(io, sheet_name, header, names, index_col, usecols, squeeze, dtype, engine, converters, true_values, false_values, skiprows, nrows, na_values, keep_default_na, verbose, parse_dates, date_parser, thousands, comment, skipfooter, convert_float, mangle_dupe_cols, **kwds)\u001b[0m\n\u001b[1;32m 302\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 303\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mio\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mExcelFile\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 304\u001b[0;31m \u001b[0mio\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mExcelFile\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mio\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mengine\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mengine\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 305\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mengine\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mengine\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mio\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mengine\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 306\u001b[0m raise ValueError(\n", + "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/pandas/io/excel/_base.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, io, engine)\u001b[0m\n\u001b[1;32m 822\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_io\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstringify_path\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mio\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 823\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 824\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_reader\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engines\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mengine\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_io\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 825\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 826\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__fspath__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/pandas/io/excel/_xlrd.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, filepath_or_buffer)\u001b[0m\n\u001b[1;32m 18\u001b[0m \"\"\"\n\u001b[1;32m 19\u001b[0m \u001b[0merr_msg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"Install xlrd >= 1.0.0 for Excel support\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0mimport_optional_dependency\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"xlrd\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mextra\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0merr_msg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/pandas/compat/_optional.py\u001b[0m in \u001b[0;36mimport_optional_dependency\u001b[0;34m(name, extra, raise_on_missing, on_version)\u001b[0m\n\u001b[1;32m 90\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mImportError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 91\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mraise_on_missing\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 92\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mImportError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 93\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 94\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mImportError\u001b[0m: Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0 for Excel support Use pip or conda to install xlrd." + ] + } + ], + "source": [ + "import pandas as pd\n", + "import os\n", + "import numpy as np\n", + "\n", + "\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", + "from sklearn.metrics import confusion_matrix, accuracy_score, roc_auc_score\n", + "\n", + "# Trying to set the seed\n", + "np.random.seed(0)\n", + "import random\n", + "random.seed(0)\n", + "\n", + "# Reading file into data frame\n", + "cwd = os.getcwd()\n", + "filename = cwd + '/default of credit card clients.xls'\n", + "nanDict = {}\n", + "df = pd.read_excel(filename, header=1, skiprows=0, index_col=0, na_values=nanDict)\n", + "\n", + "df.rename(index=str, columns={\"default payment next month\": \"defaultPaymentNextMonth\"}, inplace=True)\n", + "\n", + "# Features and targets \n", + "X = df.loc[:, df.columns != 'defaultPaymentNextMonth'].values\n", + "y = df.loc[:, df.columns == 'defaultPaymentNextMonth'].values\n", + "\n", + "# Categorical variables to one-hot's\n", + "onehotencoder = OneHotEncoder(categories=\"auto\")\n", + "\n", + "X = ColumnTransformer(\n", + " [(\"\", onehotencoder, [3]),],\n", + " remainder=\"passthrough\"\n", + ").fit_transform(X)\n", + "\n", + "y.shape\n", + "\n", + "# Train-test split\n", + "trainingShare = 0.5 \n", + "seed = 1\n", + "XTrain, XTest, yTrain, yTest=train_test_split(X, y, train_size=trainingShare, \\\n", + " test_size = 1-trainingShare,\n", + " random_state=seed)\n", + "\n", + "# Input Scaling\n", + "sc = StandardScaler()\n", + "XTrain = sc.fit_transform(XTrain)\n", + "XTest = sc.transform(XTest)\n", + "\n", + "# One-hot's of the target vector\n", + "Y_train_onehot, Y_test_onehot = onehotencoder.fit_transform(yTrain), onehotencoder.fit_transform(yTest)\n", + "\n", + "# Remove instances with zeros only for past bill statements or paid amounts\n", + "'''\n", + "df = df.drop(df[(df.BILL_AMT1 == 0) &\n", + " (df.BILL_AMT2 == 0) &\n", + " (df.BILL_AMT3 == 0) &\n", + " (df.BILL_AMT4 == 0) &\n", + " (df.BILL_AMT5 == 0) &\n", + " (df.BILL_AMT6 == 0) &\n", + " (df.PAY_AMT1 == 0) &\n", + " (df.PAY_AMT2 == 0) &\n", + " (df.PAY_AMT3 == 0) &\n", + " (df.PAY_AMT4 == 0) &\n", + " (df.PAY_AMT5 == 0) &\n", + " (df.PAY_AMT6 == 0)].index)\n", + "'''\n", + "df = df.drop(df[(df.BILL_AMT1 == 0) &\n", + " (df.BILL_AMT2 == 0) &\n", + " (df.BILL_AMT3 == 0) &\n", + " (df.BILL_AMT4 == 0) &\n", + " (df.BILL_AMT5 == 0) &\n", + " (df.BILL_AMT6 == 0)].index)\n", + "\n", + "df = df.drop(df[(df.PAY_AMT1 == 0) &\n", + " (df.PAY_AMT2 == 0) &\n", + " (df.PAY_AMT3 == 0) &\n", + " (df.PAY_AMT4 == 0) &\n", + " (df.PAY_AMT5 == 0) &\n", + " (df.PAY_AMT6 == 0)].index)\n", + "\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.model_selection import GridSearchCV\n", + "\n", + "lambdas=np.logspace(-5,7,13)\n", + "parameters = [{'C': 1./lambdas, \"solver\":[\"lbfgs\"]}]#*len(parameters)}]\n", + "scoring = ['accuracy', 'roc_auc']\n", + "logReg = LogisticRegression()\n", + "gridSearch = GridSearchCV(logReg, parameters, cv=5, scoring=scoring, refit='roc_auc')" + ] + } + ], + "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.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/doc/src/LectureNotes/_build/jupyter_execute/logistic.py b/doc/src/LectureNotes/_build/jupyter_execute/logistic.py new file mode 100644 index 000000000..39168e60a --- /dev/null +++ b/doc/src/LectureNotes/_build/jupyter_execute/logistic.py @@ -0,0 +1,544 @@ + +# Data Analysis and Machine Learning: Logistic Regression + + +**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University + +Date: **Oct 17, 2019** + +Copyright 1999-2019, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license + + + + + +## Logistic Regression + +In linear regression our main interest was centered on learning the +coefficients of a functional fit (say a polynomial) in order to be +able to predict the response of a continuous variable on some unseen +data. The fit to the continuous variable $y_i$ is based on some +independent variables $\hat{x}_i$. Linear regression resulted in +analytical expressions for standard ordinary Least Squares or Ridge +regression (in terms of matrices to invert) for several quantities, +ranging from the variance and thereby the confidence intervals of the +parameters $\hat{\beta}$ to the mean squared error. If we can invert +the product of the design matrices, linear regression gives then a +simple recipe for fitting our data. + + +Classification problems, however, are concerned with outcomes taking +the form of discrete variables (i.e. categories). We may for example, +on the basis of DNA sequencing for a number of patients, like to find +out which mutations are important for a certain disease; or based on +scans of various patients' brains, figure out if there is a tumor or +not; or given a specific physical system, we'd like to identify its +state, say whether it is an ordered or disordered system (typical +situation in solid state physics); or classify the status of a +patient, whether she/he has a stroke or not and many other similar +situations. + +The most common situation we encounter when we apply logistic +regression is that of two possible outcomes, normally denoted as a +binary outcome, true or false, positive or negative, success or +failure etc. + +## Optimization and Deep learning + +Logistic regression will also serve as our stepping stone towards +neural network algorithms and supervised deep learning. For logistic +learning, the minimization of the cost function leads to a non-linear +equation in the parameters $\hat{\beta}$. The optimization of the +problem calls therefore for minimization algorithms. This forms the +bottle neck of all machine learning algorithms, namely how to find +reliable minima of a multi-variable function. This leads us to the +family of gradient descent methods. The latter are the working horses +of basically all modern machine learning algorithms. + +We note also that many of the topics discussed here on logistic +regression are also commonly used in modern supervised Deep Learning +models, as we will see later. + + + +## Basics + +We consider the case where the dependent variables, also called the +responses or the outcomes, $y_i$ are discrete and only take values +from $k=0,\dots,K-1$ (i.e. $K$ classes). + +The goal is to predict the +output classes from the design matrix $\hat{X}\in\mathbb{R}^{n\times p}$ +made of $n$ samples, each of which carries $p$ features or predictors. The +primary goal is to identify the classes to which new unseen samples +belong. + +Let us specialize to the case of two classes only, with outputs +$y_i=0$ and $y_i=1$. Our outcomes could represent the status of a +credit card user that could default or not on her/his credit card +debt. That is + +$$ +y_i = \begin{bmatrix} 0 & \mathrm{no}\\ 1 & \mathrm{yes} \end{bmatrix}. +$$ + +## Linear classifier + +Before moving to the logistic model, let us try to use our linear +regression model to classify these two outcomes. We could for example +fit a linear model to the default case if $y_i > 0.5$ and the no +default case $y_i \leq 0.5$. + +We would then have our +weighted linear combination, namely + + +
+ +$$ +\begin{equation} +\hat{y} = \hat{X}^T\hat{\beta} + \hat{\epsilon}, +\label{_auto1} \tag{1} +\end{equation} +$$ + +where $\hat{y}$ is a vector representing the possible outcomes, $\hat{X}$ is our +$n\times p$ design matrix and $\hat{\beta}$ represents our estimators/predictors. + +## Some selected properties + +The main problem with our function is that it takes values on the +entire real axis. In the case of logistic regression, however, the +labels $y_i$ are discrete variables. A typical example is the credit +card data discussed below here, where we can set the state of +defaulting the debt to $y_i=1$ and not to $y_i=0$ for one the persons +in the data set (see the full example below). + +One simple way to get a discrete output is to have sign +functions that map the output of a linear regressor to values $\{0,1\}$, +$f(s_i)=sign(s_i)=1$ if $s_i\ge 0$ and 0 if otherwise. +We will encounter this model in our first demonstration of neural networks. Historically it is called the "perceptron" model in the machine learning +literature. This model is extremely simple. However, in many cases it is more +favorable to use a ``soft" classifier that outputs +the probability of a given category. This leads us to the logistic function. + + +## The logistic function + +The perceptron is an example of a ``hard classification" model. We +will encounter this model when we discuss neural networks as +well. Each datapoint is deterministically assigned to a category (i.e +$y_i=0$ or $y_i=1$). In many cases, it is favorable to have a "soft" +classifier that outputs the probability of a given category rather +than a single value. For example, given $x_i$, the classifier +outputs the probability of being in a category $k$. Logistic regression +is the most common example of a so-called soft classifier. In logistic +regression, the probability that a data point $x_i$ +belongs to a category $y_i=\{0,1\}$ is given by the so-called logit function (or Sigmoid) which is meant to represent the likelihood for a given event, + +$$ +p(t) = \frac{1}{1+\mathrm \exp{-t}}=\frac{\exp{t}}{1+\mathrm \exp{t}}. +$$ + +Note that $1-p(t)= p(-t)$. + +## Examples of likelihood functions used in logistic regression and nueral networks + + +The following code plots the logistic function, the step function and other functions we will encounter from here and on. + +%matplotlib inline + +"""The sigmoid function (or the logistic curve) is a +function that takes any real number, z, and outputs a number (0,1). +It is useful in neural networks for assigning weights on a relative scale. +The value z is the weighted sum of parameters involved in the learning algorithm.""" + +import numpy +import matplotlib.pyplot as plt +import math as mt + +z = numpy.arange(-5, 5, .1) +sigma_fn = numpy.vectorize(lambda z: 1/(1+numpy.exp(-z))) +sigma = sigma_fn(z) + +fig = plt.figure() +ax = fig.add_subplot(111) +ax.plot(z, sigma) +ax.set_ylim([-0.1, 1.1]) +ax.set_xlim([-5,5]) +ax.grid(True) +ax.set_xlabel('z') +ax.set_title('sigmoid function') + +plt.show() + +"""Step Function""" +z = numpy.arange(-5, 5, .02) +step_fn = numpy.vectorize(lambda z: 1.0 if z >= 0.0 else 0.0) +step = step_fn(z) + +fig = plt.figure() +ax = fig.add_subplot(111) +ax.plot(z, step) +ax.set_ylim([-0.5, 1.5]) +ax.set_xlim([-5,5]) +ax.grid(True) +ax.set_xlabel('z') +ax.set_title('step function') + +plt.show() + +"""tanh Function""" +z = numpy.arange(-2*mt.pi, 2*mt.pi, 0.1) +t = numpy.tanh(z) + +fig = plt.figure() +ax = fig.add_subplot(111) +ax.plot(z, t) +ax.set_ylim([-1.0, 1.0]) +ax.set_xlim([-2*mt.pi,2*mt.pi]) +ax.grid(True) +ax.set_xlabel('z') +ax.set_title('tanh function') + +plt.show() + +## Two parameters + +We assume now that we have two classes with $y_i$ either $0$ or $1$. Furthermore we assume also that we have only two parameters $\beta$ in our fitting of the Sigmoid function, that is we define probabilities + +$$ +\begin{align*} +p(y_i=1|x_i,\hat{\beta}) &= \frac{\exp{(\beta_0+\beta_1x_i)}}{1+\exp{(\beta_0+\beta_1x_i)}},\nonumber\\ +p(y_i=0|x_i,\hat{\beta}) &= 1 - p(y_i=1|x_i,\hat{\beta}), +\end{align*} +$$ + +where $\hat{\beta}$ are the weights we wish to extract from data, in our case $\beta_0$ and $\beta_1$. + +Note that we used + +$$ +p(y_i=0\vert x_i, \hat{\beta}) = 1-p(y_i=1\vert x_i, \hat{\beta}). +$$ + + +## Maximum likelihood + +In order to define the total likelihood for all possible outcomes from a +dataset $\mathcal{D}=\{(y_i,x_i)\}$, with the binary labels +$y_i\in\{0,1\}$ and where the data points are drawn independently, we use the so-called [Maximum Likelihood Estimation](https://en.wikipedia.org/wiki/Maximum_likelihood_estimation) (MLE) principle. +We aim thus at maximizing +the probability of seeing the observed data. We can then approximate the +likelihood in terms of the product of the individual probabilities of a specific outcome $y_i$, that is + +$$ +\begin{align*} +P(\mathcal{D}|\hat{\beta})& = \prod_{i=1}^n \left[p(y_i=1|x_i,\hat{\beta})\right]^{y_i}\left[1-p(y_i=1|x_i,\hat{\beta}))\right]^{1-y_i}\nonumber \\ +\end{align*} +$$ + +from which we obtain the log-likelihood and our **cost/loss** function + +$$ +\mathcal{C}(\hat{\beta}) = \sum_{i=1}^n \left( y_i\log{p(y_i=1|x_i,\hat{\beta})} + (1-y_i)\log\left[1-p(y_i=1|x_i,\hat{\beta}))\right]\right). +$$ + +## The cost function rewritten + +Reordering the logarithms, we can rewrite the **cost/loss** function as + +$$ +\mathcal{C}(\hat{\beta}) = \sum_{i=1}^n \left(y_i(\beta_0+\beta_1x_i) -\log{(1+\exp{(\beta_0+\beta_1x_i)})}\right). +$$ + +The maximum likelihood estimator is defined as the set of parameters that maximize the log-likelihood where we maximize with respect to $\beta$. +Since the cost (error) function is just the negative log-likelihood, for logistic regression we have that + +$$ +\mathcal{C}(\hat{\beta})=-\sum_{i=1}^n \left(y_i(\beta_0+\beta_1x_i) -\log{(1+\exp{(\beta_0+\beta_1x_i)})}\right). +$$ + +This equation is known in statistics as the **cross entropy**. Finally, we note that just as in linear regression, +in practice we often supplement the cross-entropy with additional regularization terms, usually $L_1$ and $L_2$ regularization as we did for Ridge and Lasso regression. + +## Minimizing the cross entropy + +The cross entropy is a convex function of the weights $\hat{\beta}$ and, +therefore, any local minimizer is a global minimizer. + + +Minimizing this +cost function with respect to the two parameters $\beta_0$ and $\beta_1$ we obtain + +$$ +\frac{\partial \mathcal{C}(\hat{\beta})}{\partial \beta_0} = -\sum_{i=1}^n \left(y_i -\frac{\exp{(\beta_0+\beta_1x_i)}}{1+\exp{(\beta_0+\beta_1x_i)}}\right), +$$ + +and + +$$ +\frac{\partial \mathcal{C}(\hat{\beta})}{\partial \beta_1} = -\sum_{i=1}^n \left(y_ix_i -x_i\frac{\exp{(\beta_0+\beta_1x_i)}}{1+\exp{(\beta_0+\beta_1x_i)}}\right). +$$ + +## A more compact expression + +Let us now define a vector $\hat{y}$ with $n$ elements $y_i$, an +$n\times p$ matrix $\hat{X}$ which contains the $x_i$ values and a +vector $\hat{p}$ of fitted probabilities $p(y_i\vert x_i,\hat{\beta})$. We can rewrite in a more compact form the first +derivative of cost function as + +$$ +\frac{\partial \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}} = -\hat{X}^T\left(\hat{y}-\hat{p}\right). +$$ + +If we in addition define a diagonal matrix $\hat{W}$ with elements +$p(y_i\vert x_i,\hat{\beta})(1-p(y_i\vert x_i,\hat{\beta})$, we can obtain a compact expression of the second derivative as + +$$ +\frac{\partial^2 \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}\partial \hat{\beta}^T} = \hat{X}^T\hat{W}\hat{X}. +$$ + +## Extending to more predictors + +Within a binary classification problem, we can easily expand our model to include multiple predictors. Our ratio between likelihoods is then with $p$ predictors + +$$ +\log{ \frac{p(\hat{\beta}\hat{x})}{1-p(\hat{\beta}\hat{x})}} = \beta_0+\beta_1x_1+\beta_2x_2+\dots+\beta_px_p. +$$ + +Here we defined $\hat{x}=[1,x_1,x_2,\dots,x_p]$ and $\hat{\beta}=[\beta_0, \beta_1, \dots, \beta_p]$ leading to + +$$ +p(\hat{\beta}\hat{x})=\frac{ \exp{(\beta_0+\beta_1x_1+\beta_2x_2+\dots+\beta_px_p)}}{1+\exp{(\beta_0+\beta_1x_1+\beta_2x_2+\dots+\beta_px_p)}}. +$$ + +## Including more classes + +Till now we have mainly focused on two classes, the so-called binary +system. Suppose we wish to extend to $K$ classes. Let us for the sake +of simplicity assume we have only two predictors. We have then +following model + +1 +5 + +< +< +< +! +! +M +A +T +H +_ +B +L +O +C +K + +$$ +\log{\frac{p(C=2\vert x)}{p(K\vert x)}} = \beta_{20}+\beta_{21}x_1, +$$ + +and so on till the class $C=K-1$ class + +$$ +\log{\frac{p(C=K-1\vert x)}{p(K\vert x)}} = \beta_{(K-1)0}+\beta_{(K-1)1}x_1, +$$ + +and the model is specified in term of $K-1$ so-called log-odds or +**logit** transformations. + + +## More classes + +In our discussion of neural networks we will encounter the above again +in terms of a slightly modified function, the so-called **Softmax** function. + +The softmax function is used in various multiclass classification +methods, such as multinomial logistic regression (also known as +softmax regression), multiclass linear discriminant analysis, naive +Bayes classifiers, and artificial neural networks. Specifically, in +multinomial logistic regression and linear discriminant analysis, the +input to the function is the result of $K$ distinct linear functions, +and the predicted probability for the $k$-th class given a sample +vector $\hat{x}$ and a weighting vector $\hat{\beta}$ is (with two +predictors): + +$$ +p(C=k\vert \mathbf {x} )=\frac{\exp{(\beta_{k0}+\beta_{k1}x_1)}}{1+\sum_{l=1}^{K-1}\exp{(\beta_{l0}+\beta_{l1}x_1)}}. +$$ + +It is easy to extend to more predictors. The final class is + +$$ +p(C=K\vert \mathbf {x} )=\frac{1}{1+\sum_{l=1}^{K-1}\exp{(\beta_{l0}+\beta_{l1}x_1)}}, +$$ + +and they sum to one. Our earlier discussions were all specialized to +the case with two classes only. It is easy to see from the above that +what we derived earlier is compatible with these equations. + +To find the optimal parameters we would typically use a gradient +descent method. Newton's method and gradient descent methods are +discussed in the material on [optimization +methods](https://compphysics.github.io/MachineLearning/doc/pub/Splines/html/Splines-bs.html). + + + + +## A simple classification problem + +import numpy as np +from sklearn import datasets, linear_model +import matplotlib.pyplot as plt + + +def generate_data(): + np.random.seed(0) + X, y = datasets.make_moons(200, noise=0.20) + return X, y + + +def visualize(X, y, clf): + plot_decision_boundary(lambda x: clf.predict(x), X, y) + +def plot_decision_boundary(pred_func, X, y): + # Set min and max values and give it some padding + x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5 + y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5 + h = 0.01 + # Generate a grid of points with distance h between them + xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) + # Predict the function value for the whole gid + Z = pred_func(np.c_[xx.ravel(), yy.ravel()]) + Z = Z.reshape(xx.shape) + # Plot the contour and training examples + plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral) + plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Spectral) + plt.show() + + +def classify(X, y): + clf = linear_model.LogisticRegressionCV() + clf.fit(X, y) + return clf + + +def main(): + X, y = generate_data() + # visualize(X, y) + clf = classify(X, y) + visualize(X, y, clf) + +if __name__ == "__main__": + main() + +## The Credit Card example +Here we use the the [credit card data](https://archive.ics.uci.edu/ml/datasets/default+of+credit+card+clients). +The data are from an extensive database from Taiwan and include more than ten predictors. + +For categorical data -Scikit-Learn- provides a so-called **one-hot encoder**. +This is called one-hot +encoding, because only one attribute will be equal to 1 (hot), while the others will be 0 (cold). +**Scikit-Learn** provides a OneHotEncoder encoder to convert integer categorical values into one-hot + +from sklearn.preprocessing import OneHotEncoder +encoder = OneHotEncoder() + +## How to read the Credit Card data + +import pandas as pd +import os +import numpy as np + + +from sklearn.model_selection import train_test_split +from sklearn.preprocessing import OneHotEncoder +from sklearn.compose import ColumnTransformer +from sklearn.preprocessing import StandardScaler, OneHotEncoder +from sklearn.metrics import confusion_matrix, accuracy_score, roc_auc_score + +# Trying to set the seed +np.random.seed(0) +import random +random.seed(0) + +# Reading file into data frame +cwd = os.getcwd() +filename = cwd + '/default of credit card clients.xls' +nanDict = {} +df = pd.read_excel(filename, header=1, skiprows=0, index_col=0, na_values=nanDict) + +df.rename(index=str, columns={"default payment next month": "defaultPaymentNextMonth"}, inplace=True) + +# Features and targets +X = df.loc[:, df.columns != 'defaultPaymentNextMonth'].values +y = df.loc[:, df.columns == 'defaultPaymentNextMonth'].values + +# Categorical variables to one-hot's +onehotencoder = OneHotEncoder(categories="auto") + +X = ColumnTransformer( + [("", onehotencoder, [3]),], + remainder="passthrough" +).fit_transform(X) + +y.shape + +# Train-test split +trainingShare = 0.5 +seed = 1 +XTrain, XTest, yTrain, yTest=train_test_split(X, y, train_size=trainingShare, \ + test_size = 1-trainingShare, + random_state=seed) + +# Input Scaling +sc = StandardScaler() +XTrain = sc.fit_transform(XTrain) +XTest = sc.transform(XTest) + +# One-hot's of the target vector +Y_train_onehot, Y_test_onehot = onehotencoder.fit_transform(yTrain), onehotencoder.fit_transform(yTest) + +# Remove instances with zeros only for past bill statements or paid amounts +''' +df = df.drop(df[(df.BILL_AMT1 == 0) & + (df.BILL_AMT2 == 0) & + (df.BILL_AMT3 == 0) & + (df.BILL_AMT4 == 0) & + (df.BILL_AMT5 == 0) & + (df.BILL_AMT6 == 0) & + (df.PAY_AMT1 == 0) & + (df.PAY_AMT2 == 0) & + (df.PAY_AMT3 == 0) & + (df.PAY_AMT4 == 0) & + (df.PAY_AMT5 == 0) & + (df.PAY_AMT6 == 0)].index) +''' +df = df.drop(df[(df.BILL_AMT1 == 0) & + (df.BILL_AMT2 == 0) & + (df.BILL_AMT3 == 0) & + (df.BILL_AMT4 == 0) & + (df.BILL_AMT5 == 0) & + (df.BILL_AMT6 == 0)].index) + +df = df.drop(df[(df.PAY_AMT1 == 0) & + (df.PAY_AMT2 == 0) & + (df.PAY_AMT3 == 0) & + (df.PAY_AMT4 == 0) & + (df.PAY_AMT5 == 0) & + (df.PAY_AMT6 == 0)].index) + +from sklearn.linear_model import LogisticRegression +from sklearn.model_selection import GridSearchCV + +lambdas=np.logspace(-5,7,13) +parameters = [{'C': 1./lambdas, "solver":["lbfgs"]}]#*len(parameters)}] +scoring = ['accuracy', 'roc_auc'] +logReg = LogisticRegression() +gridSearch = GridSearchCV(logReg, parameters, cv=5, scoring=scoring, refit='roc_auc') \ No newline at end of file diff --git a/doc/src/LectureNotes/_build/jupyter_execute/logistic_42_0.png b/doc/src/LectureNotes/_build/jupyter_execute/logistic_42_0.png new file mode 100644 index 0000000000000000000000000000000000000000..65260025b4015b8a4fb5e0cde892a346d6276609 GIT binary patch literal 23100 zcmce;WmFtZ)GbWV!Ge2mcL)|3B)Cfk_W;4&-Q9yb1j0aYcMlfa-Q8UV=g#wf>s{Z^ z`|tKzBh}M0T~&R~seSg@J&`I(( }C@?TE=&~{rAQ+erKG63M07U5XMU8$n^ab8o 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/logistic_7_0.png b/doc/src/LectureNotes/_build/jupyter_execute/logistic_7_0.png new file mode 100644 index 0000000000000000000000000000000000000000..cf1468b14efd1c0143242ed9bd28bcdf7f8982ab GIT binary patch literal 9911 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 DQG!wq literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/logistic_7_1.png b/doc/src/LectureNotes/_build/jupyter_execute/logistic_7_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d777fd705cd01426da161693c529ecf9af8200c0 GIT binary patch literal 6754 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/logistic_7_2.png b/doc/src/LectureNotes/_build/jupyter_execute/logistic_7_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0d02b02c686c95fab81b27d2efec8f3c25deb3a3 GIT binary patch literal 10184 zcmaL72{e@N|2IB%$`V4-*qTUWn~+^KGLj|AlCnf2+4p@*VUR7`*s~^CGTE0INwz_D zgJB{&Lx>p5|DMn1|2@y|`+LrLoHLkfec$)>dcD^RX`rXYa^~V05D3Jg4Tl+mKvb`Q z4>uz{(Bi<7Fb({n^|-D5kP-L^WVDR}zB9SP%{)M$vmBHU)es^02xz?NscGtIA^5`6(^W}I>i_ghy13g(6>KX_fk`(t^Bci;u`$Do&X zN=8oEanK!4{*s_#=!Q|r*tPQP&qdk(Hjl48I%`-S8Y(DAfBPI`odzT1XVTO`pMaf> z&CP}ckE9^U+5I&y3%kvhF(q;xqatR#X5V6J8qCh#{lv_gK~Pxur=jpU_HNgEw8Fx? zdPofzq+N_XD$4fe6>9cG<`S47?*MKZC%J6>6p9u=nPsEOSJoz!*2xNp+C24rF_e(# zItbREifUn*ULi@nt|ISKd4#!1PRmA!ek*vBdbSL~5=pRzgE*k`My3$Fr{Dl(rpRJQ+h?2xn ztJ#q8_9`3F6po%s3N%1v6M8n3hj6S&%ni+DAfveFp__~r3s^r5_N^9HuNj8>R26is z&IqG`3zfDPfNjr`TDu5*(=ANCpmgs;sb5$lQtNkuIZ_0<0#=*5<)gkzY6@GB>6stI zx4KZX){`;yP`$H#Dxm;<}xRm!2k|5nCAsM<-vCt&?#5*cn1FPLLU#+Db*)hZ|agz zsongu!s-0?FAM(zNa3WP97&8g#|N%Py^DH1eYjQ!L<(Xr0`+vJVx1mZ#@IvBg{cS& z4|yP!g#XI8-r-qL;Ap{@oHu0*6v$6IredR8;GwR|z`tRN)`r3S1%;4Uf(f-&;|E!R zzeufe>WB>d3o8)=-s$th%o41t(NS>ql}fx;Cr1n7@XM-|`KJwZR2z<)Lp8$+8%p(j zzB4|)p#ToKZESp)eF*OiF4ZqBs5^e?@ghbeQ<*)!LaX0bQO^^v>QB?5yon^iBd&Et zJa}W~I90n*)fB&OI%A0x9DA!e)3FCtXjG?Gp_aD!&TQG_?SuoDn|^+!=&`sf*#k+9 zJ2uQU)UrEPni=WY%ed=3a-+Iz@21Omj@9PiyLEN{q;MA9FPiz7ezUf-oFfce=sO#=EMbG0p1|+wRp}-SX~ebXT8zHM+X1 zPqtdQ71z}xTaD}Lr-rtNu1mB_;{<$h@y%m@ekDHm&!`DXHDHf-!4Gf7EY;JA^Ui(%KfUtmWq#dou6*2bcA{UlBTph^ zcx3W>1VIa5wRDxQEWX-)Q)cgy;(?xDYFqkynhWZVg6IK(wq+r@WafUmUwMHMJPSro z(mSid{Fo)XghZ8(3W_tF%$n^+h*jCqGi?8GN`r1DJs?=j zTwT#YYC!JPD`TFR^r;`M>SmZV*%;j(cYVekz9ARn;L(X!kbceL-ehslG-vRBs=AliVjD|}z$BJguK zW=z`MK<)Hk34Os*MH=WsQu!xV>qB#;nv*=}d0vB)Ac{{FM3V0A2`G2J z(sbzR?Vc0O%`Sxqs^$ZaAfk7pZW|@ga`(8@IQR%9e&Z5EwfMbI;te8c`g9j@ja7c@ zuN}gDFkQ$x5+VlEq7}9$E>&*)EFIr>AEQg9)mGr5WU)7OT*`@Fh2I`eHn+;+Bk@!G9zjyl*Sb{y?B zLQ4-JGpqx9B)K|!=178y%+(ENDS7<2j;B_}!%#*bM_vRFp9Lb!9!t0P#k`WWHoFZ+ zPptsbubo=Qy7W0_qpsiAP!YD@V32y`R{t4Q*_ZjTQ|I38^rp^zDue*T$v46#^Oy?* zqLIw=Y~+}BOU&ogpvlQ*Iw%*FO{2mV*hVn<{-WueDWid*p<%7>@458fH{|6FA3i*9 zlAH8EX-_9eDL_k4^KVbjyW|vGkMS=jnObo5vXLK8b9;Jw#~aA8&@ren^> zYQ$E(RW+9Bu?{;`P+&t-P-;qwpIxey<&3@AH64l~x7(BoX>HTN)Q;?5Qk*Fvul)au zh1T%TE6cIpxl>71gplvXZHJnNUIB}v@aKrfSoB6MR|Y`?wZn{~@{UVhkycMdLyXd(a$lTB-@v9*>KOC|X>i}Qu=?({R#VQNR z@VB%{oyXCl zisL{crwZCyDmO>nKq_{dyUkIXFT%xZrCu?9Gj^y7VmNUHPXKqn%$K-yA2IiJa8_9n0(_Y4URq zlDo{X;Ni6rRdpwknW8HoaoI1dH8ojwO5O^InqxACLUu8_5N(No9nf{Be%)cuB-6t* zU~ZCWqrJLKB&*eAJ)kv&c|`y(1LrJ_J_9Ygfex@q9*{xXAZmqtgIY?QG-ca9b6#&Y z^h@_kiyfl%7}}i6`SuN09Tpkdpdq)Ffx7Otub}+!xTR@!q_-BJPhDHp4+gKz(AR?O zTC~uxdp?!!`v@x;X^g;RbRi4NS?zQVnev~eR{BkUURoK)`lI_CFITbst!{ErjHyk> z-?kFc(AH)WH~tjGd*8;!rsR341ejc;rU`a&Gj>*Pn`TmM-W}2j;xx_LMc-p-*)S63 zxb=xjceARMKb=T=i;!pYrN6piJ+*vyUn^7#gutc$^jO3pd2!KP;>({TQi^OaBPAa! zE6R%d6t;PG5bpSf_Ct}Xn=5uH7yYM7V9YF!Xy&KN<1ZhYoGMSZ%nG5@Izl){MAhtM&KE9i zyOPI~z75;wJftKBM{jdv)JH~4w~XRQ^r=*Mtgz4QGlUP_0vnA0jhY>z9IH*__VE!! zO!?YyXmeFQsz*i?>J3ofIe-ZxeZ91qbTob2)NYJ2CmRfr{aFbmu;nvCi| zq_U{c;^;nxjpH1VO&EN|q#p5@WMPL;ppFNjCsWe?wPxDJm75jwwmN(!*_ANCZqffm znIJl!)9|Koy0WrRH>Qb7c#rRMt?Ooh?=}2|BPkF^m?wkK@l*=+_G zCH>5B#fe@Xt1FR#bOIOM;HExHb?@H29&Ra%OVFI}-|t38N6)Pq$=>S>er}lC`gs*n z&KjZ+puzZ{L+V|yap|WfwUo59N{@YByYuw{Po#+R*n$nf@STK+di92tW4FAgzSC|l zf%w848mH{c%uqgvgYAXv)S_z7b(7-V(w`4wazkb-k8?xNHK#Q967C(_32kw9 zBvCGJgc85;yPmBo45EW7^Z1^rClKmtrYv3{!u6zR#%VG+&%J{W`4&~D9%V`Nh%f^R zHZgs!^<@{qyl>sviZ_8p!hQcb!rR2)M0(51>gLvF8z<_qs*>I#Y89|!FIDg=X`qAe z9bDEAz-?Nta_p<=^{PAUNHG!&L?r2i6@hD2r=1VtYIH3PdyT{&_i4 zPZbmatSS{L$7mk@Sk2aQjl?gl0qn2<*b%fm3a&Z-3*ol%kDeW(7#FoKA3vt@az=L# z3?5MZJL*^0Z^Vq!4{XX3S0p$Zo(53yuqz{baO$~dutrigps)ofg3-968*JBq0D}GF z%?X%2@_Nn78JUy_4O(R7gi4zQke{h`abx))%uGpLP>f=k z+l(J+=BnrI&?H?0WaM!48fBMM_eo#mNlFHon55BZo>k7UiYhvI19<}w8uFvIQGVKb z43aI7F!Ij;F0IL~-u}624>?RiVccs7HMFS>cMbPx2uFJRz!|Ye$U96>w+wG;?-f}SDWf|%T z$1x(PQ%DvIq(1C3tKdkbov>Wrk!w~TP;W`r=84Hw-X>snK%Vo-??MMIoL#rCvtYrk z-pc;0>UcI3bsge=FH12{XYS6F4RsBXJ!1!^p@Q}=8LibDYMdbCPDt>SL1fo9qoEgvRT;Sh=p)O#K*AT z8)KbRWPj5VQ76r$8RVkz%m=ma$<|8R5~ZU5ivV}BuV72U%OWdife7-1zm`kef6WIB zu;sqk7#BXte~$m6`@S)>iO-bYmL_I8C*oq{Pix*Ph$NoW`r83| zq)15^co9(^wDn}ee9OI!IsoPPuz~$AhSUH zT^ikCfIJ6G%D0t21TA~#m}LMiW&m8=9;0^{5w36I7$KUJZu>v|kBj3j;u5GD02MzZ zP8sszrIQVzLaAcJM(oNP${_3c9Ge?8ck2x~`?SvhDj3=R@#ABhRdGKX{6Aj-2)?J; z`O2zUI1a$hUwerG@|0pPl7KOd6q9fTI8aZDEzkjwx&k1zkOu(65E1~nRF;~09>b`P z5@p;Q_4S*vyiZDzix3vd0$&BZN8Ep>3o-M403iDZ5GSkXU7u5PYg1gASPd-x z(yEgEf5j=}7mkjFA3l6gAZWi_nW%iYKD;JZ9%vWDx!)&YbD=gj~gnwdhjhNhcf4Letv}6yJ+5o68kF|}YN0qBi?Fk>3Ru_l$WZZRbwtYwuHO4odkwjL zmi@PVagF33-fLc@;O|>;s14dx5JNDL6rZI_&T|y1I+s^iSm^kBu0zJ=<-a5v54vXz zkjQp@_&q24iT{GOn#`4WKGB67FS6~rk#M06M)tG*!otFuQfv>bAs|hPNN42{J03`U z5!vXK9r!(+czns~va4>@Ou-)5^7-@UGpL2$G@r+*Jwu-@yC+HnDyDyOwr-1ukX>ym zCq->?IfTIE6l4(fn1Af%NES&pw#jnb3`MC}3%0U$TYP1}1m)K1x08hsne=jqQ|pR>%a89y1bo7SSGU+ruH z-jN*Be%3AVTjUi(SOcOKoX+>j24RD9v^OZB1yqeZwL_?76WQZw4G&X0ns1Lb}{CHl>|t#DqC9 z@HO}yrc(~x2jB%P@{N0SEStqgm>^0EI5i9NZ+_nGYBTD7kd8NgKqNo3nal{8FP|~% z4LdZN4n*m3=pYP*6JqyA4qMJIKKCFzR82CJ1;}Ch#YWWp?;Kj%K*`O2yVxdGIeK96ly6wF!C z)b))FhT6(sq3$--|1_ifAedDkqd0&8f))c-Q}WJ#V~P2kn<>S2$2#~4v^=U%1sDle ze~Qj59%HQQ%c2Aq?}0i*EG5$%Z-MV7OI~PuV?!Saj)N~#9!90fT0o9PSE6~b8F&qp zSPO_)*q0*3%hHwnrA^Y}7y;1>^MH!lb3aWMN{%kZp}!qR5mSuvKnHC-*S<505yR8s zSOIUi5U`HC^9vi1W`K!4UCY?%>Kh9QN*ta$bowu2hI)qJn`~L_ThGZ`r-DvRRXAFx z{EqVcPB<8=uDhV@397TV5K8nx?hoV#gz*qs&il%khVb}Qy6&%#)WBD1^g#M`W!se{ zy@Vk9&OKpd72sXV8wzrvX9@Poq4s!uWn~9XQADH*gGBc zotKU@v&Lg^Yqyur>W0CfCgA|<(sVVK(UH_0+}qRB4DC&m+WhiQ#^JC)-!kBkCD(Ja zGSKMHpxSI&fd5I>^f1~IH6dzM-uYMW?fy+arYb>G3y{i`Cc%6~TEZ5wA+>nISf$wS z3!C|DJ@6pMv?Wu2Am;VUV-ETr)kfX7izx9;-qscKrXy6CBo=>pxbZyyDXAK zK7j@pXD@O$G-puMzMXI|WhZa+)aRAuQHNs$^N)lCxc+jK#?bf6;$^;wb~RFivn*7E zn}YcspuYEo0v7&2(sec8l@}yQjNrN}%rF|*p;>pdv)=AEeeqkq9!y~1MKd!cDM5F6 zfF?ywGXb$vJmtmp((wYp{`7PW8D4OL3s+??TJ{rpGd^l4kEe^)I070_p>JUaBf08=^F zBxNk?tHBz7J-w~QNari74y2sY?e3H6q=-E|_+$KWO-~jmX&kj5#qd5T6c2}S=pr?e z?m^~M>J~t3*DGy%Tm6fZndgwocE4xN-hBbx#xk}4?QM96 z^67q2E%)d(90MFd@Gy{m+-bFGZY)SmnPUCCx54@4;4bB4_ryirdvU+-OY)xgP8a3{ z)bQcA-^IosS;2N|C;l_jmII3|oxV1kGC&yy1f*i5$Mtaw{d^U~>fd+d9%R9z=I+rV z_S}e6R@bD53FF>|oAg9w4f(APO}W8cK{8t&R>E8ITXrN19{u}6`@kYVwsXTd<$Sy9z1^%$GZP`;UPb8B$hD@huwX#K7t#AdJ8jb z+TPhiPrmNwP4;-_9r&*5oL;7KB4bV>9lGuZx4jWwOseHvU88bd#8<_nYC3nMbP|Jjb#AC79)aYD-YgW)PG4m(rxLNbJ$82A)Nbgh(KTB!v$`9Oj_wPTYT zanCn3-Kd(+Q$Q`~UrpRc$lbVQ^_i8&e|vwkiLV|gArEcz0+u9eDf+D5S2y$353Qh&s}0M~4!B-Afn(uAEo(X(jn7zUFC9NZ{)gbw9_EGY@{ zsb`2;X5}21ELtiPm1)+aKjea#l||R#)>)tdlemZou#pQ2&(e0<&_mQaNJb#$`y3lk zPAtLktrxuSBcCDgh`mPC@wIhRjt(49%$EwEEh$IHHzPf#&Jd>GF0j+|=+|I4bvDB#>frOteyT4KZ&aPKss}DFzg#_=e|+)ouIt_z zA`iklrvzJ5P1s#4!~QwudvN40tBXVhyJeZmZwLz#LnvVqd^ zwu15JbD#epC^V22Nos=xQI6v_%ba!XJmt1KF|E{r69oO&VEs#t8TYPSG24}j>kKU? zoooPm(E4Bo2%U78J9Qw8PB=tkOSP&KS4^8(aYbn~B))K+{gwhZ6>uL0`h!^l{u6U! zn6MujNIW3I?NXX%xt!s41C(^=?!#+%Y`!;e9v}Cq>u54@j(4gy%1Es@zNHs>09u3b zan)B5E|X_6t)M~5x6G0lJRW6m#B2mf=c?BC!2xmyO@y#b=e|4{aS e$Vv(US(`Y0QsPwn0NlC*X>01iDsEf7`u_lF*lZdA literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/latex/reports/logistic.log b/doc/src/LectureNotes/_build/latex/reports/logistic.log new file mode 100644 index 000000000..b718efedf --- /dev/null +++ b/doc/src/LectureNotes/_build/latex/reports/logistic.log @@ -0,0 +1,151 @@ +Traceback (most recent call last): + File "/Users/MortenImac/anaconda3/lib/python3.6/site-packages/jupyter_cache/executors/utils.py", line 56, in single_nb_execution + record_timing=False, + File "/Users/MortenImac/anaconda3/lib/python3.6/site-packages/nbclient/client.py", line 1082, in execute + return NotebookClient(nb=nb, resources=resources, km=km, **kwargs).execute() + File "/Users/MortenImac/anaconda3/lib/python3.6/site-packages/nbclient/util.py", line 74, in wrapped + return just_run(coro(*args, **kwargs)) + File "/Users/MortenImac/anaconda3/lib/python3.6/site-packages/nbclient/util.py", line 53, in just_run + return loop.run_until_complete(coro) + File "/Users/MortenImac/anaconda3/lib/python3.6/asyncio/base_events.py", line 484, in run_until_complete + return future.result() + File "/Users/MortenImac/anaconda3/lib/python3.6/site-packages/nbclient/client.py", line 536, in async_execute + cell, index, execution_count=self.code_cells_executed + 1 + File "/Users/MortenImac/anaconda3/lib/python3.6/site-packages/nbclient/client.py", line 827, in async_execute_cell + self._check_raise_for_error(cell, exec_reply) + File "/Users/MortenImac/anaconda3/lib/python3.6/site-packages/nbclient/client.py", line 735, in _check_raise_for_error + raise CellExecutionError.from_cell_and_msg(cell, exec_reply['content']) +nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell: +------------------ +import pandas as pd +import os +import numpy as np + + +from sklearn.model_selection import train_test_split +from sklearn.preprocessing import OneHotEncoder +from sklearn.compose import ColumnTransformer +from sklearn.preprocessing import StandardScaler, OneHotEncoder +from sklearn.metrics import confusion_matrix, accuracy_score, roc_auc_score + +# Trying to set the seed +np.random.seed(0) +import random +random.seed(0) + +# Reading file into data frame +cwd = os.getcwd() +filename = cwd + '/default of credit card clients.xls' +nanDict = {} +df = pd.read_excel(filename, header=1, skiprows=0, index_col=0, na_values=nanDict) + +df.rename(index=str, columns={"default payment next month": "defaultPaymentNextMonth"}, inplace=True) + +# Features and targets +X = df.loc[:, df.columns != 'defaultPaymentNextMonth'].values +y = df.loc[:, df.columns == 'defaultPaymentNextMonth'].values + +# Categorical variables to one-hot's +onehotencoder = OneHotEncoder(categories="auto") + +X = ColumnTransformer( + [("", onehotencoder, [3]),], + remainder="passthrough" +).fit_transform(X) + +y.shape + +# Train-test split +trainingShare = 0.5 +seed = 1 +XTrain, XTest, yTrain, yTest=train_test_split(X, y, train_size=trainingShare, \ + test_size = 1-trainingShare, + random_state=seed) + +# Input Scaling +sc = StandardScaler() +XTrain = sc.fit_transform(XTrain) +XTest = sc.transform(XTest) + +# One-hot's of the target vector +Y_train_onehot, Y_test_onehot = onehotencoder.fit_transform(yTrain), onehotencoder.fit_transform(yTest) + +# Remove instances with zeros only for past bill statements or paid amounts +''' +df = df.drop(df[(df.BILL_AMT1 == 0) & + (df.BILL_AMT2 == 0) & + (df.BILL_AMT3 == 0) & + (df.BILL_AMT4 == 0) & + (df.BILL_AMT5 == 0) & + (df.BILL_AMT6 == 0) & + (df.PAY_AMT1 == 0) & + (df.PAY_AMT2 == 0) & + (df.PAY_AMT3 == 0) & + (df.PAY_AMT4 == 0) & + (df.PAY_AMT5 == 0) & + (df.PAY_AMT6 == 0)].index) +''' +df = df.drop(df[(df.BILL_AMT1 == 0) & + (df.BILL_AMT2 == 0) & + (df.BILL_AMT3 == 0) & + (df.BILL_AMT4 == 0) & + (df.BILL_AMT5 == 0) & + (df.BILL_AMT6 == 0)].index) + +df = df.drop(df[(df.PAY_AMT1 == 0) & + (df.PAY_AMT2 == 0) & + (df.PAY_AMT3 == 0) & + (df.PAY_AMT4 == 0) & + (df.PAY_AMT5 == 0) & + (df.PAY_AMT6 == 0)].index) + +from sklearn.linear_model import LogisticRegression +from sklearn.model_selection import GridSearchCV + +lambdas=np.logspace(-5,7,13) +parameters = [{'C': 1./lambdas, "solver":["lbfgs"]}]#*len(parameters)}] +scoring = ['accuracy', 'roc_auc'] +logReg = LogisticRegression() +gridSearch = GridSearchCV(logReg, parameters, cv=5, scoring=scoring, refit='roc_auc') +------------------ + +--------------------------------------------------------------------------- +ImportError Traceback (most recent call last) + in  + 19 filename = cwd + '/default of credit card clients.xls' + 20 nanDict = {} +---> 21 df = pd.read_excel(filename, header=1, skiprows=0, index_col=0, na_values=nanDict) + 22  + 23 df.rename(index=str, columns={"default payment next month": "defaultPaymentNextMonth"}, inplace=True) + +~/anaconda3/lib/python3.6/site-packages/pandas/io/excel/_base.py in read_excel(io, sheet_name, header, names, index_col, usecols, squeeze, dtype, engine, converters, true_values, false_values, skiprows, nrows, na_values, keep_default_na, verbose, parse_dates, date_parser, thousands, comment, skipfooter, convert_float, mangle_dupe_cols, **kwds) + 302  + 303 if not isinstance(io, ExcelFile): +--> 304 io = ExcelFile(io, engine=engine) + 305 elif engine and engine != io.engine: + 306 raise ValueError( + +~/anaconda3/lib/python3.6/site-packages/pandas/io/excel/_base.py in __init__(self, io, engine) + 822 self._io = stringify_path(io) + 823  +--> 824 self._reader = self._engines[engine](self._io) + 825  + 826 def __fspath__(self): + +~/anaconda3/lib/python3.6/site-packages/pandas/io/excel/_xlrd.py in __init__(self, filepath_or_buffer) + 18 """ + 19 err_msg = "Install xlrd >= 1.0.0 for Excel support" +---> 20 import_optional_dependency("xlrd", extra=err_msg) + 21 super().__init__(filepath_or_buffer) + 22  + +~/anaconda3/lib/python3.6/site-packages/pandas/compat/_optional.py in import_optional_dependency(name, extra, raise_on_missing, on_version) + 90 except ImportError: + 91 if raise_on_missing: +---> 92 raise ImportError(msg) from None + 93 else: + 94 return None + +ImportError: Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0 for Excel support Use pip or conda to install xlrd. +ImportError: Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0 for Excel support Use pip or conda to install xlrd. +