From a02f7cd77269b3b06ca9096327832beb286ab4fe Mon Sep 17 00:00:00 2001 From: Morten Hjorth-Jensen Date: Sun, 8 Sep 2024 21:22:17 +0200 Subject: [PATCH] updating jupyter-book --- .../_build/.doctrees/environment.pickle | Bin 279304 -> 307233 bytes .../_build/.doctrees/exercisesweek37.doctree | Bin 0 -> 20811 bytes .../_build/.doctrees/intro.doctree | Bin 52923 -> 52966 bytes .../_build/.doctrees/week37.doctree | Bin 0 -> 716097 bytes .../_build/html/_images/week37_144_0.png | Bin 0 -> 22451 bytes .../_build/html/_images/week37_160_1.png | Bin 0 -> 43341 bytes .../_build/html/_images/week37_162_4.png | Bin 0 -> 29329 bytes .../_build/html/_images/week37_165_1.png | Bin 0 -> 62168 bytes .../_build/html/_images/week37_169_0.png | Bin 0 -> 26449 bytes .../_build/html/_images/week37_171_8.png | Bin 0 -> 29882 bytes .../_build/html/_images/week37_174_1.png | Bin 0 -> 22705 bytes .../_build/html/_images/week37_176_1.png | Bin 0 -> 33782 bytes .../_build/html/_images/week37_208_1.png | Bin 0 -> 33784 bytes .../html/_sources/exercisesweek37.ipynb | 268 ++ .../_build/html/_sources/week37.ipynb | 3533 +++++++++++++++ .../_build/html/exercisesweek37.html | 573 +++ doc/LectureNotes/_build/html/genindex.html | 10 + doc/LectureNotes/_build/html/intro.html | 10 + doc/LectureNotes/_build/html/objects.inv | Bin 987 -> 1011 bytes doc/LectureNotes/_build/html/search.html | 10 + doc/LectureNotes/_build/html/searchindex.js | 2 +- doc/LectureNotes/_build/html/week37.html | 3026 +++++++++++++ .../jupyter_execute/exercisesweek37.ipynb | 268 ++ .../jupyter_execute/exercisesweek37.txt | 0 .../_build/jupyter_execute/week37.ipynb | 4011 +++++++++++++++++ .../_build/jupyter_execute/week37.py | 1850 ++++++++ .../_build/jupyter_execute/week37_144_0.png | Bin 0 -> 22451 bytes .../_build/jupyter_execute/week37_160_1.png | Bin 0 -> 43341 bytes .../_build/jupyter_execute/week37_162_4.png | Bin 0 -> 29329 bytes .../_build/jupyter_execute/week37_165_1.png | Bin 0 -> 62168 bytes .../_build/jupyter_execute/week37_169_0.png | Bin 0 -> 26449 bytes .../_build/jupyter_execute/week37_171_8.png | Bin 0 -> 29882 bytes .../_build/jupyter_execute/week37_174_1.png | Bin 0 -> 22705 bytes .../_build/jupyter_execute/week37_176_1.png | Bin 0 -> 33782 bytes .../_build/jupyter_execute/week37_208_1.png | Bin 0 -> 33784 bytes doc/LectureNotes/_toc.yml | 2 + doc/LectureNotes/week37.ipynb | 3533 +++++++++++++++ 37 files changed, 17095 insertions(+), 1 deletion(-) create mode 100644 doc/LectureNotes/_build/.doctrees/exercisesweek37.doctree create mode 100644 doc/LectureNotes/_build/.doctrees/week37.doctree create mode 100644 doc/LectureNotes/_build/html/_images/week37_144_0.png create mode 100644 doc/LectureNotes/_build/html/_images/week37_160_1.png create mode 100644 doc/LectureNotes/_build/html/_images/week37_162_4.png create mode 100644 doc/LectureNotes/_build/html/_images/week37_165_1.png create mode 100644 doc/LectureNotes/_build/html/_images/week37_169_0.png create mode 100644 doc/LectureNotes/_build/html/_images/week37_171_8.png create mode 100644 doc/LectureNotes/_build/html/_images/week37_174_1.png create mode 100644 doc/LectureNotes/_build/html/_images/week37_176_1.png create mode 100644 doc/LectureNotes/_build/html/_images/week37_208_1.png create mode 100644 doc/LectureNotes/_build/html/_sources/exercisesweek37.ipynb create mode 100644 doc/LectureNotes/_build/html/_sources/week37.ipynb create mode 100644 doc/LectureNotes/_build/html/exercisesweek37.html create mode 100644 doc/LectureNotes/_build/html/week37.html create mode 100644 doc/LectureNotes/_build/jupyter_execute/exercisesweek37.ipynb create mode 100644 doc/LectureNotes/_build/jupyter_execute/exercisesweek37.txt create mode 100644 doc/LectureNotes/_build/jupyter_execute/week37.ipynb create mode 100644 doc/LectureNotes/_build/jupyter_execute/week37.py create mode 100644 doc/LectureNotes/_build/jupyter_execute/week37_144_0.png create mode 100644 doc/LectureNotes/_build/jupyter_execute/week37_160_1.png create mode 100644 doc/LectureNotes/_build/jupyter_execute/week37_162_4.png create mode 100644 doc/LectureNotes/_build/jupyter_execute/week37_165_1.png create mode 100644 doc/LectureNotes/_build/jupyter_execute/week37_169_0.png create mode 100644 doc/LectureNotes/_build/jupyter_execute/week37_171_8.png create mode 100644 doc/LectureNotes/_build/jupyter_execute/week37_174_1.png create mode 100644 doc/LectureNotes/_build/jupyter_execute/week37_176_1.png create mode 100644 doc/LectureNotes/_build/jupyter_execute/week37_208_1.png create mode 100644 doc/LectureNotes/week37.ipynb diff --git a/doc/LectureNotes/_build/.doctrees/environment.pickle b/doc/LectureNotes/_build/.doctrees/environment.pickle index c41ef4799d13f51dac9669b8fb729c7fc075143e..b851d229703e1d34d0b43313ced16500b37c0cb8 100644 GIT binary patch literal 307233 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 z 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 VubB2c1|t|o^_IIoRP0#!{{cUt6Y~H7 diff --git a/doc/LectureNotes/_build/.doctrees/exercisesweek37.doctree b/doc/LectureNotes/_build/.doctrees/exercisesweek37.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9252e242cfcffaabeba9f90c7ade71387a888510 GIT binary patch literal 20811 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 Hyhr#yIdq;k literal 0 HcmV?d00001 diff --git a/doc/LectureNotes/_build/.doctrees/intro.doctree b/doc/LectureNotes/_build/.doctrees/intro.doctree index 291a4c98266eb8939b325fc915cb88741c0b0a38..cbf1d402587ab8a68808d114c40fda45fb74c2ca 100644 GIT binary patch delta 204 zcmdlzm-*RTW|julskb+>tUM&=*TbJ$ky@0TS)5v2o|>9%Y(AxJieC>KggtrHAuaYS zPi_W=Ebqw|4>>UUO_o0(HCg|N*kq@}20&ipfz-)24vRA;P5y9Lg)tQ-%M{8z`Q=_c zpg`jR>B)1Gxi-%}a*T;_=H{g1Zg&rJ7dR~w^{dWA0q&u4OH_0 delta 180 zcmaDhmwESGW|julsT(%3tUNUN+#&VJ!3PB=3mn#A^qTB (snVFMtm@j&Wi<|E>a zag(Kws4ymiWEcY{7aq}POx(Qi$ZICXshfL`zhP#)2ow{Z+#t;|dE#k##`BXmo|a?0 zF!{o1b;gHq8U8bhKpDd`rc&p)85nv5%kzs;lJiURN_2BG^GZuni>G8gnA~tii!C20 Zos~6t!dy6bdTmFm&1 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

diff --git a/doc/LectureNotes/_build/html/intro.html b/doc/LectureNotes/_build/html/intro.html index a69004bc3..99c18f2bf 100644 --- a/doc/LectureNotes/_build/html/intro.html +++ b/doc/LectureNotes/_build/html/intro.html @@ -275,6 +275,16 @@ const thebe_selector_output = ".output, .cell_output" Week 36: Linear Regression and Statistical interpretations +

  • + + Exercises week 37 + +
  • +
  • + + Week 37: Statistical interpretations and Resampling Methods + +
  • diff --git a/doc/LectureNotes/_build/html/objects.inv b/doc/LectureNotes/_build/html/objects.inv index 96dae3f768a696f4a2cac093bb39a2110912db82..0d22c881435648e301a80b1b96d1bde837739a49 100644 GIT binary patch delta 907 zcmV;619be`2lEGzc7MxO+b|H_`zvNi&j~%el0bH8fj$nD9H8x5u?JhlmRw0rNWZ?L zhh5tdbOj!1?%a7@B`sKOP#uFd*&>rE93Dd&Z0`$Gm2kraG6naTE7Y1xk+kPWF{dN% z^`YTq#zhVct`Rf1mTJpX2H&tztfW6?E7fxc6^$PVJjilmk$*1v(-SHbh7-Wm?}iy7 zqXD+u6mW@H!wnG?bhU#$iNT(D*pE_dWZ75{N2t$BcL=93gj0`jk7=VUArRhM1n&jh zZBQ|l7MAyh_%5ej_nd6pwEk--hqT1E;U9e+(-OJ(2(rba5bWj0IH6Og@}8Lv79vk2DAV_jm(ZCEf0--4J&Am$$8 zN@%RsCAN7l;9ALw#_oYY$oxpiU?lMrJNKbojjvuPWQFiSN-BZKC*+R?Oo8yVagOq7 zT*~tZi}NtyDUw?266lj=r2$2q7U({E6kD73dPL^ss=Ml*Bck=Jt?X3Ht^+F*jaJx( z9K0>asy|<`920G5QLQrTLEz3B2C5_h6UGS+Rcg)FyyS*Nu0W}Fu2&DO3oZI!J`!Vj zqkkF%Xl=dB>}ZaKka+PxtVref(*75bhKuz^E>Jzh`X7Hy+=8f#~ak4>DUsV8;!h hokdkEH2#N6vacI`x$waA#aj?AMC9rJ3j|U}d{`+_xG(?! delta 882 zcmV-&1C9Li2ipgbc7IJ%+b|Hl`&aA{WYD+r|(GDH$jT9T1SC*s})YYY1hEa%Nv`l!ioiqy_e^UUNO(v~D@C)S%&ofzG?`4=2+jkbb6;7Ra&34V za5WB~#=aa?S$|4p;3vjLDtKTvO4I|8otPOfS_P8;*TiwnG3M4S7=<5ETm&dC9L25B zSgdkv;-12tk_ENh6OoYlnV7*y(kXWJgRXOY`${egglj1&1tJ{~9u1fb;agP$<;#95 zF9RwreY-PFdE^N)ZGo0%skn%F$!w<;r4+VLX4Gms&3`oAP1 zkfq@T|65N$0Ng!xJd2KHP|J%+kEJdd)siIJ^!Qq~a|A3;snj%IMHJ_iCTeT#I&7_e zsNQbbEdLO?Dp75?rWMdmC%&Shx})AAu1CEF-8=FnZj4~9Fgo937{AXj4l|7R7$)yC zOu`J4D1Su?Cc)PlnzI$=7Tj1J>Z|=5amuvpdZ-QV#;l~NrR2<+VQ=kWbGKiNh^CwB z(dBWL-kP4}DXtV7z!&1E_W{**rWD&b)Vd`LZsI?k|u>_}{E4)u)8Et~dg{W2k0Yi*ZC!E7_LJkn^_QeT6!`K9R2mn_9d z8yYjaS9Q;EYxND4)A|vnUKf<96^F)Ud>9%^&ZX}8=!xT4yUs_l)v04PAS*a%t;m3yNGgDFBe%Ujf3_L<76xq zi|c5(;pq9t2mIqM|Jbkdg`xl$<>laO#Jc?8)p +

  • + + Exercises week 37 + +
  • +
  • + + Week 37: Statistical interpretations and Resampling Methods + +
  • diff --git a/doc/LectureNotes/_build/html/searchindex.js b/doc/LectureNotes/_build/html/searchindex.js index 22374aa65..5f95f4674 100644 --- a/doc/LectureNotes/_build/html/searchindex.js +++ b/doc/LectureNotes/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["chapter1","chapter10","chapter11","chapter12","chapter13","chapter2","chapter3","chapter4","chapter5","chapter6","chapter7","chapter8","chapter9","chapteroptimization","clustering","exercisesweek34","exercisesweek35","exercisesweek36","intro","linalg","project1","schedule","statistics","teachers","textbooks","week34","week35","week36"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["chapter1.ipynb","chapter10.ipynb","chapter11.ipynb","chapter12.ipynb","chapter13.ipynb","chapter2.ipynb","chapter3.ipynb","chapter4.ipynb","chapter5.ipynb","chapter6.ipynb","chapter7.ipynb","chapter8.ipynb","chapter9.ipynb","chapteroptimization.ipynb","clustering.ipynb","exercisesweek34.ipynb","exercisesweek35.ipynb","exercisesweek36.ipynb","intro.md","linalg.ipynb","project1.ipynb","schedule.md","statistics.ipynb","teachers.md","textbooks.md","week34.ipynb","week35.ipynb","week36.ipynb"],objects:{},objnames:{},objtypes:{},terms:{"0":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,22,23,25,26,27],"00":[0,1,5,6,9,11,25,26,27],"000":[1,3,9],"0000":9,"00000":[9,11],"000000":[5,11,26],"00000000e":[5,26],"0001":[1,17],"00019961646575285301":9,"00019998":5,"00024087":5,"00029012":5,"00031535148309577417":[6,27],"0003153514830958095":[6,27],"00034944":5,"000417932":2,"00042089":5,"000464088":2,"00050694":5,"00058016":[6,27],"00060704":6,"00061058":5,"00062592":6,"00066668":[6,27],"00068734":[6,27],"00069123":6,"00073541":5,"00076495":[6,27],"00076908":6,"0007698473260556325":[6,27],"0007698473260556343":[6,27],"00079125":6,"00079968":5,"00084707":6,"00085892":6,"00087697":[6,27],"00088573":5,"00092678":6,"00096314":5,"001":[1,2,8,13,17,27],"00100519":[6,27],"0010479245693919886":6,"00105081":[6,27],"00106677":5,"00107405":[6,27],"00111756":[6,27],"0011526":[6,27],"00115999":5,"00118584":6,"00128479":5,"001323":[6,27],"00137814":6,"00139705":5,"00149311":[6,27],"00149956":[6,27],"00152117":[6,27],"00154733":5,"00156374":6,"00168251":5,"00174276":[6,27],"00175331":[6,27],"00186347":5,"001880":5,"00200":8,"00202624":5,"00202756":[6,27],"00217499":[6,27],"00224413":5,"00228740":6,"0023548":[6,27],"002381316302584885":[6,27],"0023813163025848865":[6,27],"00242999":6,"00243186":[6,27],"0024401":5,"00249435":[6,27],"00266858":2,"00270244":5,"00274989":[6,27],"00289724":[6,27],"00293838":5,"00310113":2,"00312361":[6,27],"00315593":6,"0032153180657605116":6,"00323332":[6,27],"0032542":5,"003301":[6,27],"0033955154592040936":6,"00353823":5,"0036237":[6,27],"0036367":[6,27],"00369758":[6,27],"0038335":[6,27],"003909404072811226":6,"00391839":5,"0039987":[6,27],"004":[5,27],"004091940707753939":6,"00410387":[6,27],"00410478":6,"004113634617443131":[6,26,27],"00411363461744314":[6,26,27],"004113634617443147":[6,26,27],"00415598634586135":6,"00424909":2,"00424967":[6,27],"00426027":5,"00433417":11,"00440346":[6,27],"00443743":[6,27],"00445655":11,"00445922":25,"004579219539673834":6,"00458878":[6,27],"004610275230656212":6,"00462287":[6,27],"00471782":5,"00472199":6,"00472512":[6,27],"0049544":[6,27],"00497837":27,"004999999999999991":0,"00512927":5,"00517114":[6,27],"00526348":[6,27],"0053018":[6,27],"00554552":[6,27],"00556826":[6,27],"0056799":5,"00579953":[6,27],"00588657":[6,27],"00607783":6,"006162":[6,27],"00617499":5,"00630331":[6,27],"00642221":[6,27],"0064472":27,"00660427":[6,27],"00672607":[6,27],"00673407":[6,27],"00676387":[6,27],"0068011":[6,27],"00683748":5,"00683964":[6,27],"007024126888938232":6,"00719176":[6,27],"00727646693":[0,25],"007315":26,"0074331":5,"00759119":6,"00779281":22,"00784393":[6,27],"00803064":[6,27],"00813803":6,"00817631":[6,27],"00823002":5,"00827728":[6,27],"00831018":[6,27],"00834567":[6,27],"00848904":[6,27],"0086649156":[0,25],"008675369724975977":5,"008831941890485846":26,"00890669":19,"00894639":5,"00902152e":26,"00905423":[6,27],"009163470508352218":5,"009164545680330616":6,"00917248":[6,27],"00934327e":26,"00934499":[6,27],"009522910538005715":26,"0096208":[6,27],"00987022":25,"00990475":5,"00992331":[6,27],"00996754":[6,27],"00it":6,"01":[0,1,2,5,6,9,11,13,17,24,25,26,27],"010018312644137363":6,"0100706":[6,27],"010331721306655127":6,"010516485576645508":6,"01066519":[6,27],"01076611":5,"0110":22,"011076219011379514":6,"011225":2,"011265488125148788":26,"0113104":[6,27],"01173838":0,"01179792":[6,27],"01191824":5,"012073649446193166":6,"01219292":[6,27],"01222822":26,"01223198":[6,27],"01231917":[6,27],"01265755":26,"012658":26,"01267007":27,"01290947":[6,27],"01295356":5,"013121574015585152":6,"013121574015585155":6,"01312254":25,"01318643":[6,27],"01347916":[6,27],"01348565":[6,27],"01367553":[6,27],"01384313":25,"01397146":[6,27],"01405935":[6,27],"01416528":[6,27],"01433809":5,"014436800088904942":6,"01449782":[6,27],"01458337":[6,27],"014586":26,"01458611":26,"0146081":[6,27],"01463049":[6,27],"014891664497538563":25,"01496065":25,"01507238889517706":[6,27],"01507238889517717":[6,27],"01531845":[6,27],"01549377":[6,27],"01558197":5,"015910":11,"01591047":11,"01628578269596628":6,"01633913":[6,27],"01640891":6,"01655318":[6,27],"016587414993043573":6,"01691985":[6,27],"0169643":5,"01708781":[6,27],"01708852":[6,27],"01713366":[6,27],"01724499":5,"017355848195593347":6,"01735584819559336":6,"017665":5,"01783414e":26,"01813007e":26,"018232":26,"01831050e":[6,27],"01831190e":[6,27],"01846688":25,"01866537":[6,27],"01873344":11,"01873869":5,"01898855":[6,27],"01905883":[6,27],"01908936":[6,27],"01963611":[6,27],"01969145":[6,27],"01975416527185249":6,"01975848":[6,27],"01it":6,"02":[0,4,6,7,12,25,26,27],"02024962":[6,27],"02054837e":[6,27],"02068067":[6,27],"02073509":5,"02077431":27,"02098261":[6,27],"02123176":[6,27],"021544346900318832":27,"021592704588025022":6,"021592704588025025":6,"02180258":25,"02198702e":[6,27],"02198703e":[6,27],"02208512":[6,27],"02228115":[6,27],"02229529":[6,27],"02252765":5,"022999498260366312":6,"02348765":[6,27],"02365049":[6,27],"024217":11,"02421742":11,"0245528":[6,27],"02492265":5,"02498832":[6,27],"02503753":[6,27],"02511518":6,"02522069":6,"025709":[11,26],"02586427":[6,27],"0260906":[6,27],"02625193":8,"02629596":19,"02660572763718093":6,"026605727637180936":6,"02693858":27,"02707227":5,"02723445":[6,27],"027609773491022525":6,"02760977349102253":6,"027610":5,"02761005":5,"02857":4,"02895918":27,"029483":5,"029733":26,"02976145":[6,27],"02994311":5,"02f":[6,20],"02it":6,"03":[1,6,26,27],"03032441e":[6,27],"03077640549":4,"03099776":5,"031":[5,27],"031696741936652305":22,"03196357":[6,27],"03251863":5,"03256632e":1,"03267527":[6,27],"03279636":[6,27],"0330308045183194":[6,27],"0330308045187757":[6,27],"03308408":5,"0334336":25,"033657685071527665":6,"03405654":11,"034057":11,"03447512":[6,27],"034557":26,"03562355":[6,27],"03568439":[6,27],"0359565":5,"03630548":[6,27],"03707133":11,"037299816041296285":9,"037813671417389005":6,"03781367141738902":6,"03814292":[6,27],"03815288":[6,27],"038300":[11,26],"03846169":27,"039039":5,"039967668952797":[6,27],"0399676689527975":[6,27],"04":[1,6,11,26,27],"040102":5,"04010697":[6,27],"04063602":[6,27],"041":9,"0411487294305088":[6,27],"0411487294305226":[6,27],"04193203":26,"04220758":[6,27],"04242885e":26,"043":9,"04315108":5,"04321941e":26,"04346721":5,"04355837":[6,27],"04362":9,"04373024":25,"0437499":2,"04389027":[6,27],"04423486":[6,27],"04426744e":26,"044334":26,"044613":[6,27],"04537385":[6,27],"04543942":[6,27],"045548":11,"04554803":11,"04566964":[6,27],"0458":9,"04648335":5,"04664255":6,"04683565":5,"046842629321028326":11,"04784395":[6,27],"0481872773043029":6,"04876305":25,"04892055":[6,27],"04909093":[6,27],"04912436":6,"0494262":25,"04944931918420588":22,"049556996627824":[6,27],"0495569966278269":[6,27],"05":[1,4,6,20,26,27],"05009826":[6,27],"05061841":22,"05073207e":26,"05087888":11,"050879":11,"051006":11,"05100602":11,"05100875":[6,27],"05108705":25,"051418":5,"051649":[11,26],"0517473":5,"05210975":19,"052279218012056844":6,"05227921801205686":6,"052305":26,"05263":9,"05302":9,"053417":26,"05364854":8,"05383795":[6,27],"0538391":25,"053849":5,"05447415":[6,27],"054617":26,"054655":26,"05505310046363":2,"05519999":27,"05533":9,"055676":26,"055734":26,"055910":26,"055987":26,"05614483":5,"05623":9,"05648":9,"05651951":[6,27],"05667":9,"056683":26,"056767":5,"057076":5,"05716368155342608":6,"057300":26,"057393":26,"057415":5,"057418":26,"057457":26,"057722":26,"057786":5,"057835":26,"05785343":[6,27],"05789007":[6,27],"05796251":[6,27],"05807125":[6,27],"058190":5,"058552":26,"058645":26,"05883":9,"05884":9,"058854":26,"058952":26,"058996":26,"059031":26,"059226":5,"059406":5,"059597":5,"05965043":19,"059711":5,"059797":5,"059807":26,"059951":26,"05999":9,"059993":26,"06":[6,26,27],"060003":5,"060043":5,"060083":26,"06020587":[6,27],"060254":26,"060340":5,"060422":5,"06043581":[6,27],"060612":5,"060716":26,"060756":26,"060764":5,"060864":5,"060872":26,"061076":5,"061146":5,"061163":26,"061359":26,"061367":5,"061443":26,"061452":26,"061496":5,"061614":26,"061822":5,"061882":5,"06200174":5,"062016":26,"06208238634231949":6,"062242":5,"062292565":4,"062337":26,"062599":26,"062624":26,"062634":5,"062874":26,"063019":26,"063061":26,"063080":26,"063260":26,"063511":5,"063653":26,"063684":5,"063832":5,"063894":26,"063965":5,"064061":5,"064074":26,"064087":5,"064307":5,"06442194e":26,"06444":9,"064501":26,"064521":5,"064530":5,"06453579006728324":6,"064606":26,"064609":26,"064699":26,"064713":5,"064793":26,"064841":5,"064889":5,"06491736":[6,27],"064933":5,"065024":5,"065077":26,"065101":5,"065115":5,"065186":5,"065273":5,"065299":5,"065304":5,"065359":5,"065361":5,"065378":26,"065390":26,"065410":26,"06547790180152355":6,"06547790180152359":6,"065588":5,"065633":5,"065860":5,"065930":5,"066066":26,"066204":5,"066349":5,"06637":9,"066380":5,"066395":5,"066402":5,"066406":5,"06644775":19,"066458":5,"066474":26,"066500":26,"066612":26,"066647":26,"0666807":2,"066787":26,"066837":[11,26],"066854":26,"06696769":19,"066999":26,"067097":5,"067149":5,"06719214":19,"06724062":5,"067284":5,"067392":5,"067429":5,"067482":5,"067560":5,"067637":26,"067707":26,"067729":5,"068022":5,"068264":26,"068301":5,"068307":26,"068441":26,"06844519414009445":6,"06844519414009446":6,"068605":11,"068629":26,"068727":26,"068906":26,"068963":5,"069028":26,"06926365":26,"069275":5,"0694169556368514":19,"069452":26,"069521":5,"069584":26,"069704":5,"069717":5,"07":[6,26,27],"070006":11,"070043":26,"070054":5,"070146":26,"07016":9,"07017":9,"070202":11,"070213":26,"070342":5,"07039":9,"070457":26,"070496":5,"070582":26,"07062318":[6,27],"070737":26,"070868":5,"070889":[11,26],"070986":26,"07115":9,"0713":[0,25],"071315":5,"07145103":11,"071462":11,"07160048164233102":6,"07160048164233104":6,"07172103":25,"071729":11,"072000":26,"072111":26,"072132":26,"072476":26,"072489":5,"072621":26,"072633":5,"072759":5,"07285":3,"072860":5,"072976":11,"073318":11,"073481":5,"073581":5,"073598":[11,26],"073627":5,"073634":5,"073644":26,"073934":5,"074067":[11,26],"074084":26,"074208":5,"074210":26,"07421084":5,"074323":26,"074407":5,"074548":5,"074552":11,"07456491":5,"074706":5,"07490892":[6,27],"074973":11,"075398":11,"075698":5,"075816":26,"075889":26,"075972":5,"076150":26,"076383":5,"07643382":19,"0764924":[6,27],"076620":5,"076697":11,"076716":5,"07678":9,"07692307692307693":9,"076938":[11,26],"076964":5,"077082":11,"077168":26,"07745069":22,"077460":26,"077522":11,"07777777777777778":1,"078110":26,"07820":9,"078336":26,"078540":26,"07862755":22,"07864":9,"078704":5,"07871":9,"078785":11,"078824":11,"078974":26,"078986":26,"079381":11,"079412":5,"07944154":[19,25],"079578":5,"079642":5,"0796891867672603":6,"0798590438380667":11,"079873":5,"079946":26,"08":[6,9,22,26],"080016":5,"080195":11,"080425":5,"08043851":5,"080616":26,"080630":11,"080764":26,"081276":26,"081308":11,"08131003":6,"081374":11,"081422":11,"08156108":[6,27],"081597":11,"08165104":26,"081655":26,"081798":11,"08251519":[6,27],"082592":11,"082619":11,"082653":26,"082661":11,"08277442":22,"0827744231113545":22,"082978":11,"08299273e":[6,27],"083096":11,"08318298e":1,"08323973e":26,"083309":11,"08333333333333333":[1,9],"08336233266":4,"083527":26,"083540":11,"08376632":[6,26,27],"083766322923899":[6,26,27],"0837663229239043":[6,26,27],"083851":11,"083906":11,"083943":11,"084022":11,"084076":26,"084157":11,"08426840630693411":6,"08426840630693413":6,"084362":11,"08455":9,"084574":11,"084650":11,"08474":9,"084809":26,"085152":11,"085237":11,"085259":11,"085265":11,"085346":11,"085383":11,"085431":11,"08551306":[6,27],"08557805981945521":5,"085693":11,"08576932":6,"08593216":[6,27],"086059":11,"08611111111111111":1,"086230":11,"086263":11,"086538":11,"086550":11,"086611":11,"086615":11,"086673":11,"086782":11,"086875":11,"086890":11,"08690":9,"087176":11,"08750220e":26,"08758":9,"087822":11,"087938":11,"087951":11,"088061":11,"088130":11,"088160":11,"0881981":5,"088222":11,"08823":[],"088361":11,"088402":11,"088422":11,"08860792":19,"08871404":5,"08881497884574564":26,"08888888888888889":1,"088893":11,"088908":11,"088986":11,"08902":9,"08939489":19,"0895387":26,"089539":26,"089629":11,"089654":11,"089682":11,"089702":11,"089739":11,"089892":11,"08996":9,"09":[1,6,26],"090000":11,"090025":11,"09004029":25,"090290":11,"09047191e":26,"090623":11,"090696":11,"090751":11,"091246":11,"091331":11,"091353":11,"091561":11,"091627":11,"09163947":6,"09166666666666666":1,"0917":9,"091700":11,"09221309":22,"092347":11,"09251":9,"092544":11,"092613":11,"092672":11,"09298511":22,"093078":11,"093132":11,"093429":11,"0940821989627646e":[6,27],"0940821989652176e":[6,27],"094426":11,"09444444444444444":1,"094577":11,"094659":11,"094671":11,"094970":11,"09609807":5,"09650726":25,"096803":11,"096837":11,"096928":11,"09715081560068299":25,"09744":9,"09780":9,"09791":9,"09861229":[19,25],"0988662":19,"09900923":25,"09903804":8,"09917303":19,"09919198949275869":6,"099287":11,"09951287404314545":1,"09953815":19,"0n":[0,25],"0x0006":[3,4,14],"1":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,19,21,22,23,24,27],"10":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,19,20,21,22,23,25,26,27],"100":[0,1,2,3,4,5,6,8,9,10,11,13,14,15,16,17,19,22,23,25,26,27],"1000":[0,1,2,4,5,8,11,13,14,18,22,25,26],"10000":[2,5,6,10,11,13,22,27],"100000":8,"10001":10,"1001":[9,22],"1002":22,"1003":22,"10030":9,"10041812":27,"1005":22,"1007711427354898":6,"1009":22,"1011":22,"1013":22,"1013904243":22,"10141413e":[6,27],"1015":22,"1015am":25,"1023":22,"10230":9,"1024":3,"1026":22,"1027":22,"103":1,"1030":22,"10340":9,"1037":22,"10378326e":1,"1038":22,"10391807":[6,27],"10398646080125032":6,"10398646080125035":6,"1040":22,"10405456":11,"10430":9,"104411":26,"1047":22,"105":27,"10520":9,"10555555555555556":1,"10589577":5,"106095":[11,26],"10694828":19,"10790125813226321":26,"108":[6,9],"10913":6,"10931453":[6,27],"10960":9,"10983159":11,"10th":9,"10x":[0,25],"11":[0,2,5,6,7,8,9,10,11,12,13,15,16,19,20,21,22,23,24,25,26,27],"1100":22,"1101":22,"11022072":11,"110221":11,"11022302e":5,"111":[1,7,12],"11100":9,"112383":[11,26],"1124":9,"11368985":25,"11382896":27,"11388888888888889":1,"11390":9,"11400097":19,"11462415":5,"11482289e":[6,27],"11500354":19,"11507992e":1,"11547777218872497":6,"115822":6,"11590":9,"11660":9,"11666666666666667":1,"11694":20,"117":8,"11744554e":[6,27],"11780":9,"118":[0,2,7],"11830757":27,"118318":26,"11840":9,"11890":9,"119":[0,2,7],"11938949":22,"11952661":22,"11967653":25,"119936":2,"12":[0,1,2,3,4,5,6,7,8,9,11,12,19,22,24,25,26],"120":[0,2,3,7],"1203":9,"1203284":8,"12044974":26,"120450":26,"121":[8,9,10],"12122786e":26,"1215pm":[23,25],"12182967":[6,27],"122":[2,8,9,10],"12222222222222222":1,"1225397":22,"123":2,"12318726e":[6,27],"12330033":26,"12333649":[6,27],"123711":6,"12380":9,"124":[0,25],"12400":9,"1242":8,"12552073e":[6,27],"12591227":26,"126":9,"1261":9,"12618549":5,"1265":9,"127":4,"12700133":19,"1271":6,"12777777777777777":1,"12790":9,"128":[3,4,13],"12871842":26,"129012":6,"12952339":27,"1297":9,"1298":9,"12pm":[23,25],"13":[0,2,5,6,7,9,11,12,19,20,22,25,26],"130":9,"13003291":[6,27],"130224":11,"13022421":11,"13055555555555556":1,"130694":26,"13069442":26,"131":9,"13118774":25,"13156239":19,"13179053e":26,"132":9,"13220608e":[6,27],"1325":6,"1326":9,"1326197715":25,"13280":9,"133":7,"13318759":19,"134":27,"135":9,"13535942":[6,27],"13588335":26,"136":[0,7],"13614217":19,"13633112":25,"13641587e":26,"13646574":5,"13658936":22,"13661243e":[6,27],"13679863":[6,27],"137":[0,7],"13740":9,"137652":[11,26],"138":[0,7],"1385":6,"13858317":25,"13865173":5,"13867518":25,"138775":[11,26],"1388888888888889":1,"13890":9,"139":[0,7],"1392559585020426e":[6,27],"139255958997547e":[6,27],"13929376":19,"14":[0,2,4,5,6,7,8,9,10,11,12,19,20,22,24,26],"140":[0,2,7,9],"14021063":[6,27],"14092044":19,"141":[0,2,7],"14100":9,"1416398":[6,27],"14174745":[6,27],"1418":9,"142":[0,7,9],"14250":9,"14277718e":26,"143":[0,2,7,9],"1437":1,"144":[0,7],"14400":9,"1440501043841336":1,"14440":9,"1446729567":4,"145":2,"14568914":27,"146":2,"14710":9,"14716":6,"14722222222222223":1,"147400":[11,26],"147420":[11,26],"1479":9,"148":[3,4,14],"14812206":6,"148282":6,"14932255":22,"149425":6,"14966323":19,"14984157":22,"14g":6,"15":[0,2,4,6,7,8,9,12,13,15,16,17,19,22,25],"150":[3,4,8,9,14],"15005476":5,"150707":6,"15098090e":[6,27],"151":[3,4,14],"15130074e":[6,27],"152":9,"15200":9,"1527777777777778":1,"153":[3,4,14],"153036":26,"15330788e":26,"15384615384615385":9,"154":[3,4,6,14],"15431202":19,"155":[3,4,9,14],"156":[3,4,14],"156956":5,"157":[3,4,14],"1575":9,"15792278643800434":5,"158":9,"15807529":25,"1587":9,"1590":9,"15990":9,"15am":25,"15g":6,"16":[1,2,3,4,5,6,8,9,10,22,25,26,27],"1603":3,"16111111111111112":1,"16211139":5,"16220":9,"162246":5,"16231451":4,"1625":9,"1628":9,"16304863":26,"163049":26,"1630775253":1,"16342407":5,"16343471":[6,27],"16384":3,"16500":9,"16526258":19,"166":9,"16632351e":26,"16638104":19,"167787":5,"168":9,"16805821e":[6,27],"16855533":25,"17":[1,2,5,6,7,8,9,13,22,26],"1709":9,"171":27,"171525":26,"1715252":26,"17174962e":1,"17222222222222222":1,"1726":9,"17300":9,"1731":9,"17446471":6,"17485935":19,"1752":9,"175300":26,"17561484":19,"17576105":25,"17641709":[6,27],"17748443e":26,"17755779e":26,"17777777777777778":1,"17801022":5,"17861098":6,"17917768":5,"17949575":5,"17953942":11,"1797":[1,3],"17979265":5,"179793":5,"18":[2,6,7,8,9,10,13,22],"1801709":27,"18029127":5,"1803":[],"1807":4,"18075088":22,"1809":9,"181":9,"1812":9,"1821":9,"182925111119767":19,"18307821":27,"18333333333333332":1,"18383522":26,"18388":6,"184":9,"184519":26,"185":27,"1860":9,"18611111111111112":1,"18613217e":[6,27],"18660":9,"18670072e":26,"18673098":11,"189496":26,"189622":26,"19":[2,6,9,15,22,25],"19166666666666668":1,"19207979":5,"19220":9,"1940":0,"194042826649355e":[6,27],"194042826815211e":[6,27],"1943":12,"1944":6,"1949983":25,"1956":9,"19569961":[6,26,27],"19688765":25,"1970":[19,25],"1973":9,"197370":[11,26],"19740":9,"1979":6,"19800":9,"1999":[],"1_1":12,"1_2":12,"1_3":12,"1cm":[0,8,10,22,25],"1d":[1,2,3],"1e":[1,2,4,13,14],"1e10":14,"1e4":6,"1f":1,"1k":19,"1n":[0,25],"1x":[0,25],"2":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,18,19,20,21,22,24],"20":[0,1,2,6,7,8,9,13,22,23,25,27],"200":[0,2,3,4,8,9,10],"2000":[0,26],"20015436":6,"2004":13,"2006":24,"2008":25,"2010":1,"2011":1,"2014":4,"2015":1,"2016":[0,25],"2018":[0,6,26],"2019":[8,9],"2021":[6,14,26,27],"2022":25,"20222345":22,"2023":20,"2024":[15,16,17,25,26,27],"2027":9,"20277777777777778":1,"20488808e":26,"20500":9,"2060":9,"2069":9,"207545":[11,26],"20833333333333334":1,"20867052175034223":6,"20916295":26,"20980":9,"21":[0,1,2,5,6,7,9,12,13,19,25,26],"210340":[11,26],"21058097":5,"21093775":6,"21117128e":26,"21130":9,"2116753732":4,"21169159e":[6,27],"213103":[11,26],"213743":[11,26],"21378153":25,"21517262":6,"21596432":6,"216290":[11,26],"216683":[11,26],"21733307e":26,"217962":11,"21796226":11,"21888121":19,"22":[0,1,2,5,6,9,12,13,19,22,25,26],"22019267":19,"22044605e":[5,26],"221":8,"2211108":19,"221180":26,"2216":9,"2218":9,"221805":2,"221921":5,"2222736":5,"222274":5,"222400":26,"22398902":25,"225":4,"22668089":25,"226818":5,"22681817":5,"22690428":5,"22842468702219465":6,"2284246870221947":6,"22847924":5,"23":[1,2,6,9,12,15,19,22,25],"23002365e":[6,27],"23076923076923078":9,"23117504":25,"23167717":5,"23177156e":26,"232435":26,"23333333333333334":1,"2338675":26,"233868":26,"234":6,"23505507e":26,"2351":6,"2364":9,"2397":9,"23971032":26,"24":[0,1,2,6,9,19,25],"2401":20,"24140":9,"24155894":19,"24159785":26,"2416":9,"24175744e":[6,27],"2419":9,"2430":9,"24390":9,"24444444444444444":1,"24502113":19,"2456969087678473":22,"24569691":22,"246":2,"24604925":19,"24829908":5,"24906604e":[6,27],"24975055":19,"25":[2,3,4,5,6,8,9,11,20,22,26],"250":[2,4,7,9],"25000":0,"250084":5,"2500845":5,"25185716":27,"251879":26,"252436":26,"25325161e":26,"255":3,"255001":26,"25529356":25,"256":[2,4],"25617655e":[6,27],"25617658e":[6,27],"2572":9,"2575":9,"259153":[11,26],"2597":9,"26":[2,6,9,16],"26093249":19,"26124692":6,"26297455":26,"26301436":5,"26409315307910025":[6,27],"2640931530791004":[6,27],"2650":9,"265109911":4,"2654":9,"2662882":25,"26710969":5,"26773827":19,"26780278":5,"26792572":19,"268":9,"26814548":6,"26995402":26,"27":[0,1,2,6],"270350130579073":11,"27065633":27,"27486761":5,"274868":5,"2750":9,"27518808":25,"276263":[11,26],"27700":9,"27760":9,"27924636":5,"27n_":22,"28":[1,2,3,4,6,9,22],"280573":5,"280647":[11,26],"28205578e":26,"282075":5,"28207517":5,"28238649":19,"282727":[11,26],"2830637392":4,"28336218e":[6,27],"28390":9,"28391978":26,"28475098":8,"2861":22,"2871":9,"2873":9,"2882":22,"2886":22,"2890":[0,25],"2892":22,"28986131":22,"29":[2,6,9],"2915":22,"29167186":5,"2931":25,"29313228":19,"29487549e":26,"296697":11,"29669702":11,"2968":25,"2980":25,"29822833":[6,27],"2990":25,"29920468":19,"299748":26,"2_":12,"2_1":12,"2_2":12,"2_3":12,"2_i":12,"2_m":[6,22],"2_t":13,"2_x":22,"2b":22,"2cm":8,"2d":[1,3,11,12,18,25],"2e":6,"2f":[0,7,9,10,11,12,25,26],"2g":2,"2g_i":2,"2k":3,"2m":6,"2n":[0,2,3,25,26],"2nd":9,"2p":22,"2pm":23,"2pt":4,"2u":[],"2x":[0,3,8,13,25],"2x_ix_jy_iy_j":8,"2x_j":8,"2y_i":10,"2y_j":8,"3":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,18,19,20,21,22,23,27],"30":[0,1,2,4,6,7,9,10,13,16,23,26],"30000":[0,25],"30010":9,"30119421":8,"30132427":19,"30258509":[19,25],"30283188":27,"303":6,"30442964":26,"30466214e":[6,27],"30481195":19,"3072":3,"30764357e":26,"3076923076923077":9,"30787294":6,"30820040103372":11,"30873019":25,"30940":9,"31":[2,12,19,22],"310579":26,"3105791":26,"312":27,"3123314713548606":6,"31276579e":[6,27],"313":27,"31318084":5,"313851":5,"31385129":5,"31457796":5,"31471398":25,"315":[6,27],"3155":[0,5,6,27],"31566127":25,"316":27,"31718909":11,"317367":11,"31896852":8,"31901056":22,"3199881":25,"32":[3,4,6,8,12,13,19,22],"3200":1,"32149601703519115":6,"3214960170351912":6,"3215":9,"32186558":25,"32238906":11,"322768":5,"3227683":5,"32351459e":26,"32399798":19,"324":2,"3245":2,"32450054":26,"3250":1,"3262":6,"326238":26,"32740721e":26,"32791346e":26,"33":[0,2,9,12,19,23],"33047051":5,"330471":5,"33066907e":[5,26],"33166055e":5,"331939":26,"333":7,"33435469":19,"33540382":19,"34":[2,9,19],"340071371496255":26,"3403":9,"340782":[11,26],"34114547":5,"34175429":22,"342680":26,"3436":[0,25],"34367970":6,"34369306":25,"3437":[0,25],"34412923":26,"34565973":11,"345660":11,"34569596":5,"34693879":25,"34782766":22,"3480159":19,"35":[0,2,6,17,20,22,23,25],"35140":9,"351636":[11,26],"35182854":5,"35389684e":26,"3544313922":6,"35444257":26,"35470445e":[5,26],"35514368":25,"35533773":6,"35577273":25,"356399":26,"357508":26,"35768161":25,"3581341341":4,"359":[5,27],"36":[0,2,5,6,20,22],"360":1,"36097931e":26,"3613":9,"361556":26,"3621311":5,"3632959111950474e":[6,27],"363295916366933e":[6,27],"36417623":25,"3655222":5,"367":[2,9],"369139":[11,26],"36985812":25,"37":[9,20],"37040343":22,"370782966":4,"37239927e":26,"373465215701515":9,"37396662":[6,27],"37409975e":26,"37416502e":26,"37504943":19,"377372":26,"37737221":26,"3777801602":6,"37900111":[6,27],"38":[9,20,22],"380":9,"38135733e":[6,27],"38157698":25,"3817475779":6,"3823545":19,"38267862":5,"382679":5,"38461538461538464":9,"386":9,"38629436":[19,25],"38827994":6,"38916861e":[6,27],"38962192e":[6,27],"39":[0,9,23,25],"39197698":26,"391977":26,"39214397":26,"392144":26,"394":9,"394285":11,"39428522":11,"3952007":19,"39579407":5,"39706027":22,"39706038":5,"397700":[11,26],"39789527":[19,25],"3983":6,"39931051e":26,"399836":26,"39990572e":26,"3d":[2,3,4,6,13,20],"3f":[1,3,9],"3n":19,"3x":[2,8],"3x_i":2,"3y":8,"3yk470mj5p931p9dtkk0y6jw0000gn":[1,6,25],"4":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,19,20,22,25,27],"40":[1,6,9,20,23,25],"400":4,"4000":[9,25],"40030144":19,"40103689":11,"401037":11,"401842":[11,26],"40332158":22,"40420245":19,"405":9,"4050":[24,25],"405890":[11,26],"40620066":26,"406201":26,"407":9,"40720059":22,"408":9,"4087":9,"4087793":5,"40892859":25,"40927184e":[6,27],"40contain":[],"41":[2,9,19],"4107":9,"41237041":25,"41253101":22,"41383693":25,"41433969":5,"4150":[],"41511965e":1,"4155":[2,15],"4162706317":6,"4166666666666667":9,"41691626":19,"41761415e":26,"41790782":25,"41847076":22,"418506":[11,26],"41858649":19,"41882037e":[6,27],"41988809":19,"42":[1,4,8,9,10,19],"4230769230769231":9,"42379872":22,"42441033":5,"42450":9,"426":[6,9],"42742185":25,"42765083e":26,"43":[0,1,2,7,9,19],"43054282":5,"4310":25,"43246775e":26,"43295279":19,"43330971e":[6,27],"43442461":19,"435163":26,"43579948e":[6,27],"43639284e":26,"436462435":4,"43766686":11,"438060758":6,"438136":26,"439230":6,"44":[0,1,2,19],"44049151":25,"44089210e":[5,26],"441":[3,4,14],"442":[3,4,14],"442600":[11,26],"443":[3,4,14],"443217":26,"44395301":27,"444":[3,4,9,14],"4442873":22,"445":[3,4,14],"44624525e":26,"44757627":22,"44970586e":1,"45":[0,2,9,23,25],"450":9,"450257":[11,26],"4504":9,"45312744":25,"45422069":19,"4557763":11,"455947":26,"456":9,"457":2,"458027":26,"458078":[11,26],"45915671e":26,"45937581":25,"45960079":5,"46":[2,9,23,25],"460":[9,11],"4601":9,"46124943e":26,"46153846153846156":9,"462":7,"46260797e":26,"46383925e":[6,27],"46383926e":[6,27],"46415888336127775":27,"46608732e":26,"46659511":25,"46713267":27,"46749552e":26,"4676059":26,"467606":26,"46922796":5,"469228":5,"469596964296967":5,"46984697e":[6,27],"47":[2,9,23,25],"47042744":5,"470478":11,"4704785":11,"470714":26,"47075725":6,"47116868e":[6,27],"47125748":5,"47132891":5,"47187014":22,"47610036":6,"47647836":25,"4768597":19,"47734350e":26,"47780495":5,"477805":5,"47815203":11,"47826973":22,"479465113":4,"48":9,"481979":6,"48257387":[23,25],"48329035":22,"48447474":19,"48476997":11,"48494803":27,"48593774":19,"48655388":19,"48688666":11,"486887":11,"48780047":22,"48898864":19,"48994188":5,"49":[5,6,9,11,20,26],"49152":3,"4940954":[0,25],"49510364":19,"4959161509357395e":[6,27],"4959161509366685e":[6,27],"49622615e":26,"49724059":22,"49775827":19,"4990":22,"49905638":25,"4992":22,"4997":22,"4c4c7f":[9,10],"4d":3,"4f":6,"4pm":[23,25],"4y":8,"4y_i":10,"5":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,19,20,22,25,26,27],"50":[1,2,3,4,6,7,8,9,10,13,25,26],"500":[1,3,4,6,9,10,13],"50000455":5,"50000553":5,"50000718":5,"50000855":5,"50000969":5,"50001063":5,"50001142":5,"50001207":5,"50001261":5,"50001306":5,"50001343":5,"50001374":5,"500014":5,"50001414":5,"50001422":5,"50001439":5,"50001454":5,"50001466":5,"50001476":5,"50001485":5,"50001492":5,"50001498":5,"50001502":5,"50001506":5,"5000151":5,"50001512":5,"50001515":5,"50001517":5,"50001518":5,"50001519":5,"50001521":5,"50001522":5,"50001523":5,"50001524":5,"50001525":5,"50066971":22,"5018":22,"50227564e":[6,27],"50321091":5,"50470576":25,"506":0,"50641483":22,"506553":26,"50655336":26,"507d50":[9,10],"50846111e":[6,27],"50846112e":[6,27],"50j":13,"50x10":1,"51":10,"510":1,"51084243":19,"51097872":5,"51178631e":26,"511888":5,"51198558e":26,"51383260e":26,"514219":26,"51542953":26,"51566561":25,"51569907":19,"51631859":25,"51681181e":26,"5177783846":4,"519327774467847":19,"52018478":19,"5222222222222223":1,"52362157e":26,"52511377":19,"52554699e":26,"52656770e":26,"526744":[11,26],"528698":5,"52869849":5,"52870818":11,"52874252":5,"53":[2,9],"5303329":11,"5305555555555556":1,"531280":26,"53541027":19,"53603254":19,"53607935":19,"53703498":6,"5378811":11,"5384615384615384":9,"539261":[11,26],"54":[2,6,9,22],"540":9,"54039921":5,"54041041e":5,"541605":26,"54213195":25,"543939":26,"54393936":26,"54428380e":26,"544439":26,"55":[1,2,9],"55119373":19,"55217048":25,"5545673":25,"5555555555555556":1,"55640817":25,"5567":6,"55757089e":26,"557795":[11,26],"55796518":19,"55854694":11,"55960462":25,"56":[1,2,9],"56033697":5,"56198284":5,"56239321":22,"564":9,"56413916":22,"564374":[11,26],"56466087e":26,"565":9,"56536":[0,25],"566":9,"56636616e":[6,27],"567":9,"568":9,"56823411":19,"569":[1,9],"56912044e":[6,27],"56939714":5,"56963365":25,"57":[0,2,8,9,23,25],"570":9,"571":[5,27],"571105947979344e":[6,27],"571105947979412e":[6,27],"57169969":25,"57201944e":[6,27],"574465":[11,26],"57652181":25,"5769230769230769":9,"58":[2,9,10,23,25],"58102999e":26,"58310989":25,"58314173e":26,"5833333333333334":9,"583595":26,"58384652":25,"58492636e":26,"58734026":11,"58827236":6,"58886887":19,"5888888888888889":1,"59":9,"591317992":4,"59161025":19,"59354079":6,"5944444444444444":1,"596190":11,"5961905":11,"5972962":25,"59831212":19,"5cm":22,"5f":8,"5x":8,"5y":8,"6":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,19,22,23,25,26,27],"60":[1,3,6,9],"60000":4,"60004008e":26,"60010693e":26,"6019067271":4,"60236121":19,"60293962":5,"60314816":25,"60337375":22,"60393882":19,"60420593":5,"60482174":19,"60518617":19,"60543038":26,"60656897e":26,"60673226":11,"606760":5,"60943791":[19,25],"60958647":25,"6111111111111112":1,"61124231":19,"612939":26,"613579":26,"614808":[11,26],"6153846153846154":9,"61542957":19,"61562855e":26,"61602252":22,"61810248":25,"618982":26,"62":2,"6200":25,"6201":25,"6202":25,"6203":25,"6204":25,"62201698e":26,"62373464":11,"625":7,"62528192":25,"62554572":22,"626635268":6,"62725226":27,"62765236":19,"62788541e":26,"628":6,"62894215":5,"629019":11,"62901905":11,"62958747":25,"63":[0,1,2,6,9],"63023737":25,"63025821e":[6,27],"63037846":6,"63162342":26,"63249532e":[6,27],"63376422e":26,"63498144":5,"63588621":25,"63619296":19,"6377013":25,"63811548":19,"638618":19,"64":[1,2,3,4,13,19,25],"64012627":5,"640x480":[6,13,20],"64286758":19,"64403731":19,"64605756":25,"646283":[11,26],"6473418":19,"64742912e":[6,27],"647473":[11,26],"649382":[11,26],"64961094":25,"64x50":1,"65":[1,2,8,9],"651":2,"6515332649941654":5,"65198643":22,"652":2,"652089":11,"65208925":11,"653":2,"6536392":26,"65367685e":26,"654":2,"65442354":26,"654424":26,"655":2,"65571174e":26,"65599456":26,"65743689":26,"658":2,"65833132":26,"65885453":5,"65891389":26,"658914":26,"659":2,"65904730e":26,"66":2,"660":2,"66064822":26,"66080313":26,"66204648":6,"66294408":26,"6638":9,"6652177":26,"66560":9,"66617168469673":22,"667":9,"668172":26,"66865889":25,"67":[2,9],"67047975e":[6,27],"672721":26,"67314874e":5,"67496658":22,"67509467":5,"67801834":26,"67851352e":26,"68":2,"68078357e":26,"68192193":5,"68286725":26,"68534263e":[6,27],"68542204":5,"685942":11,"68594205":11,"6869":9,"68772578":25,"6887363571":4,"68929213e":[6,27],"689519":[11,26],"69":[2,9,22],"690":9,"690617":26,"69069n_":22,"69087404e":26,"691":1,"6923076923076923":9,"69313903":22,"69475072":5,"694751":5,"69484813e":5,"69504801":6,"69634577e":[6,27],"69695259":5,"6999536":11,"6n_":22,"6pm":25,"7":[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,19,21,22,24,25,26,27],"70":[1,6,7,9],"700258285068488":22,"70025829":22,"70037324e":26,"701370":5,"70162272":22,"70435575e":26,"70653767":4,"70710678":[5,26],"70832814":5,"7086067479626619":26,"71":1,"7106484566285455":22,"71142161":26,"711422":26,"7119":9,"712018":[11,26],"71384474e":26,"71538320e":26,"71737253":26,"71761101":26,"718165":5,"72048339":19,"72174172":11,"72219105e":26,"72271878e":[6,27],"7236674":5,"724":3,"72532661":25,"72545392e":26,"72664028e":26,"72793290e":26,"72859758":5,"72981762":8,"73":[6,9],"731000":26,"73184876":19,"73185968e":26,"73223692e":26,"733096":26,"73435999":25,"7345483":19,"73537890e":26,"73600557":22,"73972932":25,"74":6,"740":9,"74063343e":26,"74070824e":26,"74081822":8,"74222022e":26,"7423220054006":22,"74232201":22,"74303070e":26,"74384949":26,"74474996":25,"7458376":25,"74607851":26,"74647981e":26,"74720185":19,"74829661":26,"74830119e":26,"74840039":25,"74840212":5,"74947597":11,"749476":11,"749765":26,"75":[5,6,8,9,11,20,26],"7500735612987705":11,"750445":26,"75050135":26,"75079864":25,"751699":[11,26],"75170092":5,"75199355":19,"75269037":26,"75309603":19,"75437273":11,"754373":11,"75576555":26,"756352":26,"75770568":26,"76":[2,9,23,25],"76160572":0,"76187240e":26,"76190591":27,"76212914":25,"76428845":25,"76471048":19,"76478383":22,"765":7,"76681867":11,"76887029e":26,"7692307692307693":9,"76936315":5,"7694444444444445":1,"77":[9,23,25],"77152076":5,"7718":9,"77519276":19,"77714169":8,"7782028952":4,"77921992":19,"77966116":22,"7796611648499043":22,"78":2,"78009660e":26,"78058232e":26,"7809358":22,"78156479e":5,"78184120e":[6,27],"78546777":25,"78584667":22,"78890834":22,"78941903":5,"79":2,"79036971":5,"790370":5,"79111643":5,"79189954":25,"793167":26,"794282":[11,26],"7953443":27,"79689487":25,"79704553":19,"79778008":6,"797e":6,"7d7d58":[9,10],"8":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,19,20,22,25,26,27],"80":[0,1,2,5,6,8,9,26,27],"800":[4,7],"80006807":25,"80291466":25,"80354994":6,"80469739":5,"8055555555555556":1,"80609615e":[6,27],"80609616e":[6,27],"80816668":5,"808167":5,"80847477e":[6,27],"80919738":19,"81":1,"81048318e":[6,27],"81160425":5,"81194394":25,"81203214":22,"81333808":6,"815am":[23,25],"81633628":11,"816454":26,"816847":26,"81700981":25,"82":2,"82168579e":26,"82198978":5,"82566059e":26,"8265786":5,"82924408":5,"83":2,"8305555555555556":1,"831048":5,"8310483":5,"83223115":22,"83460016":19,"83512277":5,"83870189":6,"83954195":22,"84":2,"842":[0,7],"842436":26,"843":[0,7],"84355903e":1,"84388592":25,"844":[0,7],"84443254e":1,"8461538461538461":9,"84716164":22,"84780262":6,"84880366":11,"8492168":25,"84923989e":[6,27],"84963695":5,"849637":5,"84994524":5,"85":[1,2,9],"85013763":25,"850164":5,"85263220":6,"85278920e":5,"85533937":19,"85601992":5,"858":9,"8583333333333333":1,"86":[0,2],"86062977":6,"86117291":5,"86134827":5,"86145244":11,"86260426":19,"86273371":27,"8638888888888889":1,"865":[0,7],"86528841":25,"86557766e":26,"866":[0,7],"86630":9,"8666666666666667":1,"867":[0,7],"86810":9,"87":9,"8702784034":4,"87068171":27,"87072815e":26,"87078":11,"8722222222222222":1,"87381451":5,"875":1,"87599676":19,"877":6,"87923449":25,"88":[2,25],"88046261":5,"8805555555555555":1,"88168312e":[6,27],"88182591":26,"88253432e":26,"88323026":26,"88336879":5,"88347937":19,"88354703":19,"8840785":19,"88422263":19,"884669":26,"88529063e":[6,27],"88613493":26,"8888888888888888":1,"89":[2,9],"89126914e":26,"89261577":11,"892616":11,"89288636":11,"89410423":5,"89442642":19,"8944444444444445":1,"89685175":22,"89757312":22,"89794988":25,"89800468":25,"89906633":25,"89954169e":26,"89971681e":26,"8f":6,"8g":6,"8n":19,"8x8":1,"9":[0,1,2,3,4,5,6,7,8,9,11,12,13,14,19,20,21,22,23,25,26,27],"90":[1,2,6,9],"90075537":5,"9011":6,"90220243":5,"90266948":5,"9027777777777778":1,"9040":9,"90475506e":[6,27],"9055555555555556":1,"9059370566788297":22,"90593706":22,"906747":5,"9090666":19,"90914803":25,"909446359461397":11,"91":[23,25],"910":9,"9106590586410548":22,"9111111111111111":1,"91128596":5,"91358186":19,"91402008e":26,"9149137":19,"91492986e":[6,27],"91561163":19,"91660026":5,"9166666666666666":9,"91760278":5,"91812702":5,"918992":26,"91924234":22,"9197998358799464":22,"92":[6,9,23,25],"9230769230769231":9,"92397145":25,"924251":11,"9242511":11,"924e":6,"925":1,"92507116e":1,"92578916":5,"926564304542535":25,"92674248":19,"92740215":22,"92756256":27,"9277777777777778":1,"92878175":22,"9305555555555556":1,"931":[0,25],"93155188":5,"93158979":5,"93176482":25,"933":[5,27],"93356853e":26,"93492130e":[6,27],"93601008e":26,"937":22,"937082":26,"93742122":25,"93792515":25,"93799826":5,"938":22,"9387":9,"939":[0,22,25],"9392":6,"94":[9,22],"94226022e":[6,27],"94273542":26,"94284104":5,"94320205":5,"9444444444444444":1,"94556653e":26,"94591015":[19,25],"94639099":11,"946957":5,"9472222222222222":1,"94781064":27,"9482527":5,"94897736":25,"9492":6,"95":[1,9,11],"95008046":6,"95154558":19,"95231424":5,"952387":26,"95274315":19,"9527777777777777":1,"95284275":5,"953065564":1,"95351665":5,"954":22,"95511792":26,"955118":26,"9555555555555556":1,"955820c21e8b":4,"956563":[11,26],"95684892":5,"95782166e":26,"958228616652075":5,"95980855e":26,"96":[6,9,11],"960":22,"9601304850035702e":[6,27],"9601304850073734e":[6,27],"96024953":5,"9603":6,"96084663":5,"961":22,"962":22,"9637117593816477":[6,27],"9640435":5,"9649652536":4,"965548":26,"96631321":26,"96688672":5,"9674916":5,"967809":[11,26],"97005689":5,"97056672":19,"97108525e":26,"9722222222222222":1,"97243128":5,"972591":5,"97300836":5,"97497404e":[6,27],"975":1,"97507735":5,"97705827":5,"97758848":5,"9777777777777777":1,"9780387310732":24,"9780387848570":24,"9781098134174":25,"9781492032632":24,"9781801819312":25,"978553":5,"97898392":[6,26,27],"97906022e":26,"97926491":5,"97979891":6,"97992238e":26,"98":[0,1,9],"980":9,"9805555555555555":1,"98091621":5,"981321":26,"98139097":5,"98275501":5,"98279090e":26,"983310":26,"98368659":25,"98413059":5,"98454786":5,"985":22,"98566191":5,"986":22,"9861111111111112":1,"98625331e":26,"98650215":25,"98650823":25,"986699":5,"98680716":5,"98716878":5,"98808176":5,"98822371":6,"9888888888888889":1,"989":22,"9890348":5,"9893447":5,"98947894":26,"9898ff":[9,10],"99":[6,9,11,13],"990":9,"99009525":5,"99021575e":26,"99088801":5,"991":22,"99115119":5,"99176998":5,"992":22,"99217800e":26,"9923539830272697":26,"99242921":5,"99265097":5,"993":22,"99316252":5,"99371056":5,"99371466":22,"99389612":5,"9943201":5,"9947756":5,"99492986":5,"99509854":25,"9951502749739212":26,"99528218":5,"99539415":5,"99566069":5,"99578809":5,"996":[5,27],"99608161":5,"9963961":5,"9964486445275116":26,"99650061":5,"9967458":5,"99700706":5,"99709215":5,"99729756":5,"99751458":5,"99758326":5,"99762142":27,"99775587":5,"99793613":5,"99799099":5,"998100":5,"99810021":5,"99813653":5,"99828624":5,"9983295":5,"99845267":5,"99854557":26,"998577":5,"99861053":5,"99862019":26,"99869482":26,"99871521":5,"99876945":26,"99881845":5,"99883628":26,"99884384":5,"99884409":26,"99884986":27,"99891093":26,"99891873":26,"99893323":5,"99898558":26,"999":[9,22],"99901896":5,"99903755":5,"99906023":26,"9990927157696581":27,"99911427":5,"99912709":26,"99913489":26,"99918546":5,"99919837":5,"99920175":26,"99926459":5,"99927642":26,"9993237":5,"99933188":5,"9993511":26,"99938942":5,"99941797":26,"9994385":5,"99944272":5,"99949266":26,"99949306":5,"99953381":5,"99953475":5,"99956735":26,"99957911":5,"99961294":5,"99965056":5,"99967865":5,"99970894":26,"99970988":5,"9997332":5,"99975913":5,"99977849":5,"99978365":26,"99980002":5,"9998161":5,"99984732":5,"99987324":5,"99989476":5,"99991263":5,"99992746":5,"99993978":5,"99995":5,"999955585168597":[6,27],"9x":[6,20],"9y":[6,20],"\u00f8yvind":[6,26,27],"abstract":1,"boolean":4,"break":[0,4,6,11,14,25],"byte":[19,25],"case":[0,1,2,3,4,5,6,7,11,12,13,14,16,18,19,20,25],"catch":0,"class":[0,1,3,4,6,7,8,9,11,12,13,22,25],"default":[0,1,2,4,6,7,8,16,19,20,25,26,27],"do":[0,2,3,4,5,6,8,9,10,11,12,13,14,15,16,19,20,25,26],"ekstr\u00f8m":4,"export":9,"f\u00f8470":[23,25],"final":[0,1,2,3,4,5,6,7,8,9,10,11,13,14,16,20,21,22,23,25],"float":[0,3,4,5,9,11,13,14,19,25,26],"function":[2,3,4,5,9,14,15,16,17,18,19],"import":[0,1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,17,20,22],"int":[0,1,2,3,4,5,6,11,13,14,19,22,26],"long":[0,1,3,4,12,13,25],"m\u00f8svatn":[6,20],"new":[0,1,2,3,5,6,7,8,9,10,11,13,14,17,19,25,26],"public":[0,18,25],"return":[0,1,2,3,4,5,6,7,8,9,11,13,14,19,20,22,25,26,27],"sch\u00f8yen":[6,26,27],"short":[4,5,20,27],"super":[5,26,27],"switch":0,"throw":[3,6,22],"true":[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,19,20,22,25,26,27],"try":[0,1,2,4,5,6,7,8,9,10,11,13,14,15,16,18,19,20,22,25,26,27],"var":[1,5,6,10,11,20,22,25,26,27],"while":[0,1,3,4,5,6,7,8,9,11,12,13,22,25,26,27],A:[2,3,5,6,7,10,11,12,13,16,18,19,20,21,22,23,24,26],AND:2,And:[0,3,4,5,6,9,13,18,20,22],As:[0,1,2,3,4,5,6,8,10,12,13,16,19,20,22,25,26,27],At:[0,4,6,13,20,25],BE:[0,25],Be:[2,18,25],Being:13,But:[0,1,2,3,5,6,9,10,22,26,27],By:[0,3,5,6,12,13,17,19,25,26,27],For:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,24,25,27],IF:[6,27],IN:24,If:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,18,19,20,22,25,26,27],In:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,24,25,26,27],Is:11,Ising:[5,12,26],It:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,18,19,20,22,25,26,27],Its:[1,2,4,11],NO:[9,11],No:[0,6,7,9,25,27],Not:[0,1,5,6,26,27],OR:22,Of:22,On:[0,3,9,15,20,21,22,23,24,25],One:[0,1,3,4,5,6,7,8,11,12,13,17,20,22,26],Or:[0,1,6,20,25],Such:[0,6,12,16,22],That:[0,5,7,10,11,12,14,20,22,25,27],The:[4,10,13,14,15,16,19,20,21,22,23,24],Then:[0,1,6,8,9,10,11,12,13,14,19,20,25],There:[0,3,4,5,6,8,9,11,12,14,19,20,21,22,23,25,26,27],These:[0,2,3,4,5,8,9,10,11,12,13,14,15,16,19,20,22,23,25,26,27],To:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,19,22,27],With:[0,5,6,8,9,10,11,12,14,19,20,22,25,26],_0:[5,8,10,11,13,26],_1:[2,5,6,8,10,11,12,13,14,19,26,27],_2:[2,5,8,11,12,13,19,26],_3:19,_4:19,_9:13,_:[0,1,2,4,5,6,7,8,9,10,11,12,13,17,19,20,25,26,27],__class__:10,__doc__:6,__enter__:[0,7],__future__:[8,9],__getattr__:27,__getattribute__:25,__getitem__:[0,7],__init__:[0,1,2,3,4,7,14,27],__main__:2,__name__:[2,10,27],_accessor:25,_auto10:[6,12],_auto11:6,_auto12:6,_auto1:[2,3,4,5,6,7,12,13,19,22,26],_auto2:[2,3,4,5,6,12,13,19,22],_auto3:[3,4,5,6,12,13,19],_auto4:[4,6,12,13,19],_auto5:[4,6,12,13,19],_auto6:[4,6,12,19],_auto7:[4,6,12,19],_auto8:[6,12],_auto9:[6,12],_base:8,_build:[0,17,18,20,24,25],_c:1,_can_hold_identifiers_and_holds_nam:25,_check_optimize_result:[9,11],_class:8,_compon:11,_coordinate_desc:6,_depth:9,_fraction:9,_generatorcontextmanag:[0,7],_i:[0,1,2,5,6,7,8,11,12,13,15,16,17,20,25,26,27],_info_axi:25,_j:[0,1,2,3,5,6,8,13,17,20,26,27],_k:13,_l:12,_lambda:[6,25],_leaf:9,_ll:[3,4,14],_logist:[9,11],_m:10,_make_vjp:2,_multilayer_perceptron:1,_n:[2,5,8,11,13,26],_node:[2,9],_o:[3,4,14],_open_file_or_url:[0,7],_p:[5,8,26],_plugin_dir:[3,4,14],_ratio:11,_rc_params_in_fil:[0,7],_s:[3,4,14],_sampl:9,_split:[6,9,20],_t:13,_test:[6,20],_tf_getinputpropertieslist:[3,4,14],_trace:2,_valu:2,_varianc:11,_weight:9,a0:3,a0faa0:[9,10],a1:[0,25],a2:[0,25],a3:[0,25],a4:[0,25],a_0:[0,25],a_1a:[0,25],a_1x:[],a_2a:[0,25],a_2x:[],a_3:[0,25],a_3a:[0,25],a_4:[0,25],a_4a:[0,25],a_:[0,1,16,19,25,26],a_h:1,a_i:[0,1,2,12,25],a_j:[1,12],a_k:[0,1,12],aaron:24,ab:[0,2,5,13,14,20,25,26,27],ab_channel:18,abandon:1,abbrevi:21,abid:22,abil:[0,10],abl:[0,1,4,5,6,7,10,12,13,16,20,26],about:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,18,19,20,23,27],abov:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,22,24,25,26],abovement:[6,25],abscissa:13,absolut:[0,2,5,6,13,25,26,27],absorb:[26,27],acceler:13,accept:[0,3,6,9,20,25,26],access:[0,3,11,22,25],accid:[4,6],accompani:[0,25,26],accomplish:[8,9,13],accord:[0,1,2,5,6,9,12,13,14,15,16,22,25,27],accordingli:11,account:[0,3,5,13,15,22,25,27],accumul:[12,13,22],accur:[0,3,4,6,10,13],accuraci:[0,1,3,4,5,6,7,9,10,11,12,25,26],accuracy_scor:[0,1,10,25],accuracy_score_numpi:1,achiev:[0,1,5,6,8,12,19,25,27],aco:22,acquaint:18,acquir:[1,18,25],acr:0,across:[1,3,6,9,18,25],act:[1,3,19],action:22,activ:[0,2,3,4,9,21,23,25],actual:[0,1,4,5,6,8,11,16,19,22,25,26,27],ad:[1,3,4,5,8,13,15,16,19,27],ada_clf:10,adaboostclassifi:10,adadelta:13,adagrad:[],adam:[1,3,4,23,25],adapt:[4,6,13,24],add:[0,1,2,3,4,5,6,8,10,11,12,15,16,17,20,22,25,26,27],add_outgrad:2,add_subplot:[1,7,12,14],addendum:5,addit:[0,2,3,5,6,7,8,9,10,12,13,15,17,18,19,20,22,23,24,25,26,27],addition:[12,13],address:[1,9,11,13,25],adjac:[3,12],adjoint:[5,26,27],adjust:[0,5,12,13],admir:[0,25],advanc:[4,6,12,24,25],advantag:[1,3,5,6,10,13,19,27],adversari:25,afecionado:25,affect:3,affin:[0,3,8,11,26],afford:3,aficionado:25,aforement:14,african:0,after:[0,1,2,4,5,6,9,11,12,13,15,18,19,20,22,25,26,27],afterward:[0,25],ag:[0,7,21,25,26],ag_0:2,again:[0,1,4,5,6,7,8,10,11,12,13,15,16,20,22,25,26,27],against:[1,4,7,10],agegroup:7,agegroupmean:7,aggreg:[9,10],agorithm:10,agre:[5,6,22,27],agreement:13,ahead:9,ai:[0,24],aid:11,aim:[0,1,4,6,7,11,14,15,16,18,19,20,26],ainv:5,airplan:3,aka:[5,27],al:[0,2,4,15,16,17,20,24,25,26,27],alarm:[5,7,27],aldo:26,algebra:[0,3,5,13,18,26,27],algorithm:[0,1,2,4,5,6,7,8,13,14,18,19,20,22,24,25,27],align:[0,2,5,6,7,8,13,20,22,25,26,27],all:[0,1,2,3,4,5,6,7,9,10,11,12,13,14,15,18,19,20,21,22,23,24,25,26,27],allevi:[1,13],alloc:[3,19],allow:[0,1,2,3,5,6,8,10,13,15,16,18,19,20,25,26,27],almost:[0,1,6,8,11,13,22],alon:[2,9],along:[2,3,4,5,6,9,10,11,18,19,25,26,27],alpha:[0,1,2,3,4,6,7,8,9,10,13,14,22,25,26],alpha_0:3,alpha_1:3,alpha_2:3,alpha_:10,alpha_i:[3,13],alpha_k:13,alpha_m:10,alpha_n:3,alpha_opt:13,alreadi:[2,3,4,5,6,10,12,18,19,22,25,26,27],also:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,25,26,27],alter:1,altern:[0,1,4,5,6,8,9,11,13,19,20,25,26,27],although:[0,1,5,6,8,10,13,16,25,27],alwai:[0,3,5,6,12,13,16,20,22,25,26,27],am:4,ame2016:[0,25],american:0,among:[0,3,5,9,10,12,19,25,26,27],amongst:[5,27],amount:[0,1,3,4,6,8,10,14,18],an:[1,2,3,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20,22,23,24,26,27],an_:22,anaconda:[0,1,15,18,20,25],analog:13,analys:[6,27],analysi:[1,3,4,7,14,15,16,17,19,24],analyt:[2,3,5,6,7,12,13,15,18,20,25,26,27],analyz:[0,1,3,4,5,6,16,17,20,22,26,27],andrew:1,angl:[0,3,9,26],anharmon:3,ani:[0,1,2,3,4,5,6,7,8,9,10,12,14,22,25,26,27],anim:[4,12],ann:12,annot:[0,1,3,7,8,25],announc:25,anoth:[0,1,3,4,5,6,7,8,10,11,12,13,19,20,22,25,26],anp:2,ans_vspac:2,ansatz:[0,25],answer:[0,1,3,5,6,19,20,23,25,27],antialias:[2,6,20],anticip:4,anymor:[1,8],anyon:[4,8],anyth:[1,22],anytim:[23,25],apach:1,apart:[11,13],api:[1,18,25],appar:2,appear:[0,1,3,13,16,19,22],append:[1,3,4,8,9,13,25],appendix:20,appli:[0,1,2,3,4,6,7,8,9,10,11,12,13,15,16,20,22,24,25,26,27],applic:[0,1,3,4,5,6,7,9,12,13,19,20,22,24,25,26],apply_gradi:4,approach:[1,2,4,5,6,9,10,11,12,13,17,18,22,24,26],appropri:[2,6,9,12,13,18,22],approv:25,approx:[0,2,3,6,10,11,13,22,25],approxim:[0,1,2,3,4,5,6,7,10,11,13,20,22,25,26,27],apt:[0,15,18,20,25],aq:22,ar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],aragorn:25,arang:[1,3,4,6,7,9,10,12,13,20,25],arbitrari:[1,4,6,8,12,13,22],arbitrarili:[0,1,11,25],arc:[6,20],architectur:[3,4,12],archiv:[],area:[0,3,6,9,20,24,25],arg:2,argmax:[1,11],argmin:[4,10,14],argnum:2,argnum_0:2,argnum_1:2,argsort:11,argu:[1,13],argument:[0,2,3,5,6,11,12,13,20,25,26,27],argval:2,aris:[0,6,12,13,22,25],arithmet:[0,13,19,25],arm:[6,27],armadillo:19,around:[0,1,4,5,6,11,22,25,27],arr:2,arrai:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,18,20,22,26,27],arrang:[3,25],arraybox:13,arriv:[0,6,9,11,19,22,25],arrow:12,arrowprop:8,art:[0,1,15,18,25],articl:[0,3,4,6,10,20,25,26,27],artifici:[0,2,7,12,24,25],artificialneuron:12,arug:13,arxiv:[3,4,20],asarrai:[0,2,6,9,26,27],asid:26,ask:[5,6,11,12,20,27],aspect:[0,6,18,20,25,26,27],assembl:[0,3,25],assert:4,assess:[0,6,20,25,26,27],assici:4,assign:[0,7,8,9,12,13,14,21,23,24,25],associ:[0,6,9,12,14,22,25],assum:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,19,20,22,25,26,27],assumpt:[0,3,5,6,9,11,20,22,25,26],ast:[0,5,6,20,25,27],astronomi:[25,27],astyp:[4,9,10],asymmetri:[0,25],asymptot:[4,6],atom:[0,25],attempt:[0,4,6,7,8,10,25,27],attend:21,attent:[0,19,25],attr:27,attract:[0,10,25],attribut:[0,9,25,27],attributeerror:[25,27],audi:[0,25],audio:[3,4],august:[15,16,25],aurelien:[0,15,21,24,25],austfjel:[6,20],author:[0,1,10,22],authour:25,auto:[8,9,10,22],auto_exampl:[20,27],autocor:22,autocorrelation_tim:22,autocorrelform:22,autocovari:22,autoencod:[4,18,25],autoencond:18,autograd:[18,25],autom:[0,18,24,25],automac:19,automag:25,automat:[0,1,2,3,4,11,16,18,19,25],automobil:3,autonom:4,avail:[0,1,4,6,7,10,11,15,18,19,20,21,23,24,25],averag:[0,1,3,6,9,10,13,14,22,23,25,26,27],avoid:[0,4,5,6,9,11,13,19,25,26],awai:[2,3,6,26,27],awar:[2,10],award:[23,25],ax:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,19,20,25],axes3d:[2,6,13,20],axes_grid1:6,axhlin:8,axi:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,19,20,22,25,26,27],axiom:[5,27],axlabel:[0,25],axvlin:[4,8],axvspan:4,b1:8,b2:8,b3:8,b:[0,1,3,4,5,6,8,9,10,12,13,14,15,16,22,23,25,26,27],b_0:0,b_1:[0,2,12,13],b_2:[0,13],b_5:13,b_:[0,1,19],b_group:9,b_i:[0,1,2,12,25],b_ia_:[0,25],b_ia_i:0,b_index:9,b_j:[1,12],b_k:[0,1,12,13],b_m:12,b_score:9,b_valu:9,babcock:25,bachelor:[21,23],back:[0,3,4,5,6,8,9,10,15,19,22,25,26,27],backbon:19,backend:[0,1,4,7],background:[24,25,26],backpropag:1,backtrack:9,backup:19,backward:[1,2,4,12,19],backward_pass:2,bad:[6,26,27],badli:22,bag:[9,18,25],bag_clf:10,baggin:25,baggingboot:10,baggingclassifi:10,baggingtre:10,balanc:6,band:19,bandwidth:19,bar:[0,6,11,15,16,20,25],barber:24,bare:[4,10],base:[0,1,3,4,5,7,8,9,10,14,18,22,23,24,25,26,27],basi:[5,7,8,10,11,12,13,19,26,27],basic:[2,6,8,12,13,14,18,20,22,25],batch:[3,4,11,12,13],batch_shap:4,batch_siz:[1,3,4],batchnorm:4,bay:7,bayesian:[5,18,24,25,27],beam:25,becattini:23,becaus:[0,1,2,3,4,5,6,8,9,12,13,14,25,27],becom:[0,1,2,5,6,7,9,12,13,22,25,26,27],been:[0,1,2,3,4,5,6,11,12,13,18,19,20,25,26,27],befor:[0,1,2,3,4,5,6,7,8,12,13,14,19,20,22,25,26,27],beforehand:[0,22,25],begin:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,19,20,22,23,25,26,27],behav:[1,6,13],behavior:[0,1,13,25],behaviour:12,behind:[0,1,6,8,13,25],being:[0,1,2,3,4,5,7,8,10,11,12,13,17,22,25,26,27],believ:[9,19],belong:[7,8,9,13,14],below:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,19,20,22,25,26,27],benchmark:10,benefici:[1,13],benefit:[0,1,4,11,13,15,18,25],bengio:[1,21,24,25,26],benign:[1,7,9],besid:[4,5,27],bessel:[5,26,27],best:[0,1,2,3,4,5,6,7,8,9,10,12,13,20,23,25,26],beta:[0,1,3,5,6,7,10,11,13,16,17,20,25,26],beta_0:[0,1,3,5,6,7,13,25,26,27],beta_0x_:[0,25,26],beta_1:[0,1,3,5,6,7,10,13,25,26,27],beta_1x_0:[0,25],beta_1x_1:[0,7,25],beta_1x_2:[0,25],beta_1x_:[0,25,26],beta_1x_i:[7,13,26],beta_2:[0,3,13,25,26],beta_2x_0:[0,25],beta_2x_1:[0,25],beta_2x_2:[0,7,25],beta_2x_:[0,25,26],beta_2x_i:26,beta_3:3,beta_3x_i:26,beta_4x_i:26,beta_:[0,3,6,7,13,25,26,27],beta_i:[0,3,5,25,26,27],beta_j:[0,5,6,13,20,25,26,27],beta_k:13,beta_linreg:13,beta_m:10,beta_mg_m:10,beta_n:3,beta_p:7,beta_px_p:7,betavalu:5,better:[0,1,2,3,4,6,9,10,11,12,13,25,26,27],between:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,17,20,22,25,26,27],beyond:[0,1,5,6,8,13,20,25,26],bf:[13,14,19,22],bg:25,bgd:13,bia:[0,1,2,3,5,8,9,10,12,13,25,26,27],bias:[1,2,3,5,6,9,12,27],bibliographi:20,big:[0,1,2,5,6,14,27],bigger:[1,6,26,27],bigr:12,bike:9,bilbo:25,billion:[3,12,18],bin:[0,7,22],binari:[0,3,5,7,9,10,12,25,27],binarycrossentropi:4,bind:[0,26],binomi:[18,22,25],binsboot:6,bioinformat:0,biolog:[1,12],bios1100:[18,25],bird:[0,3],birth:25,bishop:[21,24,25],bit:[1,4,19,22,25],bitwis:22,bivari:2,bk:[0,13],bla:[19,25],black:[8,9,14],blob:[16,20],block:[6,10,18,19,22,25],blog:25,blogpost:4,blue:[0,3],bmatrix:[0,1,3,5,7,8,11,13,19,25,26,27],bmi:1,bodi:[0,1,4,12,25],bold:1,boldfac:[0,5,16,26,27],boldsymbol:[0,1,2,3,5,6,7,8,10,11,13,14,15,16,17,20,25],boltzmann:[12,18,25],book1:24,book:[20,24,25,26],boost:[1,9,18,25],boostrap:10,bootstrap:[1,13,18,20,25],borrow:25,boston_dataset:0,bot:8,both:[0,1,4,5,6,8,9,10,13,14,15,16,18,19,20,22,23,25,26,27],bottl:7,bound:[0,8,12],boundari:[2,4,8,11,12],box:[4,9],boxed_arg:2,boyd:[8,13],bracket:[4,22],brain:[1,7,12],branch:9,breast:[5,7,11,27],breat:[],breviti:13,brew:[0,15,18,20,25],brg:8,brief:[20,26],briefli:[0,25],bring:[0,5,6,10,26,27],broad:0,broadcast_idx:2,brought:[13,18,25],brownle:4,browser:25,brute:[3,5,11,26,27],bs:[8,9,10],buffer_s:4,bui:4,build:[0,4,5,6,10,19,22,25,27],built:[0,1,3,4,6],bunch:11,busi:0,c1:[8,11],c2:[8,11],c:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,22,23,24,26,27],c_0:22,c_1:12,c_2:12,c_3:12,c_4:12,c_:[0,8,9,10,13,22],c_i:[12,13],c_k:22,ca:[1,25],cach:10,cal:[0,8,10,12,13,15,16,25],calcul:[0,1,2,4,5,6,8,9,10,11,12,13,14,15,16,19,22,25,27],california:[],call:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18,19,20,22,23,25,26,27],calor:[0,26],cambridg:[13,24],can:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,26,27],cancel:[0,13,25,26],cancer:[5,10,27],cancerpd:7,candid:[8,9,10],cannot:[0,1,4,5,6,7,8,9,21,22,26,27],canopi:[0,15,18,20,25],canva:[20,25],cap:[5,27],capabl:[0,1,8,13,18,25],capac:[2,23],capita:0,caption:20,captur:[4,11,12],car:[3,4],card:[0,7,25],cardin:1,care:11,carefulli:13,carlo:[0,6,18,22,24,25],carri:[2,6,7,20],cart:10,casella:24,cast:1,cat:[3,4],categor:[0,1,3,9,11,25],categori:[0,1,3,7,10,12,14,25],categorical_crossentropi:[1,3],caus:[0,5,6,7,22,25,26,27],causal:0,causat:[0,25],cax:1,cb:[6,25],cbar:1,cc:[0,1,5,13,25,26,27],ccc:[5,12,27],cd_fast:6,cdf:22,cdot:[0,2,6,12,13,14,19,22,25],celebr:13,cell:[0,1,2,3,4,6,7,8,9,10,13,14,20,27],center:[0,1,6,7,8,9,11,14,20,22,25,27],central:[0,3,5,6,8,16,19,25,26,27],centroid:[14,22],centroid_differ:14,centuri:3,certain:[0,3,6,7,9,22,25,26],cg:13,cha:0,chain:[0,1,13,18,22,25],chanc:[1,5,13,22,27],chang:[0,1,2,3,4,5,6,8,9,11,12,13,14,19,20,22,25,26,27],channel:3,chapter3:[0,20],chapter:[0,6,10,11,16,19,20,24,25,26,27],charact:[0,3,5,8,25,26],character:[8,9,10,12,22],characterist:[0,1,3,10,13,25],charg:[0,25],charl:0,chase:4,chatgpt:20,chd:7,chddata:7,cheap:[5,26],cheaper:[1,13],check:[0,1,3,4,5,6,11,13,19,25],checkmark:3,checkpoint:4,checkpoint_dir:4,checkpoint_prefix:4,chen:10,cheng:26,chiaramont:2,choic:[0,1,2,3,4,6,9,12,13,14,19,25,26],choleski:[5,19,26],choos:[2,3,6,9,10,11,13,14,20],chosen:[0,1,2,6,8,9,10,13,16,22,25],chosen_datapoint:1,christian:24,christoph:[21,24,25],cifar10:3,cifar:3,circ:[1,12],circl:[0,8,12,26],circuit:3,circumfer:9,circumv:[1,5,13,26],cite:20,ckpt:4,clariti:22,class_nam:[3,9],class_val:9,class_valu:9,classic:[7,9,13],classif:[0,3,5,6,7,8,11,12,18,20,24,25,26,27],classifi:[0,1,4,7,9,10,11,25],classificaton:1,classifii:10,clean:1,clear:[1,5,10,12,13],clearli:[0,3,5,6,7,8,22,26,27],clever:[1,10],clf3:0,clf:[0,6,8,9,10,25,26],clf_lasso:6,clf_ridg:[6,25],clip:[3,22],clone:23,close:[0,1,2,4,6,8,9,11,12,13,14,20,22,24,25],closer:[3,5,13,26],closest:[8,11,13,14],closur:[18,25],cloud:[18,25],cluster:[0,1,4,6,11,18,25],cluster_label:14,cm:[1,2,3,6,8,9,13,20],cmap:[0,1,2,3,4,6,8,9,10,20,25],cmap_arg:6,cmb:21,cmd:9,cn_:22,cnn:12,cnn_kera:3,cntk:[18,25],co:[0,2,3,6,9,13,25],code:[3,4,6,7,8,15,16,17,18,19,20,22,24],coef0:8,coef:[0,25],coef_:[0,5,6,8,9,13,25,26,27],coeff:5,coeffici:[0,3,5,6,7,8,9,13,15,16,19,25,26,27],coerc:[0,6,25],coin:[10,22],coin_toss:10,col:[0,11,25,26],colab:[18,25],cold:9,colinear:0,collabor:20,collaps:8,collect:[0,2,6,10,11,18,22,24,25],collinear:[5,26,27],color:[0,3,4,6,8,9,10,20,22],color_channel:3,color_cod:6,colorbar:[1,6,20],colsample_bytre:10,colsaobject:10,column:[0,1,2,5,6,7,8,9,11,12,17,19,25,26,27],columntransform:9,com:[4,6,16,18,20,24,25],combin:[1,2,5,6,7,10,22,27],come:[0,1,3,4,5,12,13,14,15,25,26,27],command:[0,1,25],comment:[0,4,5,6,15,16,20,25,26],commerci:[0,15,18,20,25],commod:[0,25],common:[0,1,3,5,6,7,9,11,13,14,20,22,25,26],commonli:[0,1,4,6,7,9,13,14,26],commun:[0,12,20],commut:3,commutatitav:3,compact:[0,1,3,5,6,7,9,11,12,13,14,25,26,27],compair:0,compar:[0,3,4,5,6,11,13,15,16,19,20,25,26,27],comparison:[2,4,13],compat:7,compet:0,competit:10,compil:[0,1,3,4,13,15,18,19,25],complet:[0,2,3,4,9,12,25],completenn:12,complex:[1,5,8,9,11,12,13,15,16,25],complic:[0,1,9,13,25],compoment:26,compon:[0,1,3,4,5,6,7,9,14,16,18,25,26,27],components_:11,compos:[9,12,13,14,18,25],compphys:[0,6,16,17,18,20,21,23,24,25],compress:[0,25,26],compris:6,compromis:[5,26],compulsori:[18,25],comput:[0,1,2,3,4,5,6,7,8,10,11,12,13,15,16,17,18,19,20,21,22,24,25,26,27],computation:[0,3,6,9,13,22,25],computationalscienceuio:25,computerlab:20,con:[],concaten:[2,4,6,14],concav:[1,9,13,26],concentr:[0,10],concept:[0,2,18,25,26],conceptu:[12,13],concern:[0,1,4,7,25],concic:25,conclud:[0,5,13,27],conclus:1,cond:2,conda:[0,1,15,18,20,25],condis:26,condit:[0,2,4,5,6,8,9,11,13,22,25,26],conduct:18,condwav:2,confid:[0,5,6,7,8,20,25,26,27],configur:3,confirm:[5,12,27],confus:[5,6,7,10,19,26,27],confusion_matrix:9,congruenti:22,conjug:[4,8],conjugaci:13,conjunct:3,connect:[0,1,3,4,9,11,12,13,19,25,26],consequ:[5,6,8,10,12,13,26,27],conserv:[5,14,26],consid:[0,1,2,3,5,6,7,8,9,10,12,13,16,19,20,22,25,26,27],consider:[0,1,5,13,25,26,27],consist:[0,1,2,3,4,6,12,13,20,22,26],constant:[0,2,4,5,6,8,12,13,22,25,26,27],constitu:[0,25],constitut:[2,6],constrain:[1,3,5,7,11,27],constraint:[5,6,8,13,26,27],construct:[0,1,2,3,5,6,7,8,9,10,11,19,22,25,26,27],consult:[],contact:[0,25],contain:[0,2,3,4,5,6,7,8,9,11,12,13,17,19,20,22,24,25,26,27],contemporari:25,content:[1,18,19,25],context:[6,10,13,20],contextlib:[0,7],contigu:19,continu:[0,1,2,3,4,5,6,7,8,9,10,12,13,17,19,20,22,25,26,27],contour:[9,10,13],contourf:[8,9,10],contrast:[1,4,9,10,12],contribut:[0,3,5,13,22,25,26,27],contributor:[0,20],control:[0,1,3,9,13,15,18,25],conv2d:[3,4],conv2dtranspos:4,conv:[3,4],convei:25,conveni:[0,5,6,12,13,19,20,25,27],convent:[12,26],converg:[1,2,4,5,6,8,9,11,13,14,26,27],convergencewarn:[1,6,8,9,11],convert:[0,1,4,5,9,11,13,19,25,26],converttomatrix:4,convex:[4,5,7,26],convinc:13,convolut:[1,4,18,25],cook:20,cool:[4,9],coolwarm:[6,20],coordin:[5,12,14,26,27],coorel:0,copi:[0,1,2,14,26],copyright:[],core:[0,2,7,10,25],corel:25,coronari:7,corr:[0,5,7,11,26],correalt:[11,18],correct:[0,1,2,3,4,5,7,13,19,22,25,26,27],correctli:[1,2,6,7,10,20],correl:[0,1,3,5,6,7,10,12,13,18,22,25,27],correlation_matrix:[0,5,7,11,26],correspond:[0,3,5,6,8,9,11,12,15,16,17,18,19,20,22,25,26,27],cortex:12,cosin:[3,6],cost:[0,2,3,5,6,7,8,9,12,13,16,17,20,25],cost_deep_grad:2,cost_funct:2,cost_function_deep:2,cost_function_deep_grad:2,cost_function_grad:2,cost_grad:2,cost_sum:2,costol:13,could:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,17,19,20,22,25,26,27],coulomb:[0,25],count:[0,2,9,21,22,23,25],countor:13,coupl:[4,5,6,27],cours:[0,1,3,5,11,20,21,23,26],courvil:[21,24,25,26],cov:[5,6,11,19,22,25,26,27],cov_xi:[5,11,26],cov_xx:[5,11,26],cov_yi:[5,11,26],covari:[0,7,18,19,25,27],covariance_matrix:[5,11,14,26],cover:[0,5,17,18,23,24,26,27],covert:[0,25],covxi:22,covxx:22,covxz:22,covyi:22,covyz:22,covzz:22,cpu:1,craft:3,creat:[1,2,3,4,5,9,10,11,12,18,25,27],create_biases_and_weight:1,create_convolutional_neural_network_kera:3,create_neural_network_kera:1,create_x:[5,11,26],credit:[0,7,23,25],crim:0,crime:0,criteria:[0,4,9,10,14,22,25],criterion:[9,10,13],critic:[6,20,26,27],critiqu:20,cross:[0,1,3,7,9,10,13,18,22,25,26,27],cross_entropi:4,cross_val_scor:6,cross_valid:[7,10],crossvalid:6,crucial:[1,22],cs231:3,cs:[21,23],csr_matrix:[19,25],csv:[0,4,6,7,9,25],ctnk:1,cubic:0,cumbersom:[5,27],cumsum:[10,11,25],cumul:[7,10,22],cumulative_heads_ratio:10,cup:[5,27],current:[1,2,3,4,13,14,24],curs:[0,26],curv:[6,7,10,12,20],curvatur:13,custom:[6,14,20],custom_cmap2:[9,10],custom_cmap:[9,10],cutpoint:9,cv:[6,7,10],cvxbook:13,cvxopt:[5,8,26],cycl:[1,12],cyclotron:27,d2_g_t:2,d:[1,2,3,4,5,6,7,8,9,10,11,13,14,19,22,23,25,26,27],d_f:13,d_g_t:2,d_net_out:2,da:3,dagger:[5,19,26],dai:[1,9,18],damp:3,daniel:23,darget:9,darkr:22,dat:[0,25],dat_id:[0,6,7,9,25,26],data1:14,data2:14,data3:14,data4:14,data:[2,4,5,8,10,12,13,14,17,19,24],data_id:[0,6,7,9,25,26],data_indic:1,data_panda:25,data_path:[0,6,7,9,25,26],databas:1,datafil:[0,6,7,9,20,25,26],datafram:[0,4,5,7,9,11,25,26],datapoint:[1,5,6,7,11,13,26],dataset:[0,4,6,7,8,9,10,11,13,14,15,16,20,25],datatyp:4,date:[15,16,17,20,25,26,27],daughter:10,david:[24,25],dbh:1,dbo:1,dc5e85cd93c3:[],dcomposit:19,ddot:2,dead:1,deadlin:[16,17,21],deal:[0,1,3,5,6,8,11,13,14,17,19,20,22,25,26,27],dealt:0,debt:7,debug:[0,5,6,27],decad:[0,3],decai:[0,13,22,25],decemb:[21,23,25],decent:10,decid:[0,2,3,5,6,9,20,27],decim:[0,25],decis:[0,1,8,11,18,24,25],decision_funct:8,decision_tre:9,decisiontreeclassifi:[9,10],decisiontreeregressor:[0,9,10],decisiontreeregressordecisiontreeregressor:9,declar:[0,4,19,25],decompos:[5,6,19,26],decomposit:[0,6,12,20,25,27],decompost:[5,26],deconvolut:3,decorrel:[10,13],decreas:[1,2,4,5,6,10,11,13,27],deduc:[0,25],deep:[3,7,12,13,18,21,24,26],deep_neural_network:2,deep_param:2,deep_tree_clf1:9,deep_tree_clf2:9,deep_tree_clf:[9,10],deepen:[5,18,25],deeper:[0,3,4,25],deeplearningbook:[24,25,27],deer:3,def:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,20,22,25,26,27],def_covari:22,default_tim:4,defect:[5,26],defici:[5,26],defin:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,22,26,27],definit:[1,2,5,6,7,8,10,11,12,13,17,19,22,26,27],defint:22,defvjp:2,degre:[3,5,6,8,9,10,11,15,16,17,20,22,25,27],deisenroth:26,del:1,delet:6,delimit:4,deliv:[21,25],delta:[0,2,3,6,8,12,13,14,25],delta_0:3,delta_1:3,delta_2:3,delta_3:3,delta_4:3,delta_5:3,delta_:[1,19],delta_h:[0,1,25],delta_j:[3,12],delta_k:12,delta_l:[1,3],delta_momentum:13,delta_n:[0,3,25],delug:18,delv:0,demand:13,demonstr:[0,3,5,6,7,11,12,18,25,26,27],den:4,denomin:[1,5,27],denot:[1,2,6,7,13,22],dens:[1,3,4],densiti:[0,2,6,22,25],depart:[23,25,26,27],depend:[0,1,2,4,5,6,7,8,11,12,13,15,18,19,20,22,25,26,27],depict:22,deploy:[0,15,18,20,25],deprec:2,depth:[0,3,9,10,19],deriv:[0,1,2,6,7,8,10,11,13,16,17,18,20,25],derivati:13,derivative_fn:13,descend:[5,9,11,26,27],descent:[0,1,3,7,8,12,25,26],describ:[0,2,4,5,6,8,10,11,12,13,19,20,25,27],descript:[0,8,9,25],design:[0,1,3,4,5,6,7,10,11,12,13,15,16,17,20,25,27],designmatrix:[0,25],desir:[0,2,4,5,13,14,25,26],despit:[1,12],destroi:19,det:[5,19,26],detail:[0,6,11,13,14,19,20,26],detect:[3,8,12],determin:[0,2,3,4,5,6,8,9,10,11,12,13,16,19,22,25,26,27],determinist:[7,13,22],dev:[1,20],develop:[0,3,5,8,10,11,12,18,19,20,25,26,27],deviat:[0,1,2,4,5,6,20,22,25,26,27],devic:[3,4,14],devis:12,df1:25,df:[4,8,11,13,25],di:0,diag:[5,8,26,27],diagnost:[1,10],diagon:[0,5,7,13,19,20,22,25,26,27],diagonaliz:[5,26],diagram:10,diagsvd:6,dice:[6,22],dict:[6,8],dictat:[],dictionari:0,did:[0,1,5,6,7,10,11,14,20,25,27],die:1,diff1:2,diff2:2,diff:2,diff_ag:2,diffeent:8,differ:[0,1,2,3,4,5,6,7,9,10,11,12,13,14,15,17,18,19,20,22,24,25,26,27],differenti:[0,3,16,18,19,25,26],differential_oper:2,difficult:[0,1,6,10,13,20,22,25],difficulti:[0,1,13,25],diffonedim:2,diffus:[],digit:[0,1,3,4,6,20,21,23,25],dilemma:13,dilut:1,dim:[4,11,14,19],dimens:[0,1,2,3,4,5,8,9,11,14,16,17,19,25,26,27],dimension:[0,4,5,6,9,11,13,14,18,19,25,27],dimensionless:[0,3,25],diment:19,dimnsion:4,diod:3,direct:[0,1,2,4,7,11,12,13,14,25,26],directli:[1,4,5,6,22,26],directori:[0,7],disadvantag:[0,25],disappear:[3,6],disc_loss:4,disc_tap:4,discard:[6,11],disciplin:[0,3,12],disclaim:22,discord:25,discourag:13,discov:[0,25],discover:[5,27],discret:[1,3,5,7,13,27],discrimin:[4,7,10,11],discriminator_loss:4,discriminator_loss_list:4,discriminator_model:4,discriminator_optim:4,discuss:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,24,25,26,27],diseas:7,disguis:[6,26,27],disord:[1,7],displai:[0,1,3,4,5,6,7,8,9,10,11,12,14,20,22,25,26],displaystyl:[0,5,17,25,26,27],disregard:[0,25],dissimilar:[11,14],dist:14,distanc:[0,8,9,11,14,22],distance_list:9,distinct:[3,7,8,9,10,14],distinctli:8,distinguish:[0,4,7,8,22,25],distplot:0,distribut:[0,1,4,6,7,10,11,13,14,15,16,18,19,20,25,26],distrubut:[0,15,18,20,25],ditto:[],dive:[0,8,19,25],diverg:[1,13],divid:[0,1,3,5,6,7,8,9,11,12,22,25,26,27],divis:[6,8,9,13,19,22],dlopen:[3,4,14],dna:7,dnn1:4,dnn2_gru2:4,dnn:[0,1,2,4,12,25],dnn_kera:1,dnn_model:1,dnn_numpi:1,dnn_scikit:[0,1,25],doamin:27,doc:[0,6,16,17,18,20,21,23,24,25],document:[4,9,11,13],doe:[0,1,2,3,4,5,6,8,10,11,12,13,14,16,19,20,22,25],doesn:[3,9,12],dog:[1,3,4],domain:[5,8,13,20,27],domin:[0,25],don:[0,1,3,5,6,7,8,11,13,15,18,20,25,26],done:[0,2,3,4,5,6,9,10,11,13,17,19,20,25,26,27],dot:[0,2,3,5,6,7,8,9,10,11,12,13,19,20,22,25,26,27],doubl:[3,4,19,25],doubli:1,doubt:20,down:[0,3,6,9,11,12,13],download:[0,1,3,5,6,19,20,24,25],downsampl:3,dozen:1,dq:6,drag:13,dramat:11,drastic:4,draw:[4,6,10,13],drawback:[0,1,3,13,26],drawn:[1,4,6,7,11,22,25],drive:[3,4],driven:3,drop:[0,1,5,6,11,13,22,25,26,27],dropna:[0,6,25],dropout:4,dt:[2,3,13,22],dtype:[0,1,2,3,4,14,19,25,26],dual:8,dualiti:6,dub:[0,25],due:[1,2,5,6,8,10,12,13,23,25,26],dummi:0,dure:[0,1,3,4,8,9,11,17,18,20,25],dwell:0,dwh:1,dwo:1,dx:[2,3,8,22],dx_1:22,dx_1p:6,dx_2p:6,dx_mp:6,dx_n:22,dxp:6,dy:[1,8,22],dylib:[3,4,14],dynam:4,dz:8,e:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,22,23,25,26,27],e_:[0,2,25],each:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,18,19,21,22,23,25,26,27],eapprox:[0,25],earli:[1,13],earlier:[0,5,7,8,9,11,12,13,25,26],earthexplor:[6,20],eas:[6,9,14],easi:[0,5,6,7,8,9,10,11,12,13,18,19,25,26,27],easier:[5,6,8,9,13,22,25,26],easiest:13,easili:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,19,20,25,26,27],eastern:[23,25],ebind:[0,25],eblock:9,econometr:25,economi:5,ecosystem:[18,25],ect:21,edg:3,edgecolor:6,edu:13,educ:[0,20,25],eff:22,effect:[1,4,10,13,22],effic:1,effici:[0,3,10,13,18,19,22,25],efron:6,egrad:13,eig:[5,11,13,19,22,25,26],eigen:22,eigenpair:[5,11,26],eigenvalu:[0,5,8,11,13,19,25,26,27],eigenvector:[5,11,13,17,26,27],eight:[19,25],eigval:[19,22,25],eigvalu:[11,13],eigvec:[19,22,25],eigvector:[11,13],eispack:[19,25],either:[1,5,6,7,8,9,10,11,13,15,16,20,22,25,26,27],elabor:22,elarn:3,electr:[0,3,12,25],electron:25,eleg:11,element:[1,2,3,4,5,6,7,8,11,12,13,17,18,19,20,21,24,26,27],elementari:[10,13,19],elementwis:[3,13],elementwise_grad:[2,13],elessar:25,elif:[2,14],elim:19,elimin:[3,8],els:[1,2,3,4,7,9,12,13,14,19],elu:1,elus:[0,25],email:[21,23,25],embed:[0,11,26],embodi:[6,20],emit:22,emner:24,emphas:[0,10,18,25],emphasi:[0,18,24,25],empir:[1,11,22],emploi:[0,1,5,6,11,13,20,22,25,26,27],employ:0,empti:[6,10],emul:12,en:[18,24],enabl:11,enbodi:6,encod:[0,3,5,7,9,11,14,17,25,26,27],encompass:[0,20,22],encount:[0,1,5,6,7,13,22,25,26],encourag:20,end:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,19,20,22,23,25,26,27],end_box:2,end_nod:2,end_valu:2,endpoint:[3,6],energi:[0,4,6,26],enet_coordinate_desc:6,enforc:12,eng:24,engin:[0,1,3,4,18,25],english:20,enocurag:20,enoent:[3,4,14],enorm:3,enough:[0,6,13,25],ensembl:[1,9],ensur:[0,1,2,3,5,6,11,13,22,26,27],entail:25,enter:[5,6,17,26,27],enthought:[0,15,18,20,25],entir:[1,3,7,9,18,22,25],entiti:[9,12,19,25],entri:[0,5,8,11,12,19,25,26,27],entropi:[1,3,7,10,13,25],enumer:[0,1,2,3,4,6,8,25,26,27],env:[0,1,2,3,4,6,7,8,9,11,14,22,25,27],environ:[2,9,18,20],eo:[0,6,25],eol:[0,25],eosfit:[0,25],epoch:[0,1,3,4,12,13,25],epsilon:[0,5,6,7,13,20,25,26,27],epsilon_0:[0,25],epsilon_1:[0,25],epsilon_2:[0,25],epsilon_:[0,25],epsilon_i:[0,25,26],eq:[3,13,14,19,22],eqnarrai:[3,5,6,27],equal:[0,1,2,3,4,5,6,8,9,11,12,13,14,15,19,20,22,25,26,27],equat:[1,3,4,5,6,7,8,9,10,11,13,14,16,17,19,20,22],equilibrium:[2,12],equiv:[3,13,19,22],equival:[0,1,5,7,8,11,13,18,19,25,26,27],erf:22,eriador:25,eridg:25,err:[0,7,10],err_:6,err_sqr:2,errat:13,errno:[0,3,4,7,14],erron:2,error:[1,2,4,5,6,7,9,11,12,13,15,16,17,18,19,20,22,27],error_estimate_corr_tim:22,error_hidden:1,error_output:1,escap:13,especi:[1,3,9,12,13,20],essenti:[0,5,6,9,10,12,14,20,22,26],establish:[0,6,10,11,15,20,25],estim:[0,1,5,6,7,10,11,13,18,22,25,26],estimated_mse_fold:6,estimated_mse_kfold:6,estimated_mse_sklearn:6,et:[0,2,4,15,16,17,20,24,25,26,27],eta0:[8,13],eta:[0,1,3,8,12,13,25],eta_:13,eta_t:13,eta_v:[0,1,3,25],etc:[0,1,3,5,7,8,9,11,12,13,14,15,18,19,20,22,26],ethic:18,euclidean:[0,14,26],euler:[],evalu:[0,2,3,4,5,6,9,13,20,22,25,26,27],evaluationform:20,evaluationgrad:20,evalut:13,even:[0,1,3,4,5,6,8,9,10,11,12,13,14,18,19,22,25,26,27],evenli:4,event:[5,7,10,22,27],eventu:[0,5,6,11,12,13,20,23,26,27],everi:[0,1,2,3,4,5,6,9,10,11,12,13,14,18,22,23,25,26,27],everyth:[4,12],everywher:[4,13],evolv:0,exact:[0,5,11,12,13,19,22,25,26],exactli:[0,3,4,6,12,18,20,26],exam:25,examin:6,exampl:[5,11,12,13,15,16,18,19,20,22,24],exce:[1,12,13],excel:[0,1,4,5,10,25,26],except:[0,3,4,6,7,8,9,19],excess:[0,25],excit:0,exclud:[1,6,12,20,26,27],exclus:[0,1,3,6,22,25],execut:[2,5,13,26],exemplifi:13,exercic:[23,25],exercis:[5,18,20,21,23,27],exercisesweek35:17,exhaust:6,exhibit:[0,5,6,8,25,26],exisit:[],exist:[0,1,2,3,4,5,6,7,8,9,13,14,19,20,25,26,27],exit:[5,19,26],exp:[0,1,2,5,6,7,8,10,11,12,13,15,16,20,22,25,26,27],exp_term:1,expand:[5,7,11,13,26],expandus:[0,7],expans:[0,3,5,8,10,12,13,25,26],expect:[0,1,5,6,7,11,12,13,15,16,18,20,25,26],expectation_value_of_h_wrt_p:22,expens:[6,10,13],experi:[0,1,6,8,13,18,20,25,26],experiment:[0,4,6,9,22,25],expert:[1,9],explain:[0,6,9,10,11,13,20,25],explained_variance_ratio_:11,explan:[],explanatori:[0,25],explicit:[0,3,6,13,19,20,25,26,27],explicitli:[0,4,8],explod:1,exploit:[0,3,12,13,25],explor:[1,4,6,8,13,18,20],expon:1,exponenti:[0,1,5,6,10,13,20,22,25,27],export_graphviz:9,export_text:9,exporttext:9,expos:18,express:[0,2,3,5,6,7,10,12,13,16,19,20,22,25,27],exptmean:22,exptvari:22,extend:[0,2,7,11,13,17,18,25],extens:[0,12,15,18,25],extent:[0,1,6,24],extern:[3,6,9],extra:[1,3,5,23,25,26],extract:[0,3,5,6,7,8,11,13,19,25,26],extrapol:[0,25],extrem:[0,1,4,5,6,7,8,9,13,16,19,26,27],extremum:13,extrins:11,ey:[0,5,6,13,14,19,25,27],f11:[0,25],f12:[0,25],f13:[0,25],f1:13,f1_grad:13,f1d:13,f2:13,f2_grad_x1:13,f2_grad_x1_analyt:13,f2_grad_x2:13,f2_grad_x2_analyt:13,f3:13,f3_grad:13,f3_grad_analyt:13,f4:13,f4_grad:13,f4_grad_analyt:13,f5:13,f5_grad:13,f6:13,f6_for:13,f6_for_grad:13,f6_grad_analyt:13,f6_while:13,f6_while_grad:13,f7:13,f7_grad:13,f7_grad_analyt:13,f8:13,f8_grad:13,f9:[0,13,25],f9_altern:13,f9_alternative_grad:13,f9_grad:13,f:[0,1,2,3,4,5,6,7,8,10,12,13,14,16,19,22,23,25,26,27],f_0:[3,10],f_1:[10,13],f_2:[12,13],f_3:12,f_:10,f_d:22,f_grad:13,f_grad_analyt:13,f_i:[0,6,12,16],f_m:[3,10],f_n:3,f_vec:2,f_wrap:2,face:13,facecolor:[6,8,22],facil:[0,15,18,25],facilit:12,fact:[0,1,3,5,9,11,12,13,25,26,27],factor:[0,1,3,5,6,9,10,11,13,19,22,25,26,27],factori:13,fade:6,fafab0:[9,10],fahimeh:[23,25],fail:[0,6,8,9,11,13,23,25],fail_on_error:[0,7],failur:7,fairli:[1,2,22],faisal:[16,26],fake:4,fake_loss:4,fake_output:4,fale:[],fall:[8,9,21],fals:[0,1,2,3,4,5,6,7,9,10,14,19,20,25,26,27],famili:[0,7,8,22],familiar:[0,3,5,6,8,15,18,19,20,22,25,27],famou:[6,12],far:[0,3,4,5,6,8,11,12,13,14,25,26],fashion:[0,9,10,25],fast:[1,3,6,10,12,13,18,22,25],faster:[1,11,13],fastest:[13,19],favor:7,favorit:22,fc:3,fd:[0,7],featur:[0,1,3,5,6,7,8,10,11,12,13,18,20,22,25,27],feature_nam:[0,1,7,9],feautur:9,fed:1,feed:[0,2,3,11,18,25],feed_forward:1,feed_forward_out:1,feed_forward_train:1,feedback:[4,25],feeddorward:4,feedforward:[1,4,12],feel:[0,5,6,11,13,15,16,18,20,23,25,27],feet:0,felt:20,fetch:[6,20],few:[1,3,4,5,9,22,25],fewer:[0,9,11,25],ffnn:[1,12],field:[0,3,6,12,18],fifth:[0,6,15,16,20,25],fig:[0,1,2,3,4,6,7,12,13,14,20,25],fig_id:[0,6,7,9,25,26],figaxi:22,figsiz:[0,1,2,3,4,6,7,8,9,10,25],figur:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,18,20,25,26,27],figure_id:[0,6,7,9,25,26],figurefil:[0,6,7,9,25,26],file:[0,2,3,4,5,6,7,9,14,20,25,26,27],file_prefix:4,filenam:25,filenotfounderror:[0,7],fill:[5,9,26],filter:[0,3,4,7],financ:0,find:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,18,20,22,25,26,27],fine:[0,14,15,25],finish:2,finit:[3,5,6,12,13,17,22,26,27],first:[0,1,2,3,5,6,7,8,9,10,11,13,14,15,16,17,19,20,22,23,24],firsteigvector:11,fit:[1,3,4,5,6,7,8,9,11,12,13,15,16,17,20,22,26],fit_beta:[6,26,27],fit_intercept:[0,5,6,26,27],fit_mod:9,fit_transform:[0,6,8,9,11],fiti:[0,25],five:[0,9,17,20,25,26],fix:[0,3,4,6,10,11,12,13,20,25],fixedloc:6,flag:4,flat:[3,4,12,13,14],flatten:[1,3,4,5,19],flexibl:[1,6,8,10,12,25],flip:[23,25],float32:[4,9],float64:[4,19,25,26],flop:[5,19,26],flow:[1,4,12],fluctuat:[5,27],fluid:[],fly:11,fm:[0,25],fmax:3,fmesh:13,fn:7,fname:[0,7],focu:[0,3,4,5,6,15,18,24,25,26,27],focus:[1,6,7,19,26,27],fold:[6,9,20],folder:[0,1,3,4,6,14,20,25],follow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],font:[0,7,22,25],fontdict:22,fontsiz:[1,6,8,9,10,22],fontweight:1,footprint:3,foral:[8,26],forc:[0,5,6,10,11,25,26,27],forcast:4,forecast:[4,12],forest:[0,1,9,18,25],forget:11,form:[0,3,4,5,6,7,8,9,11,12,13,17,18,19,20,22,25,26,27],formal:[3,4,14,22],format:[0,1,2,3,4,6,7,8,9,10,11,18,22,24,26,27],format_data:4,formatstrformatt:[6,13,20],formul:[4,6,11,14],formula:[3,13,22],forth:[4,12],fortran2003:[18,25],fortran2008:20,fortran90:22,fortran:[0,15,18,19,25],fortun:[0,11,26],forward:[0,3,6,18,19,25],foster:25,found:[1,2,3,4,5,6,12,13,14,20,25,26,27],foundat:[18,25],four:[4,5,6,8,12,19,20,21,23,25,27],fourier:[0,25],fourierdef1:3,fourierdef2:3,fourierseriessign:3,fourth:[12,25,26],fp:7,frac:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,22,25,26,27],fractal:9,fraction:9,frame:7,framework:[1,3,4,8,10,14,22],frank:[5,11],frankefunct:[5,6,11,20,26],fredli:[23,25],free:[0,6,11,13,15,16,18,19,20,22,23,24,25],freecodecamp:18,freedom:[5,27],freeli:[0,20],frequenc:[3,6,7,22],frequent:[0,8,9,13],frequentist:18,fresh:10,fridai:[16,17,23,25],friedman:[6,20,21,24,25],friendli:4,frodo:25,frog:3,from:[0,1,2,3,4,6,7,8,9,11,13,14,16,17,18,19,20,22,23,24,25],from_cod:9,from_logit:[3,4],from_tensor_slic:4,fromnumer:2,front:[0,4,5,15,16,25,26,27],fulfil:[2,5,12,26],full:[0,1,3,5,7,9,10,13,22,25,26],full_matric:[5,26],fulli:[3,6,12,21,22],fun:[2,18,25],fun_nam:2,func:2,functionali:11,fundament:[0,6,18,25],funtion:2,further:[2,7,9,25],furthermor:[0,3,5,6,7,11,12,13,17,18,20,25,26,27],futur:[0,4,8,9,25],futurewarn:8,fy:[15,20,21,23,24,25],fys3150:[],fys4155:20,fys5419:[24,25],fys5429:[24,25],g0:2,g:[0,1,2,3,4,6,8,9,10,11,13,22,25,27],g_0:2,g_1:[2,10],g_2:[2,10],g_:[2,9,10],g_analyt:2,g_dnn_ag:2,g_euler:2,g_i:2,g_m:[3,10],g_n:3,g_re:2,g_t:2,g_t_d2t:2,g_t_d2x:2,g_t_dt:2,g_t_hessian:2,g_t_hessian_func:2,g_t_jacobian:2,g_t_jacobian_func:2,g_trial:2,g_trial_deep:2,g_vec:2,gain:[1,5,7,9,10,13,26,27],galleri:[0,25],game:4,gamge:25,gamma1:8,gamma2:8,gamma:[0,2,8,9,10,11,13,25],gamma_0:10,gamma_1:10,gamma_1x:10,gamma_:[0,25],gamma_i:[0,8,22,25],gamma_j:13,gamma_k:13,gamma_m:10,gamma_x:[0,25],gap:[6,8],gate:[4,12],gather:[0,1,12,26],gaug:12,gaussbacksub:19,gaussian:[4,5,6,8,14,22,27],gaussian_point:14,gaussian_rbf:8,gave:13,gavra:25,gbc:[21,25],gca:[2,6,8,13,20],gd:1,gd_clf:10,gdclassiffiercgain:10,gdclassiffierconfus:10,gdclassiffierroc:10,gdm:13,gdregress:10,ge:[1,5,7,22,26],gen:[0,7],gen_loss:4,gen_tap:4,gender:[0,25],genener:4,gener:[0,1,2,3,5,6,8,10,11,12,13,14,15,16,17,19,20,22,24,26,27],generallay:12,generate_and_save_imag:4,generate_imag:4,generate_latent_point:4,generate_simple_clustering_dataset:14,generated_imag:4,generator_loss:4,generator_loss_list:4,generator_model:4,generator_optim:4,genom:18,geodes:11,geometr:[0,13,25],geometri:[5,27],georg:24,geotif:[6,20],geq:[2,5,8,9,13,26,27],geron:[0,15,21,24,25],get:[0,1,2,3,4,5,6,7,9,10,11,13,15,18,19,20,22,23,25,26,27],get_dummi:9,get_paramet:2,get_split:9,get_yaxi:8,get_yticklabel:6,getattr:2,gg:25,gibb:[18,25],gif:4,gini:10,gini_index:9,ginvers:13,git:[0,15,18,25],giter:13,github:[0,6,9,15,16,17,18,20,21,23,24,25,26],gitlab:[0,15,18,20,25],give:[0,1,2,3,5,6,7,8,9,10,12,13,14,17,18,20,22,25,26,27],given:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,22,25,26,27],global:[6,7,13,20],gloriou:[],glorot:1,gnew:13,go:[0,1,3,5,6,8,9,11,12,13,20,25,26,27],goal:[0,7,9,25],goe:[0,1,2,5,6,13,14,19,25,26,27],golden:13,gone:[5,26,27],gong:1,good:[1,3,4,5,6,9,10,11,13,17,18,22,24,26,27],goodfellow:[4,21,24,25,26,27],googl:[1,4,18,25],got:[1,6,13,20],gotten:25,gov:[6,20],gp:24,gpu:[1,13,18,25],grad:[2,13],grad_analyt:13,grade:[20,21],gradient:[0,3,4,7,8,9,12,18,25,26],gradientboostingclassifi:10,gradientboostingregressor:10,gradients_of_discrimin:4,gradients_of_gener:4,gradienttap:4,gradual:[1,14],grai:[4,6,20],graph:[1,9,11,12,13],graph_from_dot_data:9,graphic:[0,1,9,25],grasp:0,gray_r:[1,3],grayscal:3,great:[5,13],greater:[1,7,22],greatli:13,greedi:9,green:[0,3,9,22],grei:4,grid:[1,3,6,7,8,12,22,26,27],grossli:13,ground:[0,25],group:[0,6,7,9,14,18,20,21,23,25],groupbi:[0,25],grow:[1,3,9,10],growth:[0,25],gru:4,guarante:[0,4,13,22,25,26],guess:[1,4,10,13,14],guestrin:10,guid:1,guidanc:20,h1:2,h:[0,1,5,6,8,13,16,20,22,23,24,25,26],h_1:[2,13],h_2:[2,13],h_:[0,13,25],h_m:10,ha:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,19,20,22,25,26,27],haa:23,habit:[0,26],had:[0,1,6,7,13,25],hadamard:[1,12,13],half:[1,8,9],halv:10,hand:[0,1,2,3,5,11,12,13,15,18,19,20,21,22,23,24,25,26,27],handi:[3,20],handl:[0,1,2,5,9,11,18,27],handle_unknown:9,handsid:12,handwrit:12,handwritten:[1,5],happen:[1,2,3,4,5,6,10,13,22,26],hard:[1,7,8,10,13],hardcopi:[18,25],harder:[0,1,26],harmon:3,hasn:1,hassl:[0,15,18,25],hast:[18,25],hasti:[0,6,15,16,17,20,21,24,25,26],hat:[0,1,5,6,7,9,10,11,12,13,17,19,20,26,27],have:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,25,26,27],haven:1,he:7,head:[0,4,10,22],header:[0,25],heads_proba:10,health:[0,26],hear:[0,13,25],heart:[0,7,25],heatmap:[0,1,3,7,25],heavili:0,heavisid:1,height:[1,3,6,26,27],held:13,help:[0,1,4,12,13,16,20,25],helper:[4,14],henc:[0,5,6,8,9,10,12,13,20,25,26,27],henrik:[23,25],her:7,here:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,25,26,27],hereaft:[0,8,12,25],hermitian:19,hessenberg:19,hessian:[0,2,5,13,16,27],heterogen:[9,10],hi:7,hidden:[1,3,4,12],hidden_bia:1,hidden_bias_gradi:1,hidden_layer_s:[0,1,25],hidden_neuron:4,hidden_weight:1,hidden_weights_gradi:1,hierarch:[5,26,27],high:[0,1,2,3,4,5,6,9,10,11,13,14,18,19,20,25,26],higher:[0,1,3,5,6,8,13,20,25,26,27],highest:[1,2],highli:[0,3,4,10,18,19,24,25,26,27],highwai:0,hing:8,hint:[13,16,26,27],hip:18,hire:0,hist:[4,6,7,22],histogram:[0,6,7,22],histor:[7,11],histori:[3,4,12],hitherto:[5,27],hjorth:[23,25,26,27],hobbi:22,hoc:[5,26],hoff:24,hold:[1,3,6,13,14],holder:[0,25],holomorphic_grad:2,home:0,homepag:[20,25],homework:[6,13],homogen:[1,3,9,10,13],honchar:2,hopefulli:[0,11,22,25],horizont:11,hors:[3,7],hot:[1,9],hour:[1,18,21,22,23,25],how:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,22,25,26,27],howev:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,18,19,20,22,25,26,27],hspace:[0,4,8,10,22,25],hstack:1,htf:[21,25],html:[0,9,11,17,18,20,21,23,24,25,27],http:[0,3,4,6,9,11,13,16,17,18,19,20,21,23,24,25,26,27],huang:[0,25],huber:[0,25],huge:[1,3,4,18],human:[0,1,3,6,9,12,26,27],humid:9,hundr:1,hungri:1,huse:25,hybrid:21,hydrogen:[0,25],hyper:[],hyperbol:[1,4,12],hyperparam:8,hyperparamet:[3,4,5,6,9,13,17,25,26,27],hyperplan:11,i0:[0,25],i1:[0,6,8,12,25,26,27],i2:[0,8,12,25],i3:[0,12,25],i5:[0,25],i:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,22,23,25,26,27],i_1:[5,6,27],i_2:[5,6,27],i_:13,ian:24,ic:1,id:[7,13],ida:[23,25],idea:[0,1,2,3,4,6,9,10,12,13,19,20,26,27],ideal:[0,2,6,8,13,22,25],idem:6,ident:[5,6,12,13,17,19,20,26],identical:27,identifi:[0,1,7,9,11,12,13,14,25,26],ieor:22,ifi:24,ifs:[18,25],ignor:[0,1,3,9,26],ii:[19,22],iii:[19,25],ij:[0,1,3,6,8,12,14,16,19,20,22,25,26,27],ik:[0,19,25,26],illustr:[5,7,10,12,13,14,18,25],im:6,imag:[1,3,4,6,9,11,12,14,24,25],image_at_epoch_:4,image_batch:4,image_height:3,image_path:[0,6,7,9,25,26],image_width:3,imageio:[6,20],images_from_seed_imag:4,imagin:1,immedi:[0,3,4,6,15,18,25],implement:[0,2,3,4,5,6,8,9,10,11,12,13,14,17,20,22,25,26,27],impli:[3,5,6,7,13,19,26,27],implicit:3,implicitli:[11,22],importantli:3,impos:[0,6,11,12,25],imposs:[0,5,25,26],impress:[0,12,25],improv:[0,4,5,9,10,11,13,20,26],impur:9,imread:[6,20],imshow:[1,3,4,6,20],in3050:[24,25],in3310:25,in4080:[24,25],in4300:[24,25],in4310:24,in5400:3,in5550:24,in_out_neuron:4,inaccur:13,inact:12,inadequ:[0,25],inch:[6,26,27],includ:[0,1,2,3,4,5,6,7,11,12,15,16,17,18,20,22,23,24,25,26,27],include_bia:[6,9],inclus:17,incom:12,incorrect:1,incoveni:8,increas:[0,1,3,4,5,6,8,9,11,12,13,20,22,25,26,27],increasingli:22,ind:6,inde:[0,2,4,5,6,13,25,26],indefinit:4,independ:[0,5,6,7,8,12,13,22,25,26],index:[0,1,3,4,10,14,18,19,22,24,25],index_col:[0,25],indic:[0,1,3,4,5,6,9,10,11,13,16,20,25,26],indispens:6,individu:[1,6,7,10,12,22,25,26],indu:0,indx1:2,indx2:2,indx3:2,indx:19,ineffici:[3,13],inequ:[8,13],inertia:13,inf1000:[18,25],inf1100:[18,25],inf1100l:[18,25],inf1110:[18,25],inf3000:25,infeas:9,infer:[0,1,4,6,24,25],inferenc:1,infil:[0,6,7,9,25],infin:[5,6,7,11,26,27],infinit:3,infinitesim:22,influenc:[6,10],influenti:1,info:25,inform:[0,1,3,4,6,9,11,12,13,14,19,20,24,25],infti:[3,6,13,22],ingeni:13,ingrad:2,ingredi:[0,9,25],inher:6,inherit:[19,25],initi:[0,1,2,6,10,13,14,19,22,25],inject:14,inlin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,19,20,22,25,26,27],inner:[0,13,26],inp:4,inplac:13,input:[0,1,3,4,5,6,7,8,12,13,14,20,22,25,26,27],input_dim:1,input_shap:[3,4],inputs:1,inputs_shuffl:[0,1,26],insert:[3,5,6,8,10,22,26,27],insid:[0,4,7],insight:[0,1,5,18,25,26,27],insist:[6,13,26,27],inspir:[0,1,12,25],instabl:2,instal:[0,1,5,6,9,15],instanc:[0,1,2,4,6,9,11,13,25,26],instanti:10,instead:[0,1,2,3,4,5,6,8,9,11,13,14,19,20,22,25,26],institut:1,instruct:[0,1,15,16,25],int32:10,int_0:22,int_:[3,6,22],int_a:22,intak:[0,26],integ:[1,2,13,14,19,22,25],integer_vector:1,integr:[3,6,22,25],intellig:[0,14,24,25],intend:10,intens:1,intention:14,interact:[0,6,9,12,18,20,25],intercept:[0,6,8,11,13,16,20,25,27],intercept_:[0,6,8,9,13,25,26,27],interchang:[5,12,19,27],interconnect:1,interest:[0,1,2,3,4,5,6,7,8,9,12,18,20,22,25,26,27],interfac:[0,1,19,26],interior:[0,9,25],intermedi:[19,26],intern:[1,10,12],interpol:[1,3,4,6,12,20],interpr:[5,26,27],interpret:[0,1,6,9,10,12,13,17,19,20,22],interv:[0,3,5,6,7,13,20,22,25,26,27],intial:13,intract:[0,4,26],intrins:[3,11,19,22,25],intro:[18,24,25],introduc:[0,1,5,6,8,10,12,17,19,20,22,25],introduct:[1,2,4,13,17,24,26],introductori:[0,4,19,24,25,26],intuit:[0,5,6,8,12,13,20,25,27],inv:[0,5,13,25,26,27],invalid:[1,8],invalu:[0,13,15,18,25],invari:1,invd:[5,27],inver:8,invers:[0,3,6,13,15,16,17,20,25,26],inverse_transform:8,invert:[0,5,7,10,13,25,27],invh:13,invok:[0,8],involv:[0,2,6,7,11,12,26],io:[0,17,18,20,21,23,24,25,26],ip:[0,8,22,25],ipca:11,ipykernel_48918:1,ipykernel_49101:6,ipykernel_49291:25,ipynb:[18,20,25],ipython:[0,5,7,9,11,14,15,18,20,25,26],iq:6,iri:[8,9],irreduc:6,irrelev:[5,26],irrespect:[0,25],irvin:[],isbox:2,iscomplexobj:2,isn:[5,27],isnul:0,isomap:11,isotop:25,issu:[1,9,19,27],it_arrai:13,item:[0,13,25],items:[19,25],iter:[1,2,4,6,8,9,11,13,14,22],its:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,22,25,27],itself:[5,6,12,20,22,26,27],j1:19,j:[0,1,2,3,4,5,6,8,9,11,12,13,14,16,17,19,20,22,24,25,26,27],j_:6,j_lasso_sk:6,j_ridge_sk:6,j_sk:6,jackknif:[6,18,25],jacobian:[2,13],jacobian_shap:2,jakobsen:23,jason:4,jax:[18,25],jensen:[23,25,26,27],jerom:[20,24],ji:[12,19],jit:13,jj:[0,5,6,25,27],jk:[0,1,6,12,19,25],jl:[0,25],jm:19,jnp:13,job:[2,8,10],johansen:25,join:[0,3,4,6,7,9,14,25,26],joint:[4,5,27],judg:13,judgement:[6,20],julia:[18,19,20],jump:[20,22],junk:4,jupit:25,jupyt:[0,9,15,18,20,24,25],just:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,18,20,22,25,26,27],justif:0,justifi:[3,10],k0:7,k1:7,k:[0,1,3,5,6,7,8,9,10,11,12,13,14,18,19,20,22,23,25,26,27],kaggl:[6,20],kappa_d:22,karl:[23,25],karush:8,katrin:[23,25],keep:[0,1,4,5,6,11,13,14,19,20,25,26,27],keepdim:[1,2,6,10,19],kei:[0,1,3,6,12,26],kept:[4,6,14],kera:[0,4,18,20,25],kernel:[0,1,3,4,14,18,25,26],kernel_librari:[3,4,14],kernel_regular:[1,3],kernel_s:4,kernelpca:11,kev:[0,25],kevin:[24,25],keyboardinterrupt:2,keyword:[6,13,19,20,25],kfold:6,kg:1,ki:19,kick:[1,13],kiener:2,kilomet:[6,26,27],kind:[0,2,3,4,8,12,13,14,25,26],kj:[6,12,19,26,27],kjm:[18,25],kkt:8,kl:22,km:[12,25],kmean:14,kmeanspoint:14,kn_k:14,know:[0,1,2,5,6,8,13,18,25,26,27],knowledg:[0,18,25],known:[1,3,4,5,6,7,8,9,12,19,20,22,24,26,27],kondev:[0,25],kp:22,kpca:11,kroneck:14,kuhn:8,kvalsund:[23,25],kwarg:2,kwown:[0,25],l0:7,l1:[0,1,3,7,25],l1_l2:[1,3],l1regl:5,l2:[1,3],l:[0,1,2,3,5,6,7,8,10,11,12,13,19,20,22,25,26],l_1:7,l_2:[7,13],l_:19,l_j:12,la:13,la_i:12,la_k:12,lab:[18,20,25],label:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,18,19,20,22,25,26,27],labelencod:[7,10],labels:[6,8,9],labels_shuffl:[0,1,26],laboratori:[21,27],lack:[0,25],lagari:2,lagrang:[8,11],lambda:[0,1,2,3,5,6,7,8,10,12,13,17,20,22,25,26,27],lambda_0:11,lambda_1:[5,8,11,26],lambda_2:[8,11],lambda_:11,lambda_i:[8,11],lambda_iy_i:8,lambda_jy_iy_j:8,lambda_k:8,lambda_n:[5,8,26],lamda:1,land:[0,8],landmark:8,landscap:13,langl:[0,6,11,22,25,26],languag:[0,1,4,8,15,18,19,20,24,25],lapack:[19,25],laplac:[5,27],laptop:18,larg:[0,1,2,4,5,6,8,9,10,11,13,15,18,19,20,22,24,25,26],larger:[0,3,5,6,8,10,11,13,17,22,25,26,27],largest:[4,8,11],lasso:[0,7,18,25],lasso_sk:6,last:[0,1,2,3,4,5,6,7,8,10,12,13,14,17,19,20,22,23,25,27],latent:4,latent_dim:4,latent_point:4,latent_space_value_rang:4,later:[0,1,4,7,8,12,13,14,15,18,20,25],latest:[4,18],latest_checkpoint:4,latex:25,latter:[0,3,6,7,8,11,13,16,19,20,22,25,26,27],lattic:12,law:0,layer:[0,4,13,25],lbfg:[7,9,10,11],lcc:[5,6,27],lda:11,ldot:[0,6,11,20,25],le:[5,7,10,13,17,22,26,27],lead:[0,1,3,5,6,7,8,9,10,11,12,13,16,17,19,22,25,26,27],leaf:9,leaki:1,leakyrelu:4,lear:13,learn:[3,4,5,6,7,8,9,10,12,19,21,23,24],learnabl:3,learner:10,learnig:25,learning_r:[8,10],learning_rate_init:[0,1,25],learning_schedul:13,learnt:20,least:[0,2,7,8,10,11,15,16,17,18,19,22],leat:13,leav:[0,1,3,5,6,9,11,25,27],lectur:[0,1,5,10,11,12,13,15,17,18,19,20,21,23,24],lecturenot:[0,17,18,20,24,25],left:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,16,17,19,20,22,25,26,27],leftarrow:[8,12],legend:[0,2,3,4,5,6,7,8,9,10,13,25,26,27],len:[0,1,2,3,4,5,6,8,9,10,11,12,19,25,26,27],length:[0,1,2,3,4,8,9,13,16,18,25,26],length_of_sequ:4,leq:[0,5,7,8,13,14,22,25,26,27],less:[0,1,3,4,5,6,8,9,13,18,22,25,26,27],lessen:1,let:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,19,22,25,26,27],letter:[0,16,19,22,25,26],level:[0,1,5,6,9,18,19,20,21,23,25],li:[8,11],lib:[0,1,2,3,4,6,7,8,9,11,14,25,27],liblinear:[8,10],libmetal_plugin:[3,4,14],librari:[0,1,2,3,4,5,6,7,9,10,11,14,15,19,20,22,24,26,27],library_loc:[3,4,14],licens:[0,1,15,18,20,25],lie:[0,6,11,22,25,26],life:[0,1,8,12,25],lifetim:13,like:[0,1,2,3,4,5,6,7,9,10,11,12,13,15,16,18,19,20,22,25,26,27],likelihood:[0,1,5,9,25,26],lim_:22,lima:23,limit:[0,5,6,8,9,11,12,19,20,25,26],lin_clf:8,lin_model:0,lin_reg:9,linalg:[0,2,5,6,8,11,13,19,22,25,26,27],line1:8,line2:8,line3:8,line:[0,1,2,3,4,6,7,8,10,11,13,14,20,25,26,27],linear:[1,3,5,6,7,9,10,11,12,17,18,20,22],linear_model:[0,5,6,7,8,9,10,11,13,25,26,27],linear_regress:6,linearli:[5,26],linearloc:[6,13,20],linearregress:[0,6,7,9,25,26,27],linearsvc:8,lineat:27,liner:[1,3],linerar:10,linewidth:[0,2,4,6,8,9,10,20],link:[0,4,9,12,18,20,23,25],linlag:[5,27],linpack:[19,25],linreg:[0,25],linspac:[0,2,3,4,6,8,9,10,13,15,16,19,22,25,26,27],linu:4,linux:[0,1,15,18,20,25],liquid:[0,25],list:[0,1,2,3,4,7,9,18,20,25,26],listcomp:2,listedcolormap:[9,10],literatur:[1,7,14,24],littl:[1,3,9,12],live:8,ll:[0,22,25,26],lle:[0,26],lloyd:[4,14],lmb:[0,2,5,6,27],lmbd:[0,1,3,25],lmbd_val:[0,1,3,25],lmbda:13,ln:[1,13],load:[0,1,3,4,6,7,9,10,14,20],load_boston:0,load_breast_canc:[1,7,9,10,11],load_data:[3,4],load_digit:[1,3],load_iri:[8,9],load_librari:[3,4,14],load_pluggable_device_librari:[3,4,14],loc:[0,3,6,7,8,9,10,25],local:[0,1,2,3,7,12,13,26],locat:[2,3,8],log10:[0,5,6,27],log:[0,1,2,4,5,6,7,9,10,11,13,19,20,25,26,27],log_:[0,25],log_clf:10,logarithm:[0,5,7,19,25,27],logbook:20,logic:[0,1,9,25],logist:[0,1,2,8,9,10,11,12,13,18,26],logisticregress:[7,9,10,11],logit:7,logreg:[7,9,10,11],logspac:[0,1,3,5,6,25,27],longer:[2,3,8,10,14,19,22,25],loocv:6,look:[0,1,2,3,4,5,6,7,8,9,10,11,13,16,19,20,22,25,26,27],loop:[1,4,6,10,12,14,18,19,25],lose:1,loss:[0,1,3,4,5,6,7,8,10,11,13,19,20,25,27],loss_fil:4,lossfil:4,lost:4,lot:[0,1,4,6],low:[0,6,9,10,11,20,25,26],lower:[0,1,3,6,9,10,16,19,26],lowercas:[19,25],lowest:[9,13,22],lr:[1,3,4,10],lstat:0,lstm:4,lstm_2layer:4,lstsq:[0,25,26],lt:6,lu:[0,5,25,26],lubksb:19,luckili:2,ludcmp:19,lux:19,lvert:1,lw:[0,25],m:[0,1,2,3,5,6,8,9,10,11,12,13,19,21,22,23,24,25,26,27],m_1:14,m_:[9,12],m_h:[0,25],m_k:14,m_l:12,m_n:[0,25],m_p:[0,25],m_t:13,ma:11,machin:[1,3,4,5,6,7,9,10,11,12,15,19,21,24,26,27],machinelearn:[0,6,16,17,18,20,21,23,24,25],mackai:24,made:[0,1,3,4,5,6,7,9,11,12,20,25,26],mae:[0,25],magic:4,magnitud:[1,6,7,13,26,27],mai:[0,1,2,3,5,6,7,8,9,11,12,13,18,19,20,22,25,26,27],mail:[21,23],main:[0,1,3,4,5,6,7,9,19,20,24,26],mainli:[0,5,6,7,9,25,26,27],maintain:6,major:[1,6,9,10,13,19,25],make:[1,2,3,4,5,6,7,8,11,12,13,18,19,20,22,24,27],make_axes_locat:6,make_moon:[8,9,10],make_pipelin:[0,6,10,26],make_vjp:2,makedir:[0,6,7,9,25,26],makeplot:[0,25],malcondit:19,malign:[1,7,9],mammographi:[5,27],manag:[0,2,3,15,18,20,25],mandatori:[23,25],mani:[0,1,3,4,5,6,7,8,9,11,13,14,18,19,20,22,24,25,26,27],manifold:11,manner:3,manual:[6,26,27],map:[0,1,2,6,7,8,11,12,14,20,22,25],marc:26,margin:[0,5,8],marit:[0,25],mark:25,marker:[0,7,19,25],markov:[18,25],marsaglia:22,mass:[0,1,5,13,26],massag:[0,25],masses2016:[0,25],masses2016ol:[0,25],masses2016tre:0,masseval2016:[0,25],master:[6,16,20,21,23],mat1100:[18,25],mat1110:[18,25],mat1120:[18,25],mat:[18,25],match:[1,4,5,13,14,26],materi:[4,5,7,13,17,19,23],math:[3,7,12,13,19,22,24,25],mathbb:[0,4,5,6,7,8,11,12,13,14,17,19,20,22,25,26,27],mathbf:[0,5,6,7,8,13,19,20,25,26,27],mathcal:[1,5,6,7,13,20,27],matheemat:3,mathemat:[0,6,11,12,13,17,18,19,22,24,25,27],mathemati:25,mathmlbook:16,mathrm:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,17,20,22,25,26,27],matmul:[1,2,5,27],matnat:24,matplotlib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,22,25,26,27],matric:[0,1,3,4,6,7,8,11,13,16,17,18,26],matrix:[0,2,3,4,6,7,8,10,13,15,16,17,20,22],matshow:1,matter:[2,3,13,26],max:[0,1,2,3,4,9,10,12,13,23,25],max_depth:[0,9,10],max_diff1:2,max_diff2:2,max_diff:2,max_it:[0,1,8,9,11,13,25],max_iter:14,max_leaf_nod:10,max_sampl:10,maxdegre:[0,6,10,26],maxdepth:10,maxim:[1,4,5,7,8,11,27],maximum:[0,1,2,3,5,7,8,9,10,13,14,25,26],maxpolydegre:[5,6,27],maxpooling2d:3,mbox:[5,6,20,26,27],mcculloch:12,md:[11,20],mdoel:4,mean:[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20,22,25],mean_absolute_error:[0,25],mean_divisor:14,mean_i:22,mean_matrix:14,mean_squared_error:[0,4,6,7,10,25,26],mean_squared_log_error:[0,25],mean_vector:14,mean_x:22,meaning:[0,4,7,25],meansquarederror:[0,25],meant:[2,3,7,10,13],measur:[0,1,2,5,6,9,11,12,14,20,22,25,26,27],mechan:[0,4,22,25],median:[0,25,26],medicin:12,medium:[4,8,13],medv:0,meet:[0,23],mehta:[0,25,26,27],mek4270:[],memori:[3,4,11,12,13,19],mention:[0,12,13,20,22,25],mere:[0,15,25],meshgrid:[2,5,6,8,9,10,11,20,26],messag:[5,13],messi:2,met:[0,3,8,26],metadata:2,meteorolog:9,meter:[6,26,27],method:[0,1,2,3,4,5,7,8,11,12,14,16,17,18,19,22,24,26,27],metion:[6,20],metric:[0,1,3,6,7,9,10,14,15,16,25,26],metropoli:[18,25],mev:[0,22,25],mgd:13,mglearn:[18,25],mgrid:13,mhjensen:[1,2,3,4,6,8,9,11,14],mi:10,mia:[23,25],michael:[],michigan:[25,27],microsoft:24,mid:1,midel:4,midnight:[16,17],midpoint:9,might:[0,1,2,4,6,9,13,26,27],mild:9,millimet:[6,26,27],million:[0,25,26],mimic:12,min:[0,2,5,8,9],min_:[0,2,5,14,17,25,26,27],min_samples_leaf:9,mind:[0,6,13,20,25,26,27],mindboard:4,mine:[18,25],mini:[1,11,12,13],minibatch:[1,11,13],minibathc:13,miniforge3:[0,1,2,3,4,6,7,8,9,11,14,25,27],minim:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,17,20,26,27],minima:[0,1,7,13,25],minimum:[0,1,2,6,8,9,11,13,26],minmaxscal:[0,26],minor:22,minst:1,minu:7,mirjalili:25,mirror:9,misc:[6,20],misclassif:[8,9,10],misclassifi:[8,10],miser:0,mismatch:1,miss:[0,7,10],mistak:4,mit:24,mix:[1,2,25],mixtur:13,mk:[9,19],mkdir:[0,6,7,9,25,26],ml:[0,1,10,13,19,20,26],mlab:22,mlbook:25,mle:[5,7],mlp:1,mlpclassifi:1,mlpregressor:[0,25],mm:19,mml:26,mn:[12,22],mnist:[1,11],mod:22,mode:[21,23,25],model:[2,3,5,7,8,9,10,11,13,14,15,16,18,20,22,24,26,27],model_select:[0,1,3,5,6,7,9,10,11,25,26,27],moder:10,modern:[0,6,7,18,25],modif:[2,12,13],modifi:[0,1,3,5,7,8,10,12,13,25,26,27],modul:[0,9,11,19,25,27],modular:22,modulo:22,moe:[11,26],moment:[5,6,13,22,27],momentum:[],mondai:25,monitor:13,monoton:[5,12,22,27],mont:[0,6,18,22,24,25],moor:[5,6,27],more:[0,1,2,4,5,7,8,9,10,11,12,13,14,18,22],moreov:[0,3],morten:[23,25,26,27],most:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,18,20,22,25,26,27],mostli:[1,11],motion:[0,13],motiv:[1,4],move:[0,4,5,6,7,9,12,13,14,20,22,26,27],mpl:[0,7,25],mpl_toolkit:[2,6,13,20],mplot3d:[2,6,13,20],mplregressor:1,mse:[0,4,5,6,9,10,15,16,17,20,25,26,27],mse_simpletre:10,mselassopredict:[5,27],mselassotrain:[5,27],mseownridgepredict:[6,27],msepredict:[5,27],mseridgepredict:[0,5,6,27],msetrain:[5,27],msle:[0,25],mt:[7,12],mu0:22,mu1:22,mu2:22,mu:[0,6,11,13,22,25],mu_1:26,mu_:[6,22,26,27],mu_i:[6,26,27],mu_n:11,mu_x:22,much:[0,1,2,3,4,5,6,8,9,10,11,12,13,19,20,22,25,26,27],multi:[0,1,3,7,18,25],multiclass:[1,7],multidimension:[11,12,25],multilay:1,multinomi:7,multipl:[2,4,5,6,7,12,13,22,26],multipli:[3,5,6,11,13,19,22,26,27],multiplum:8,multivari:[0,2,10,11,18,22,25],multivariate_norm:[11,14],murphi:[11,24,25],must:[1,2,5,6,8,10,12,13,14,22,26],mutat:7,mutual:[1,3,6,13],mx_:22,myenv:[0,1,2,3,4,6,7,8,9,11,14,25,27],myriad:[0,15,18,25],mz1:22,mz2:22,n1:19,n2:19,n:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,22,25,26,27],n_0:[12,22],n_:[1,2,3,8,12,22],n_boostrap:[6,10],n_bootstrap:6,n_categori:[1,3],n_cluster:14,n_compon:11,n_epoch:13,n_estim:10,n_examples_to_gener:4,n_featur:1,n_filter:3,n_hidden:2,n_hidden_neuron:[0,1,25],n_i:22,n_input:[0,1,3,26],n_instanc:9,n_iter_i:[9,11],n_job:10,n_k:14,n_l:[12,22],n_layer:1,n_m:9,n_neuron:1,n_neurons_connect:3,n_neurons_layer1:1,n_neurons_layer2:1,n_point:14,n_sampl:[6,8,9,10,14],n_split:6,n_step:4,n_t:2,n_x:2,nabla:[1,13],nabla_:[2,13],nabla_w:13,nag:13,naimi:[0,25],naiv:7,naive_kmean:14,najafi:[23,25],name:[0,1,3,4,5,6,7,8,9,10,12,13,14,15,18,19,20,22,23,25,26,27],nameerror:10,namespac:[3,4,14],narrow:13,nary_f:2,nary_op_arg:2,nary_op_kwarg:2,nary_oper:2,nation:[1,5,27],nativ:[18,25],natur:[0,1,4,8,9,12,13,20,22,24,25],navier:12,nb:22,nb_:19,nbconvert:25,nbviewer:9,nd:14,ndarrai:[2,6],ne:[9,10,19,22,26],nearest:[1,3,6,11],nearli:13,neat:25,neccesari:6,necess:2,necessari:[0,1,3,4,8,14,25],necessarili:[0,4,11,22,25],necesserali:[5,27],neck:7,need:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,19,22,26,27],neg:[0,1,3,5,6,7,10,13,19,22,25,27],neg_mean_squared_error:6,neglect:22,neglig:22,neighbor:[3,6,11],neither:[4,13],neq:[13,14,22],nervou:12,nest:[2,9,12],nesterov:13,net:[2,4,12],netlib:[19,25],network:[0,9,13,18,24,26],networkd:[],neural:[0,13,18,24,26],neural_network:[0,1,2,25],neuralnetwork:1,neuron:[1,2,3,4,12],neutral:[0,25],neutron:[0,25],never:[1,4,6,9,22],new_box:2,new_chang:13,new_hobbit:25,new_root:2,new_trac:2,newaxi:[0,3,6,9],newli:[0,25],newton:[1,7,8,13,22],next:[0,1,2,3,4,5,6,7,8,9,13,14,25,26,27],next_guess:13,next_input:4,ng:1,ngini:9,ni:14,nice:[0,1,5,11,25,26,27],nielsen:[],niter:13,nitric:0,nlambda:[0,5,6,27],nlp:24,nm:22,nm_n:[0,25],nmse:6,nn:[2,5,6,12,19,27],nn_model:1,nnmin:2,node:[1,2,3,9,10,12],node_constructor:2,nois:[0,4,5,6,8,9,10,13,15,16,20,25,26,27],noise_dimens:4,noisi:[1,6,20],non:[0,1,3,5,6,7,9,10,11,12,13,14,19,22,25,26,27],noncommerci:[],none:[0,1,2,4,5,9,10,13,22,25,26,27],nonlinear:[3,6,8,9,11,12],nonneg:[6,9,13],nonparametr:6,nonsens:22,nonsingular:19,nonumb:[3,7,8,13,19],nor:[1,4,13],norm:[0,1,5,6,8,11,13,17,25,26,27],normal:[3,4,5,6,7,8,9,10,11,12,13,15,16,18,19,20,22,25,26,27],normali:[19,25],norwai:[6,20,25],notat:[0,2,5,6,13,14,22,25,26,27],note:[0,1,2,3,4,5,6,7,8,11,12,13,14,15,16,18,19,22,24,25],notebook:[0,1,3,9,15,18,20,25],notfounderror:[3,4,14],noth:[1,2,5,8,12,14,22,26,27],notic:[4,5,12,13,19,22,25,27],notimplementederror:2,notion:3,nov:[],novel:[3,6,10],novemb:[1,21,23,25],now:[0,2,4,5,6,7,8,10,11,12,14,15,16,17,18,19,20,22,25,26],nowadai:[0,1,3,9,18,25],nox:0,np:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,19,20,22,25,26,27],npr:2,nsampl:[6,9],nt:2,ntrained_model:[6,27],nu:22,nuclear:[5,26],nuclei:[0,22,25],nucleon:[0,25],nucleu:[0,25],num:4,num_coordin:2,num_hidden_neuron:2,num_it:2,num_neuron:2,num_neurons_hidden:2,num_point:2,num_tre:10,num_valu:2,number:[1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,23,25,27],numberid:7,numberparamet:3,numer:[0,5,6,9,10,11,12,13,17,18,19,24,25,26,27],numpi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20,22,26,27],numpy_vjp:2,numpy_wrapp:2,nunmpi:[5,26],nvalu:9,nx:2,nx_test:[6,27],nx_train:[6,27],nx_train_mean:[6,27],ny:22,ny_pr:[6,27],ny_train:[6,27],ny_train_mean:[6,27],o:[0,6,7,8,9,11,15,19,23,24,25],obei:[6,11,13,26,27],object:[0,1,2,4,6,8,10,19,25],obliqu:[5,26],observ:[0,1,3,5,6,7,8,9,10,11,12,13,14,22,27],obtain:[0,1,5,6,7,8,9,10,12,13,14,17,19,20,22,25,26,27],obviou:[5,6,11,22,26],obviouli:25,obvious:[0,4,5,6,19,25,27],oc:26,occupi:0,occur:[0,6,8,9,19,22,25],octob:[21,23,25],od:0,odd:[0,3,7,25,26],odenum:2,odesi:2,odin:25,oen:0,off:[1,3,4,5,9,13,22,27],offer:[6,11,18,19,21,23,25],offic:[23,25],offici:[21,25],often:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,16,18,19,20,22,25,26],ofter:[19,25],ol:[0,13,15,16,17,25,26],old:[1,5,10,13,27],ols_sk:6,ols_svd:6,olsbeta:[0,5,27],omega:[2,3,6],omega_0:3,omit:[0,5,25,26,27],onc:[1,6,9,11,13],one:[0,1,3,4,5,6,7,8,9,10,11,13,14,18,19,20,22,23,25,26,27],onehot:1,onehot_vector:1,onehotencod:9,ones:[0,2,5,6,8,9,10,11,13,19,20,25,26,27],ones_lik:4,ong:26,onl:3,onli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,19,20,22,25,26,27],onlin:[11,21],onto:[5,11,26],open:[0,1,4,6,7,9,15,18,20,21,23,25],oper:[0,1,3,5,6,10,11,12,13,15,18,22,25,26,27],operation:22,oplu:22,opmiz:13,opportun:0,oppos:[6,13],opposit:[1,5,8,26],opt:[1,5,25,27],optim:[0,2,3,4,5,6,7,9,10,11,14,15,16,17,20,27],optimis:[1,3],option:[0,1,3,5,6,8,9,11,19,20,26,27],optmiz:[1,8,13,26],oral:25,orang:0,order:[0,1,2,3,5,6,7,8,9,10,11,12,15,16,19,20,22,25,26,27],ordinari:[0,2,3,7,11,13,15,16,17,18],oreilli:[24,25],org:[0,3,4,9,11,18,19,20,24,25,27],organ:[6,7,10,19],orient:[1,5,22,26,27],origin:[0,3,5,6,8,11,12,13,19,25,26],orthogn:[5,26],orthogon:[0,5,6,8,11,13,17,19,25,26,27],orthonorm:[5,26,27],os:[0,1,4,5,6,7,8,9,23,25,26,27],oscar:1,oscil:[3,13],oserror:[0,3,4,7,14],oslo:[0,15,18,20,21,23,25,26,27],osx:[0,15,18,20,25],other:[0,1,2,3,5,6,7,8,10,13,14,15,18,21,22,23,24,27],otherwis:[0,1,4,7,13,19,25],ouput:[5,7,12,27],our:[1,2,3,6,7,8,9,10,12,14,15,16,17,18,19,20,22,27],ourmodel:0,ourselv:[0,5,6,8,11,13,25,26,27],out:[0,1,2,4,5,6,7,8,9,10,11,12,13,16,18,19,20,22,25,26,27],out_fil:9,outcom:[0,7,9,10,12,22,26],outdoor:9,outer:[6,12,13],outfil:4,outgrad:2,outlier:[0,8,25,26],outlin:[6,10,11],outlook:9,outperform:10,output:[0,1,3,4,5,6,7,8,9,10,12,13,16,19,20,22,25,26,27],output_bia:1,output_bias_gradi:1,output_shap:4,output_weight:1,output_weights_gradi:1,outputlayer1:12,outputlayer2:12,outsid:4,over1:13,over:[0,1,3,4,5,6,9,10,12,13,19,20,25,26,27],overal:[1,10],overcast:9,overcom:[12,13],overdetermin:[0,25],overfit:[0,1,3,6,9,10,13],overflow:[1,5,27],overhead:12,overlap:[3,7,8,9],overlin:[0,5,6,9,10,11,14,19,25,26,27],overst:0,overtrain:4,overview:3,own:[4,5,6,8,12,13,18,19,20,27],owner:0,ownmsepredict:0,ownmsetrain:0,ownridgebeta:[0,6,27],ownypredictridg:0,ownytilderidg:0,oxid:0,p0:2,p1:2,p:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,17,19,22,25,26,27],p_:[2,4,8,9],p_hidden:2,p_i:[5,22,27],p_j:22,p_n:22,p_output:2,p_x:22,pack:[0,25],packag:[0,1,2,3,4,5,6,7,8,9,11,13,14,15,18,20,22,26,27],packtpub:25,packtpublish:25,pad:[3,4],page:[0,9,18,25,27],pai:[0,1,9,13],paid:[],pair:[0,2,3,9,18,22,25],panda:[0,4,5,6,7,9,11,15,18,20,27],panel:25,paper:1,paradigm:[0,25],parallel:[10,13,18,19,25],param:2,paramat:2,paramet:[0,1,2,3,4,5,6,7,8,9,10,12,13,16,17,20,22,27],parameter:[0,6,10,20,25,26],parametr:[0,6,15,16,25,26],paramt:[3,5,27],parent:2,parent_argnum:2,part:[0,1,3,5,6,10,17,19,21,22,23,25,27],partial:[0,1,5,6,7,8,10,11,12,13,16,22,25,26,27],particip:[18,21,23,25],particl:[0,4,13,22,25],particular:[0,1,2,3,5,6,9,10,11,12,13,16,20,22,24,25,26,27],particularli:[5,6,8,11,13,22,26],partit:[1,4,9],partli:[6,25],pass:[2,3,12,14],password:20,past:[10,22],patch:[6,22],path:[0,3,4,6,7,9,14,15,18,25,26],patient:7,patter:4,pattern:[0,3,4,12,21,24,25],pauli:[0,25],pc:[11,18],pca:[0,7,18,25,26],pd:[0,4,5,6,7,9,11,25,26,27],pde:2,pdf:[0,3,4,5,6,9,16,20,24,25,27],pedagog:[0,25,26],penal:[6,26,27],penalti:[6,13,20,26,27],penros:[5,6,27],pentagon:13,peopl:[0,1,9,13,18],per:[0,1,6,21,23,25],percentag:[0,10,11,23],perceptron:[0,1,7,25],peregrin:25,perfect:[0,1,13,25],perfectli:[4,6],perform:[0,2,3,4,5,6,8,10,11,12,13,14,15,16,17,18,19,20,22,25,26,27],performac:4,perhap:[0,5,13,25,26,27],perimet:[1,9],period:[1,4,22],permut:11,persist:13,person:[5,6,7,21,23,25,26,27],perspect:24,pertin:[12,25],petal:[8,9],peter:[24,26],phantom:22,phase:[6,12],phenomena:22,phi:8,phi_k:8,philosophi:13,phone:[23,25],photo:4,php:[],phrase:[0,25],physic:[0,1,4,7,12,13,22,23,24,25,26,27],physicist:[],pi:[2,3,5,6,7,9,12,13,22,27],pick:[1,9,10,11,13,14],pickl:1,pictur:[0,25],pie:[18,25],piec:[11,14],pillow:[0,15,18,20,25],pinv:[5,6,13,26,27],pip3:[0,1,15,20,25],pip:[0,1,15,18,20,25],pipelin:[0,6,8,10,26],pippin:25,pit:4,pitfal:[6,26,27],pitt:12,pixel:[1,3,4],pixel_height:[1,3],pixel_width:[1,3],place:[0,4,6,8,13,19,20,25],plai:[0,3,4,5,6,8,11,18,25,26,27],plain:[8,10,12,13,14],plan:[6,9,23,24,25],plane:[8,9],plateau:[5,27],platform:[18,25],plausibl:12,pleas:[9,11,13,20,23,25],plenti:1,plethora:[3,12],plot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20,22,25,26,27],plot_all_sc:[20,27],plot_confusion_matrix:[7,10],plot_count:6,plot_cumulative_gain:[7,10],plot_data:1,plot_dataset:8,plot_decision_boundari:[9,10],plot_import:10,plot_max:4,plot_min:4,plot_model:4,plot_numb:4,plot_predict:8,plot_regression_predict:9,plot_result:4,plot_roc:[7,10],plot_surfac:[2,6,13,20],plot_train:9,plot_tre:[9,10],plt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,19,20,22,25,26,27],plu:[0,3,5,7,25,26,27],pluggabl:[3,4,14],plugin:[3,4,14],pm:8,pmatrix:2,pml:24,pn:3,png:[0,4,6,7,9,25,26],point:[0,1,2,3,5,6,7,8,9,10,11,13,14,15,16,17,19,20,22,23,25,26],point_1:4,point_2:4,poisson:[18,22,25],poli:[6,8],poly100_kernel_svm_clf:8,poly3:0,poly3_plot:0,poly_featur:[8,9],poly_features10:9,poly_fit10:9,poly_fit:9,poly_kernel_svm_clf:8,polydegre:[0,5,6,10,26,27],polygon:13,polym:12,polymi:20,polynomi:[0,5,6,7,8,9,10,11,15,16,17,20,25,26],polynomial_featur:6,polynomial_svm_clf:8,polynomialfeatur:[0,6,8,9,26],polytrop:[0,6,25],pool:3,pool_siz:3,poor:[1,13],poorli:[0,26],pop:2,popul:[0,5,25,26,27],popular:[0,1,3,6,7,8,9,11,12,15,18,19,20,22,26],popularli:[0,25],portabl:10,portion:[11,13],pose:[0,4,5,6,11,22,25],posit:[0,1,2,3,5,7,8,10,11,13,14,19,22,25,26,27],possibl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,18,19,20,22,23,25,26,27],posterior:[5,27],postpon:[0,25,26],postscript:20,postul:[5,27],potenti:[0,3,5,6,12,13,25,26,27],pott:12,power:[0,1,5,6,8,9,12,13,25,26],pp:[5,6,27],practic:[0,5,6,7,8,20,22,26,27],practition:[0,1,3,25],pre:25,preced:[1,11,12,22],preceed:4,preceq:8,precis:[0,2,5,11,13,19,20,22,25,26,27],pred:6,predicit:0,predict:[0,1,5,6,7,8,9,10,15,16,18,20,24,25,26,27],predict_prob:1,predict_proba:[7,10],predictor:[0,5,6,7,9,10,11,25,26,27],prefer:[0,1,6,8,9,11,13,15,18,20,25],prepar:[0,6,19,20,25,26],preprocess:[0,4,6,7,8,9,10,11,20,27],prerequisit:0,prescript:20,presenc:13,present:[0,5,6,7,9,12,13,19,20,22,25,26,27],preserv:[3,11,19],press:[13,24],pretrain:[1,4],pretti:[0,4,8,9,15,18,20,25],prev_centroid:14,prevent:[13,22],previou:[0,1,2,3,4,5,6,8,10,11,12,13,19,20,22,26],previous:[2,3,9,10,22],price:[0,4,9,13],primal:8,primari:[0,7,25],prime:22,primit:2,princip:[0,5,7,18,25,26],principl:[0,6,7,8,14,25],print:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,19,22,25,26,27],print_funct:[8,9],printout:[0,25],prior:[0,5,6,25,27],privat:0,pro:[],prob:[1,22],probabilist:[0,24,25,26],probabl:[0,1,3,4,6,7,10,13,18,25,26],problem:[0,3,4,5,6,7,8,9,10,11,12,16,17,18,19,20,22],probml:24,proce:[0,5,6,7,8,9,10,11,13,19,25,26,27],procedur:[2,4,5,6,8,10,11,13,20,26,27],proceed:19,process:[0,2,4,6,9,10,12,13,15,18,19,20,22,24,25],prod:24,prod_:[1,5,7,27],produc:[0,3,4,5,6,9,10,11,12,13,18,19,20,22,25,26,27],product:[0,1,3,5,6,7,8,12,13,16,18,19,25,26,27],profess:[0,25],progag:[],program:[0,1,4,5,6,8,12,14,15,16,18,19,21,22,23,25,26],programm:19,progress:[1,4,14],prohibit:6,project1:[6,20],project:[0,1,2,3,5,11,13,17,18,21,23,26,27],project_root_dir:[0,6,7,9,25,26],projectwrit:20,promin:12,promis:8,promot:[23,25],prone:9,pronounc:[13,18,25],proof:[0,11,12,13,25],propag:[2,3,13],proper:[0,2,6,7,20],properli:[1,6,8,10,13,20],properti:[0,1,3,12,13,16,17,19,25],proport:[0,1,5,9,11,13,16,22,25,26],propos:[1,4,6,10,20,25],propto:[5,13,27],proton:[0,25],prove:[3,13],provid:[0,1,3,4,5,6,8,9,10,12,13,15,18,19,20,22,25,26,27],proxi:[1,13],prune:9,pseudo:[19,22],pseudocod:20,pseudoinv:[5,27],pseudoinvers:[5,6,27],pseudorandom:[6,22],psycholog:[0,25],pt:13,publish:[],punish:[0,1,25],pure:[3,9,22],purest:9,puriti:9,purpos:[0,3,10,12,14,25],put:1,py:[0,1,2,3,4,5,6,7,8,9,11,14,25,27],py_tf:[3,4,14],pycod:25,pydata:18,pydot:9,pyhton2:25,pylab:[0,7,25],pypi:18,pyplot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,19,20,22,25,26,27],pythagora:[5,27],python2:[0,15,20,25],python3:[0,1,2,3,4,6,7,8,9,11,14,15,18,20,25,27],python:[1,2,3,4,5,6,8,11,12,13,14,16,20,22,26,27],pytorch:[0,18,20,25],q:[5,6,8,11,22,26],qp:8,qquad:[2,11,13,19],qr:[5,6,19,26],quad:[1,13,19],quadrat:[0,8,9,13,15,16,25],qualit:[4,9,20,22],qualiti:[0,9,15,16,18,25,26],quantifi:1,quantil:10,quantit:[0,6,9,20,25],quantiti:[0,2,5,6,7,9,10,11,12,14,16,19,22,25,26,27],quantum:[4,12,24,25],quartil:[0,26],quench:5,queri:9,question:[0,5,6,9,11,12,13,20,23,25,26,27],qugan:4,quick:[4,22],quickli:[1,3,9,11,13],quit:[1,5,6,9,10,12,26],quot:4,r2:[0,5,6,25,26,27],r2_score:[0,25],r2score:[0,25],r:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,26,27],r_1:9,r_2:9,r_j:9,r_m:9,rad:0,radial:[0,8,12],radioact:22,radiu:[0,1,9,26],rag:2,rain:9,rais:[0,2,3,4,7,14,27],ramp:1,ran0:22,ran1:22,ran2:22,ran3:22,rand:[0,4,5,6,9,10,13,15,16,19,25,26,27],randint:[6,9,13],randn:[0,1,2,5,6,9,11,13,15,16,25,26,27],random:[0,1,2,3,4,5,6,8,9,13,14,15,16,18,19,20,25,26,27],random_forest_model:10,random_index:13,random_indic:[1,3],random_st:[0,7,8,9,10,11],randomforestclassifi:10,randomli:[1,6,9,13,14],rang:[0,1,2,3,4,5,6,7,9,10,11,12,13,14,19,22,25,26,27],rangl:[0,6,11,22,25,26],rangle_x:22,rank:[5,26],rankdir:4,raphson:[1,8,13],rapidli:0,rare:[1,13,25],raschka:[25,26,27],rasckha:25,rate:[0,1,2,3,4,8,9,10,12,13],rather:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,19,22,25,26,27],ratio:[4,7,9,10,11],rational:[0,25],ravel:[5,6,7,8,9,10,11,13,19,26],raw:3,rbf:[8,11,12],rbf_kernel_svm_clf:8,rbf_pca:11,rc:[0,22],rc_temp:[0,7],rcond:[0,25,26],rcparam:[0,1,3,7,8,9,10,22,25],re:[2,4,13],reach:[1,4,5,6,9,10,11,12,13,14,27],read:[0,2,3,4,5,6,7,8,11,12,16,19,20,21,22,24,27],read_csv:[0,6,7,9,25],read_fwf:[0,25],reader:[0,6,19,22,25,26,27],readi:[0,1,5,6,8,10,11,12,19,20,25,27],readili:1,readthedoc:18,real:[0,1,2,4,7,10,11,12,19,26],real_loss:4,real_output:4,realist:8,realiti:22,realiz:[1,12],realli:[0,1,25],rearrang:13,reason:[0,1,3,4,10,13,24,25],reassign:1,recal:[5,6,9,10,11,12,19,22,25,26,27],recast:3,receiv:[1,3,10,12,22],recent:[0,2,3,4,6,7,10,13,14,20,24,25,27],recept:[3,12],receptive_field:3,recip:[0,6,7,19,20,25,26],reciproc:[5,27],recogn:[0,4,5,10,25,27],recognit:[0,1,3,12,21,24,25],recommen:25,recommend:[0,2,3,4,5,6,8,13,15,18,19,20,24,27],reconsid:9,reconstruct:11,record:[10,20,21,23,25],rectangl:[9,13],rectangular:[5,26],rectifi:[1,3,12],recur:[0,18,25],recurr:[0,1,18,25],recurs:[9,18,19,25],red:[0,3,4,6,8,9],redefin:[0,10,25,26],redefinit:27,reduc:[1,3,5,6,9,10,11,13,25,27],reduct:[0,10,11,18,22,25,26],refer:[0,1,2,3,5,6,9,11,12,13,14,19,24,25,26],referenc:2,refin:12,refit:6,reflect:[0,1,4,5,20,22,25],refresh:[18,25],refreshprogrammingskil:25,reg:[10,11],regard:[1,9,13],regardless:12,region:[3,4,6,9,12,20],regist:[6,20,22],reglasso:[5,27],regr_1:[0,9],regr_2:[0,9],regr_3:[0,9],regress:[1,8,11,12,15,16,18,19],regressor:[0,7,10,25],regridg:[0,5,6,27],regular:[0,3,4,5,6,7,9,13,17,23,25,26,27],regularis:6,reilli:[0,15,24,25],reinforc:[0,8,18,25],reiter:1,reject:7,rel:[0,4,6,7,9,12,13,22,25,26],relat:[0,1,3,4,5,11,13,14,19,22,25,27],relationship:[0,4,9,25],relativeerror:[0,25,26],releas:[1,18,25],relev:[0,1,5,7,11,15,18,20,22,25,27],reli:[0,6,8],reliabilti:20,reliabl:[7,22],relu:[3,4,25],remain:[1,2,4,6,12,19,22,26,27],remaind:22,reman:2,remark:1,rememb:[0,8,13,19,20,25],remind:[0,5,11,13,19,22,26,27],remov:[0,4,5,6,26,27],render:[0,9,25,26],reorder:[5,7,26,27],reorgan:[0,25],repeat:[0,1,3,4,5,6,9,10,11,13,14,19,20,22,25,27],repeated:25,repeatedli:[0,6,10,13],repet:3,repetit:[6,25,26],rephras:13,replac:[0,1,3,4,5,6,10,12,14,15,16,18,20,25,26,27],replica:6,repo:20,report:25,reportexampl:20,repositori:[0,4,20,25],repres:[0,1,2,3,4,5,6,7,8,9,10,12,13,22,25,26,27],represent:[0,1,3,6,9,22,25],representd:3,reproduc:[0,5,6,9,12,15,16,18,20,22,25,26],repuls:[0,25],request:[0,13],requir:[0,1,3,4,5,6,8,9,11,12,13,17,19,25,26,27],rerun:9,res1:2,res2:2,res3:2,res_analyt:2,res_analytical1:2,res_analytical2:2,res_analytical3:2,resaml:[6,20],resampl:[0,7,10,18,25,26],rescal:[0,11,12,26],rescu:[5,27],reseach:[6,20],research:[0,4,13,18,24,25],resembl:[6,22],reserv:[1,5,6,22,27],reshap:[0,1,2,3,4,6,8,9,10,15,16,19,25,26],residenti:0,residu:[0,5,13,25],resiz:[5,26],resourc:25,respect:[0,1,2,3,5,6,7,8,10,11,12,13,14,16,17,20,22,25,26,27],respond:12,respons:[0,7,9,12,25,26],rest:[0,5,26],restat:[0,12,25],restor:4,restored_discrimin:4,restored_gener:4,restrict:[0,3,9,12,25],result:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,25],retail:0,retain:[5,6,26],retriev:25,return_data:14,return_sequ:4,return_x_i:9,reus:[1,3,6,20],reveal:[0,12,25],revers:[1,19],review:[18,19],revisit:14,revolut:25,reward:[0,4,25],rewrit:[0,3,5,6,7,8,10,11,12,13,19,20,22,27],rewritten:[2,6,8,10,22],rewrot:13,rf:10,rgb:3,rgoj5yh7evk:18,rh:6,rho:[0,10,13,25],rho_1:10,rho_2:10,rho_m:10,rich:[0,25],ride:9,rideclass:9,ridedata:9,ridg:[7,11,13,18,25],ridge_sk:6,ridgebeta:[5,27],right:[0,1,2,3,5,6,7,8,9,10,12,13,14,16,17,19,20,22,25,26,27],right_sid:2,rightarrow:[0,1,5,6,8,11,12,13,22,25,26],rigor:[0,25],ring:6,rise:[0,25],risk:[0,13,15,16,25],rival:4,river:0,rlm:25,rm:[0,22],rmse:0,rmsporp:13,rmsprop:[1,3,4,13],rnd_clf:10,rng:22,rnn1:4,rnn2:4,rnn:[4,12],rnn_2layer:4,rnn_input:4,rnn_output:4,rnn_train:4,rntrick1:22,rntrick2:22,rntrick3:22,rntrick4:22,ro:[0,13,25],robert:[20,24],robust:[0,25],robustscal:[0,26],roc:[7,10],rod:[],role:[0,2,5,6,8,18,25,26,27],roll:6,room:[0,23,25],root:[0,5,9,13,22,26,27],rot:25,rotat:[1,8,9,10],rotation_matrix:9,roughli:[1,3],round:[0,7,9,13],routin:[13,19,25],row:[0,1,2,5,6,9,11,19,25,26,27],rr:[5,26],rrr:[5,26],rug:13,rule:[0,1,5,6,13,20,25,26,27],run:[0,1,2,4,5,6,8,9,11,13,15,18,20,25,26,27],runtim:[1,6,14],runtimewarn:[1,6],rust:[0,15,18,19,25],rvert:1,rvert_2:1,s:[0,1,2,3,4,5,6,7,9,11,12,13,16,17,18,19,20,22,25,26,27],s_1:6,s_:[3,6],s_i:[6,7],s_j:6,s_k:6,saddl:13,sai:[0,1,2,3,4,5,6,7,8,9,10,11,12,19,20,22,25,26,27],said:[6,9,13],sake:[0,5,7,11,25,26,27],sale:[0,25],sam:25,same:[0,1,2,3,4,5,6,8,9,11,12,14,17,19,20,22,25,26,27],samm:10,sampl:[0,1,2,3,4,5,6,7,8,9,10,13,14,15,16,18,19,20,22,25,26,27],sample_vari:14,sampleexptvari:22,samwis:25,sastri:11,satisfactori:[0,25],satisfi:[1,2,3,6,8,13,19,22],satur:[1,6],save:[0,4,6,7,9,13,25,26],save_fig:[0,6,7,9,10,25,26],savefig:[0,4,6,7,9,22,25,26],savetxt:4,saw:[5,26],scalabl:10,scalar:[2,5,6,10,26,27],scale:[0,1,3,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,23,25,27],scale_mean:4,scale_std:4,scaler:[0,7,8,9,10,11,20,26,27],scan:[5,7,27],scari:[5,27],scatter:[0,1,6,7,8,9,14,25,26,27],scenario:[6,13],schedul:[13,23],scheme:[1,13],schrage:22,scienc:[0,1,10,12,13,18,21,22,23,24],scientif:[0,15,18,20,25],scientist:[0,25],scikit:[3,5,6,8,9,10,13,18,19,20,21,24],scikit_learn:[0,16],scikitlearn:25,scikitplot:[7,10],scipi:[0,3,5,6,13,15,18,19,20,25,26,27],scl:6,score:[0,1,3,6,7,9,10,11,15,16,20,23,25,26],scores_kfold:6,scratch:[1,13],sdg:13,seaborn:[0,1,3,6,7,25],seamless:[0,15,18,20,25],search:[0,1,3,5,9,13,25,27],sebastian:25,sebastianraschka:25,sec:6,second:[0,2,3,4,5,6,7,8,9,11,12,14,15,16,18,19,20,22,23,25,26],secondeigvector:11,secondli:12,section:[4,11,16,17,19,20,22,26,27],sector:0,see:[0,1,2,3,4,5,6,7,8,10,11,12,13,15,16,17,18,19,20,22,25,26,27],seed:[0,1,2,3,4,5,6,8,9,11,13,14,15,16,20,22,25,26,27],seed_imag:4,seek:[1,2,8],seem:[1,3,4],seemingli:[0,25],seen:[0,1,3,5,10,12,17,22,25],segment:13,seismic:6,seldomli:[0,25],select:[1,5,6,8,9,10,11,17,20,21,22,23,24,25,26,27],self:[0,1,2,5,7,25,26,27],sell:4,semest:[7,21],semi:[8,13],semilogx:6,send:[5,12,13,23,25],senior:[21,23],sens:[0,4,6,8,20,25],sensibl:3,sensit:[0,5,6,9,13,25,26,27],sent:2,sentenc:[4,12],separ:[0,1,2,4,6,8,9,12,14,15,18,20,22,25],septemb:[17,20,25],sequenc:[2,3,4,7,9,10,12,13,18,19,22,25],sequenti:[1,3,4,10,12,22],seri:[0,1,2,3,4,5,6,10,11,12,13,19,25,26,27],serif:[0,7,22,25],serv:[0,1,2,3,5,7,13,20,24,25,26,27],servic:20,session:[1,20,21,23,25],set:[1,4,5,6,7,8,10,11,13,14,16,17,18,19,20,22,23,27],set_major_formatt:[6,20],set_major_loc:[6,20],set_tick:[1,6,8],set_ticklabel:[1,6],set_titl:[0,1,2,3,7,12,14,25],set_xlabel:[0,1,2,3,7,12,25],set_xlim:[7,12],set_xticklabel:1,set_ylabel:[0,1,2,3,7,25],set_ylim:[7,12],set_ytick:7,set_yticklabel:[1,6],set_zlim:[6,20],seth:4,setminu:6,setosa:[8,9],setosa_or_versicolor:8,setp:6,setup:[1,4,6,8,18,25,26],sever:[0,3,5,6,7,8,9,11,12,13,18,19,22,25,26,27],sgd:[1,3],sgd_clf:8,sgdclassifi:8,sgdreg:13,sgdregressor:13,sgn:[5,26,27],shallow:13,shape:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,19,25,26,27],shape_bas:2,share:[1,3,25],she:7,shift:[1,6,12,22,27],ship:3,shire:25,shortcom:13,shorten:4,shorter:22,shorthand:25,shortli:[19,25],should:[0,2,3,5,6,8,9,11,12,15,16,19,20,22,25,26,27],show:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,19,20,22,25,26,27],show_shap:4,shown:[0,4,5,8,9,11,12,13,19,26],shrink:[3,5,6,8,11,20,26,27],shrinkag:[5,6,26,27],shrunk:11,shuffl:[0,1,4,6,13,26],side:[0,2,5,8,12,13,19,25,27],sigh:[18,25],sigma0:22,sigma1:22,sigma2:22,sigma:[0,1,5,6,7,10,11,12,13,17,19,20,22,25,26,27],sigma_0:[5,26,27],sigma_1:[5,26,27],sigma_2:[5,26,27],sigma_:[5,19,25,26,27],sigma_fn:[7,12],sigma_i:[0,5,25,26,27],sigma_j:[5,17,26,27],sigma_m:[6,22],sigma_n:[11,22],sigma_t:13,sigma_x:22,sigmoid:[1,2,4,7,8,10,12],sigmundson:[6,26,27],sign:[1,2,7,8,10,22,23],signal:[1,3,10,12],signifi:4,signific:1,significantli:[1,13,22],sigurd:25,sim:[4,5,6,13,20,22,27],similar:[0,1,2,3,4,5,6,7,8,9,10,11,14,17,18,19,20,25,27],similarli:[0,1,3,5,8,10,13,22,25,26,27],simpl:[1,2,3,5,6,7,8,10,11,12,14,15,16,17,18,19,20,22],simplepredict:10,simpler:[0,1,5,6,7,13,16,18,20,25,27],simplernn:4,simplest:[0,1,3,4,9,10,12,14,25],simpletre:10,simpli:[0,1,2,4,5,6,8,9,10,11,12,15,18,19,20,22,25,26,27],simplic:[2,5,6,7,8,9,10,11,12,14,26,27],simplicti:[5,26],simplifi:[0,6,9,15,18,20,25,26,27],simplist:[3,6,22],simul:6,simultan:6,sin:[0,1,2,3,4,9,12,13,19,25],sinc:[0,1,2,3,5,6,7,8,9,10,11,13,19,22,24,25,26,27],sine:[3,12],singl:[0,1,2,3,5,6,7,8,9,12,13,19,22,25,26,27],singular:[0,6,13,19,20,25,27],sinusoid:3,site:[0,1,2,3,4,6,7,8,9,11,14,20,21,25,27],situat:[0,4,5,7,13,22,25,26],six:[3,22],size:[0,1,2,3,4,5,6,8,9,10,11,13,19,20,22,25,27],sketch:10,ski:9,skill:0,skip:11,skl:[0,6,25,26,27],sklearn:[0,1,3,5,6,7,8,9,10,11,13,14,25,26,27],skplt:[7,10],sl:[6,27],slack:8,slice:[2,19,25],slide:[0,3,15,16,20,22,25,26],slight:[6,13],slightli:[1,2,3,5,6,7,10,22,26,27],slope:[8,11,12],slow:[0,2,8,13,26],slower:[5,19,25,26,27],slowest:19,slowli:12,slp:1,small:[0,1,2,3,5,6,8,9,10,11,12,13,18,19,20,22,25,26,27],smaller:[0,1,2,5,6,8,9,11,13,22,25,26,27],smallest:[0,4,14,15,16,25],smallest_row_index:14,smooth:[0,3,6,9,13,20,25],sn:[0,1,3,6,7,25],sne:11,sneak:25,so:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18,19,20,22,23,25,26,27],soar:6,social:0,soft:[1,7,10,12],soften:8,softmax:[3,7],softwar:[0,8,15,18,19],sol:8,sole:[0,6,25],solid:[0,7],solut:[0,1,2,3,5,6,8,10,11,13,17,19,20,22,25,26,27],soluton:2,solv:[0,1,3,5,6,8,10,11,12,13,19,20,25,26],solve_expdec:2,solve_ode_deep_neural_network:2,solve_ode_neural_network:2,solve_pde_deep_neural_network:2,solveod:2,solveode_popul:2,solver:[2,7,8,9,10,11,19,25],some:[0,1,2,3,4,5,6,7,8,9,10,11,12,14,20,22,25,27],some_model:[6,26,27],somehow:4,someth:[0,1,3,4,7,9,11,20,22,25,26],sometim:[0,1,11,12,13,14,25,26],soon:[19,23,26],sophist:[0,25],sopt:13,sort:[5,6,9,11,22,26],sound:[3,5,27],sourc:[0,1,3,6,15,18,19,20,22,25],space:[0,1,4,5,8,9,11,12,13,14,22,26,27],span:[0,3,5,9,11,19,25,26],spare:1,spars:[3,6,19,25],sparse_mtx:[19,25],sparsecategoricalcrossentropi:3,sparsiti:10,spatial:[1,2,3,12],speak:22,special:[6,7,10,12,13,19,22,25,26,27],specif:[0,1,2,3,4,5,6,7,8,9,11,12,16,18,19,20,22,24,25,26,27],specifi:[0,3,5,6,7,9,11,13,14,20,22,25,27],specifici:[0,10,25],spectacular:3,spectral:1,speech:[0,1,3,4,12],speed:[1,2,4,13],spend:22,spent:20,sphere:[0,26],spin:6,spite:0,spline:8,split:[1,3,4,5,6,8,9,10,11,14,17,20,22,27],splite:0,splitter:[1,10],spontan:22,spot:3,spread:[0,11,22,25,26],springer:[20,24,25],spuriou:13,sqquar:27,sqrsignal:3,sqrt:[0,3,4,5,6,8,10,11,13,17,22,26,27],squar:[1,2,3,4,7,8,9,11,13,14,15,16,17,18,19,22],squarederror:10,squaredeuclidean:14,squash:12,srtm:[6,20],srtm_data_norway_1:[6,20],stabil:[5,20],stabl:[0,4,5,6,9,11,18,20,25,26,27],stack:[2,3,4],stage:[5,13,20],stai:[0,2,4,5,11,17,25,26],stand:[0,5,9,12,25,26,27],standadscal:26,standard:[0,1,4,5,6,7,8,10,12,15,16,17,19,20,22,25,27],standard_basi:2,standardscal:[0,6,7,8,9,10,11,26,27],stanford:13,start:[0,1,2,3,4,5,6,8,9,10,11,12,13,14,19,22,23,25,26],start_box:2,start_nod:2,start_tim:14,stat:6,state:[1,2,4,5,6,7,8,10,11,12,13,18,22,26,27],statement:[0,7,19,25],stationari:[],statist:[0,1,3,4,7,9,10,11,12,13,14,19,20,21,24,26],statu:[0,7,9,11,25],stavang:[6,20],std:[0,4,6,25,26],steep:13,step:[0,1,2,4,6,7,9,10,11,12,13,14,19,20,25],step_fn:[7,12],step_length:13,steps_list:9,stereo:3,still:[0,2,3,5,6,11,13,17,22],stimuli:12,stk2100:[24,25],stk3155:[15,20,21,23],stk4021:[24,25],stk4051:[24,25],stk4155:[21,23],stk5000:24,stk:[24,25],stochast:[0,1,5,6,8,11,12,15,16,20,25,27],stock:4,stoke:12,stone:[0,7,20],stop:[1,4,9,11,13,14],stopiter:[0,7],storag:[5,26],store:[0,1,2,3,6,11,13,20,22,25],storehaug:[23,25],str:[1,3,4],straight:[0,6,8,13,25],straightforward:[0,2,3,5,6,8,9,10,13,19,25,26,27],strategi:[0,1,9,25],stratifi:6,strength:[0,5,14,26],stretch:11,strict:[8,13],strictli:[8,13],stride:[4,19],strike:6,string:1,stroke:7,strong:[3,6,9,10,12,19,22],strongli:[0,8,18,19],stronli:0,structur:[0,1,2,3,6,9,10,12,18,25],stuck:[1,13],student:[0,20,21,23,24,25],studi:[0,3,4,5,6,7,8,11,12,13,17,18,20,24,25,26,27],studier:24,style:[0,7,9,19,25],sub:[9,12],subarg:2,subdivid:[0,19,25],subfield:0,subject:[6,8,22],submit:25,subplot:[0,1,3,4,6,7,8,9,10,14,25],subplots_adjust:[8,22],subprogram:[19,25],subract:[0,26],subroutin:[0,25],subscript:1,subsequ:[1,4,5,6,12,19,22,26],subset:[1,6,9,12,13,18,25],subspac:[0,8,11,26],substanti:[9,10],substep:11,substitut:[3,6,12,19],subsubset:9,subtask:6,subtl:1,subtract:[0,4,5,6,11,13,17,19,20,22,27],subtre:9,subval:2,succeed:[0,4,25],success:[3,7,9,13,22],successfulli:[4,9],sudo:[0,15,18,20,25],suffer:[0,1,2,5,10,25,26,27],suffici:[1,6,8,11,13],suggest:[1,13,20,24],suit:[8,12],suitabl:[0,22,26],sum:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,19,20,22,25,26,27],sum_:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,22,25,26,27],sum_i:[0,2,5,6,8,13,17,20,26,27],sum_j:6,sum_ja_:0,sum_k:[6,8,12,19],sum_logist:13,sum_m:3,sum_n:3,sum_nx_:3,summar:[5,6,9,27],summari:[1,3,4,10,21,27],summat:[0,3,16,26],sunni:9,superconduct:27,superfici:3,superscript:[1,12],supervis:[0,5,6,7,9,12,18,25,26],supplement:[7,20],support:[0,1,9,10,11,13,18,25,26],suppos:[0,5,6,7,8,10,11,12,13,19,25,26,27],suppress:[5,8,13,27],sure:[0,1,4,6,20],surf:[6,20],surfac:[0,6,20,25],surpass:6,surpris:[0,25],surround:[3,18],survei:[0,5,6,25,26,27],svc:[8,9,10],svd:[0,6,11,17,25],svdinv:[5,27],svm:[8,9,10,11],svm_clf:[8,10],swath:[5,26],sy:13,symbol:[1,3,4,5,11,13,14,18,22,25,26,27],symmeteri:1,symmetr:[0,5,8,11,12,13,19,25,26],symmetri:[6,9],sympi:[0,15,18,20,25],synonim:22,syntax:[1,13],syntaxerror:[1,8],system:[0,1,3,4,6,7,9,10,12,13,15,18,19,20,25],systemat:[4,6],t0:[3,6,13],t1:[2,13],t2:2,t3:2,t:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,25],t_0:[2,9,13],t_1:13,t_2:[],t_:2,t_b:10,t_i:[1,2,5,12,26],t_j:12,t_k:9,tabl:[9,20,22,23,25],tabul:[0,25],tabular:25,tackl:4,tag:[2,3,4,5,6,7,12,13,14,19,22,26],taht:[0,25],tail:22,tailor:[2,8,11,25],taiwan:[0,25],take:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,18,19,22,25,26,27],taken:[0,1,3,6,10,13,19,25],tan:3,tangent:[1,4,12,13],tanh:[1,4,7,8,12],target:[0,1,2,3,4,5,6,7,8,9,10,11,12,25,26,27],target_iscomplex:2,target_meta:2,target_nam:9,target_shap:2,task:[0,1,3,6,9,11,12,14,20,25],tau:[3,5,22,27],taught:25,tax:0,taylor:[2,13],taylornr:13,tc:8,td:[1,6,25],teach:25,team:1,teaser:0,technic:[0,5,6,13,15,20,25,26],techniqu:[0,1,8,10,13,18,22,24,25,26],technolog:[0,1],tell:[0,4,6,10,11,13,22],temp1:1,temp2:1,temp:1,temperatur:[0,9,25],temporarili:1,ten:[3,17,25],tend:[3,5,6,8,9,10,12,13,14,26,27],tendenc:[0,25],tension:6,tensor:3,tensorflow:[0,2,4,8,14,15,18,19,20,21,24,25,26],term1:[5,6,11,20,26],term2:[5,6,11,20,26],term3:[5,6,11,20,26],term4:[5,6,11,20,26],term:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,22,25,26,27],termin:[0,4,5,9,10,13,15,25,26],terrain1:[6,20],terrain:[6,20],test:[3,4,5,6,7,8,9,10,13,17,19,20,22],test_acc:3,test_accuraci:[1,3],test_error:6,test_imag:[3,4],test_ind:6,test_input:4,test_label:[3,4],test_loss:3,test_pr:1,test_predict:1,test_rnn:4,test_scor:[7,10],test_siz:[0,1,3,5,6,10,25,26,27],test_split:9,tester:27,testerror:[0,6,26],testi:4,testpredict:4,testx:4,text:[0,1,2,4,5,8,9,11,13,15,19,22,24,26],textbook:[16,17,20,26],textual:9,textur:[1,9],tf:[1,3,4,13,14],tf_loadlibrari:[3,4,14],th:[0,1,2,5,6,7,9,12,13,14,15,16,19,20,22,25,26,27],than:[0,1,2,3,4,5,6,7,9,10,11,12,13,17,18,22,25,26,27],thank:[4,6,26,27],theano:[1,18,25],thei:[0,1,2,3,4,5,6,7,8,9,11,12,13,19,20,22,25,26,27],them:[0,1,3,4,6,8,9,10,11,12,13,19,20,25,26,27],theme:[0,25],themselv:[0,22,25],thenc:6,theorem:[2,6,7,26],theoret:[0,4,10,25],theori:[0,1,3,8,9,12,13,18,20,24,25,27],thereaft:[0,5,6,11,12,15,16,17,19,20,25],therebi:[0,5,7,11,25,26,27],therefor:[0,1,2,3,4,6,7,8,11,13,22,25,26],therein:11,thereof:[0,6,13,25],theta:[1,4,13,22],theta_:[1,13],theta_i:1,theta_linreg:13,theta_t:13,thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20,21,22,24,26,27],thing:[0,1,2,4,5,7,9,22,25,27],think:[0,1,3,4,6,9,12,13,14,22,25],third:[0,3,6,13,23,25],thirti:7,thorughout:25,those:[0,3,5,6,8,9,10,11,19,20,21,25,26],though:[1,2,3,4,13,19,22],thought:[6,14,20,22],thousand:[0,1,20,26],three:[0,1,3,5,6,8,9,12,15,19,20,21,22,23,25,26,27],threshold:[1,3,9,10,11,12,13],through:[0,1,2,3,4,5,6,8,11,12,13,14,18,19,22,25,26,27],throughout:[0,4,5,14,18,19,22,25],thu:[0,1,2,5,6,7,8,10,11,12,13,20,23,25,26,27],thumb:[0,6,20,25,26],thursdai:[23,26],tibshirani:[6,20,21,24,25],tick:6,tick_param:6,ticker:[6,13,20,22],tif:[6,20],tight_layout:[1,7],tightli:11,tild:[0,5,6,7,11,15,16,17,20,22,25,26,27],till:[0,4,7,8,9,10,12,19,25,26,27],time:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,22,25,26,27],timeit:4,timer:4,tini:1,tip:3,titl:[0,1,2,3,4,6,7,8,9,10,13,20,22,25],tmp:13,tn:[2,3,7],to_categor:[1,3,4],to_categorical_numpi:1,to_numer:[0,6,25],todai:3,togeth:[0,3,6,8,11,13,18,25],toi:14,told:13,toler:[2,6,14],tolist:4,tomographi:12,too:[0,2,4,5,6,9,11,13,15,22,24,25,26],took:[8,25],tool:[0,1,3,6,13,18,26],toolbox:8,top:[0,3,5,6,9,10,18,25,27],topic:[0,5,6,7,8,18,20,26,27],topograph:20,topolog:[1,3,12],toposort:2,torkjellsdatt:[23,25],toss:[10,22],total:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,19,22,23,25,26],total_loss:4,totalclustervari:14,totalscatt:14,toward:[1,2,7,12,13,20],town:0,tp:[4,7],tpng:9,tpu:[13,18,25],tqdm:6,tr:26,trace:2,trace_stack:2,traceback:[0,2,3,4,6,7,10,13,14,20,25,27],tracer:2,track:[3,13,14,19,26],tract:0,tractabl:[0,25,26],trade:[5,9,27],tradeoff:[0,5,20,25,26,27],tradit:[0,1,4,6,25],train:[2,3,5,6,8,9,10,11,12,13,17,20,27],train_accuraci:[0,1,3,25],train_dataset:4,train_end:[0,1,26],train_error:6,train_imag:[3,4],train_ind:6,train_label:[3,4],train_pr:1,train_siz:[0,1,3,26],train_step:4,train_test_split:[0,1,3,5,6,7,9,10,11,25,26,27],train_test_split_numpi:[0,1,26],trainable_vari:4,trained_model:[6,26,27],trainerror:[0,26],traini:4,training_checkpoint:4,training_dataset:4,training_gradi:13,trainingerror:6,trainpredict:4,trainscor:4,trainx:4,trait:[0,25],trajectori:4,transfer:9,transform:[0,5,6,7,8,9,10,11,12,13,18,19,25,26,27],transit:[6,12],translat:[1,4,6,10,25,26,27],translate_vjp:2,transpos:[1,5,11,19,26,27],travers:[0,5],treat:[0,1,3,6,12,13,22,25,26,27],tree:[0,1,6,18,20,25],tree_clf:[9,10],tree_clf_:9,tree_clf_sr:9,tree_reg1:9,tree_reg2:9,tree_reg:9,trend:22,treue:7,trevor:[20,24],tri:[2,3,4,9,13],triain:0,trial:[0,2,4,6,13,22,25],triangl:13,triangular:19,trick:[3,4,8,11,13,22],trickier:22,tridiagon:19,trigger:[0,7],trillion:18,trivial:[0,1,5,11,22,25,27],troubl:[0,8,12,26],truck:3,true_beta:[6,26,27],true_divid:1,true_fun:6,trust:9,tucker:8,tuesdai:[23,25],tumor:[7,9],tumour:7,tunabl:1,tune:[4,9,13,19,25],tupl:2,turbul:[],turn:[0,1,5,6,7,8,9,10,11,12,13,19,20,22,25,26],tutori:[1,4],tv:2,tveito:2,tweak:[1,4,10,22],twice:13,twist:11,two:[0,1,2,4,5,6,7,9,10,11,12,13,15,16,19,21,22,24,25,27],tx:13,tx_1:13,txt:4,ty:13,type:[0,1,3,6,8,10,13,16,19,20,22,26,27],typeerror:[2,6,13,20],typic:[0,1,2,3,4,5,7,9,10,12,13,22,25,26,27],typo:20,u:[0,2,5,6,8,10,11,12,17,19,25,26,27],u_:19,u_i:12,u_m:10,u_t:[],ua:[0,25],ubuntu:[0,15,18,20,25],uci:0,uio:[20,23,24],un:14,unabl:9,unari:[19,25],unary_f:2,unary_oper:2,unary_to_nari:2,unbalanc:[6,9],unbias:[0,5,6,25,27],unbroadcast:2,unbroadcast_f:2,uncent:[6,27],uncertainti:[0,5,25,27],uncertitud:22,unchang:[1,3],uncorrel:[10,22],undefin:[5,26],under:[0,1,5,6,10,13,15,16,18,20,25,26,27],underdetermin:[0,25],underfit:[1,6],underflowproblem:[5,27],undergo:[5,27],undergradu:[21,23],underli:[0,1,9,13,22,25],underset:[4,14],understand:[0,1,3,5,6,10,13,14,18,25,26,27],understood:[8,13],undesir:8,undetermin:[5,8,27],undo:4,unexpect:[6,13,20],unexpected:22,unfair:[6,26,27],unfortun:[1,8,9,10],unicode_liter:[8,9],uniform:[0,1,5,6,11,13,15,16,20,22,25,26],uniformli:[13,22],unifrompdf:22,unimport:13,union:[5,6,27],uniqu:[0,2,6,13,14,19,25],unique_cluster_label:14,unit:[0,1,3,4,5,10,12,22,25,26,27],unitari:[5,6,19,26],unitarili:[19,25],uniti:22,univari:22,univers:[0,1,2,13,15,18,20,21,23,25,26,27],unix:1,unknow:[0,19,25],unknown:[0,1,3,4,5,6,8,10,13,16,19,25,26,27],unknowwn:12,unlabel:1,unless:[0,3,6,11,13,20,25],unlik:[1,3,8,13],unnecessarili:9,unord:3,unravel:1,unrol:[3,11],unseen:[0,7,9],unstabl:1,unsupervis:[0,1,4,12,18,25],unsymmetr:[19,25],until:[1,2,4,9,12,13,14],untouch:0,unusu:12,up:[1,3,4,5,6,8,10,11,13,14,16,18,19,20,22,23,27],updat:[1,2,10,12,13,14],uploa:25,upload:[18,20,24],uploda:[],upon:[0,1,6,7,11,19,20],upper:[0,8,9,16,19,26],uppercas:[19,25],upsampl:4,upscal:4,url:[0,7,25,26],us:[4,5,6,8,9,10,11,12,14,15,16,17,19,21,22,24,27],usa:25,usag:[0,8,18,25,26],usd10000:0,usd:0,use_bia:4,usecol:[0,25],useless:1,user:[0,1,2,3,4,6,7,8,9,11,14,15,18,19,20,25,26,27],usernam:20,userwarn:6,usetex:22,usg:[6,20],usr:22,usual:[0,3,4,7,12,13,14,25],ut:[5,27],utf:[0,7],util:[1,3,4,6,7,10,14,25],ux:19,v0:22,v1:22,v2:22,v:[2,4,5,6,11,13,17,18,26,27],v_0:11,va:1,vahid:25,val:13,val_accuraci:3,val_loss:4,vale:2,valid:[0,1,4,7,9,10,13,18,22,25,26],validation_data:3,validation_split:4,valu:[0,1,2,3,4,6,7,8,9,10,12,13,14,15,16,18,19,20,25],valuat:9,valueerror:2,valy:4,van:[0,20,25,26,27],vandenbergh:[8,13],vandermond:[0,25],vanilla:[0,6,11,14,26,27],vanish:[1,4,13,22],var_x:22,varabl:8,varepsilon:[5,6,20,27],varepsilon_:[5,6,27],varepsilon_i:[5,6,27],vari:[0,1,3,5,6,10,15,16,25],variabl:[0,1,2,5,6,7,8,10,11,12,13,14,19,25,26,27],varianc:[0,1,5,7,9,10,11,13,14,18,19,22,25,26],variance_i:[5,11,26],variance_x:[5,11,26],variant:[0,1,6,8,12,13,25,26],variat:[3,4,11,25],varieti:[0,3,12,15,18,20,25],variou:[1,3,5,6,7,8,9,11,12,13,16,18,19,20,22,26,27],varydimens:4,vastli:3,vaue:1,vault:0,vdot:[2,13],ve:20,vec:6,vector:[0,1,2,3,4,5,6,7,9,10,11,13,14,16,17,18,27],vector_mean:14,veloc:[],ventur:[0,8,15,18,25],verbos:[1,3,4],veri:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,20,22,24,25,26,27],verifi:[3,11,19,25],versatil:[8,25],versicolor:[8,9],version:[0,3,10,13,14,15,18,19,20,22,25],versu:1,vert:[0,1,5,6,7,8,9,11,13,17,25,26,27],vert_1:[5,6,26,27],vert_2:[5,6,11,17,26,27],via:[0,5,6,7,8,9,10,11,12,15,18,19,20,21,22,23,25,26,27],vidal:11,video:[0,1,12,18,21,23,25,26,27],view:[1,3,5,6,12,13,22,24,25,27],violat:8,virginica:9,viridi:[0,1,2,3,25],virtual:1,viscos:13,viscou:13,visibledeprecationwarn:2,vision:[0,3],visual:[0,3,11,12,15,18,25,26],visualis:1,viz:[6,8,22],vjp:2,vjp_argnum:2,vjpfun:2,vjpmaker:2,vjpnode:2,vjps_dict:2,vmap:13,vmax:[1,6],vmin:[1,6],voic:3,volum:[0,3,25],vote:10,voting_clf:10,votingclassifi:10,votingsimpl:10,vs:[0,4,6],vspace:2,vstack:[5,11,19,22,25,26],vt:[5,26,27],w1:8,w2:[8,11],w3:8,w:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,19,22,25,26],w_1:[8,19],w_1x_1:8,w_1x_:8,w_2:[8,19],w_2x_2:8,w_2x_:8,w_3:19,w_4:19,w_:[1,12],w_hidden:2,w_i:[1,2,10],w_ix_i:12,w_j:19,w_m:19,w_output:2,w_px_:8,w_px_p:8,wa:[0,1,3,4,5,6,7,10,11,12,14,17,19,20,25,26,27],wai:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,17,19,22,25,26,27],walk:9,walker:22,wang:[0,25],want:[0,1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,20,22,25,26,27],warn:[1,4,8],warrant:6,wast:3,watch:18,wave:3,wavelet:8,we:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26,27],weak:[9,10,14],weather:[1,12],web:[18,21,23,25],weblink:[],webpag:25,websit:[6,19,20,21,25],wedg:[8,22],wednesdai:[23,25],wee:11,week:[0,5,6,7,20,21,23],weekli:[16,18,20,23,24,25],weight:[0,1,2,3,6,7,9,10,12,13,20,22],weigth:2,welcom:[8,18],well:[0,1,2,3,4,5,6,7,8,9,10,12,13,15,16,18,19,20,22,24,25,26,27],went:8,were:[0,1,3,4,5,6,7,8,10,11,12,14,22,25,26],wessel:[0,20,25,26,27],what:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20,22],whatev:3,when:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,19,20,22,25,26,27],whenev:[13,22],where:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,25,26,27],wherea:[6,22],wherefrom:20,wherein:[1,12],whether:[0,3,5,7,9,20,22,25,27],which:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27],whichev:[1,3],white:9,whiteboard:27,who:[0,21],whole:[1,3,4,5,9,11,13,27],whose:[0,6,10,22,26],whow:[11,26],why:[0,1,3,6,13,20,27],wide:[0,1,3,6,7,12,15,18,19,20,25],widehat:6,width:[0,3,8,9,25],wieringen:[0,20,25,26,27],win:10,wind:9,wing:[23,25],winther:2,wiothout:[6,26],wiscons:7,wisconsin:10,wisdom:[6,27],wise:[0,1,5,12,13,26],wish:[0,2,5,7,8,11,13,14,19,20,25,26],with_std:[0,26],wither:6,within:[0,2,3,4,7,9,12,13,14,22,24,25],withinclust:14,without:[0,1,5,6,8,9,11,12,13,25,26,27],won:[0,25],wonder:8,word:[0,1,3,4,5,6,7,14,22,25,26,27],work:[0,1,4,6,7,8,9,13,15,18,20,21,22,23,25,26],workshop:25,world:[0,8,26],worldwid:[0,25],wors:[0,1,3,4,6,25],worst:9,worth:9,worthi:20,would:[0,1,3,5,6,7,8,9,10,11,12,13,19,20,22,25,26,27],wrap:[6,19,25],wrap_util:2,write:[0,1,2,3,5,6,7,8,12,13,15,16,17,19,25,26],written:[0,2,3,5,11,12,13,16,18,19,20,22,25,26,27],wrong:[1,8],wrongli:10,wrote:[5,11,26],wrt:[2,10,13],wth:[10,13],www:[18,19,20,24,25,27],wx_1:8,x0:8,x1:[4,8,9,10,13],x1_exampl:8,x1d:8,x2:[8,9,10,13],x2d:[8,11],x2d_train:11,x2dsl:11,x3:[8,9],x4:9,x:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,22,25],x_0:[0,5,11,19,25,26,27],x_1:[0,2,5,6,7,8,9,10,11,13,19,22,25,26,27],x_2:[0,2,5,6,7,8,9,10,11,13,19,22,25,26],x_3:[8,19,22],x_4:19,x_:[0,2,3,5,6,8,10,11,13,14,19,20,22,25,26,27],x_center:11,x_data:1,x_data_ful:1,x_hidden:2,x_i:[0,1,2,5,6,7,8,9,10,11,12,13,14,17,19,22,25,26,27],x_input:2,x_ix_:[0,25],x_iy_i:8,x_j:[0,2,8,9,12,16,22,26],x_jy_j:8,x_k:[12,14,19,22,26],x_l:22,x_m:[6,12,19,22],x_n:[0,2,3,6,8,11,12,13,19,22,25],x_new:[9,10],x_offset:[6,26,27],x_output:2,x_p:[3,7,9],x_poli:9,x_poly10:9,x_pred:4,x_prev:2,x_reduc:11,x_scale:8,x_small:13,x_test:[0,1,3,5,6,7,9,10,11,25,26,27],x_test_own:6,x_test_scal:[0,6,7,9,10,11,26,27],x_tot:4,x_train:[0,1,3,4,5,6,7,9,10,11,25,26,27],x_train_mean:[6,26,27],x_train_own:6,x_train_scal:[0,6,7,9,10,11,26,27],x_val:1,xarrai:[18,25],xavier:1,xbkjd4ccgq:25,xbnew:13,xcode:[0,15,18,20,25],xdclassiffierconfus:10,xdclassiffierroc:10,xg_clf:10,xgb:10,xgbclassifi:10,xgboost:9,xgboot:10,xgbregressor:10,xgparam:10,xgtree:10,xi:[8,13],xi_1:8,xi_:8,xi_i:8,xinv:27,xk:8,xla:[13,18,25],xlabel:[0,1,2,3,4,5,6,7,8,9,10,13,20,22,25,27],xlim:[6,10],xm:9,xmesh:13,xnew:[0,13,25],xp:22,xpanda:[0,26],xpd:[5,11,26],xplot:0,xs:9,xscale:[0,26],xsr:9,xt_x:13,xtest:6,xtick:[3,6,8,9],xtrain:6,xu:[0,25],xx:[0,19,25],xy:[0,6,8,19,20,25],xytext:8,xz:[19,25],y1:4,y2:4,y3:4,y:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,22,25,26,27],y_0:[0,5,11,19,25,26,27],y_1:[0,5,8,9,11,13,19,25,26,27],y_1y_1:8,y_1y_1k:8,y_1y_2:8,y_1y_2k:8,y_1y_n:8,y_1y_nk:8,y_2:[0,5,8,9,11,19,25,26],y_2y_1:8,y_2y_1k:8,y_2y_2:8,y_2y_2k:8,y_3:[0,9,19],y_4:19,y_:[0,1,5,6,10,11,19,25,26,27],y_data:[0,1,5,6,25,26,27],y_data_ful:1,y_decis:8,y_fit:[0,26],y_i:[0,1,5,6,7,8,9,10,11,12,13,15,16,17,19,20,25,26,27],y_if_:10,y_ix_:[0,25],y_ix_i:[7,8,13,26],y_iy_jk:8,y_j:[6,8,12,20],y_k:12,y_m:19,y_model:[0,4,5,6,25,26,27],y_n:[8,13],y_ny_1:8,y_ny_1k:8,y_ny_2:8,y_ny_2k:8,y_ny_n:8,y_ny_nk:8,y_offset:[6,26,27],y_plot:9,y_pred1:9,y_pred2:9,y_pred:[0,1,4,6,7,8,9,10,26,27],y_pred_rf:10,y_pred_tre:10,y_proba:[7,10],y_scaler:[6,27],y_test:[0,1,3,4,5,6,7,9,10,11,25,26,27],y_test_onehot:1,y_test_predict:0,y_tot:4,y_train:[0,1,3,4,5,6,7,9,10,11,25,26,27],y_train_mean:[6,26,27],y_train_onehot:1,y_train_predict:0,y_train_scal:[6,27],y_val:1,yadav:[],ye:[3,6,7],year:[0,18,25],yet:[0,1,6,8,11,13,25],yi:13,yield:[0,2,5,6,7,8,10,12,13,14,19,22,25,27],yk:8,ylabel:[0,1,2,3,4,5,6,7,8,9,10,13,20,22,25,27],ylim:[3,6],ym:9,ymesh:13,yn:0,yo:[8,9,10],yoshua:[1,24],you:[0,1,2,3,4,5,6,8,9,10,11,13,15,16,17,18,19,20,22,23,24,25,26,27],young:0,your:[1,2,4,5,6,8,11,13,17,18,19,20,27],yourself:[11,13,25],youtub:18,ypred:6,ypredict2:13,ypredict:[0,13,25,26],ypredictlasso:[5,27],ypredictol:[0,5,27],ypredictown:[6,26,27],ypredictownridg:[6,27],ypredictridg:[0,5,6,27],ypredictskl:[6,26,27],yridg:25,ys:9,ytest:6,ytick:[3,6,8,9],ytild:[0,6,25,26],ytildelasso:[5,27],ytildenp:[0,25,26],ytildeol:[0,5,27],ytildeownridg:[6,27],ytilderidg:[5,6,27],ytrain:6,yuxi:25,yx:[19,25],yy:[19,25],yz:[19,25],z:[0,1,2,3,4,5,6,7,8,9,11,12,13,19,20,22,25,26],z_0:[19,25],z_1:[19,25],z_2:[19,25],z_:[1,2,12,19,25],z_c:1,z_h:1,z_hidden:2,z_i:[1,12],z_j:[1,12],z_k:[12,26],z_m:1,z_mod:9,z_o:1,z_output:2,zaman:22,zaxi:[6,20],zero:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,19,20,22,25,26,27],zeros_lik:4,zeroth:26,zfill:4,zip:[2,4,6],zm_h:[0,25],zn:0,zone:0,zoom:25,zx:[19,25],zy:[19,25],zz:[19,25]},titles:["3. Linear Regression","14. Building a Feed Forward Neural Network","15. Solving Differential Equations with Deep Learning","16. Convolutional Neural Networks","17. Recurrent neural networks: Overarching view","4. Ridge and Lasso Regression","5. Resampling Methods","6. Logistic Regression","8. Support Vector Machines, overarching aims","9. Decision trees, overarching aims","10. Ensemble Methods: From a Single Tree to Many Trees and Extreme Boosting, Meet the Jungle of Methods","11. Basic ideas of the Principal Component Analysis (PCA)","13. Neural networks","7. Optimization, the central part of any Machine Learning algortithm","12. Clustering and Unsupervised Learning","Exercises week 34","Exercises week 35","Exercises week 36","Applied Data Analysis and Machine Learning","2. Linear Algebra, Handling of Arrays and more Python Features","Project 1 on Machine Learning, deadline October 7 (midnight), 2024","Teaching schedule with links to material","1. Elements of Probability Theory and Statistical Data Analysis","Teachers and Grading","Textbooks","Week 34: Introduction to the course, Logistics and Practicalities","Week 35: From Ordinary Linear Regression to Ridge and Lasso Regression","Week 36: Linear Regression and Statistical interpretations"],titleterms:{"1":[0,15,16,17,20,25,26],"17":[],"18":[],"2":[0,15,16,17,25,26,27],"2023":23,"2024":20,"26":26,"3":[0,15,16,25,26],"34":[15,25],"35":[16,26],"36":[17,27],"4":[0,26],"5":0,"7":20,"9":[],"case":[8,10,22,26,27],"do":[1,27],"final":[12,26,27],"function":[0,1,6,7,8,10,11,12,13,20,22,25,26,27],"import":[5,19,25,26,27],"new":[4,27],A:[0,1,4,8,9,25,27],And:[25,26,27],For:26,In:23,Ising:6,The:[0,1,2,3,5,6,7,8,9,11,12,17,18,25,26,27],To:[25,26],With:[4,27],about:[25,26],abov:27,activ:[1,12,27],ad:[0,6,17,20,25,26],adaboost:10,adagrad:13,adam:13,adapt:10,adjust:1,adversari:4,again:[3,9],ai:[20,25],aim:[8,9,17,25],aka:[25,26],algebra:[19,25],algorithm:[9,10,11,12,26],algortithm:13,all:8,altern:[],an:[0,4,10,25],analys:[5,26],analysi:[0,5,6,11,18,20,22,25,26,27],analyt:[0,16,17],analyz:[],ani:13,anoth:[9,27],appli:18,approach:[0,8,14,25],approxim:12,architectur:1,arrai:[19,25],assist:23,assumpt:27,august:26,autocorrel:22,autograd:[2,13],automat:13,b:[17,20],back:[1,11,12],background:[18,20],bag:10,base:13,basic:[0,5,7,9,10,11,19,26,27],batch:1,bay:[5,27],befor:11,beta:27,better:8,bia:[6,20],binari:1,bind:25,bird:10,boldsymbol:[26,27],boost:10,bootstrap:[6,10],boston:0,breast:1,brief:25,bring:12,build:[1,3,9],c:[20,25],calcul:26,can:25,cancer:[1,7,9,11],cart:9,center:26,central:[13,18,22],chain:12,chang:10,channel:25,chi:[0,25],choos:1,cifar01:3,classic:11,classif:[1,9,10],classifi:8,clip:1,cluster:14,cnn:3,code:[0,1,2,5,9,11,12,13,14,25,26,27],collect:[1,3],commun:25,compar:[2,10],comparison:27,complet:26,complex:[0,6,20,26],complic:6,compon:11,comput:9,computerlab:25,con:9,concept:22,condit:27,conjug:13,contn:25,convex:[8,13],convolut:[3,12],correctli:27,correl:[11,26],cost:[1,10,26,27],cours:[18,24,25],covari:[5,11,22,26],cover:25,critic:[],cross:[6,20],cython:25,d:20,data:[0,1,3,6,7,9,11,15,16,18,20,22,25,26,27],dataset:[1,3],deadlin:[20,25],decai:2,decemb:[],decis:[9,10],decomposit:[5,11,17,19,26],deep:[1,2,25],defin:[1,25],degre:[0,26],deliveri:20,dens:[0,25],deriv:[5,12,26,27],descent:[2,10,13],descript:20,design:26,detail:[3,25],develop:1,diagon:11,differ:8,differenti:[2,13],diffus:2,dimension:[2,3,8,20,26],disadvantag:9,discret:22,distribut:[5,22,27],doe:[26,27],domain:22,down:1,dropout:1,e:20,economi:26,electron:20,element:[0,22,25],elimin:19,energi:25,ensembl:10,entropi:9,environ:[0,15,25],equat:[0,2,12,25,26,27],error:[0,10,25,26],essenti:25,estim:27,etc:25,euler:2,evalu:1,exampl:[0,1,2,3,4,6,7,8,9,10,25,26,27],exercis:[0,6,15,16,17,25,26],expect:[22,27],experi:22,explor:[0,15,16,25],exponenti:2,express:[17,26],extrapol:4,extrem:[10,25],ey:10,f:20,fall:23,famili:[1,25,26],famou:19,fantast:26,featur:[9,19,26],feed:[1,12],fine:1,first:[4,12,25,26,27],fit:[0,10,25,27],fix:26,forc:3,forest:10,format:[20,25],forward:[1,2,12],fourier:3,frank:[6,20,26],freedom:[0,26],frequent:26,frequentist:[0,25],from:[5,10,12,26,27],full:2,further:[3,5,26],g:20,gan:4,gaussian:19,gd:13,gener:[4,9,25],geometr:11,gini:9,good:[0,25],grade:[23,25],gradient:[1,2,10,13],growth:2,ha:18,handl:[19,25,26],happen:27,hessian:26,hidden:2,hous:0,hyperparamet:1,hyperplan:8,i:1,id3:9,idea:11,ident:27,ii:25,iid:27,illustr:27,implement:1,implic:[5,26],improv:1,includ:13,increment:11,independ:27,index:9,inform:23,input:2,instal:[18,20,25],instructor:23,intercept:26,interpret:[5,11,25,26,27],introduc:[11,13,26],introduct:[0,6,18,19,20,25],invers:[5,19,27],invert:26,iter:10,its:26,jacobian:26,jax:13,julia:25,jungl:10,kera:[1,3],kernel:[8,11],lagrangian:8,lasso:[5,6,20,26,27],last:26,later:[5,26],layer:[1,2,3,12],learn:[0,1,2,11,13,14,15,16,18,20,25,26,27],least:[5,6,20,25,26,27],lectur:[25,26,27],level:10,librari:[18,25],likelihood:[7,27],limit:[1,13,22],linear:[0,8,13,19,25,26,27],link:[5,11,21,24,26,27],literatur:20,logist:[7,25],loss:26,lu:19,machin:[0,8,13,18,20,25],made:27,main:[22,25],make:[0,9,10,15,16,25,26],mani:[10,12],manipul:26,margin:27,mass:25,materi:[20,21,25,26,27],math:[5,26],mathemat:[3,5,8,26],matric:[5,19,25,27],matrix:[1,5,11,12,19,25,26,27],matter:[0,25],max:26,maximum:27,mean:[0,26,27],meet:[5,10,22,25,26],mercer:8,method:[6,9,10,13,20,25],midnight:20,min:26,minim:25,ml:25,mle:27,mlp:12,mnist:[3,4],model:[0,1,4,6,12,25],momentum:13,mondai:[26,27],moon:[8,9],more:[3,6,19,20,25,26,27],multilay:12,multipl:[1,3],multipli:8,need:[20,25],network:[1,2,3,4,7,12,25],neural:[1,2,3,4,7,12,25],non:8,normal:[0,1],notat:12,note:[20,26,27],novemb:[],now:[1,9,13,27],nuclear:[0,25],numba:25,number:[0,2,22,26],numer:[2,20,22],numpi:[19,25],object:3,obtain:11,octob:20,od:2,off:[6,20],ol:[5,6,20,27],one:[2,12],oper:19,optim:[1,8,13,18,25,26],order:13,ordinari:[5,6,20,25,26,27],organ:[0,25],oslo:24,other:[4,9,11,12,19,20,25,26],our:[0,4,5,11,13,25,26],outcom:[18,25],output:2,overarch:[0,4,8,9,17,25,26],overview:[10,25],own:[0,10,11,15,16,25,26],packag:[19,25],panda:[25,26],paper:20,paramet:[25,26],part:[13,18,20,26],partial:2,pass:1,path:[],pca:11,pdf:22,pencil:20,perceptron:12,perform:[1,9],period:3,perspect:1,plan:[26,27],point:4,poisson:2,polynomi:[3,27],popul:2,popular:25,practic:[13,23,25],pre:[1,3],preambl:20,predict:4,preprocess:26,prerequisit:[3,18,25],princip:11,principl:3,pro:9,probabl:[5,22,27],problem:[1,2,13,25,26,27],procedur:[9,25],process:[1,3],program:[2,13,20],project:[6,20,25],prop:13,propag:[1,12],properti:[5,22,26],python:[0,9,15,18,19,25],quick:8,r:25,random:[10,11,22],read:[9,25,26],real:[6,20,25],recommend:[25,26],rectangular:27,recurr:[4,12],reduc:[0,26],reduct:3,refer:20,reformul:2,regress:[0,5,6,7,9,10,13,17,20,25,26,27],regular:1,relat:26,relev:[24,26],relu:1,remark:3,remind:[6,8,25],repeat:26,replac:13,report:20,requir:[2,18],resampl:[6,20],rescal:[6,27],residu:26,resourc:2,result:[26,27],revisit:13,rewrit:[25,26],rgeress:[],ridg:[0,5,6,17,20,26,27],rm:13,rule:12,s:[8,10],same:13,sampl:11,scale:26,schedul:[21,25],schemat:9,scheme:2,scienc:25,scikit:[0,1,11,15,16,25,26,27],second:13,semest:23,septemb:27,session:[26,27],set:[0,2,3,9,12,15,25,26],sgd:13,should:1,similar:13,simpl:[0,4,9,13,25,26,27],singl:10,singular:[5,11,17,26],size:26,soft:8,softmax:1,softwar:[20,25],solv:[2,27],solver:13,some:[13,19,26],specifi:2,split:[0,15,16,25,26],squar:[0,5,6,10,20,25,26,27],standard:[13,26],state:[0,25],statist:[5,6,18,22,25,27],steepest:[10,13],step:[],still:26,stochast:[13,22],strongli:25,structur:[],subtract:26,suggest:25,summari:[23,25],superposit:3,supervis:1,support:8,svd:[5,26,27],systemat:3,t:[26,27],teach:[21,23],teacher:[23,25],technic:27,techniqu:[6,11,20],technolog:18,tensorflow:[1,3],tent:25,test:[0,1,15,16,25,26,27],text:25,textbook:[24,25],theorem:[5,8,11,12,22,27],theori:22,thi:[17,25],think:26,tip:13,togeth:12,tool:[20,25],top:1,topic:25,toward:11,trade:[6,20],tradeoff:6,train:[0,1,4,15,16,25,26],transform:3,tree:[9,10],tuesdai:27,tune:1,two:[3,8,18,20,26],type:[2,4,12,25],uio:25,univers:[12,24],unsupervis:14,up:[0,2,9,12,15,25,26],us:[0,1,2,3,7,13,18,20,25,26],usag:27,valid:[6,20],valu:[5,11,17,22,26,27],variabl:22,varianc:[6,20,27],variou:[0,15,25],vector:[8,12,19,25,26],view:[0,4,10,26],visual:[1,9],vs:3,wai:9,wave:2,we:25,wednesdai:27,week:[15,16,17,25,26,27],weekli:21,what:[0,25,26,27],which:1,why:[25,26],wisconsin:7,wrap:26,write:[4,11,20,27],x:[26,27],xgboost:10,yet:27,your:[0,10,15,16,25,26],yourself:[]}}) \ No newline at end of file +Search.setIndex({docnames:["chapter1","chapter10","chapter11","chapter12","chapter13","chapter2","chapter3","chapter4","chapter5","chapter6","chapter7","chapter8","chapter9","chapteroptimization","clustering","exercisesweek34","exercisesweek35","exercisesweek36","exercisesweek37","intro","linalg","project1","schedule","statistics","teachers","textbooks","week34","week35","week36","week37"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["chapter1.ipynb","chapter10.ipynb","chapter11.ipynb","chapter12.ipynb","chapter13.ipynb","chapter2.ipynb","chapter3.ipynb","chapter4.ipynb","chapter5.ipynb","chapter6.ipynb","chapter7.ipynb","chapter8.ipynb","chapter9.ipynb","chapteroptimization.ipynb","clustering.ipynb","exercisesweek34.ipynb","exercisesweek35.ipynb","exercisesweek36.ipynb","exercisesweek37.ipynb","intro.md","linalg.ipynb","project1.ipynb","schedule.md","statistics.ipynb","teachers.md","textbooks.md","week34.ipynb","week35.ipynb","week36.ipynb","week37.ipynb"],objects:{},objnames:{},objtypes:{},terms:{"0":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,23,24,26,27,28,29],"00":[0,1,5,6,9,11,26,27,28],"000":[1,3,9],"0000":9,"00000":[9,11],"000000":[5,11,27],"00000000e":[5,27],"0001":[1,17],"00019961646575285301":9,"00019998":5,"00024087":5,"00029012":5,"00031535148309577417":[6,28],"0003153514830958095":[6,28],"00034944":5,"000417932":2,"00042089":5,"000464088":2,"00050694":5,"00058016":[6,28],"00060704":6,"00061058":5,"00062592":6,"00063362":29,"00063866":29,"00066668":[6,28],"00068091":29,"00068734":[6,28],"00069123":6,"00073541":5,"00075590":29,"00076495":[6,28],"00076908":6,"0007698473260556325":[6,28],"0007698473260556343":[6,28],"00079125":6,"00079904":29,"00079968":5,"00083355":29,"00084707":6,"00085892":6,"00087697":[6,28],"00088573":5,"00089193":29,"00092678":6,"00092898":29,"00096314":5,"001":[1,2,8,13,17,28],"00100519":[6,28],"0010479245693919886":[6,29],"00105081":[6,28],"00106677":5,"00107405":[6,28],"00111756":[6,28],"0011526":[6,28],"00115999":5,"00118584":6,"00119688":29,"00128479":5,"001323":[6,28],"00137814":6,"00139705":5,"00140846":29,"00149311":[6,28],"00149956":[6,28],"00152117":[6,28],"00154733":5,"00154853":29,"00156374":6,"00168251":5,"00174276":[6,28],"00175331":[6,28],"00186347":5,"001880":5,"00200":8,"00202624":5,"00202756":[6,28],"00217499":[6,28],"00219195":29,"00224413":5,"00228740":6,"0023548":[6,28],"002381316302584885":[6,28],"0023813163025848865":[6,28],"00242954":29,"00242999":6,"00243186":[6,28],"0024401":5,"00249435":[6,28],"00266858":2,"00270244":5,"00274989":[6,28],"00289724":[6,28],"00293838":5,"00310113":2,"00312361":[6,28],"00315593":6,"0032153180657605116":[6,29],"00323332":[6,28],"0032542":5,"00325450":29,"003301":[6,28],"0033955154592040936":[6,29],"00353823":5,"0036237":[6,28],"0036367":[6,28],"00369758":[6,28],"0038335":[6,28],"003909404072811226":[6,29],"00391839":5,"0039987":[6,28],"004":[5,28,29],"004091940707753939":[6,29],"00410387":[6,28],"00410478":6,"004113634617443131":[6,27,28],"00411363461744314":[6,27,28],"004113634617443147":[6,27,28],"00415598634586135":[6,29],"00420072":29,"00424909":2,"00424967":[6,28],"00426027":5,"00433417":11,"00440346":[6,28],"00443743":[6,28],"00445655":11,"00445922":26,"004579219539673834":[6,29],"00458878":[6,28],"004610275230656212":[6,29],"00462287":[6,28],"00465099":29,"00471782":5,"00472199":6,"00472512":[6,28],"0049544":[6,28],"00497837":28,"004999999999999991":0,"00512927":5,"00517114":[6,28],"00526348":[6,28],"0053018":[6,28],"00554552":[6,28],"00556826":[6,28],"0056799":5,"00579953":[6,28],"00588657":[6,28],"00607783":6,"006162":[6,28],"00617499":5,"00630331":[6,28],"00642221":[6,28],"0064472":28,"00660427":[6,28],"00672607":[6,28],"00673407":[6,28],"00676387":[6,28],"0068011":[6,28],"00683748":5,"00683964":[6,28],"007024126888938232":[6,29],"00719176":[6,28],"00727646693":[0,26],"007315":27,"0074331":5,"00759119":6,"00779281":23,"00781918":29,"00784393":[6,28],"00803064":[6,28],"00805074":29,"00813803":6,"00817631":[6,28],"00823002":5,"00827728":[6,28],"00831018":[6,28],"00834567":[6,28],"00848904":[6,28],"0086649156":[0,26],"008675369724975977":5,"008831941890485846":27,"00890669":20,"00894639":5,"00902152e":27,"00905423":[6,28],"009163470508352218":5,"009164545680330616":[6,29],"00917248":[6,28],"00934327e":27,"00934499":[6,28],"009522910538005715":27,"0096208":[6,28],"00987022":26,"00990475":5,"00992331":[6,28],"00996754":[6,28],"00it":6,"01":[0,1,2,5,6,9,11,13,17,25,26,27,28,29],"010018312644137363":[6,29],"0100706":[6,28],"010331721306655127":[6,29],"010516485576645508":[6,29],"01066519":[6,28],"01076611":5,"0110":23,"011076219011379514":[6,29],"011225":2,"011265488125148788":27,"0113104":[6,28],"01173838":0,"01179792":[6,28],"01191824":5,"012073649446193166":[6,29],"01219292":[6,28],"01222822":27,"01223198":[6,28],"01231917":[6,28],"01265755":27,"012658":27,"01267007":28,"01290947":[6,28],"01295356":5,"013121574015585152":[6,29],"013121574015585155":[6,29],"01312254":26,"01318643":[6,28],"01347916":[6,28],"01348565":[6,28],"01367553":[6,28],"01384313":26,"01397146":[6,28],"01405935":[6,28],"01416528":[6,28],"01433809":5,"014436800088904942":[6,29],"01449782":[6,28],"01458337":[6,28],"014586":27,"01458611":27,"0146081":[6,28],"01463049":[6,28],"014891664497538563":26,"01496065":26,"01507238889517706":[6,28],"01507238889517717":[6,28],"01531845":[6,28],"01542292":29,"01549377":[6,28],"01549939":29,"01550546":29,"01558197":5,"015910":11,"01591047":11,"01594452":29,"01628578269596628":[6,29],"01633913":[6,28],"01640891":6,"01655318":[6,28],"016587414993043573":[6,29],"01691985":[6,28],"0169643":5,"01708781":[6,28],"01708852":[6,28],"01713366":[6,28],"01724499":5,"017355848195593347":[6,29],"01735584819559336":[6,29],"017665":5,"01783414e":27,"01813007e":27,"018232":27,"01831050e":[6,28],"01831190e":[6,28],"01846688":26,"01866537":[6,28],"01873344":11,"01873869":5,"01898855":[6,28],"01905883":[6,28],"01908936":[6,28],"01963611":[6,28],"01969145":[6,28],"01975416527185249":[6,29],"01975848":[6,28],"01it":6,"02":[0,4,6,7,12,26,27,28],"02024962":[6,28],"02054837e":[6,28],"02068067":[6,28],"02073509":5,"02077431":28,"02098261":[6,28],"02123176":[6,28],"021544346900318832":28,"021592704588025022":[6,29],"021592704588025025":[6,29],"02180258":26,"02198702e":[6,28],"02198703e":[6,28],"02208512":[6,28],"02228115":[6,28],"02229529":[6,28],"02252765":5,"022999498260366312":[6,29],"02348765":[6,28],"02365049":[6,28],"024217":11,"02421742":11,"02424794":29,"0245528":[6,28],"02492265":5,"02498832":[6,28],"02503753":[6,28],"02511518":6,"02522069":6,"02546675":29,"025709":[11,27],"02586427":[6,28],"0260906":[6,28],"02625193":8,"02629596":20,"02660572763718093":[6,29],"026605727637180936":[6,29],"02693858":28,"02707227":5,"02723445":[6,28],"027609773491022525":[6,29],"02760977349102253":[6,29],"027610":5,"02761005":5,"02857":4,"02895918":28,"029483":5,"029733":27,"02976145":[6,28],"02994311":5,"02f":[6,21],"02it":6,"03":[1,6,27,28],"03032441e":[6,28],"03077640549":4,"03099776":5,"031":[5,28,29],"031696741936652305":23,"03196357":[6,28],"03251863":5,"03256632e":1,"03267527":[6,28],"03279636":[6,28],"0330308045183194":[6,28],"0330308045187757":[6,28],"03308408":5,"0334336":26,"033657685071527665":[6,29],"03405654":11,"034057":11,"03447512":[6,28],"034557":27,"03562355":[6,28],"03568439":[6,28],"0359565":5,"03630548":[6,28],"03707133":11,"037299816041296285":9,"037813671417389005":[6,29],"03781367141738902":[6,29],"03814292":[6,28],"03815288":[6,28],"038300":[11,27],"03846169":28,"039039":5,"039967668952797":[6,28],"0399676689527975":[6,28],"04":[1,6,11,27,28],"040102":5,"04010697":[6,28],"0402":29,"04063602":[6,28],"041":9,"0411487294305088":[6,28],"0411487294305226":[6,28],"04193203":27,"04220758":[6,28],"04242885e":27,"04295757":29,"043":9,"04315108":5,"04321941e":27,"04346721":5,"04355837":[6,28],"04362":9,"04373024":26,"0437499":2,"04389027":[6,28],"04423486":[6,28],"04426744e":27,"044334":27,"044613":[6,28],"04537385":[6,28],"04543942":[6,28],"045548":11,"04554803":11,"04566964":[6,28],"0458":9,"04648335":5,"04664255":6,"04683565":5,"046842629321028326":11,"04784395":[6,28],"0481872773043029":[6,29],"04876305":26,"04892055":[6,28],"04909093":[6,28],"04912436":6,"04926746":29,"0494262":26,"04944931918420588":23,"049556996627824":[6,28],"0495569966278269":[6,28],"05":[1,4,6,21,27,28],"05009826":[6,28],"05061841":23,"05073207e":27,"05087888":11,"050879":11,"051006":11,"05100602":11,"05100875":[6,28],"05108705":26,"051418":5,"051649":[11,27],"0517473":5,"05210975":20,"052279218012056844":[6,29],"05227921801205686":[6,29],"052305":27,"05263":9,"05302":9,"053417":27,"05364854":8,"05383795":[6,28],"0538391":26,"053849":5,"05447415":[6,28],"054617":27,"054655":27,"05505310046363":2,"05519999":28,"05533":9,"055676":27,"055734":27,"055910":27,"055987":27,"05614483":5,"05623":9,"05648":9,"05651951":[6,28],"05667":9,"056683":27,"056767":5,"057076":5,"05716368155342608":[6,29],"057300":27,"057393":27,"057415":5,"057418":27,"057457":27,"057722":27,"057786":5,"057835":27,"05785343":[6,28],"05789007":[6,28],"05796251":[6,28],"05807125":[6,28],"058190":5,"058552":27,"058645":27,"05883":9,"05884":9,"058854":27,"058952":27,"058996":27,"059031":27,"059226":5,"059406":5,"059597":5,"05965043":20,"059711":5,"059797":5,"059807":27,"059951":27,"05999":9,"059993":27,"06":[6,27,28],"060003":5,"060043":5,"060083":27,"06020587":[6,28],"060254":27,"060340":5,"060422":5,"06043581":[6,28],"060612":5,"060716":27,"060756":27,"060764":5,"060864":5,"060872":27,"061076":5,"061146":5,"061163":27,"061359":27,"061367":5,"061443":27,"061452":27,"061496":5,"061614":27,"061822":5,"061882":5,"06200174":5,"062016":27,"06208238634231949":[6,29],"062242":5,"062292565":4,"062337":27,"062599":27,"062624":27,"062634":5,"062874":27,"063019":27,"063061":27,"063080":27,"063260":27,"063511":5,"063653":27,"063684":5,"063832":5,"063894":27,"063965":5,"064061":5,"064074":27,"064087":5,"064307":5,"06442194e":27,"06444":9,"064501":27,"064521":5,"064530":5,"06453579006728324":[6,29],"064606":27,"064609":27,"064699":27,"064713":5,"064793":27,"064841":5,"064889":5,"06491736":[6,28],"064933":5,"065024":5,"065077":27,"065101":5,"065115":5,"065186":5,"065273":5,"065299":5,"065304":5,"065359":5,"065361":5,"065378":27,"065390":27,"065410":27,"06547790180152355":[6,29],"06547790180152359":[6,29],"065588":5,"065633":5,"065860":5,"065930":5,"066066":27,"066204":5,"066349":5,"06637":9,"066380":5,"066395":5,"066402":5,"066406":5,"06644775":20,"066458":5,"066474":27,"066500":27,"066612":27,"066647":27,"0666807":2,"066787":27,"066837":[11,27],"066854":27,"06696769":20,"066999":27,"067097":5,"067149":5,"06719214":20,"06724062":5,"067284":5,"067392":5,"067429":5,"067482":5,"067560":5,"067637":27,"067707":27,"067729":5,"068022":5,"068264":27,"068301":5,"068307":27,"068441":27,"06844519414009445":[6,29],"06844519414009446":[6,29],"068605":11,"068629":27,"068727":27,"068906":27,"068963":5,"069028":27,"06926365":27,"069275":5,"0694169556368514":20,"069452":27,"069521":5,"069584":27,"069704":5,"069717":5,"07":[6,27,28],"070006":11,"070043":27,"070054":5,"070146":27,"07016":9,"07017":9,"070202":11,"070213":27,"070342":5,"07039":9,"070457":27,"070496":5,"070582":27,"07062318":[6,28],"070737":27,"070868":5,"070889":[11,27],"070986":27,"07115":9,"0713":[0,26],"071315":5,"07145103":11,"071462":11,"07160048164233102":[6,29],"07160048164233104":[6,29],"07172103":26,"071729":11,"072000":27,"072111":27,"072132":27,"072476":27,"072489":5,"072621":27,"072633":5,"072759":5,"07285":3,"072860":5,"072976":11,"073318":11,"073481":5,"073581":5,"073598":[11,27],"073627":5,"073634":5,"073644":27,"073934":5,"074067":[11,27],"074084":27,"074208":5,"074210":27,"07421084":5,"074323":27,"074407":5,"074548":5,"074552":11,"07456491":5,"074706":5,"07490892":[6,28],"074973":11,"075398":11,"075698":5,"075816":27,"075889":27,"075972":5,"076150":27,"076383":5,"07641937":29,"07643382":20,"0764924":[6,28],"076620":5,"076697":11,"076716":5,"07678":9,"07692307692307693":9,"076938":[11,27],"076964":5,"077082":11,"077168":27,"07745069":23,"077460":27,"077522":11,"07777777777777778":1,"078110":27,"07820":9,"078336":27,"078540":27,"07862755":23,"07864":9,"078704":5,"07871":9,"078785":11,"078824":11,"078974":27,"078986":27,"079381":11,"079412":5,"07944154":[20,26],"079578":5,"079642":5,"0796891867672603":[6,29],"0798590438380667":11,"079873":5,"079946":27,"08":[6,9,23,27],"080016":5,"080195":11,"080425":5,"08043851":5,"080616":27,"080630":11,"080764":27,"081276":27,"081308":11,"08131003":6,"081374":11,"081422":11,"08156108":[6,28],"081597":11,"08165104":27,"081655":27,"081798":11,"08251519":[6,28],"082592":11,"082619":11,"082653":27,"082661":11,"08277442":23,"0827744231113545":23,"082978":11,"08299273e":[6,28],"083096":11,"08318298e":1,"08323973e":27,"083309":11,"08333333333333333":[1,9],"08336233266":4,"083527":27,"083540":11,"08376632":[6,27,28],"083766322923899":[6,27,28],"0837663229239043":[6,27,28],"083851":11,"083906":11,"083943":11,"084022":11,"084076":27,"084157":11,"08426840630693411":[6,29],"08426840630693413":[6,29],"084362":11,"08455":9,"084574":11,"084650":11,"08474":9,"084809":27,"085152":11,"085237":11,"085259":11,"085265":11,"085346":11,"085383":11,"085431":11,"08551306":[6,28],"08557805981945521":5,"085693":11,"08576932":6,"08593216":[6,28],"086059":11,"08611111111111111":1,"086230":11,"086263":11,"086538":11,"086550":11,"086611":11,"086615":11,"086673":11,"086782":11,"086875":11,"086890":11,"08690":9,"087176":11,"08750220e":27,"08758":9,"087822":11,"087938":11,"087951":11,"088061":11,"088130":11,"088160":11,"0881981":5,"088222":11,"08823":[],"088361":11,"088402":11,"088422":11,"08860792":20,"08871404":5,"08881497884574564":27,"08888888888888889":1,"088893":11,"088908":11,"088986":11,"08902":9,"08939489":20,"0895387":27,"089539":27,"089629":11,"089654":11,"089682":11,"089702":11,"089739":11,"089892":11,"08996":9,"09":[1,6,27],"090000":11,"090025":11,"09004029":26,"090290":11,"09047191e":27,"090623":11,"090696":11,"090751":11,"091246":11,"091331":11,"091353":11,"091561":11,"091627":11,"09163947":6,"09166666666666666":1,"0917":9,"091700":11,"09221309":23,"092347":11,"09251":9,"092544":11,"092613":11,"092672":11,"09298511":23,"093078":11,"093132":11,"093429":11,"0940821989627646e":[6,28],"0940821989652176e":[6,28],"094426":11,"09444444444444444":1,"094577":11,"094659":11,"094671":11,"094970":11,"09609807":5,"09650726":26,"096803":11,"096837":11,"096928":11,"09715081560068299":26,"09744":9,"09780":9,"09791":9,"09861229":[20,26],"0988662":20,"09900923":26,"09903804":8,"09917303":20,"09919198949275869":[6,29],"099287":11,"09951287404314545":1,"09953815":20,"0n":[0,26],"0x0006":[3,4,14],"1":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,20,22,23,24,25,28,29],"10":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,20,21,22,23,24,26,27,28,29],"100":[0,1,2,3,4,5,6,8,9,10,11,13,14,15,16,17,20,23,24,26,27,28,29],"1000":[0,1,2,4,5,8,11,13,14,19,23,26,27],"10000":[2,5,6,10,11,13,23,28,29],"100000":8,"10001":10,"1001":[9,23],"1002":23,"1003":23,"10030":9,"10041812":28,"1005":23,"1007711427354898":[6,29],"1009":23,"1011":23,"1013":23,"1013904243":23,"10141413e":[6,28],"1015":23,"1015am":26,"1023":23,"10230":9,"1024":3,"1026":23,"1027":23,"103":1,"1030":23,"10340":9,"1037":23,"10378326e":1,"1038":23,"10391807":[6,28],"10398646080125032":[6,29],"10398646080125035":[6,29],"1040":23,"10405456":11,"10430":9,"104411":27,"1047":23,"105":28,"10520":9,"10555555555555556":1,"10572":29,"10589577":5,"106095":[11,27],"10694828":20,"1079":29,"10790125813226321":27,"108":[6,9],"10913":6,"10931453":[6,28],"10960":9,"10983159":11,"10th":9,"10x":[0,26],"11":[0,2,5,6,7,8,9,10,11,12,13,15,16,20,21,22,23,24,25,26,27,28,29],"1100":23,"1101":23,"11022072":11,"110221":11,"11022302e":5,"111":[1,7,12],"11100":9,"11202337":29,"112383":[11,27],"1124":9,"11368985":26,"11382896":28,"11388888888888889":1,"11390":9,"11400097":20,"114550":29,"11462415":5,"11482289e":[6,28],"11500354":20,"11507992e":1,"11547777218872497":[6,29],"115822":6,"11590":9,"11660":9,"11666666666666667":1,"11694":21,"117":8,"11744554e":[6,28],"11780":9,"118":[0,2,7],"11830757":28,"118318":27,"1184":29,"11840":9,"11890":9,"119":[0,2,7],"11938949":23,"11952661":23,"11967653":26,"119936":2,"12":[0,1,2,3,4,5,6,7,8,9,11,12,20,23,25,26,27,29],"120":[0,2,3,7],"1203":9,"1203284":8,"12044974":27,"120450":27,"121":[8,9,10],"12122786e":27,"1215pm":[24,26],"12182967":[6,28],"122":[2,8,9,10],"12222222222222222":1,"1225397":23,"123":2,"12318726e":[6,28],"12330033":27,"12333649":[6,28],"123711":6,"12380":9,"124":[0,26],"12400":9,"1242":8,"12552073e":[6,28],"12591227":27,"126":9,"1261":9,"12618549":5,"1265":9,"127":4,"12700133":20,"1271":6,"12777777777777777":1,"12790":9,"128":[3,4,13],"12871842":27,"129012":6,"12952339":28,"1297":9,"1298":9,"129963":29,"12pm":[24,26],"13":[0,2,5,6,7,9,11,12,18,20,21,23,26,27,29],"130":9,"13003291":[6,28],"130224":11,"13022421":11,"13055555555555556":1,"130694":27,"13069442":27,"131":9,"13118774":26,"13156239":20,"13179053e":27,"132":9,"13220608e":[6,28],"1325":6,"1326":9,"1326197715":26,"13280":9,"133":7,"13318759":20,"1332":29,"134":28,"135":9,"1350":29,"13535942":[6,28],"13588335":27,"136":[0,7],"13614217":20,"13633112":26,"13641587e":27,"13646574":5,"13658936":23,"13661243e":[6,28],"13679863":[6,28],"137":[0,7],"13740":9,"137652":[11,27],"138":[0,7],"1385":6,"13858317":26,"13865173":5,"13867518":26,"138775":[11,27],"1388888888888889":1,"13890":9,"139":[0,7],"1392559585020426e":[6,28],"139255958997547e":[6,28],"13929376":20,"139431112903922":29,"1394311129039245":29,"1395084586525954":29,"1395235273363669":29,"14":[0,2,4,5,6,7,8,9,10,11,12,20,21,23,25,27],"140":[0,2,7,9],"14021063":[6,28],"14092044":20,"141":[0,2,7],"14100":9,"1416398":[6,28],"14174745":[6,28],"1418":9,"142":[0,7,9],"14250":9,"14277718e":27,"143":[0,2,7,9],"1437":1,"144":[0,7],"14400":9,"1440501043841336":1,"14440":9,"1446729567":4,"145":2,"14568914":28,"146":2,"14629156":29,"14710":9,"14716":6,"14722222222222223":1,"147400":[11,27],"147420":[11,27],"1479":9,"148":[3,4,14],"14812206":6,"148282":6,"14932255":23,"149425":6,"14966323":20,"14984157":23,"14g":[6,29],"15":[0,2,4,6,7,8,9,12,13,15,16,17,20,23,26,29],"150":[3,4,8,9,14],"15005476":5,"150707":6,"15098090e":[6,28],"151":[3,4,14],"1512":29,"15130074e":[6,28],"152":9,"15200":9,"1527777777777778":1,"153":[3,4,14],"153036":27,"15313054":29,"15330788e":27,"15384615384615385":9,"154":[3,4,6,14],"15431202":20,"155":[3,4,9,14],"156":[3,4,14],"156956":5,"157":[3,4,14],"1575":9,"15792278643800434":5,"158":9,"15807529":26,"1587":9,"1590":9,"15990":9,"15am":26,"15g":[6,29],"16":[1,2,3,4,5,6,8,9,10,23,26,27,28,29],"1603":3,"16111111111111112":1,"16211139":5,"16220":9,"162246":5,"16231451":4,"1625":9,"1628":9,"16304863":27,"163049":27,"1630775253":1,"16342407":5,"16343471":[6,28],"16384":3,"16500":9,"16526258":20,"166":9,"16632351e":27,"16638104":20,"167787":5,"168":9,"16805821e":[6,28],"16855533":26,"17":[1,2,5,6,7,8,9,13,23,27,29],"1709":9,"171":28,"171525":27,"1715252":27,"17174962e":1,"17222222222222222":1,"1726":9,"17300":9,"1731":9,"17446471":6,"17483760":29,"17485935":20,"1752":9,"175300":27,"17561484":20,"17576105":26,"17641709":[6,28],"17748443e":27,"17755779e":27,"17777777777777778":1,"17801022":5,"17861098":6,"17917768":5,"17949575":5,"17953942":11,"1797":[1,3],"17979265":5,"179793":5,"18":[2,6,7,8,9,10,13,23,29],"1801709":28,"18029127":5,"1803":[],"1807":4,"18075088":23,"1809":9,"181":9,"1812":9,"1821":9,"182925111119767":20,"18307821":28,"18333333333333332":1,"18383522":27,"18388":6,"184":9,"1840":29,"184519":27,"185":28,"1860":9,"18611111111111112":1,"18613217e":[6,28],"18660":9,"18670072e":27,"18673098":11,"189496":27,"189622":27,"19":[2,6,9,15,23,26,29],"19166666666666668":1,"19207979":5,"19220":9,"1940":0,"194042826649355e":[6,28],"194042826815211e":[6,28],"1943":12,"1944":6,"1949983":26,"1956":9,"19569961":[6,27,28],"19688765":26,"1970":[20,26],"1973":9,"197370":[11,27],"19740":9,"1979":[6,29],"19800":9,"1999":[],"1_1":12,"1_2":12,"1_3":12,"1cm":[0,8,10,23,26],"1d":[1,2,3],"1e":[1,2,4,13,14],"1e10":14,"1e4":6,"1f":1,"1k":20,"1n":[0,26],"1x":[0,26],"2":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,19,20,21,22,23,25,29],"20":[0,1,2,6,7,8,9,13,23,24,26,28,29],"200":[0,2,3,4,8,9,10],"2000":[0,27],"20015436":6,"2004":13,"2006":25,"2008":26,"2010":1,"2011":1,"2014":4,"2015":1,"2016":[0,26],"2018":[0,6,27,29],"2019":[8,9],"2021":[6,14,27,28],"2022":26,"20222345":23,"2023":21,"2024":[15,16,17,18,26,27,28,29],"2027":9,"20277777777777778":1,"20488808e":27,"20500":9,"2060":9,"2069":9,"207545":[11,27],"20833333333333334":1,"20867052175034223":[6,29],"20916295":27,"20980":9,"21":[0,1,2,5,6,7,9,12,13,20,26,27,29],"210340":[11,27],"21058097":5,"21093775":6,"21117128e":27,"21130":9,"2116753732":4,"21169159e":[6,28],"213103":[11,27],"213743":[11,27],"21378153":26,"21517262":6,"21596432":6,"216290":[11,27],"216683":[11,27],"21733307e":27,"217962":11,"21796226":11,"21888121":20,"22":[0,1,2,5,6,9,12,13,20,23,26,27,29],"22019267":20,"22044605e":[5,27],"221":8,"2211108":20,"221180":27,"2216":9,"2218":9,"221805":2,"221921":5,"2222736":5,"222274":5,"222400":27,"22398902":26,"22467274":29,"225":4,"22668089":26,"226818":5,"22681817":5,"22690428":5,"22842468702219465":[6,29],"2284246870221947":[6,29],"22847924":5,"23":[1,2,6,9,12,15,20,23,26,29],"23002365e":[6,28],"23076923076923078":9,"23117504":26,"23167717":5,"23177156e":27,"232435":27,"23333333333333334":1,"2338675":27,"233868":27,"234":6,"23505507e":27,"2351":6,"23528337":29,"2364":9,"239":29,"2397":9,"23971032":27,"24":[0,1,2,6,9,20,26,29],"2401":21,"24140":9,"24155894":20,"24159785":27,"2416":9,"24175744e":[6,28],"2419":9,"2430":9,"24390":9,"24444444444444444":1,"24493666":29,"24502113":20,"2456969087678473":23,"24569691":23,"246":2,"24604925":20,"24829908":5,"24906604e":[6,28],"24975055":20,"25":[2,3,4,5,6,8,9,11,21,23,27,29],"250":[2,4,7,9],"25000":0,"250084":5,"2500845":5,"25185716":28,"251879":27,"252436":27,"25325161e":27,"25343155":29,"255":3,"255001":27,"25529356":26,"256":[2,4],"25617655e":[6,28],"25617658e":[6,28],"25695398":29,"2572":9,"2575":9,"259153":[11,27],"2597":9,"26":[2,6,9,16,29],"26093249":20,"26124692":6,"26292364":29,"26297455":27,"26301436":5,"26409315307910025":[6,28],"2640931530791004":[6,28],"2650":9,"265109911":4,"2654":9,"2662882":26,"26710969":5,"26773827":20,"26780278":5,"26792572":20,"268":9,"26814548":6,"26995402":27,"27":[0,1,2,6,29],"270350130579073":11,"27065633":28,"27486761":5,"274868":5,"2750":9,"27518808":26,"276263":[11,27],"27700":9,"27760":9,"27924636":5,"27n_":23,"28":[1,2,3,4,6,9,23,29],"280573":5,"280647":[11,27],"28205578e":27,"282075":5,"28207517":5,"28238649":20,"282727":[11,27],"2830637392":4,"28336218e":[6,28],"28390":9,"28391978":27,"28443039":29,"28475098":8,"2861":23,"2871":9,"2873":9,"2882":23,"2886":23,"2890":[0,26],"2892":23,"28986131":23,"29":[2,6,9,29],"2915":23,"29167186":5,"2931":26,"29313228":20,"29487549e":27,"296697":11,"29669702":11,"2968":26,"2980":26,"29822833":[6,28],"2990":26,"29920468":20,"299748":27,"2_":12,"2_1":12,"2_2":12,"2_3":12,"2_i":12,"2_m":[6,23,29],"2_t":13,"2_x":23,"2b":23,"2cm":8,"2d":[1,3,11,12,19,26],"2e":[6,29],"2f":[0,7,9,10,11,12,26,27],"2g":2,"2g_i":2,"2k":3,"2m":[6,29],"2n":[0,2,3,26,27],"2nd":9,"2p":23,"2pm":24,"2pt":4,"2u":[],"2x":[0,3,8,13,26],"2x_ix_jy_iy_j":8,"2x_j":8,"2y_i":10,"2y_j":8,"3":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,18,19,20,21,22,23,24,28,29],"30":[0,1,2,4,6,7,9,10,13,16,24,27,29],"30000":[0,26],"30010":9,"30119421":8,"30132427":20,"302":29,"30258509":[20,26],"30283188":28,"303":6,"30442964":27,"30466214e":[6,28],"30481195":20,"3072":3,"30764357e":27,"3076923076923077":9,"30787294":6,"30820040103372":11,"30873019":26,"30940":9,"3099":29,"31":[2,12,20,23],"310579":27,"3105791":27,"312":28,"3123314713548606":[6,29],"31276579e":[6,28],"313":28,"31318084":5,"313851":5,"31385129":5,"31457796":5,"31471398":26,"315":[6,28],"3155":[0,5,6,28,29],"31566127":26,"316":28,"31718909":11,"317367":11,"31896852":8,"31901056":23,"3199881":26,"32":[3,4,6,8,12,13,20,23,29],"3200":1,"3207":29,"32149601703519115":[6,29],"3214960170351912":[6,29],"3215":9,"32186558":26,"32238906":11,"322768":5,"3227683":5,"32351459e":27,"32399798":20,"324":2,"3245":2,"32450054":27,"3250":1,"3262":6,"326238":27,"32740721e":27,"32791346e":27,"33":[0,2,9,12,20,24,29],"33047051":5,"330471":5,"33066907e":[5,27],"33166055e":5,"331939":27,"333":7,"33435469":20,"33540382":20,"34":[2,9,20,29],"340071371496255":27,"3403":9,"340782":[11,27],"34114547":5,"34175429":23,"342680":27,"3436":[0,26],"34367970":6,"34369306":26,"3437":[0,26],"34412923":27,"34565973":11,"345660":11,"34569596":5,"34693879":26,"34782766":23,"3480159":20,"35":[0,2,6,17,21,23,24,26,29],"35140":9,"351636":[11,27],"35182854":5,"35389684e":27,"3544313922":6,"35444257":27,"35470445e":[5,27],"35514368":26,"35533773":6,"35577273":26,"356399":27,"357508":27,"35768161":26,"3581341341":4,"359":[5,28],"36":[0,2,5,6,21,23,29],"360":1,"36097931e":27,"3613":9,"361556":27,"3621311":5,"3632959111950474e":[6,28],"363295916366933e":[6,28],"36417623":26,"3655222":5,"367":[2,9],"36895644":29,"369139":[11,27],"36985812":26,"37":[9,21],"37040343":23,"370782966":4,"37239927e":27,"373465215701515":9,"37396662":[6,28],"37409975e":27,"37416502e":27,"37504943":20,"377372":27,"37737221":27,"3777801602":6,"37900111":[6,28],"38":[9,21,23],"380":9,"38135733e":[6,28],"38157698":26,"3817475779":[6,29],"3823545":20,"38267862":5,"382679":5,"38461538461538464":9,"386":9,"38629436":[20,26],"38827994":6,"38916861e":[6,28],"3892":29,"38962192e":[6,28],"39":[0,9,24,26],"39197698":27,"391977":27,"39214397":27,"392144":27,"394":9,"394285":11,"39428522":11,"3952007":20,"39579407":5,"39706027":23,"39706038":5,"397700":[11,27],"39789527":[20,26],"3983":6,"39931051e":27,"399836":27,"39990572e":27,"3d":[2,3,4,6,13,21,29],"3f":[1,3,9],"3n":20,"3x":[2,8],"3x_i":2,"3y":8,"3yk470mj5p931p9dtkk0y6jw0000gn":[1,6,26,29],"4":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21,23,26,28,29],"40":[1,6,9,21,24,26,29],"400":4,"4000":[9,26],"40030144":20,"40103689":11,"401037":11,"401842":[11,27],"40332158":23,"40420245":20,"405":9,"4050":[25,26],"405890":[11,27],"40620066":27,"406201":27,"407":9,"40720059":23,"408":9,"4087":9,"4087793":5,"40892859":26,"40927184e":[6,28],"40contain":[],"41":[2,9,20],"4107":9,"41237041":26,"41253101":23,"41383693":26,"41433969":5,"4150":[],"41511965e":1,"4155":[2,15],"4162706317":6,"4166666666666667":9,"41691626":20,"41761415e":27,"41790782":26,"41847076":23,"418506":[11,27],"41858649":20,"41882037e":[6,28],"41988809":20,"42":[1,4,8,9,10,20],"4230769230769231":9,"42379872":23,"42441033":5,"42450":9,"426":[6,9],"42742185":26,"42765083e":27,"429":29,"43":[0,1,2,7,9,20],"43054282":5,"4310":26,"43246775e":27,"43295279":20,"433":29,"43330971e":[6,28],"43442461":20,"435163":27,"43579948e":[6,28],"43639284e":27,"436462435":4,"43766686":11,"438060758":6,"438136":27,"439230":6,"44":[0,1,2,20],"44049151":26,"44089210e":[5,27],"441":[3,4,14],"442":[3,4,14],"442600":[11,27],"443":[3,4,14],"443217":27,"44395301":28,"444":[3,4,9,14],"4442873":23,"445":[3,4,14],"446033":29,"44624525e":27,"44757627":23,"44970586e":1,"45":[0,2,9,24,26],"450":9,"450257":[11,27],"4504":9,"45312744":26,"45422069":20,"455173":29,"4557763":11,"455947":27,"456":9,"457":2,"458027":27,"458078":[11,27],"45915671e":27,"45937581":26,"45960079":5,"46":[2,9,24,26],"460":[9,11],"4601":9,"46124943e":27,"46153846153846156":9,"462":7,"46260797e":27,"46383925e":[6,28],"46383926e":[6,28],"46415888336127775":28,"46608732e":27,"46659511":26,"46713267":28,"46736215":29,"46749552e":27,"4676059":27,"467606":27,"46922796":5,"469228":5,"469596964296967":5,"46984697e":[6,28],"47":[2,9,24,26],"47042744":5,"470478":11,"4704785":11,"47051432":29,"470714":27,"47075725":6,"47116868e":[6,28],"47125748":5,"47132891":5,"47176716":29,"47176783":29,"47179152":29,"47187014":23,"47313680":29,"47610036":6,"47647836":26,"4768597":20,"47734350e":27,"47780495":5,"477805":5,"47815203":11,"47826973":23,"479465113":4,"48":[9,29],"481979":6,"48257387":[24,26],"48329035":23,"48447474":20,"48476997":11,"48494803":28,"48593774":20,"48655388":20,"48688666":11,"486887":11,"48780047":23,"48898864":20,"48994188":5,"49":[5,6,9,11,21,27],"49152":3,"4940954":[0,26],"49510364":20,"4959161509357395e":[6,28],"4959161509366685e":[6,28],"49622615e":27,"49724059":23,"49775827":20,"4990":23,"49905638":26,"4992":23,"4997":23,"4c4c7f":[9,10],"4d":3,"4f":6,"4pm":[24,26],"4y":8,"4y_i":10,"5":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,20,21,23,26,27,28,29],"50":[1,2,3,4,6,7,8,9,10,13,26,27,29],"500":[1,3,4,6,9,10,13,29],"50000455":5,"50000553":5,"50000718":5,"50000855":5,"50000969":5,"50001063":5,"50001142":5,"50001207":5,"50001261":5,"50001306":5,"50001343":5,"50001374":5,"500014":5,"50001414":5,"50001422":5,"50001439":5,"50001454":5,"50001466":5,"50001476":5,"50001485":5,"50001492":5,"50001498":5,"50001502":5,"50001506":5,"5000151":5,"50001512":5,"50001515":5,"50001517":5,"50001518":5,"50001519":5,"50001521":5,"50001522":5,"50001523":5,"50001524":5,"50001525":5,"50066971":23,"5018":23,"50227564e":[6,28],"50321091":5,"50427787":29,"50470576":26,"50530832":29,"506":0,"50641483":23,"506553":27,"50655336":27,"507d50":[9,10],"50846111e":[6,28],"50846112e":[6,28],"50j":13,"50x10":1,"51":10,"510":1,"51084243":20,"51097872":5,"51178631e":27,"511888":5,"51198558e":27,"51374050":29,"51383260e":27,"514219":27,"51542953":27,"51566561":26,"51569907":20,"51631859":26,"51681181e":27,"5177783846":4,"519327774467847":20,"52018478":20,"5222222222222223":1,"52362157e":27,"52511377":20,"52554699e":27,"52656770e":27,"526744":[11,27],"52780600":29,"528698":5,"52869849":5,"52870818":11,"52874252":5,"53":[2,9],"5303329":11,"5305555555555556":1,"531280":27,"53541027":20,"53603254":20,"53607935":20,"53703498":6,"53738247":29,"5378811":11,"5384615384615384":9,"539261":[11,27],"54":[2,6,9,23],"540":9,"54039921":5,"54041041e":5,"541605":27,"54213195":26,"543939":27,"54393936":27,"54428380e":27,"544439":27,"54637219":29,"55":[1,2,9],"55119373":20,"55217048":26,"5545673":26,"5555555555555556":1,"55640817":26,"5567":6,"55757089e":27,"557795":[11,27],"55796518":20,"55854694":11,"55960462":26,"56":[1,2,9],"56033697":5,"56198284":5,"56239321":23,"564":9,"56413916":23,"564374":[11,27],"56466087e":27,"565":9,"56536":[0,26],"56589683":29,"566":9,"56636616e":[6,28],"567":9,"568":[9,29],"56823411":20,"569":[1,9],"56912044e":[6,28],"56939714":5,"56963365":26,"56965674":29,"57":[0,2,8,9,24,26],"570":9,"571":[5,28],"571105947979344e":[6,28],"571105947979412e":[6,28],"57169969":26,"57201944e":[6,28],"574465":[11,27],"576":29,"57652181":26,"5769230769230769":9,"58":[2,9,10,24,26],"58102999e":27,"58310989":26,"58314173e":27,"5833333333333334":9,"583595":27,"58384652":26,"58492636e":27,"58734026":11,"58827236":6,"58886887":20,"5888888888888889":1,"59":9,"591317992":4,"59161025":20,"59354079":6,"5944444444444444":1,"596190":11,"5961905":11,"5972962":26,"59831212":20,"5cm":23,"5f":8,"5x":8,"5y":8,"6":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,23,24,26,27,28,29],"60":[1,3,6,9],"60000":4,"60004008e":27,"60010693e":27,"6019067271":4,"60236121":20,"60293962":5,"60314816":26,"60337375":23,"60342978":29,"60393882":20,"60420593":5,"60482174":20,"60518617":20,"60543038":27,"60656897e":27,"60673226":11,"606760":5,"60929685":29,"60943791":[20,26],"60958647":26,"6111111111111112":1,"61124231":20,"612939":27,"613579":27,"614808":[11,27],"6153846153846154":9,"61542957":20,"61562855e":27,"61602252":23,"61775176":29,"61810248":26,"618982":27,"62":2,"6200":26,"6201":26,"6202":26,"6203":26,"6204":26,"62201698e":27,"62373464":11,"625":7,"62528192":26,"62554572":23,"626635268":[6,29],"62725226":28,"62765236":20,"62788541e":27,"628":6,"62894215":5,"629019":11,"62901905":11,"62958747":26,"63":[0,1,2,6,9,29],"63023737":26,"63025821e":[6,28],"63037846":6,"63162342":27,"63249532e":[6,28],"63376422e":27,"63498144":5,"63588621":26,"63619296":20,"6377013":26,"63811548":20,"638618":20,"64":[1,2,3,4,13,20,26],"64012627":5,"640x480":[6,13,21],"64286758":20,"64316192":29,"64403731":20,"64605756":26,"646283":[11,27],"6473418":20,"64742912e":[6,28],"647473":[11,27],"649382":[11,27],"64961094":26,"64x50":1,"65":[1,2,8,9],"651":2,"6515332649941654":5,"65198643":23,"652":2,"652089":11,"65208925":11,"653":2,"6536392":27,"65367685e":27,"654":2,"65442354":27,"654424":27,"655":2,"65571174e":27,"65599456":27,"65743689":27,"658":2,"65833132":27,"65885453":5,"65891389":27,"658914":27,"659":2,"65904730e":27,"66":2,"660":2,"66064822":27,"66080313":27,"66204648":6,"66294408":27,"6638":9,"6652177":27,"66560":9,"66617168469673":23,"667":9,"668172":27,"66865889":26,"67":[2,9],"67047975e":[6,28],"672721":27,"67314874e":5,"674":29,"67496658":23,"67509467":5,"67801834":27,"67851352e":27,"68":2,"68078357e":27,"68192193":5,"68286725":27,"68534263e":[6,28],"68542204":5,"685942":11,"68594205":11,"6869":9,"68772578":26,"6887363571":4,"68929213e":[6,28],"689519":[11,27],"69":[2,9,23],"690":9,"690617":27,"69069n_":23,"69087404e":27,"691":1,"6923076923076923":9,"69313903":23,"69475072":5,"694751":5,"69484813e":5,"69504801":6,"69634577e":[6,28],"69695259":5,"6999536":11,"6n_":23,"6pm":26,"7":[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,20,22,23,25,26,27,28,29],"70":[1,6,7,9],"700258285068488":23,"70025829":23,"70037324e":27,"701370":5,"70162272":23,"70435575e":27,"70653767":4,"70710678":[5,27],"70832814":5,"7086067479626619":27,"71":1,"7106484566285455":23,"71142161":27,"711422":27,"7119":9,"712018":[11,27],"71384474e":27,"71538320e":27,"71737253":27,"71761101":27,"718165":5,"72048339":20,"72174172":11,"72219105e":27,"72271878e":[6,28],"7236674":5,"724":3,"72532661":26,"72545392e":27,"72664028e":27,"72793290e":27,"72859758":5,"72981762":8,"73":[6,9,29],"731000":27,"73184876":20,"73185968e":27,"73223692e":27,"733096":27,"73435999":26,"7345483":20,"73537890e":27,"73600557":23,"73972932":26,"74":[6,29],"740":9,"74063343e":27,"74070824e":27,"74081822":8,"74222022e":27,"7423220054006":23,"74232201":23,"74303070e":27,"74384949":27,"74474996":26,"7458376":26,"74607851":27,"74647981e":27,"74720185":20,"74829661":27,"74830119e":27,"74840039":26,"74840212":5,"74947597":11,"749476":11,"749765":27,"75":[5,6,8,9,11,21,27,29],"7500735612987705":11,"750445":27,"75050135":27,"75079864":26,"751699":[11,27],"75170092":5,"75199355":20,"75269037":27,"75309603":20,"75437273":11,"754373":11,"75576555":27,"756352":27,"7577":29,"75770568":27,"76":[2,9,24,26],"76160572":0,"76187240e":27,"76190591":28,"76212914":26,"76428845":26,"76471048":20,"76478383":23,"765":7,"76681867":11,"76690383":29,"76887029e":27,"7692307692307693":9,"76936315":5,"7694444444444445":1,"77":[9,24,26],"77152076":5,"7718":9,"77519276":20,"77714169":8,"7782028952":4,"77921992":20,"77966116":23,"7796611648499043":23,"78":2,"78009660e":27,"78058232e":27,"7809358":23,"78156479e":5,"78184120e":[6,28],"78546777":26,"78584667":23,"78890834":23,"78941903":5,"79":2,"79036971":5,"790370":5,"79111643":5,"79189954":26,"793167":27,"794282":[11,27],"7953443":28,"79633065":29,"79689487":26,"79704553":20,"79778008":6,"797e":6,"79909592":29,"7993408651198877":29,"79934087":29,"7995707762668065":29,"7d7d58":[9,10],"8":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,18,20,21,23,26,27,28,29],"80":[0,1,2,5,6,8,9,27,28,29],"800":[4,7],"80006807":26,"80291466":26,"80354994":6,"80460179":29,"80469739":5,"8055555555555556":1,"80609615e":[6,28],"80609616e":[6,28],"80816668":5,"808167":5,"80847477e":[6,28],"80919738":20,"81":1,"81048318e":[6,28],"81160425":5,"81194394":26,"81203214":23,"81333808":6,"815am":[24,26],"81633628":11,"816454":27,"816847":27,"81700981":26,"82":2,"82168579e":27,"82198978":5,"82566059e":27,"8265786":5,"82924408":5,"83":2,"8305555555555556":1,"831048":5,"8310483":5,"83146596":29,"83223115":23,"83460016":20,"83512277":5,"83870189":6,"83954195":23,"84":2,"842":[0,7],"842436":27,"843":[0,7],"84355903e":1,"84388592":26,"844":[0,7],"84443254e":1,"8461538461538461":9,"84716164":23,"84780262":6,"84880366":11,"8492168":26,"84923989e":[6,28],"84963695":5,"849637":5,"84994524":5,"85":[1,2,9],"85013763":26,"850164":5,"85263220":6,"85278920e":5,"85533937":20,"85601992":5,"858":9,"8583333333333333":1,"86":[0,2],"86062977":6,"86117291":5,"86134827":5,"86145244":11,"86260426":20,"86273371":28,"8638888888888889":1,"865":[0,7],"86528841":26,"86557766e":27,"866":[0,7],"86630":9,"8666666666666667":1,"867":[0,7],"86810":9,"87":9,"8702784034":4,"87068171":28,"87072815e":27,"87078":11,"8722222222222222":1,"87381451":5,"875":1,"87599676":20,"87627342":29,"877":6,"87923449":26,"88":[2,26],"88046261":5,"8805555555555555":1,"88168312e":[6,28],"88182591":27,"88253432e":27,"88323026":27,"88336879":5,"88347937":20,"88354703":20,"8840785":20,"88422263":20,"884669":27,"88529063e":[6,28],"88613493":27,"8888888888888888":1,"89":[2,9],"89126914e":27,"89261577":11,"892616":11,"89288636":11,"89410423":5,"89442642":20,"8944444444444445":1,"89685175":23,"89757312":23,"89794988":26,"89800468":26,"89906633":26,"89954169e":27,"89971681e":27,"8f":[6,29],"8g":[6,29],"8n":20,"8x8":1,"9":[0,1,2,3,4,5,6,7,8,9,11,12,13,14,18,20,21,22,23,24,26,27,28,29],"90":[1,2,6,9],"90075537":5,"9011":6,"90220243":5,"90266948":5,"9027777777777778":1,"9040":9,"90475506e":[6,28],"9054":29,"9055555555555556":1,"9059370566788297":23,"90593706":23,"906747":5,"9090666":20,"90914803":26,"909446359461397":11,"91":[24,26],"910":9,"9106590586410548":23,"9111111111111111":1,"91128596":5,"91358186":20,"91402008e":27,"9149137":20,"91492986e":[6,28],"91561163":20,"91660026":5,"9166666666666666":9,"91760278":5,"91812702":5,"918992":27,"91924234":23,"9197998358799464":23,"92":[6,9,24,26],"9230769230769231":9,"92397145":26,"924251":11,"9242511":11,"924e":6,"925":1,"92507116e":1,"92578916":5,"926564304542535":26,"92674248":20,"92740215":23,"92756256":28,"9277777777777778":1,"92878175":23,"9305555555555556":1,"931":[0,26],"93155188":5,"93158979":5,"93176482":26,"933":[5,28],"93356853e":27,"93492130e":[6,28],"93601008e":27,"937":23,"937082":27,"93742122":26,"93792515":26,"93799826":5,"938":23,"9387":9,"939":[0,23,26],"9392":6,"94":[9,23],"94226022e":[6,28],"94273542":27,"94284104":5,"94320205":5,"9444444444444444":1,"94556653e":27,"94591015":[20,26],"94639099":11,"946957":5,"9472222222222222":1,"94781064":28,"9482527":5,"94897736":26,"9492":6,"95":[1,9,11,29],"95008046":6,"95154558":20,"95231424":5,"952387":27,"95274315":20,"9527777777777777":1,"95284275":5,"953065564":1,"95351665":5,"954":23,"95511792":27,"955118":27,"9555555555555556":1,"955820c21e8b":4,"956563":[11,27],"95684892":5,"95782166e":27,"958228616652075":5,"95980855e":27,"96":[6,9,11,29],"960":23,"9601304850035702e":[6,28],"9601304850073734e":[6,28],"96024953":5,"9603":6,"96084663":5,"961":23,"962":23,"9637117593816477":[6,28],"9640435":5,"9649652536":4,"965548":27,"96631321":27,"96688672":5,"9674916":5,"967809":[11,27],"97005689":5,"97056672":20,"97065359":29,"97108525e":27,"9722222222222222":1,"97243128":5,"972591":5,"97300836":5,"97497404e":[6,28],"975":1,"97507735":5,"97630233":29,"97705827":5,"97758848":5,"9777777777777777":1,"9780387310732":25,"9780387848570":25,"9781098134174":26,"9781492032632":25,"9781801819312":26,"978553":5,"97898392":[6,27,28],"97906022e":27,"97926491":5,"97979891":6,"97992238e":27,"98":[0,1,9],"980":9,"9805555555555555":1,"98091621":5,"981321":27,"98139097":5,"98275501":5,"98279090e":27,"9828":29,"983310":27,"98368659":26,"9841":29,"98413059":5,"98454786":5,"985":23,"98566191":5,"986":23,"9861111111111112":1,"98625331e":27,"98650215":26,"98650823":26,"986699":5,"98680716":5,"98716878":5,"98808176":5,"98822371":6,"9888888888888889":1,"989":23,"9890348":5,"9893447":5,"98947894":27,"9898ff":[9,10],"99":[6,9,11,13,29],"990":9,"99009525":5,"99021575e":27,"99088801":5,"991":23,"99115119":5,"99176998":5,"992":23,"99217800e":27,"9923539830272697":27,"99242921":5,"99265097":5,"993":23,"99316252":5,"99371056":5,"99371466":23,"99389612":5,"9943201":5,"9947756":5,"99492986":5,"99509854":26,"9951502749739212":27,"99528218":5,"99539415":5,"99566069":5,"99578809":5,"996":[5,28,29],"99608161":5,"9963961":5,"9964486445275116":27,"99650061":5,"9967458":5,"99700706":5,"99709215":5,"99729756":5,"99751458":5,"99758326":5,"99762142":28,"99775587":5,"99793613":5,"99799099":5,"998100":5,"99810021":5,"99813653":5,"99828624":5,"9983295":5,"99845267":5,"99854557":27,"998577":5,"99861053":5,"99862019":27,"99869482":27,"99871521":5,"99876945":27,"99881845":5,"99883628":27,"99884384":5,"99884409":27,"99884986":28,"99891093":27,"99891873":27,"99893323":5,"99898558":27,"999":[9,23],"99901896":5,"99903755":5,"99906023":27,"9990927157696581":28,"99911427":5,"99912709":27,"99913489":27,"99918546":5,"99919837":5,"99920175":27,"99926459":5,"99927642":27,"9993237":5,"99933188":5,"9993511":27,"99938942":5,"99941797":27,"9994385":5,"99944272":5,"99949266":27,"99949306":5,"99953381":5,"99953475":5,"99956735":27,"99957911":5,"99961294":5,"99965056":5,"99967865":5,"99970894":27,"99970988":5,"9997332":5,"99975913":5,"99977849":5,"99978365":27,"99980002":5,"9998161":5,"99984732":5,"99987324":5,"99989476":5,"99991263":5,"99992746":5,"99993978":5,"99995":5,"999955585168597":[6,28],"9x":[6,21],"9y":[6,21],"\u00f8yvind":[6,27,28],"abstract":1,"boolean":4,"break":[0,4,6,11,14,26],"byte":[20,26],"case":[0,1,2,3,4,5,6,7,11,12,13,14,16,19,20,21,26,29],"catch":0,"class":[0,1,3,4,6,7,8,9,11,12,13,23,26,29],"default":[0,1,2,4,6,7,8,16,20,21,26,27,28],"do":[0,2,3,4,5,6,8,9,10,11,12,13,14,15,16,20,21,26,27],"ekstr\u00f8m":4,"export":9,"f\u00f8470":[24,26],"final":[0,1,2,3,4,5,6,7,8,9,10,11,13,14,16,18,21,22,23,24,26,29],"float":[0,3,4,5,9,11,13,14,20,26,27],"function":[2,3,4,5,9,14,15,16,17,18,19,20],"import":[0,1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,17,21,23,29],"int":[0,1,2,3,4,5,6,11,13,14,20,23,27,29],"long":[0,1,3,4,12,13,26],"m\u00f8svatn":[6,21],"new":[0,1,2,3,5,6,7,8,9,10,11,13,14,17,20,26,27],"public":[0,19,26],"return":[0,1,2,3,4,5,6,7,8,9,11,13,14,20,21,23,26,27,28,29],"sch\u00f8yen":[6,27,28],"short":[4,5,21,28,29],"super":[5,27,28],"switch":0,"throw":[3,6,23,29],"true":[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,20,21,23,26,27,28,29],"try":[0,1,2,4,5,6,7,8,9,10,11,13,14,15,16,19,20,21,23,26,27,28,29],"var":[1,5,6,10,11,18,21,23,26,27,28,29],"while":[0,1,3,4,5,6,7,8,9,11,12,13,23,26,27,28,29],A:[2,3,5,6,7,10,11,12,13,16,18,19,20,21,22,23,24,25,27],AND:2,And:[0,3,4,5,6,9,13,19,21,23],As:[0,1,2,3,4,5,6,8,10,12,13,16,20,21,23,26,27,28,29],At:[0,4,6,13,21,26],BE:[0,26],Be:[2,19,26],Being:13,But:[0,1,2,3,5,6,9,10,23,27,28,29],By:[0,3,5,6,12,13,17,20,26,27,28,29],For:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,28,29],IF:[6,28,29],IN:25,If:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,19,20,21,23,26,27,28,29],In:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,23,25,26,27,28,29],Is:11,Ising:[5,12,27],It:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,19,20,21,23,26,27,28,29],Its:[1,2,4,11],NO:[9,11],No:[0,6,7,9,26,28],Not:[0,1,5,6,27,28,29],OR:23,Of:23,On:[0,3,9,15,21,22,23,24,25,26],One:[0,1,3,4,5,6,7,8,11,12,13,17,21,23,27,29],Or:[0,1,6,21,26],Such:[0,6,12,16,23,29],That:[0,5,7,10,11,12,14,21,23,26,28,29],The:[4,10,13,14,15,16,18,20,21,22,23,24,25],Then:[0,1,6,8,9,10,11,12,13,14,20,21,26,29],There:[0,3,4,5,6,8,9,11,12,14,20,21,22,23,24,26,27,28],These:[0,2,3,4,5,8,9,10,11,12,13,14,15,16,20,21,23,24,26,27,28],To:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,20,23,28,29],With:[0,5,6,8,9,10,11,12,14,18,20,21,23,26,27,29],_0:[5,8,10,11,13,27],_1:[2,5,6,8,10,11,12,13,14,20,27,28,29],_2:[2,5,8,11,12,13,20,27],_3:20,_4:20,_9:13,_:[0,1,2,4,5,6,7,8,9,10,11,12,13,17,18,20,21,26,27,28,29],__class__:10,__doc__:[6,29],__enter__:[0,7],__future__:[8,9],__getattr__:28,__getattribute__:26,__getitem__:[0,7],__init__:[0,1,2,3,4,7,14,28],__main__:2,__name__:[2,10,28],_accessor:26,_auto10:[6,12],_auto11:6,_auto12:6,_auto1:[2,3,4,5,6,7,12,13,20,23,27],_auto2:[2,3,4,5,6,12,13,20,23],_auto3:[3,4,5,6,12,13,20],_auto4:[4,6,12,13,20],_auto5:[4,6,12,13,20],_auto6:[4,6,12,20],_auto7:[4,6,12,20],_auto8:[6,12],_auto9:[6,12],_base:8,_build:[0,17,19,21,25,26],_c:1,_can_hold_identifiers_and_holds_nam:26,_check_optimize_result:[9,11],_class:8,_compon:11,_coordinate_desc:6,_depth:9,_fraction:9,_generatorcontextmanag:[0,7],_i:[0,1,2,5,6,7,8,11,12,13,15,16,17,21,26,27,28,29],_info_axi:26,_j:[0,1,2,3,5,6,8,13,17,21,27,28,29],_k:13,_l:12,_lambda:[6,26],_leaf:9,_ll:[3,4,14],_logist:[9,11],_m:10,_make_vjp:2,_multilayer_perceptron:1,_n:[2,5,8,11,13,27],_node:[2,9],_o:[3,4,14],_open_file_or_url:[0,7],_p:[5,8,27],_plugin_dir:[3,4,14],_ratio:11,_rc_params_in_fil:[0,7],_s:[3,4,14],_sampl:9,_split:[6,9,21],_t:13,_test:[6,21],_tf_getinputpropertieslist:[3,4,14],_trace:2,_valu:2,_varianc:11,_weight:9,a0:3,a0faa0:[9,10],a1:[0,26],a2:[0,26],a3:[0,26],a4:[0,26],a_0:[0,26],a_1a:[0,26],a_1x:[],a_2a:[0,26],a_2x:[],a_3:[0,26],a_3a:[0,26],a_4:[0,26],a_4a:[0,26],a_:[0,1,16,20,26,27],a_h:1,a_i:[0,1,2,12,26],a_j:[1,12],a_k:[0,1,12],aaron:25,ab:[0,2,5,13,14,21,26,27,28],ab_channel:19,abandon:1,abbrevi:22,abid:23,abil:[0,10],abl:[0,1,4,5,6,7,10,12,13,16,21,27],about:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,19,20,21,24,28,29],abov:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,23,25,26,27,29],abovement:[6,26,29],abscissa:13,absolut:[0,2,5,6,13,26,27,28,29],absorb:[27,28],acceler:13,accept:[0,3,6,9,21,26,27],access:[0,3,11,23,26],accid:[4,6,29],accompani:[0,26,27],accomplish:[8,9,13],accord:[0,1,2,5,6,9,12,13,14,15,16,23,26,28,29],accordingli:11,account:[0,3,5,13,15,23,26,28,29],accumul:[12,13,23],accur:[0,3,4,6,10,13,29],accuraci:[0,1,3,4,5,6,7,9,10,11,12,26,27],accuracy_scor:[0,1,10,26],accuracy_score_numpi:1,achiev:[0,1,5,6,8,12,20,26,28,29],aco:23,acquaint:19,acquir:[1,19,26],acr:0,across:[1,3,6,9,19,26,29],act:[1,3,20],action:23,activ:[0,2,3,4,9,22,24,26,29],actual:[0,1,4,5,6,8,11,16,20,23,26,27,28,29],ad:[1,3,4,5,8,13,15,16,20,28,29],ada_clf:10,adaboostclassifi:10,adadelta:13,adagrad:[],adam:[1,3,4,24,26],adapt:[4,6,13,25,29],add:[0,1,2,3,4,5,6,8,10,11,12,15,16,17,21,23,26,27,28,29],add_outgrad:2,add_subplot:[1,7,12,14],addendum:5,addit:[0,2,3,5,6,7,8,9,10,12,13,15,17,19,20,21,23,24,25,26,27,28,29],addition:[12,13],address:[1,9,11,13,26],adjac:[3,12],adjoint:[5,27,28],adjust:[0,5,12,13],admir:[0,26],advanc:[4,6,12,25,26,29],advantag:[1,3,5,6,10,13,20,28,29],adversari:26,afecionado:26,affect:3,affin:[0,3,8,11,27],afford:3,aficionado:26,aforement:14,african:0,after:[0,1,2,4,5,6,9,11,12,13,15,19,20,21,23,26,27,28,29],afterward:[0,26],ag:[0,7,22,26,27],ag_0:2,again:[0,1,4,5,6,7,8,10,11,12,13,15,16,21,23,26,27,28,29],against:[1,4,7,10],agegroup:7,agegroupmean:7,aggreg:[9,10],agorithm:10,agre:[5,6,23,28,29],agreement:13,ahead:9,ai:[0,25],aid:11,aim:[0,1,4,6,7,11,14,15,16,19,20,21,27,29],ainv:5,airplan:3,aka:[5,28,29],al:[0,2,4,15,16,17,21,25,26,27,28,29],alarm:[5,7,28,29],aldo:27,algebra:[0,3,5,13,19,27,28,29],algorithm:[0,1,2,4,5,6,7,8,13,14,19,20,21,23,25,26,28,29],align:[0,2,5,6,7,8,13,21,23,26,27,28,29],all:[0,1,2,3,4,5,6,7,9,10,11,12,13,14,15,19,20,21,22,23,24,25,26,27,28,29],allevi:[1,13],alloc:[3,20],allow:[0,1,2,3,5,6,8,10,13,15,16,19,20,21,26,27,28,29],almost:[0,1,6,8,11,13,23,29],alon:[2,9],along:[2,3,4,5,6,9,10,11,19,20,26,27,28,29],alpha:[0,1,2,3,4,6,7,8,9,10,13,14,23,26,27,29],alpha_0:3,alpha_1:3,alpha_2:3,alpha_:10,alpha_i:[3,13],alpha_k:13,alpha_m:10,alpha_n:3,alpha_opt:13,alreadi:[2,3,4,5,6,10,12,19,20,23,26,27,28,29],also:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,26,27,28,29],alter:1,altern:[0,1,4,5,6,8,9,11,13,20,21,26,27,28,29],although:[0,1,5,6,8,10,13,16,26,28,29],alwai:[0,3,5,6,12,13,16,21,23,26,27,28,29],am:4,ame2016:[0,26],american:0,among:[0,3,5,9,10,12,20,26,27,28],amongst:[5,28,29],amount:[0,1,3,4,6,8,10,14,19,29],an:[1,2,3,5,6,7,8,9,11,12,13,14,15,16,17,19,20,21,23,24,25,27,28,29],an_:23,anaconda:[0,1,15,19,21,26],analog:13,analys:[6,28,29],analysi:[1,3,4,7,14,15,16,17,20,25],analyt:[2,3,5,6,7,12,13,15,19,21,26,27,28,29],analyz:[0,1,3,4,5,6,16,17,21,23,27,28],andrew:1,angl:[0,3,9,27],anharmon:3,ani:[0,1,2,3,4,5,6,7,8,9,10,12,14,18,23,26,27,28,29],anim:[4,12],ann:12,annot:[0,1,3,7,8,26],announc:26,anoth:[0,1,3,4,5,6,7,8,10,11,12,13,20,21,23,26,27],anp:2,ans_vspac:2,ansatz:[0,26],answer:[0,1,3,5,6,20,21,24,26,28,29],antialias:[2,6,21],anticip:4,anymor:[1,8],anyon:[4,8],anyth:[1,23],anytim:[24,26],apach:1,apart:[11,13],api:[1,19,26],appar:2,appear:[0,1,3,13,16,20,23],append:[1,3,4,8,9,13,26],appendix:21,appli:[0,1,2,3,4,6,7,8,9,10,11,12,13,15,16,21,23,25,26,27,28,29],applic:[0,1,3,4,5,6,7,9,12,13,20,21,23,25,26,27,29],apply_gradi:4,approach:[1,2,4,5,6,9,10,11,12,13,17,19,23,25,27],appropri:[2,6,9,12,13,19,23,29],approv:26,approx:[0,2,3,6,10,11,13,23,26,29],approxim:[0,1,2,3,4,5,6,7,10,11,13,18,21,23,26,27,28,29],apt:[0,15,19,21,26],aq:23,ar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29],aragorn:26,arang:[1,3,4,6,7,9,10,12,13,21,26],arbitrari:[1,4,6,8,12,13,23,29],arbitrarili:[0,1,11,26],arc:[6,21],architectur:[3,4,12],archiv:[],area:[0,3,6,9,21,25,26],arg:2,argmax:[1,11],argmin:[4,10,14],argnum:2,argnum_0:2,argnum_1:2,argsort:11,argu:[1,13],argument:[0,2,3,5,6,11,12,13,21,26,27,28,29],argval:2,aris:[0,6,12,13,23,26,29],arithmet:[0,13,20,26],arm:[6,28],armadillo:20,around:[0,1,4,5,6,11,23,26,28,29],arr:2,arrai:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,19,21,23,27,28,29],arrang:[3,26],arraybox:13,arriv:[0,6,9,11,20,23,26,29],arrow:12,arrowprop:8,art:[0,1,15,19,26],articl:[0,3,4,6,10,18,21,26,27,28,29],artifici:[0,2,7,12,25,26],artificialneuron:12,arug:13,arxiv:[3,4,21],asarrai:[0,2,6,9,27,28],asid:27,ask:[5,6,11,12,21,28,29],aspect:[0,6,19,21,26,27,28],assembl:[0,3,26],assert:4,assess:[0,6,21,26,27,28,29],assici:4,assign:[0,7,8,9,12,13,14,22,24,25,26],associ:[0,6,9,12,14,23,26,29],assum:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,20,21,23,26,27,28,29],assumpt:[0,3,5,6,9,11,18,21,23,26,27],ast:[0,5,6,18,21,26,28,29],astronomi:[26,28,29],astyp:[4,9,10],asymmetri:[0,26],asymptot:[4,6,29],atom:[0,26],attempt:[0,4,6,7,8,10,26,28],attend:22,attent:[0,20,26],attr:28,attract:[0,10,26],attribut:[0,9,26,28],attributeerror:[26,28],audi:[0,26],audio:[3,4],august:[15,16,26],aurelien:[0,15,22,25,26],austfjel:[6,21],author:[0,1,10,23],authour:26,auto:[8,9,10,23],auto_exampl:[21,28],autocor:23,autocorrelation_tim:23,autocorrelform:23,autocovari:23,autoencod:[4,19,26],autoencond:19,autograd:[19,26],autom:[0,19,25,26],automac:20,automag:26,automat:[0,1,2,3,4,11,16,19,20,26],automobil:3,autonom:4,avail:[0,1,4,6,7,10,11,15,19,20,21,22,24,25,26,29],averag:[0,1,3,6,9,10,13,14,23,24,26,27,28,29],avoid:[0,4,5,6,9,11,13,20,26,27,29],awai:[2,3,6,27,28,29],awar:[2,10],award:[24,26],ax:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,20,21,26,29],axes3d:[2,6,13,21],axes_grid1:6,axhlin:8,axi:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,20,21,23,26,27,28,29],axiom:[5,28,29],axlabel:[0,26],axvlin:[4,8],axvspan:4,b1:8,b2:8,b3:8,b:[0,1,3,4,5,6,8,9,10,12,13,14,15,16,23,24,26,27,28,29],b_0:0,b_1:[0,2,12,13],b_2:[0,13],b_5:13,b_:[0,1,20],b_group:9,b_i:[0,1,2,12,26],b_ia_:[0,26],b_ia_i:0,b_index:9,b_j:[1,12],b_k:[0,1,12,13],b_m:12,b_score:9,b_valu:9,babcock:26,bachelor:[22,24],back:[0,3,4,5,6,8,9,10,15,20,23,26,27,28],backbon:20,backend:[0,1,4,7],background:[25,26,27],backpropag:1,backtrack:9,backup:20,backward:[1,2,4,12,20],backward_pass:2,bad:[6,27,28],badli:23,bag:[9,19,26],bag_clf:10,baggin:26,baggingboot:10,baggingclassifi:10,baggingtre:10,balanc:[6,29],band:20,bandwidth:20,bar:[0,6,11,15,16,21,26],barber:25,bare:[4,10],base:[0,1,3,4,5,7,8,9,10,14,19,23,24,25,26,27,28],basi:[5,7,8,10,11,12,13,20,27,28],basic:[2,6,8,12,13,14,19,21,23,26],batch:[3,4,11,12,13],batch_shap:4,batch_siz:[1,3,4],batchnorm:4,bay:7,bayesian:[5,19,25,26,28,29],beam:[26,29],becattini:24,becaus:[0,1,2,3,4,5,6,8,9,12,13,14,26,28,29],becom:[0,1,2,5,6,7,9,12,13,23,26,27,28,29],been:[0,1,2,3,4,5,6,11,12,13,19,20,21,26,27,28,29],befor:[0,1,2,3,4,5,6,7,8,12,13,14,20,21,23,26,27,28,29],beforehand:[0,23,26],begin:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,20,21,23,24,26,27,28,29],behav:[1,6,13,29],behavior:[0,1,13,26],behaviour:12,behind:[0,1,6,8,13,26],being:[0,1,2,3,4,5,7,8,10,11,12,13,17,23,26,27,28,29],believ:[9,20],belong:[7,8,9,13,14],below:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,20,21,23,26,27,28,29],benchmark:10,benefici:[1,13],benefit:[0,1,4,11,13,15,19,26],bengio:[1,22,25,26,27],benign:[1,7,9],besid:[4,5,28],bessel:[5,27,28,29],best:[0,1,2,3,4,5,6,7,8,9,10,12,13,21,24,26,27,29],beta:[0,1,3,5,6,7,10,11,13,16,17,18,21,26,27],beta_0:[0,1,3,5,6,7,13,26,27,28,29],beta_0x_:[0,26,27],beta_1:[0,1,3,5,6,7,10,13,26,27,28,29],beta_1x_0:[0,26],beta_1x_1:[0,7,26],beta_1x_2:[0,26],beta_1x_:[0,26,27],beta_1x_i:[7,13,27],beta_2:[0,3,13,26,27],beta_2x_0:[0,26],beta_2x_1:[0,26],beta_2x_2:[0,7,26],beta_2x_:[0,26,27],beta_2x_i:27,beta_3:3,beta_3x_i:27,beta_4x_i:27,beta_:[0,3,6,7,13,26,27,28,29],beta_i:[0,3,5,26,27,28],beta_j:[0,5,6,13,18,21,26,27,28,29],beta_k:13,beta_linreg:13,beta_m:10,beta_mg_m:10,beta_n:3,beta_ol:29,beta_p:7,beta_px_p:7,beta_ridg:29,betaol:29,betaridg:29,betavalu:5,better:[0,1,2,3,4,6,9,10,11,12,13,26,27,28,29],between:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,17,21,23,26,27,28,29],beyond:[0,1,5,6,8,13,21,26,27],bf:[13,14,20,23],bg:26,bgd:13,bia:[0,1,2,3,5,8,9,10,12,13,26,27,28],bias:[1,2,3,5,6,9,12,28],bibliographi:21,big:[0,1,2,5,6,14,18,28,29],bigger:[1,6,27,28],bigr:12,bike:9,bilbo:26,billion:[3,12,19],bin:[0,7,23],binari:[0,3,5,7,9,10,12,26,28,29],binarycrossentropi:4,bind:[0,27],binomi:[19,23,26],binsboot:[6,29],bioinformat:0,biolog:[1,12],bios1100:[19,26],bird:[0,3],birth:26,bishop:[22,25,26],bit:[1,4,20,23,26],bitwis:23,bivari:2,bk:[0,13],bla:[20,26],black:[8,9,14],blob:[16,21],block:[6,10,19,20,23,26,29],blog:26,blogpost:4,blue:[0,3],bmatrix:[0,1,3,5,7,8,11,13,20,26,27,28],bmi:1,bodi:[0,1,4,12,26],bold:1,boldfac:[0,5,16,27,28],boldsymbol:[0,1,2,3,5,6,7,8,10,11,13,14,15,16,17,18,21,26],boltzmann:[12,19,26],book1:25,book:[21,25,26,27],boost:[1,9,19,26],boostrap:10,bootstrap:[1,13,19,21,26],borrow:26,boston_dataset:0,bot:8,both:[0,1,4,5,6,8,9,10,13,14,15,16,19,20,21,23,24,26,27,28,29],bottl:7,bound:[0,8,12],boundari:[2,4,8,11,12],box:[4,9],boxed_arg:2,boyd:[8,13],bracket:[4,23],brain:[1,7,12],branch:9,breast:[5,7,11,28,29],breat:[],breviti:13,brew:[0,15,19,21,26],brg:8,brief:[21,27],briefli:[0,26],bring:[0,5,6,10,27,28],broad:0,broadcast_idx:2,brought:[13,19,26],brownle:4,browser:26,brute:[3,5,11,27,28],bs:[8,9,10],buffer_s:4,bui:4,build:[0,4,5,6,10,20,23,26,28,29],built:[0,1,3,4,6,29],bunch:11,busi:0,c1:[8,11],c2:[8,11],c:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,19,20,23,24,25,27,28,29],c_0:23,c_1:12,c_2:12,c_3:12,c_4:12,c_:[0,8,9,10,13,23],c_i:[12,13],c_k:23,ca:[1,26],cach:10,cal:[0,8,10,12,13,15,16,26],calcul:[0,1,2,4,5,6,8,9,10,11,12,13,14,15,16,18,20,23,26,28,29],california:[],call:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18,19,20,21,23,24,26,27,28,29],calor:[0,27],cambridg:[13,25],can:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,27,28],cancel:[0,13,26,27],cancer:[5,10,28,29],cancerpd:7,candid:[8,9,10],cannot:[0,1,4,5,6,7,8,9,22,23,27,28],canopi:[0,15,19,21,26],canva:[21,26],cap:[5,28,29],capabl:[0,1,8,13,19,26],capac:[2,24],capita:0,caption:21,captur:[4,11,12],car:[3,4],card:[0,7,26],cardin:1,care:11,carefulli:13,carlo:[0,6,19,23,25,26,29],carri:[2,6,7,21,29],cart:10,casella:25,cast:1,cat:[3,4],categor:[0,1,3,9,11,26],categori:[0,1,3,7,10,12,14,26],categorical_crossentropi:[1,3],caus:[0,5,6,7,23,26,27,28,29],causal:0,causat:[0,26],cax:1,cb:[6,26],cbar:1,cc:[0,1,5,13,26,27,28],ccc:[5,12,28],cd_fast:6,cdf:23,cdot:[0,2,6,12,13,14,20,23,26,29],celebr:13,cell:[0,1,2,3,4,6,7,8,9,10,13,14,21,28,29],center:[0,1,6,7,8,9,11,14,21,23,26,28,29],central:[0,3,5,6,8,16,20,26,27,28],centroid:[14,23],centroid_differ:14,centuri:3,certain:[0,3,6,7,9,23,26,27,29],certainti:29,cg:13,cha:0,chain:[0,1,13,19,23,26],chanc:[1,5,13,23,28,29],chang:[0,1,2,3,4,5,6,8,9,11,12,13,14,20,21,23,26,27,28,29],channel:3,chapter3:[0,21],chapter:[0,6,10,11,16,18,20,21,25,26,27,28,29],charact:[0,3,5,8,26,27],character:[8,9,10,12,23],characterist:[0,1,3,10,13,26],charg:[0,26],charl:0,chase:4,chatgpt:21,chd:7,chddata:7,cheap:[5,27],cheaper:[1,13],check:[0,1,3,4,5,6,11,13,20,26],checkmark:3,checkpoint:4,checkpoint_dir:4,checkpoint_prefix:4,chen:10,cheng:27,chiaramont:2,choic:[0,1,2,3,4,6,9,12,13,14,20,26,27,29],choleski:[5,20,27],choos:[2,3,6,9,10,11,13,14,21,29],chosen:[0,1,2,6,8,9,10,13,16,23,26,29],chosen_datapoint:1,christian:25,christoph:[22,25,26],cifar10:3,cifar:3,circ:[1,12],circl:[0,8,12,27],circuit:3,circumfer:9,circumv:[1,5,13,27],cite:21,ckpt:4,clariti:23,class_nam:[3,9],class_val:9,class_valu:9,classic:[7,9,13],classif:[0,3,5,6,7,8,11,12,19,21,25,26,27,28,29],classifi:[0,1,4,7,9,10,11,26],classificaton:1,classifii:10,clean:1,clear:[1,5,10,12,13],clearli:[0,3,5,6,7,8,18,23,27,28,29],clever:[1,10],clf3:0,clf:[0,6,8,9,10,26,27],clf_lasso:6,clf_ridg:[6,26],clip:[3,23],clone:24,close:[0,1,2,4,6,8,9,11,12,13,14,21,23,25,26,29],closer:[3,5,13,27],closest:[8,11,13,14],closur:[19,26],cloud:[19,26],cluster:[0,1,4,6,11,19,26,29],cluster_label:14,cm:[1,2,3,6,8,9,13,21],cmap:[0,1,2,3,4,6,8,9,10,21,26],cmap_arg:6,cmb:22,cmd:9,cn_:23,cnn:12,cnn_kera:3,cntk:[19,26],co:[0,2,3,6,9,13,26,29],code:[3,4,6,7,8,15,16,17,19,20,21,23,25],coef0:8,coef:[0,26],coef_:[0,5,6,8,9,13,26,27,28,29],coeff:5,coeffici:[0,3,5,6,7,8,9,13,15,16,20,26,27,28,29],coerc:[0,6,26,29],coin:[10,23],coin_toss:10,col:[0,11,26,27],colab:[19,26],cold:9,colinear:0,collabor:21,collaps:8,collect:[0,2,6,10,11,19,23,25,26,29],collinear:[5,27,28],color:[0,3,4,6,8,9,10,21,23],color_channel:3,color_cod:6,colorbar:[1,6,21],colsample_bytre:10,colsaobject:10,column:[0,1,2,5,6,7,8,9,11,12,17,20,26,27,28,29],columntransform:9,com:[4,6,16,19,21,25,26],combin:[1,2,5,6,7,10,23,28,29],come:[0,1,3,4,5,12,13,14,15,26,27,28,29],command:[0,1,26],comment:[0,4,5,6,15,16,21,26,27],commerci:[0,15,19,21,26],commod:[0,26],common:[0,1,3,5,6,7,9,11,13,14,21,23,26,27,29],commonli:[0,1,4,6,7,9,13,14,27,29],commun:[0,12,21],commut:3,commutatitav:3,compact:[0,1,3,5,6,7,9,11,12,13,14,26,27,28,29],compair:0,compar:[0,3,4,5,6,11,13,15,16,20,21,26,27,28,29],comparison:[2,4,13],compat:7,compet:0,competit:10,compil:[0,1,3,4,13,15,19,20,26],complet:[0,2,3,4,9,12,26],completenn:12,complex:[1,5,8,9,11,12,13,15,16,26,29],complic:[0,1,9,13,26,29],compoment:27,compon:[0,1,3,4,5,6,7,9,14,16,19,26,27,28,29],components_:11,compos:[9,12,13,14,19,26],compphys:[0,6,16,17,19,21,22,24,25,26],compress:[0,26,27],compris:6,compromis:[5,27],compulsori:[19,26],comput:[0,1,2,3,4,5,6,7,8,10,11,12,13,15,16,17,19,20,21,22,23,25,26,27,28,29],computation:[0,3,6,9,13,23,26],computationalscienceuio:26,computerlab:21,con:[],concaten:[2,4,6,14],concav:[1,9,13,27],concentr:[0,10],concept:[0,2,19,26,27],conceptu:[12,13],concern:[0,1,4,7,26],concic:26,conclud:[0,5,13,28,29],conclus:1,cond:2,conda:[0,1,15,19,21,26],condis:27,condit:[0,2,4,5,6,8,9,11,13,23,26,27],conduct:19,condwav:2,confid:[0,5,6,7,8,18,21,26,27,28],configur:3,confirm:[5,12,28,29],confus:[5,6,7,10,20,27,28,29],confusion_matrix:9,congruenti:23,conjug:[4,8],conjugaci:13,conjunct:3,connect:[0,1,3,4,9,11,12,13,20,26,27],consequ:[5,6,8,10,12,13,27,28,29],conserv:[5,14,27],consid:[0,1,2,3,5,6,7,8,9,10,12,13,16,20,21,23,26,27,28,29],consider:[0,1,5,13,26,27,28,29],consist:[0,1,2,3,4,6,12,13,21,23,27,29],constant:[0,2,4,5,6,8,12,13,23,26,27,28,29],constitu:[0,26],constitut:[2,6,29],constrain:[1,3,5,7,11,28],constraint:[5,6,8,13,27,28,29],construct:[0,1,2,3,5,6,7,8,9,10,11,20,23,26,27,28,29],consult:[],contact:[0,26],contain:[0,2,3,4,5,6,7,8,9,11,12,13,17,20,21,23,25,26,27,28,29],contemporari:26,content:[1,19,20,26],context:[6,10,13,21,29],contextlib:[0,7],contigu:20,continu:[0,1,2,3,4,5,6,7,8,9,10,12,13,17,18,20,21,23,26,27,28,29],contour:[9,10,13],contourf:[8,9,10],contrast:[1,4,9,10,12],contribut:[0,3,5,13,23,26,27,28],contributor:[0,21],control:[0,1,3,9,13,15,19,26],conv2d:[3,4],conv2dtranspos:4,conv:[3,4],convei:26,conveni:[0,5,6,12,13,20,21,26,28,29],convent:[12,27],converg:[1,2,4,5,6,8,9,11,13,14,27,28],convergencewarn:[1,6,8,9,11],convert:[0,1,4,5,9,11,13,20,26,27],converttomatrix:4,convex:[4,5,7,27],convinc:13,convolut:[1,4,19,26],cook:21,cool:[4,9],coolwarm:[6,21],coordin:[5,12,14,27,28],coorel:0,copi:[0,1,2,14,27],copyright:[],core:[0,2,7,10,26],corel:26,coronari:7,corr:[0,5,7,11,27],correalt:[11,19],correct:[0,1,2,3,4,5,7,13,20,23,26,27,28,29],correctli:[1,2,6,7,10,21],correl:[0,1,3,5,6,7,10,12,13,19,23,26,28,29],correlation_matrix:[0,5,7,11,27],correspond:[0,3,5,6,8,9,11,12,15,16,17,19,20,21,23,26,27,28,29],cortex:12,cosin:[3,6,29],cost:[0,2,3,5,6,7,8,9,12,13,16,17,21,26],cost_deep_grad:2,cost_funct:2,cost_function_deep:2,cost_function_deep_grad:2,cost_function_grad:2,cost_grad:2,cost_sum:2,costol:13,could:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,17,20,21,23,26,27,28,29],coulomb:[0,26],count:[0,2,9,22,23,24,26],countor:13,coupl:[4,5,6,28,29],cours:[0,1,3,5,11,21,22,24,27,29],courvil:[22,25,26,27],cov:[5,6,11,20,23,26,27,28,29],cov_xi:[5,11,27],cov_xx:[5,11,27],cov_yi:[5,11,27],covari:[0,7,19,20,26,28],covariance_matrix:[5,11,14,27],cover:[0,5,17,19,24,25,27,28],covert:[0,26],covxi:23,covxx:23,covxz:23,covyi:23,covyz:23,covzz:23,cpu:1,craft:3,creat:[1,2,3,4,5,9,10,11,12,19,26,28],create_biases_and_weight:1,create_convolutional_neural_network_kera:3,create_neural_network_kera:1,create_x:[5,11,27],credit:[0,7,24,26],crim:0,crime:0,criteria:[0,4,9,10,14,23,26],criterion:[9,10,13],critic:[6,21,27,28],critiqu:21,cross:[0,1,3,7,9,10,13,19,23,26,27,28],cross_entropi:4,cross_val_scor:[6,29],cross_valid:[7,10],crossvalid:[6,29],crucial:[1,23],cs231:3,cs:[22,24],csr_matrix:[20,26],csv:[0,4,6,7,9,26,29],ctnk:1,cubic:0,cumbersom:[5,28,29],cumsum:[10,11,26],cumul:[7,10,23],cumulative_heads_ratio:10,cup:[5,28,29],current:[1,2,3,4,13,14,25],curs:[0,27],curv:[6,7,10,12,21],curvatur:13,custom:[6,14,21],custom_cmap2:[9,10],custom_cmap:[9,10],cutpoint:9,cv:[6,7,10,29],cvxbook:13,cvxopt:[5,8,27],cycl:[1,12],cyclotron:28,d2_g_t:2,d:[1,2,3,4,5,6,7,8,9,10,11,13,14,20,23,24,26,27,28,29],d_f:13,d_g_t:2,d_net_out:2,da:3,dagger:[5,20,27],dai:[1,9,19],damp:3,daniel:24,darget:9,darkr:23,dat:[0,26],dat_id:[0,6,7,9,26,27,29],data1:14,data2:14,data3:14,data4:14,data:[2,4,5,8,10,12,13,14,17,18,20,25,29],data_id:[0,6,7,9,26,27,29],data_indic:1,data_panda:26,data_path:[0,6,7,9,26,27,29],databas:1,datafil:[0,6,7,9,21,26,27,29],datafram:[0,4,5,7,9,11,26,27],datapoint:[1,5,6,7,11,13,27,29],dataset:[0,4,6,7,8,9,10,11,13,14,15,16,21,26,29],datatyp:4,date:[15,16,17,18,21,26,27,28,29],daughter:10,david:[25,26],davison:29,dbh:1,dbo:1,dc5e85cd93c3:[],dcomposit:20,ddot:2,dead:1,deadlin:[16,17,18,22],deal:[0,1,3,5,6,8,11,13,14,17,18,20,21,23,26,27,28,29],dealt:0,debt:7,debug:[0,5,6,28,29],decad:[0,3],decai:[0,13,23,26],decemb:[22,24,26],decent:10,decid:[0,2,3,5,6,9,21,28,29],decim:[0,26],decis:[0,1,8,11,19,25,26],decision_funct:8,decision_tre:9,decisiontreeclassifi:[9,10],decisiontreeregressor:[0,9,10],decisiontreeregressordecisiontreeregressor:9,declar:[0,4,20,26],decompos:[5,6,20,27],decomposit:[0,6,12,21,26,28],decompost:[5,27],deconvolut:3,decorrel:[10,13],decreas:[1,2,4,5,6,10,11,13,28,29],deduc:[0,26],deep:[3,7,12,13,19,22,25,27],deep_neural_network:2,deep_param:2,deep_tree_clf1:9,deep_tree_clf2:9,deep_tree_clf:[9,10],deepen:[5,19,26],deeper:[0,3,4,26],deeplearningbook:[25,26,28],deer:3,def:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,21,23,26,27,28,29],def_covari:23,default_tim:4,defect:[5,27],defici:[5,27],defin:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,23,27,28,29],definit:[1,2,5,6,7,8,10,11,12,13,17,20,23,27,28,29],defint:23,defvjp:2,degre:[3,5,6,8,9,10,11,15,16,17,21,23,26,28,29],deisenroth:27,del:1,delet:6,delimit:4,deliv:[22,26],delta:[0,2,3,6,8,12,13,14,26],delta_0:3,delta_1:3,delta_2:3,delta_3:3,delta_4:3,delta_5:3,delta_:[1,20],delta_h:[0,1,26],delta_j:[3,12],delta_k:12,delta_l:[1,3],delta_momentum:13,delta_n:[0,3,26],delug:19,delv:0,demand:13,demonstr:[0,3,5,6,7,11,12,19,26,27,28,29],den:4,denomin:[1,5,28,29],denot:[1,2,6,7,13,23],dens:[1,3,4],densiti:[0,2,6,23,26,29],depart:[24,26,27,28,29],depend:[0,1,2,4,5,6,7,8,11,12,13,15,19,20,21,23,26,27,28,29],depict:23,deploy:[0,15,19,21,26],deprec:2,depth:[0,3,9,10,20,29],deriv:[0,1,2,6,7,8,10,11,13,16,17,19,21,26],derivati:13,derivative_fn:13,descend:[5,9,11,27,28],descent:[0,1,3,7,8,12,26,27],describ:[0,2,4,5,6,8,10,11,12,13,18,20,21,26,28,29],descript:[0,8,9,26],design:[0,1,3,4,5,6,7,10,11,12,13,15,16,17,18,21,26,28,29],designmatrix:[0,26],desir:[0,2,4,5,13,14,26,27],despit:[1,12],destroi:20,det:[5,20,27],detail:[0,6,11,13,14,20,21,27],detect:[3,8,12],determin:[0,2,3,4,5,6,8,9,10,11,12,13,16,20,23,26,27,28,29],determinist:[7,13,23],dev:[1,21],develop:[0,3,5,8,10,11,12,19,20,21,26,27,28,29],deviat:[0,1,2,4,5,6,21,23,26,27,28,29],devic:[3,4,14],devis:12,df1:26,df:[4,8,11,13,26],di:0,diag:[5,8,27,28],diagnost:[1,10],diagon:[0,5,7,13,18,20,21,23,26,27,28],diagonaliz:[5,27],diagram:10,diagsvd:6,dice:[6,23,29],dict:[6,8],dictat:[],dictionari:0,did:[0,1,5,6,7,10,11,14,21,26,28,29],die:1,diff1:2,diff2:2,diff:2,diff_ag:2,diffeent:8,differ:[0,1,2,3,4,5,6,7,9,10,11,12,13,14,15,17,19,20,21,23,25,26,27,28,29],differenti:[0,3,16,19,20,26,27],differential_oper:2,difficult:[0,1,6,10,13,21,23,26,29],difficulti:[0,1,13,26],diffonedim:2,diffus:[],digit:[0,1,3,4,6,21,22,24,26],dilemma:13,dilut:1,dim:[4,11,14,20],dimens:[0,1,2,3,4,5,8,9,11,14,16,17,20,26,27,28],dimension:[0,4,5,6,9,11,13,14,19,20,26,28,29],dimensionless:[0,3,26],diment:20,dimnsion:4,diod:3,direct:[0,1,2,4,7,11,12,13,14,26,27],directli:[1,4,5,6,23,27],directori:[0,7],disadvantag:[0,26],disappear:[3,6,29],disc_loss:4,disc_tap:4,discard:[6,11,29],disciplin:[0,3,12],disclaim:23,discord:26,discourag:13,discov:[0,26],discover:[5,28],discret:[1,3,5,7,13,28,29],discrimin:[4,7,10,11],discriminator_loss:4,discriminator_loss_list:4,discriminator_model:4,discriminator_optim:4,discuss:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,25,26,27,28,29],diseas:7,disguis:[6,27,28,29],disord:[1,7],displai:[0,1,3,4,5,6,7,8,9,10,11,12,14,21,23,26,27,29],displaystyl:[0,5,17,26,27,28],disregard:[0,26],dissimilar:[11,14],dist:14,distanc:[0,8,9,11,14,23],distance_list:9,distinct:[3,7,8,9,10,14],distinctli:8,distinguish:[0,4,7,8,23,26],distplot:0,distribut:[0,1,4,6,7,10,11,13,14,15,16,18,19,20,21,26,27],distrubut:[0,15,19,21,26],ditto:[],dive:[0,8,20,26],diverg:[1,13],divid:[0,1,3,5,6,7,8,9,11,12,23,26,27,28,29],divis:[6,8,9,13,20,23,29],dlopen:[3,4,14],dna:7,dnn1:4,dnn2_gru2:4,dnn:[0,1,2,4,12,26],dnn_kera:1,dnn_model:1,dnn_numpi:1,dnn_scikit:[0,1,26],doamin:[28,29],doc:[0,6,16,17,19,21,22,24,25,26],document:[4,9,11,13],doe:[0,1,2,3,4,5,6,8,10,11,12,13,14,16,20,21,23,26,29],doesn:[3,9,12],dog:[1,3,4],domain:[5,8,13,21,28,29],domin:[0,26],don:[0,1,3,5,6,7,8,11,13,15,19,21,26,27],done:[0,2,3,4,5,6,9,10,11,13,17,20,21,26,27,28,29],dot:[0,2,3,5,6,7,8,9,10,11,12,13,20,21,23,26,27,28,29],doubl:[3,4,20,26],doubli:1,doubt:21,down:[0,3,6,9,11,12,13],download:[0,1,3,5,6,20,21,25,26],downsampl:3,dozen:1,dq:[6,29],drag:13,dramat:11,drastic:4,draw:[4,6,10,13,29],drawback:[0,1,3,13,27],drawn:[1,4,6,7,11,23,26,29],drive:[3,4],driven:3,drop:[0,1,5,6,11,13,23,26,27,28,29],dropna:[0,6,26,29],dropout:4,dt:[2,3,13,23],dtype:[0,1,2,3,4,14,20,26,27],dual:8,dualiti:6,dub:[0,26],due:[1,2,5,6,8,10,12,13,24,26,27,29],dummi:0,dure:[0,1,3,4,8,9,11,17,19,21,26,29],dwell:0,dwh:1,dwo:1,dx:[2,3,8,23],dx_1:23,dx_1p:[6,29],dx_2p:[6,29],dx_mp:[6,29],dx_n:23,dxp:[6,29],dy:[1,8,23],dylib:[3,4,14],dynam:4,dz:8,e:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,18,23,24,26,27,28,29],e_:[0,2,26],each:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,19,20,22,23,24,26,27,28,29],eager:29,eapprox:[0,26],earli:[1,13],earlier:[0,5,7,8,9,11,12,13,26,27],earthexplor:[6,21],eas:[6,9,14,29],easi:[0,5,6,7,8,9,10,11,12,13,18,19,20,26,27,28,29],easier:[5,6,8,9,13,23,26,27,29],easiest:13,easili:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,20,21,26,27,28,29],eastern:[24,26],ebind:[0,26],eblock:9,econometr:26,economi:5,ecosystem:[19,26],ect:22,edg:3,edgecolor:[6,29],edu:13,educ:[0,21,26],eff:23,effect:[1,4,10,13,23],effic:1,effici:[0,3,10,13,19,20,23,26],efron:[6,29],egrad:13,eig:[5,11,13,20,23,26,27],eigen:23,eigenpair:[5,11,27],eigenvalu:[0,5,8,11,13,20,26,27,28],eigenvector:[5,11,13,17,27,28],eight:[20,26],eigval:[20,23,26],eigvalu:[11,13],eigvec:[20,23,26],eigvector:[11,13],eispack:[20,26],either:[1,5,6,7,8,9,10,11,13,15,16,21,23,26,27,28,29],elabor:23,elarn:3,electr:[0,3,12,26],electron:26,eleg:11,element:[1,2,3,4,5,6,7,8,11,12,13,17,18,19,20,21,22,25,27,28,29],elementari:[10,13,20],elementwis:[3,13],elementwise_grad:[2,13],elessar:26,elif:[2,14],elim:20,elimin:[3,8],els:[1,2,3,4,7,9,12,13,14,20],elu:1,elus:[0,26],email:[22,24,26],embed:[0,11,27],embodi:[6,21,29],emit:23,emner:25,emphas:[0,10,19,26],emphasi:[0,19,25,26],empir:[1,11,23],emploi:[0,1,5,6,11,13,21,23,26,27,28,29],employ:0,empti:[6,10,29],emul:12,en:[19,25],enabl:11,enbodi:[6,29],encod:[0,3,5,7,9,11,14,17,26,27,28],encompass:[0,21,23],encount:[0,1,5,6,7,13,23,26,27,29],encourag:21,end:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,20,21,23,24,26,27,28,29],end_box:2,end_nod:2,end_valu:2,endpoint:[3,6],energi:[0,4,6,27,29],enet_coordinate_desc:6,enforc:12,eng:25,engin:[0,1,3,4,19,26],english:21,enocurag:21,enoent:[3,4,14],enorm:3,enough:[0,6,13,26,29],ensembl:[1,9],ensur:[0,1,2,3,5,6,11,13,23,27,28,29],entail:26,enter:[5,6,17,27,28],enthought:[0,15,19,21,26],entir:[1,3,7,9,19,23,26],entiti:[9,12,20,26],entri:[0,5,8,11,12,20,26,27,28,29],entropi:[1,3,7,10,13,26],enumer:[0,1,2,3,4,6,8,26,27,28],env:[0,1,2,3,4,6,7,8,9,11,14,23,26,28],environ:[2,9,19,21],eo:[0,6,26,29],eol:[0,26],eosfit:[0,26],epoch:[0,1,3,4,12,13,26],epsilon:[0,5,6,7,13,21,26,27,28,29],epsilon_0:[0,26],epsilon_1:[0,26],epsilon_2:[0,26],epsilon_:[0,26],epsilon_i:[0,26,27],eq:[3,13,14,20,23],eqnarrai:[3,5,6,28,29],equal:[0,1,2,3,4,5,6,8,9,11,12,13,14,15,20,21,23,26,27,28,29],equat:[1,3,4,5,6,7,8,9,10,11,13,14,16,17,18,20,21,23,29],equilibrium:[2,12],equiv:[3,13,20,23],equival:[0,1,5,7,8,11,13,19,20,26,27,28,29],erf:23,eriador:26,eridg:26,err:[0,7,10],err_:[6,29],err_sqr:2,errat:13,errno:[0,3,4,7,14],erron:2,error:[1,2,4,5,6,7,9,11,12,13,15,16,17,18,19,20,21,23,28],error_estimate_corr_tim:23,error_hidden:1,error_output:1,escap:13,especi:[1,3,9,12,13,21],essenti:[0,5,6,9,10,12,14,21,23,27],establish:[0,6,10,11,15,21,26],estim:[0,1,5,6,7,10,11,13,19,23,26,27],estimated_mse_fold:[6,29],estimated_mse_kfold:[6,29],estimated_mse_sklearn:[6,29],et:[0,2,4,15,16,17,21,25,26,27,28,29],eta0:[8,13],eta:[0,1,3,8,12,13,26],eta_:13,eta_t:13,eta_v:[0,1,3,26],etc:[0,1,3,5,7,8,9,11,12,13,14,15,19,20,21,23,27],ethic:19,etsim:29,euclidean:[0,14,27],euler:[],evalu:[0,2,3,4,5,6,9,13,21,23,26,27,28,29],evaluationform:21,evaluationgrad:21,evalut:13,even:[0,1,3,4,5,6,8,9,10,11,12,13,14,19,20,23,26,27,28,29],evenli:4,event:[5,7,10,23,28,29],eventu:[0,5,6,11,12,13,21,24,27,28,29],everi:[0,1,2,3,4,5,6,9,10,11,12,13,14,19,23,24,26,27,28,29],everyth:[4,12],everywher:[4,13],evolv:0,exact:[0,5,11,12,13,20,23,26,27],exactli:[0,3,4,6,12,19,21,27,29],exam:26,examin:[6,29],exampl:[5,11,12,13,15,16,19,20,21,23,25],exce:[1,12,13],excel:[0,1,4,5,10,26,27],except:[0,3,4,6,7,8,9,20],excess:[0,26],excit:0,exclud:[1,6,12,21,27,28,29],exclus:[0,1,3,6,23,26,29],execut:[2,5,13,27],exemplifi:13,exercic:[24,26],exercis:[5,19,21,22,24,28],exercisesweek35:17,exhaust:[6,29],exhibit:[0,5,6,8,26,27,29],exisit:[],exist:[0,1,2,3,4,5,6,7,8,9,13,14,18,20,21,26,27,28,29],exit:[5,20,27],exp:[0,1,2,5,6,7,8,10,11,12,13,15,16,21,23,26,27,28,29],exp_term:1,expand:[5,7,11,13,27],expandus:[0,7],expans:[0,3,5,8,10,12,13,26,27],expect:[0,1,5,6,7,11,12,13,15,16,19,21,26,27],expectation_value_of_h_wrt_p:23,expens:[6,10,13],experi:[0,1,6,8,13,19,21,26,27,29],experiment:[0,4,6,9,23,26,29],expert:[1,9],explain:[0,6,9,10,11,13,21,26],explained_variance_ratio_:11,explan:[],explanatori:[0,26],explicit:[0,3,6,13,20,21,26,27,28],explicitli:[0,4,8],explod:1,exploit:[0,3,12,13,26],explor:[1,4,6,8,13,19,21],expon:1,exponenti:[0,1,5,6,10,13,21,23,26,28,29],export_graphviz:9,export_text:9,exporttext:9,expos:19,express:[0,2,3,5,6,7,10,12,13,16,20,21,23,26,28,29],exptmean:23,exptvari:23,extend:[0,2,7,11,13,17,19,26],extens:[0,12,15,19,26],extent:[0,1,6,25,29],extern:[3,6,9],extra:[1,3,5,24,26,27],extract:[0,3,5,6,7,8,11,13,20,26,27],extrapol:[0,26],extrem:[0,1,4,5,6,7,8,9,13,16,20,27,28,29],extremum:13,extrins:11,ey:[0,5,6,13,14,20,26,28,29],f11:[0,26],f12:[0,26],f13:[0,26],f1:13,f1_grad:13,f1d:13,f2:13,f2_grad_x1:13,f2_grad_x1_analyt:13,f2_grad_x2:13,f2_grad_x2_analyt:13,f3:13,f3_grad:13,f3_grad_analyt:13,f4:13,f4_grad:13,f4_grad_analyt:13,f5:13,f5_grad:13,f6:13,f6_for:13,f6_for_grad:13,f6_grad_analyt:13,f6_while:13,f6_while_grad:13,f7:13,f7_grad:13,f7_grad_analyt:13,f8:13,f8_grad:13,f9:[0,13,26],f9_altern:13,f9_alternative_grad:13,f9_grad:13,f:[0,1,2,3,4,5,6,7,8,10,12,13,14,16,18,20,23,24,26,27,28,29],f_0:[3,10],f_1:[10,13],f_2:[12,13],f_3:12,f_:10,f_d:23,f_grad:13,f_grad_analyt:13,f_i:[0,6,12,16,29],f_m:[3,10],f_n:3,f_vec:2,f_wrap:2,face:13,facecolor:[6,8,23,29],facil:[0,15,19,26,29],facilit:12,fact:[0,1,3,5,9,11,12,13,26,27,28,29],factor:[0,1,3,5,6,9,10,11,13,20,23,26,27,28,29],factori:13,fade:6,fafab0:[9,10],fahimeh:[24,26],fail:[0,6,8,9,11,13,24,26,29],fail_on_error:[0,7],failur:7,fairli:[1,2,23],faisal:[16,27],fake:4,fake_loss:4,fake_output:4,fale:[],fall:[8,9,22],fals:[0,1,2,3,4,5,6,7,9,10,14,20,21,26,27,28,29],famili:[0,7,8,23],familiar:[0,3,5,6,8,15,19,20,21,23,26,28,29],famou:[6,12],far:[0,3,4,5,6,8,11,12,13,14,26,27],fashion:[0,9,10,26],fast:[1,3,6,10,12,13,19,23,26,29],faster:[1,11,13],fastest:[13,20],favor:7,favorit:23,fc:3,fd:[0,7],featur:[0,1,3,5,6,7,8,10,11,12,13,18,19,21,23,26,28,29],feature_nam:[0,1,7,9],feautur:9,fed:1,feed:[0,2,3,11,19,26],feed_forward:1,feed_forward_out:1,feed_forward_train:1,feedback:[4,26],feeddorward:4,feedforward:[1,4,12],feel:[0,5,6,11,13,15,16,19,21,24,26,28],feet:0,felt:21,fetch:[6,21],few:[1,3,4,5,9,23,26],fewer:[0,9,11,26],ffnn:[1,12],field:[0,3,6,12,19],fifth:[0,6,15,16,21,26],fig:[0,1,2,3,4,6,7,12,13,14,21,26],fig_id:[0,6,7,9,26,27,29],figaxi:23,figsiz:[0,1,2,3,4,6,7,8,9,10,26,29],figur:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,19,21,26,27,28,29],figure_id:[0,6,7,9,26,27,29],figurefil:[0,6,7,9,26,27,29],file:[0,2,3,4,5,6,7,9,14,21,26,27,28,29],file_prefix:4,filenam:26,filenotfounderror:[0,7],fill:[5,9,27],filter:[0,3,4,7],financ:0,find:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,19,21,23,26,27,28],fine:[0,14,15,26],finish:2,finit:[3,5,6,12,13,17,23,27,28,29],first:[0,1,2,3,5,6,7,8,9,10,11,13,14,15,16,17,20,21,23,24,25,29],firsteigvector:11,fit:[1,3,4,5,6,7,8,9,11,12,13,15,16,17,21,23,27,29],fit_beta:[6,27,28],fit_intercept:[0,5,6,27,28,29],fit_mod:9,fit_transform:[0,6,8,9,11,29],fiti:[0,26],five:[0,9,17,21,26,27],fix:[0,3,4,6,10,11,12,13,21,26,29],fixedloc:6,flag:4,flat:[3,4,12,13,14],flatten:[1,3,4,5,20],flexibl:[1,6,8,10,12,26,29],flip:[24,26],float32:[4,9],float64:[4,20,26,27],flop:[5,20,27],flow:[1,4,12],fluctuat:[5,28],fluid:[],fly:11,fm:[0,26],fmax:3,fmesh:13,fn:7,fname:[0,7],focu:[0,3,4,5,6,15,19,25,26,27,28,29],focus:[1,6,7,20,27,28],fold:[6,9,21],folder:[0,1,3,4,6,14,21,26,29],follow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],font:[0,7,23,26],fontdict:23,fontsiz:[1,6,8,9,10,23],fontweight:1,footprint:3,foral:[8,27],forc:[0,5,6,10,11,26,27,28],forcast:4,forecast:[4,12],forest:[0,1,9,19,26],forget:11,form:[0,3,4,5,6,7,8,9,11,12,13,17,19,20,21,23,26,27,28,29],formal:[3,4,14,23],format:[0,1,2,3,4,6,7,8,9,10,11,19,23,25,27,28,29],format_data:4,formatstrformatt:[6,13,21],formul:[4,6,11,14],formula:[3,13,23],forth:[4,12],fortran2003:[19,26],fortran2008:21,fortran90:23,fortran:[0,15,19,20,26],fortun:[0,11,27],forward:[0,3,6,19,20,26,29],foster:26,found:[1,2,3,4,5,6,12,13,14,21,26,27,28,29],foundat:[19,26],four:[4,5,6,8,12,20,21,22,24,26,28],fourier:[0,26],fourierdef1:3,fourierdef2:3,fourierseriessign:3,fourth:[12,26,27],fp:7,frac:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,23,26,27,28,29],fractal:9,fraction:9,frame:7,framework:[1,3,4,8,10,14,23],frank:[5,11],frankefunct:[5,6,11,21,27],fredli:[24,26],free:[0,6,11,13,15,16,19,20,21,23,24,25,26],freecodecamp:19,freedom:[5,28],freeli:[0,21],frequenc:[3,6,7,23,29],frequent:[0,8,9,13],frequentist:19,fresh:10,fridai:[16,17,18,24,26],friedman:[6,18,21,22,25,26],friendli:4,frodo:26,frog:3,from:[0,1,2,3,4,6,7,8,9,11,13,14,16,17,18,19,20,21,23,24,25,26],from_cod:9,from_logit:[3,4],from_tensor_slic:4,fromnumer:2,front:[0,4,5,15,16,26,27,28],fulfil:[2,5,12,27],full:[0,1,3,5,7,9,10,13,23,26,27],full_matric:[5,27],fulli:[3,6,12,22,23,29],fun:[2,19,26],fun_nam:2,func:2,functionali:11,fundament:[0,6,19,26,29],funtion:2,further:[2,7,9,26],furthermor:[0,3,5,6,7,11,12,13,17,19,21,26,27,28,29],futur:[0,4,8,9,26],futurewarn:8,fy:[15,21,22,24,25,26],fys3150:[],fys4155:21,fys5419:[25,26],fys5429:[25,26],g0:2,g:[0,1,2,3,4,6,8,9,10,11,13,23,26,28,29],g_0:2,g_1:[2,10],g_2:[2,10],g_:[2,9,10],g_analyt:2,g_dnn_ag:2,g_euler:2,g_i:2,g_m:[3,10],g_n:3,g_re:2,g_t:2,g_t_d2t:2,g_t_d2x:2,g_t_dt:2,g_t_hessian:2,g_t_hessian_func:2,g_t_jacobian:2,g_t_jacobian_func:2,g_trial:2,g_trial_deep:2,g_vec:2,gain:[1,5,7,9,10,13,27,28,29],galleri:[0,26],game:4,gamge:26,gamma1:8,gamma2:8,gamma:[0,2,8,9,10,11,13,26],gamma_0:10,gamma_1:10,gamma_1x:10,gamma_:[0,26],gamma_i:[0,8,23,26],gamma_j:13,gamma_k:13,gamma_m:10,gamma_x:[0,26],gap:[6,8],gate:[4,12],gather:[0,1,12,27],gaug:12,gaussbacksub:20,gaussian:[4,5,6,8,14,23,28,29],gaussian_point:14,gaussian_rbf:8,gave:13,gavra:26,gbc:[22,26],gca:[2,6,8,13,21],gd:1,gd_clf:10,gdclassiffiercgain:10,gdclassiffierconfus:10,gdclassiffierroc:10,gdm:13,gdregress:10,ge:[1,5,7,23,27],gen:[0,7],gen_loss:4,gen_tap:4,gender:[0,26],genener:4,gener:[0,1,2,3,5,6,8,10,11,12,13,14,15,16,17,20,21,23,25,27,28,29],generallay:12,generate_and_save_imag:4,generate_imag:4,generate_latent_point:4,generate_simple_clustering_dataset:14,generated_imag:4,generator_loss:4,generator_loss_list:4,generator_model:4,generator_optim:4,genom:19,geodes:11,geometr:[0,13,26],geometri:[5,28,29],georg:25,geotif:[6,21],geq:[2,5,8,9,13,27,28],geron:[0,15,22,25,26],get:[0,1,2,3,4,5,6,7,9,10,11,13,15,19,20,21,23,24,26,27,28,29],get_dummi:9,get_paramet:2,get_split:9,get_yaxi:8,get_yticklabel:6,getattr:2,gg:26,gibb:[19,26],gif:4,gini:10,gini_index:9,ginvers:13,git:[0,15,19,26],giter:13,github:[0,6,9,15,16,17,19,21,22,24,25,26,27],gitlab:[0,15,19,21,26],give:[0,1,2,3,5,6,7,8,9,10,12,13,14,17,19,21,23,26,27,28,29],given:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,23,26,27,28,29],global:[6,7,13,21],gloriou:[],glorot:1,gnew:13,go:[0,1,3,5,6,8,9,11,12,13,21,26,27,28,29],goal:[0,7,9,26],goe:[0,1,2,5,6,13,14,18,20,26,27,28,29],golden:13,gone:[5,27,28],gong:1,good:[1,3,4,5,6,9,10,11,13,17,19,23,25,27,28,29],goodfellow:[4,22,25,26,27,28],googl:[1,4,19,26],got:[1,6,13,21],gotten:26,gov:[6,21],gp:25,gpu:[1,13,19,26],grad:[2,13],grad_analyt:13,grade:[21,22],gradient:[0,3,4,7,8,9,12,19,26,27],gradientboostingclassifi:10,gradientboostingregressor:10,gradients_of_discrimin:4,gradients_of_gener:4,gradienttap:4,gradual:[1,14],grai:[4,6,21],graph:[1,9,11,12,13],graph_from_dot_data:9,graphic:[0,1,9,26],grasp:0,gray_r:[1,3],grayscal:3,great:[5,13],greater:[1,7,23],greatli:13,greedi:9,green:[0,3,9,23],grei:4,grid:[1,3,6,7,8,12,23,27,28,29],grossli:13,ground:[0,26],group:[0,6,7,9,14,19,21,22,24,26,29],groupbi:[0,26],grow:[1,3,9,10],growth:[0,26],gru:4,guarante:[0,4,13,23,26,27],guess:[1,4,10,13,14],guestrin:10,guid:1,guidanc:21,h1:2,h:[0,1,5,6,8,13,16,18,21,23,24,25,26,27],h_1:[2,13],h_2:[2,13],h_:[0,13,26],h_m:10,ha:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,20,21,23,26,27,28,29],haa:24,habit:[0,27],had:[0,1,6,7,13,26,29],hadamard:[1,12,13],half:[1,8,9],halv:10,hand:[0,1,2,3,5,11,12,13,15,19,20,21,22,23,24,25,26,27,28,29],handi:[3,21],handl:[0,1,2,5,9,11,19,28],handle_unknown:9,handsid:12,handwrit:12,handwritten:[1,5],happen:[1,2,3,4,5,6,10,13,23,27],hard:[1,7,8,10,13],hardcopi:[19,26],harder:[0,1,27],harmon:3,hasn:1,hassl:[0,15,19,26],hast:[19,26],hasti:[0,6,15,16,17,18,21,22,25,26,27,29],hat:[0,1,5,6,7,9,10,11,12,13,17,18,20,21,27,28,29],have:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,26,27,28,29],haven:1,he:7,head:[0,4,10,23],header:[0,26],heads_proba:10,health:[0,27],hear:[0,13,26],heart:[0,7,26],heatmap:[0,1,3,7,26],heavili:0,heavisid:1,height:[1,3,6,27,28],held:13,help:[0,1,4,12,13,16,21,26],helper:[4,14],henc:[0,5,6,8,9,10,12,13,18,21,26,27,28,29],henrik:[24,26],her:7,here:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,26,27,28,29],hereaft:[0,8,12,26],hermitian:20,hessenberg:20,hessian:[0,2,5,13,16,28],heterogen:[9,10],hi:7,hidden:[1,3,4,12],hidden_bia:1,hidden_bias_gradi:1,hidden_layer_s:[0,1,26],hidden_neuron:4,hidden_weight:1,hidden_weights_gradi:1,hierarch:[5,27,28],high:[0,1,2,3,4,5,6,9,10,11,13,14,19,20,21,26,27,29],higher:[0,1,3,5,6,8,13,21,26,27,28,29],highest:[1,2],highli:[0,3,4,10,18,19,20,25,26,27,28,29],highwai:0,hing:8,hint:[13,16,27,28],hip:19,hire:0,hist:[4,6,7,23,29],histogram:[0,6,7,23],histor:[7,11],histori:[3,4,12],hitherto:[5,28],hjorth:[24,26,27,28,29],hobbi:23,hoc:[5,27],hoff:25,hold:[1,3,6,13,14,29],holder:[0,26],holomorphic_grad:2,home:0,homepag:[21,26],homework:[6,13],homogen:[1,3,9,10,13],honchar:2,hopefulli:[0,11,23,26],horizont:11,hors:[3,7],hot:[1,9],hour:[1,19,22,23,24,26,29],how:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,19,20,21,23,26,27,28,29],howev:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,19,20,21,23,26,27,28,29],hspace:[0,4,8,10,23,26],hstack:1,htf:[22,26],html:[0,9,11,17,19,21,22,24,25,26,28],http:[0,3,4,6,9,11,13,16,17,19,20,21,22,24,25,26,27,28],huang:[0,26],huber:[0,26],huge:[1,3,4,19],human:[0,1,3,6,9,12,27,28],humid:9,hundr:1,hungri:1,huse:26,hybrid:22,hydrogen:[0,26],hyper:[],hyperbol:[1,4,12],hyperparam:8,hyperparamet:[3,4,5,6,9,13,17,26,27,28,29],hyperplan:11,i0:[0,26],i1:[0,6,8,12,26,27,28,29],i2:[0,8,12,26],i3:[0,12,26],i5:[0,26],i:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,23,24,26,27,28,29],i_1:[5,6,28,29],i_2:[5,6,28,29],i_:13,ian:25,ic:1,id:[7,13],ida:[24,26],idea:[0,1,2,3,4,6,9,10,12,13,20,21,27,28,29],ideal:[0,2,6,8,13,23,26,29],idem:[6,29],ident:[5,6,12,13,17,20,21,27],identical:[28,29],identifi:[0,1,7,9,11,12,13,14,26,27],ieor:23,ifi:25,ifs:[19,26],ignor:[0,1,3,9,27],ii:[20,23],iii:[20,26],ij:[0,1,3,6,8,12,14,16,18,20,21,23,26,27,28,29],ik:[0,20,26,27],illustr:[5,7,10,12,13,14,19,26,29],im:6,imag:[1,3,4,6,9,11,12,14,25,26],image_at_epoch_:4,image_batch:4,image_height:3,image_path:[0,6,7,9,26,27,29],image_width:3,imageio:[6,21],images_from_seed_imag:4,imagin:1,immedi:[0,3,4,6,15,19,26],implement:[0,2,3,4,5,6,8,9,10,11,12,13,14,17,21,23,26,27,28,29],impli:[3,5,6,7,13,20,27,28,29],implicit:3,implicitli:[11,23],importantli:3,impos:[0,6,11,12,26],imposs:[0,5,26,27],impress:[0,12,26],improv:[0,4,5,9,10,11,13,21,27],impur:9,imread:[6,21],imshow:[1,3,4,6,21],in3050:[25,26],in3310:26,in4080:[25,26],in4300:[25,26],in4310:25,in5400:3,in5550:25,in_out_neuron:4,inaccur:13,inact:12,inadequ:[0,26],inch:[6,27,28],includ:[0,1,2,3,4,5,6,7,11,12,15,16,17,19,21,23,24,25,26,27,28,29],include_bia:[6,9,29],inclus:17,incom:12,incorrect:1,incoveni:8,increas:[0,1,3,4,5,6,8,9,11,12,13,21,23,26,27,28,29],increasingli:23,ind:6,inde:[0,2,4,5,6,13,26,27],indefinit:4,independ:[0,5,6,7,8,12,13,23,26,27],index:[0,1,3,4,10,14,19,20,23,25,26],index_col:[0,26],indic:[0,1,3,4,5,6,9,10,11,13,16,21,26,27],indispens:[6,29],individu:[1,6,7,10,12,23,26,27,29],indu:0,indx1:2,indx2:2,indx3:2,indx:20,ineffici:[3,13],inequ:[8,13],inertia:13,inf1000:[19,26],inf1100:[19,26],inf1100l:[19,26],inf1110:[19,26],inf3000:26,infeas:9,infer:[0,1,4,6,25,26,29],inferenc:1,infil:[0,6,7,9,26,29],infin:[5,6,7,11,18,27,28,29],infinit:3,infinitesim:23,influenc:[6,10,29],influenti:1,info:26,inform:[0,1,3,4,6,9,11,12,13,14,20,21,25,26,29],infti:[3,6,13,23,29],ingeni:13,ingrad:2,ingredi:[0,9,26],inher:[6,29],inherit:[20,26],initi:[0,1,2,6,10,13,14,20,23,26,29],inject:14,inlin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,20,21,23,26,27,28,29],inner:[0,13,27],inp:4,inplac:13,input:[0,1,3,4,5,6,7,8,12,13,14,21,23,26,27,28,29],input_dim:1,input_shap:[3,4],inputs:1,inputs_shuffl:[0,1,27],insert:[3,5,6,8,10,23,27,28,29],insid:[0,4,7],insight:[0,1,5,19,26,27,28,29],insist:[6,13,27,28],inspir:[0,1,12,26],instabl:2,instal:[0,1,5,6,9,15],instanc:[0,1,2,4,6,9,11,13,26,27,29],instanti:10,instead:[0,1,2,3,4,5,6,8,9,11,13,14,20,21,23,26,27,29],institut:1,instruct:[0,1,15,16,26],int32:10,int_0:23,int_:[3,6,23,29],int_a:23,intak:[0,27],integ:[1,2,13,14,20,23,26],integer_vector:1,integr:[3,6,23,26,29],intellig:[0,14,25,26],intend:10,intens:1,intention:14,interact:[0,6,9,12,19,21,26],intercept:[0,6,8,11,13,16,21,26,28,29],intercept_:[0,6,8,9,13,26,27,28,29],interceptol:29,interceptridg:29,interchang:[5,12,20,28,29],interconnect:1,interest:[0,1,2,3,4,5,6,7,8,9,12,19,21,23,26,27,28,29],interfac:[0,1,20,27],interior:[0,9,26],intermedi:[20,27],intern:[1,10,12],interpol:[1,3,4,6,12,21],interpr:[5,27,28],interpret:[0,1,6,9,10,12,13,17,20,21,23],interv:[0,3,5,6,7,13,18,21,23,26,27,28],intial:13,intract:[0,4,27],intrins:[3,11,20,23,26],intro:[19,25,26],introduc:[0,1,5,6,8,10,12,17,20,21,23,26,29],introduct:[1,2,4,13,17,25,27],introductori:[0,4,20,25,26,27],intuit:[0,5,6,8,12,13,21,26,28,29],inv:[0,5,13,26,27,28],invalid:[1,8],invalu:[0,13,15,19,26],invari:1,invd:[5,28],inver:8,invers:[0,3,6,13,15,16,17,21,26,27],inverse_transform:8,invert:[0,5,7,10,13,26,28],invh:13,invok:[0,8],involv:[0,2,6,7,11,12,27,29],io:[0,17,19,21,22,24,25,26,27],ip:[0,8,23,26],ipca:11,ipykernel_48918:1,ipykernel_49101:6,ipykernel_49291:26,ipykernel_85796:29,ipynb:[19,21,26],ipython:[0,5,7,9,11,14,15,19,21,26,27],iq:[6,29],iri:[8,9],irreduc:[6,29],irrelev:[5,27],irrespect:[0,26],irvin:[],isbox:2,iscomplexobj:2,isn:[5,28,29],isnul:0,isomap:11,isotop:[26,29],issu:[1,9,20,28],it_arrai:13,item:[0,13,26],items:[20,26],iter:[1,2,4,6,8,9,11,13,14,23,29],its:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,23,26,28,29],itself:[5,6,12,21,23,27,28,29],j1:20,j:[0,1,2,3,4,5,6,8,9,11,12,13,14,16,17,18,20,21,23,25,26,27,28,29],j_:6,j_lasso_sk:6,j_ridge_sk:6,j_sk:6,jackknif:[6,19,26,29],jacobian:[2,13],jacobian_shap:2,jakobsen:24,jason:4,jax:[19,26],jensen:[24,26,27,28,29],jerom:[18,21,25],ji:[12,20],jit:13,jj:[0,5,6,26,28,29],jk:[0,1,6,12,20,26],jl:[0,26],jm:20,jnp:13,job:[2,8,10],johansen:26,join:[0,3,4,6,7,9,14,26,27,29],joint:[4,5,28,29],judg:13,judgement:[6,21],julia:[19,20,21],jump:[21,23],junk:4,jupit:26,jupyt:[0,9,15,19,21,25,26,29],just:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,19,21,23,26,27,28,29],justif:0,justifi:[3,10],k0:7,k1:7,k:[0,1,3,5,6,7,8,9,10,11,12,13,14,19,20,21,23,24,26,27,28],kaggl:[6,21],kappa_d:23,karl:[24,26],karush:8,katrin:[24,26],keep:[0,1,4,5,6,11,13,14,20,21,26,27,28,29],keepdim:[1,2,6,10,20,29],kei:[0,1,3,6,12,27],kept:[4,6,14,29],kera:[0,4,19,21,26],kernel:[0,1,3,4,14,19,26,27],kernel_librari:[3,4,14],kernel_regular:[1,3],kernel_s:4,kernelpca:11,kev:[0,26],kevin:[25,26],keyboardinterrupt:2,keyword:[6,13,20,21,26],kfold:[6,29],kg:1,ki:20,kick:[1,13],kiener:2,kilomet:[6,27,28],kind:[0,2,3,4,8,12,13,14,26,27],kj:[6,12,20,27,28,29],kjm:[19,26],kkt:8,kl:23,km:[12,26],kmean:14,kmeanspoint:14,kn_k:14,know:[0,1,2,5,6,8,13,19,26,27,28],knowledg:[0,19,26],known:[1,3,4,5,6,7,8,9,12,20,21,23,25,27,28,29],kondev:[0,26],kp:23,kpca:11,kroneck:14,kuhn:8,kvalsund:[24,26],kwarg:2,kwown:[0,26],l0:7,l1:[0,1,3,7,26],l1_l2:[1,3],l1regl:5,l2:[1,3],l:[0,1,2,3,5,6,7,8,10,11,12,13,20,21,23,26,27,29],l_1:7,l_2:[7,13],l_:20,l_j:12,la:13,la_i:12,la_k:12,lab:[19,21,26],label:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,19,20,21,23,26,27,28,29],labelencod:[7,10],labels:[6,8,9],labels_shuffl:[0,1,27],laboratori:[22,28],lack:[0,26],lagari:2,lagrang:[8,11],lambda:[0,1,2,3,5,6,7,8,10,12,13,17,18,21,23,26,27,28,29],lambda_0:11,lambda_1:[5,8,11,27],lambda_2:[8,11],lambda_:11,lambda_i:[8,11],lambda_iy_i:8,lambda_jy_iy_j:8,lambda_k:8,lambda_n:[5,8,27],lamda:1,land:[0,8],landmark:8,landscap:13,langl:[0,6,11,23,26,27],languag:[0,1,4,8,15,19,20,21,25,26],lapack:[20,26],laplac:[5,28,29],laptop:19,larg:[0,1,2,4,5,6,8,9,10,11,13,15,19,20,21,23,25,26,27,29],larger:[0,3,5,6,8,10,11,13,17,23,26,27,28,29],largest:[4,8,11],lasso:[0,7,19,26],lasso_sk:6,last:[0,1,2,3,4,5,6,7,8,10,12,13,14,17,18,20,21,23,24,26,28],latent:4,latent_dim:4,latent_point:4,latent_space_value_rang:4,later:[0,1,4,7,8,12,13,14,15,19,21,26],latest:[4,19],latest_checkpoint:4,latex:26,latter:[0,3,6,7,8,11,13,16,20,21,23,26,27,28,29],lattic:12,law:0,layer:[0,4,13,26],lbfg:[7,9,10,11],lcc:[5,6,28,29],lda:11,ldot:[0,6,11,21,26,29],le:[5,7,10,13,17,23,27,28],lead:[0,1,3,5,6,7,8,9,10,11,12,13,16,17,20,23,26,27,28,29],leaf:9,leaki:1,leakyrelu:4,lear:13,learn:[3,4,5,6,7,8,9,10,12,18,20,22,24,25],learnabl:3,learner:10,learnig:26,learning_r:[8,10],learning_rate_init:[0,1,26],learning_schedul:13,learnt:21,least:[0,2,7,8,10,11,15,16,17,19,20,23,29],leat:13,leav:[0,1,3,5,6,9,11,26,28,29],lectur:[0,1,5,10,11,12,13,15,17,19,20,21,22,24,25],lecturenot:[0,17,19,21,25,26],left:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,16,17,20,21,23,26,27,28,29],leftarrow:[8,12],legend:[0,2,3,4,5,6,7,8,9,10,13,26,27,28,29],len:[0,1,2,3,4,5,6,8,9,10,11,12,20,26,27,28,29],length:[0,1,2,3,4,8,9,13,16,19,26,27],length_of_sequ:4,leq:[0,5,7,8,13,14,23,26,27,28],less:[0,1,3,4,5,6,8,9,13,19,23,26,27,28,29],lessen:1,let:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,20,23,26,27,28,29],letter:[0,16,20,23,26,27],level:[0,1,5,6,9,19,20,21,22,24,26,29],li:[8,11],lib:[0,1,2,3,4,6,7,8,9,11,14,26,28],liblinear:[8,10],libmetal_plugin:[3,4,14],librari:[0,1,2,3,4,5,6,7,9,10,11,14,15,20,21,23,25,27,28,29],library_loc:[3,4,14],licens:[0,1,15,19,21,26],lie:[0,6,11,23,26,27,29],life:[0,1,8,12,26],lifetim:13,like:[0,1,2,3,4,5,6,7,9,10,11,12,13,15,16,19,20,21,23,26,27,28,29],likelihood:[0,1,5,9,26,27],lim_:23,lima:24,limit:[0,5,6,8,9,11,12,20,21,26,27],lin_clf:8,lin_model:0,lin_reg:9,linalg:[0,2,5,6,8,11,13,20,23,26,27,28,29],line1:8,line2:8,line3:8,line:[0,1,2,3,4,6,7,8,10,11,13,14,21,26,27,28,29],linear:[1,3,5,6,7,9,10,11,12,17,18,19,21,23,29],linear_model:[0,5,6,7,8,9,10,11,13,26,27,28,29],linear_regress:[6,29],linearli:[5,27],linearloc:[6,13,21],linearregress:[0,6,7,9,26,27,28,29],linearsvc:8,lineat:28,liner:[1,3],linerar:10,linewidth:[0,2,4,6,8,9,10,21,29],link:[0,4,9,12,19,21,24,26],linlag:[5,28],linpack:[20,26],linreg:[0,26],linspac:[0,2,3,4,6,8,9,10,13,15,16,20,23,26,27,28,29],linu:4,linux:[0,1,15,19,21,26],liquid:[0,26],list:[0,1,2,3,4,7,9,19,21,26,27],listcomp:2,listedcolormap:[9,10],literatur:[1,7,14,25,29],littl:[1,3,9,12],live:8,ll:[0,23,26,27],lle:[0,27],lloyd:[4,14],lmb:[0,2,5,6,28,29],lmbd:[0,1,3,26],lmbd_val:[0,1,3,26],lmbda:13,ln:[1,13],load:[0,1,3,4,6,7,9,10,14,21],load_boston:0,load_breast_canc:[1,7,9,10,11],load_data:[3,4],load_digit:[1,3],load_iri:[8,9],load_librari:[3,4,14],load_pluggable_device_librari:[3,4,14],loc:[0,3,6,7,8,9,10,26,29],local:[0,1,2,3,7,12,13,27],locat:[2,3,8],log10:[0,5,6,28,29],log:[0,1,2,4,5,6,7,9,10,11,13,20,21,26,27,28,29],log_:[0,26],log_clf:10,logarithm:[0,5,7,20,26,28,29],logbook:21,logic:[0,1,9,26],logist:[0,1,2,8,9,10,11,12,13,19,27],logisticregress:[7,9,10,11],logit:7,logreg:[7,9,10,11],logspac:[0,1,3,5,6,26,28,29],longer:[2,3,8,10,14,20,23,26],loocv:[6,29],look:[0,1,2,3,4,5,6,7,8,9,10,11,13,16,18,20,21,23,26,27,28,29],loop:[1,4,6,10,12,14,19,20,26,29],lose:1,loss:[0,1,3,4,5,6,7,8,10,11,13,20,21,26,28,29],loss_fil:4,lossfil:4,lost:4,lot:[0,1,4,6,29],low:[0,6,9,10,11,21,26,27,29],lower:[0,1,3,6,9,10,16,20,27],lowercas:[20,26],lowest:[9,13,23],lr:[1,3,4,10],lstat:0,lstm:4,lstm_2layer:4,lstsq:[0,26,27],lt:[6,29],lu:[0,5,26,27],lubksb:20,luckili:2,ludcmp:20,lux:20,lvert:1,lw:[0,26],m:[0,1,2,3,5,6,8,9,10,11,12,13,20,22,23,24,25,26,27,28,29],m_1:14,m_:[9,12],m_h:[0,26],m_k:14,m_l:12,m_n:[0,26],m_p:[0,26],m_t:13,ma:11,machin:[1,3,4,5,6,7,9,10,11,12,15,20,22,25,27,28,29],machinelearn:[0,6,16,17,19,21,22,24,25,26],mackai:25,made:[0,1,3,4,5,6,7,9,11,12,18,21,26,27],mae:[0,26],magic:4,magnitud:[1,6,7,13,27,28],mai:[0,1,2,3,5,6,7,8,9,11,12,13,18,19,20,21,23,26,27,28,29],mail:[22,24],main:[0,1,3,4,5,6,7,9,20,21,25,27],mainli:[0,5,6,7,9,26,27,28,29],maintain:[6,29],major:[1,6,9,10,13,20,26,29],make:[1,2,3,4,5,6,7,8,11,12,13,19,20,21,23,25,28,29],make_axes_locat:6,make_moon:[8,9,10],make_pipelin:[0,6,10,27,29],make_vjp:2,makedir:[0,6,7,9,26,27,29],makeplot:[0,26],malcondit:20,malign:[1,7,9],mammographi:[5,28,29],manag:[0,2,3,15,19,21,26],mandatori:[24,26],mani:[0,1,3,4,5,6,7,8,9,11,13,14,19,20,21,23,25,26,27,28,29],manifold:11,manner:3,manual:[6,27,28],map:[0,1,2,6,7,8,11,12,14,21,23,26],marc:27,margin:[0,5,8],marit:[0,26],mark:26,marker:[0,7,20,26],markov:[19,26],marsaglia:23,mass:[0,1,5,13,27],massag:[0,26],masses2016:[0,26],masses2016ol:[0,26],masses2016tre:0,masseval2016:[0,26],master:[6,16,21,22,24],mat1100:[19,26],mat1110:[19,26],mat1120:[19,26],mat:[19,26],match:[1,4,5,13,14,27],materi:[4,5,7,13,17,20,24],math:[3,7,12,13,20,23,25,26,29],mathbb:[0,4,5,6,7,8,11,12,13,14,17,18,20,21,23,26,27,28,29],mathbf:[0,5,6,7,8,13,18,20,21,26,27,28,29],mathcal:[1,5,6,7,13,21,28,29],matheemat:3,mathemat:[0,6,11,12,13,17,19,20,23,25,26,28,29],mathemati:26,mathmlbook:16,mathrm:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,17,18,21,23,26,27,28,29],matmul:[1,2,5,28],matnat:25,matplotlib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,19,20,21,23,26,27,28,29],matric:[0,1,3,4,6,7,8,11,13,16,17,19,27],matrix:[0,2,3,4,6,7,8,10,13,15,16,17,18,21,23,29],matshow:1,matter:[2,3,13,27],max:[0,1,2,3,4,9,10,12,13,24,26],max_depth:[0,9,10],max_diff1:2,max_diff2:2,max_diff:2,max_it:[0,1,8,9,11,13,26],max_iter:14,max_leaf_nod:10,max_sampl:10,maxdegre:[0,6,10,27,29],maxdepth:10,maxim:[1,4,5,7,8,11,28,29],maximum:[0,1,2,3,5,7,8,9,10,13,14,26,27],maxpolydegre:[5,6,28,29],maxpooling2d:3,mbox:[5,6,18,21,27,28,29],mcculloch:12,md:[11,21],mdoel:4,mean:[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20,21,23,26,29],mean_absolute_error:[0,26],mean_divisor:14,mean_i:23,mean_matrix:14,mean_squared_error:[0,4,6,7,10,26,27,29],mean_squared_log_error:[0,26],mean_vector:14,mean_x:23,meaning:[0,4,7,26],meansquarederror:[0,26],meant:[2,3,7,10,13],measur:[0,1,2,5,6,9,11,12,14,21,23,26,27,28,29],mechan:[0,4,23,26],median:[0,26,27],medicin:12,medium:[4,8,13],medv:0,meet:[0,24],mehta:[0,26,27,28],mek4270:[],memori:[3,4,11,12,13,20],mention:[0,12,13,21,23,26],mere:[0,15,26],meshgrid:[2,5,6,8,9,10,11,21,27],messag:[5,13],messi:2,met:[0,3,8,27],metadata:2,meteorolog:9,meter:[6,27,28],method:[0,1,2,3,4,5,7,8,11,12,14,16,17,18,19,20,23,25,27,28],metion:[6,21],metric:[0,1,3,6,7,9,10,14,15,16,26,27,29],metropoli:[19,26],mev:[0,23,26],mgd:13,mglearn:[19,26],mgrid:13,mhjensen:[1,2,3,4,6,8,9,11,14],mi:10,mia:[24,26],michael:[],michigan:[26,28,29],microsoft:25,mid:1,midel:4,midnight:[16,17,18],midpoint:9,might:[0,1,2,4,6,9,13,27,28],mild:9,millimet:[6,27,28],million:[0,26,27],mimic:12,min:[0,2,5,8,9],min_:[0,2,5,14,17,26,27,28],min_samples_leaf:9,mind:[0,6,13,21,26,27,28,29],mindboard:4,mine:[19,26],mini:[1,11,12,13],minibatch:[1,11,13],minibathc:13,miniforge3:[0,1,2,3,4,6,7,8,9,11,14,26,28],minim:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,17,18,21,27,28,29],minima:[0,1,7,13,26],minimum:[0,1,2,6,8,9,11,13,27,29],minmaxscal:[0,27],minor:23,minst:1,minu:7,mirjalili:26,mirror:9,misc:[6,21],misclassif:[8,9,10],misclassifi:[8,10],miser:0,mismatch:1,miss:[0,7,10],mistak:4,mit:25,mix:[1,2,26],mixtur:13,mk:[9,20],mkdir:[0,6,7,9,26,27,29],ml:[0,1,10,13,20,21,27],mlab:23,mlbook:26,mle:[5,7],mlp:1,mlpclassifi:1,mlpregressor:[0,26],mm:20,mml:27,mn:[12,23],mnist:[1,11],mod:23,mode:[22,24,26],model:[2,3,5,7,8,9,10,11,13,14,15,16,18,19,21,23,25,27,28,29],model_select:[0,1,3,5,6,7,9,10,11,26,27,28,29],moder:10,modern:[0,6,7,19,26,29],modif:[2,12,13],modifi:[0,1,3,5,7,8,10,12,13,26,27,28],modul:[0,9,11,20,26,28],modular:23,modulo:23,moe:[11,27],moment:[5,6,13,23,28,29],momentum:[],mondai:[26,29],monitor:13,monoton:[5,12,23,28,29],mont:[0,6,19,23,25,26,29],moor:[5,6,28],more:[0,1,2,4,5,7,8,9,10,11,12,13,14,18,19,23],moreov:[0,3],morten:[24,26,27,28,29],most:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,19,21,23,26,27,28,29],mostli:[1,11],motion:[0,13],motiv:[1,4],move:[0,4,5,6,7,9,12,13,14,21,23,27,28,29],mpl:[0,7,26],mpl_toolkit:[2,6,13,21],mplot3d:[2,6,13,21],mplregressor:1,mse:[0,4,5,6,9,10,15,16,17,21,26,27,28,29],mse_simpletre:10,mselassopredict:[5,28],mselassotrain:[5,28],mseownridgepredict:[6,28],msepredict:[5,28],mseridgepredict:[0,5,6,28],msetrain:[5,28],msle:[0,26],mt:[7,12],mu0:23,mu1:23,mu2:23,mu:[0,6,11,13,23,26,29],mu_1:27,mu_:[6,23,27,28,29],mu_i:[6,27,28,29],mu_n:11,mu_x:23,much:[0,1,2,3,4,5,6,8,9,10,11,12,13,20,21,23,26,27,28,29],multi:[0,1,3,7,19,26],multiclass:[1,7],multidimension:[11,12,26],multilay:1,multinomi:7,multipl:[2,4,5,6,7,12,13,23,27,29],multipli:[3,5,6,11,13,20,23,27,28,29],multiplum:8,multivari:[0,2,10,11,19,23,26],multivariate_norm:[11,14],murphi:[11,25,26],must:[1,2,5,6,8,10,12,13,14,23,27,29],mutat:7,mutual:[1,3,6,13,29],mx_:23,myenv:[0,1,2,3,4,6,7,8,9,11,14,26,28],myriad:[0,15,19,26],mz1:23,mz2:23,n1:20,n2:20,n:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,20,21,23,26,27,28,29],n_0:[12,23],n_:[1,2,3,8,12,23],n_boostrap:[6,10,29],n_bootstrap:[6,29],n_categori:[1,3],n_cluster:14,n_compon:11,n_epoch:13,n_estim:10,n_examples_to_gener:4,n_featur:1,n_filter:3,n_hidden:2,n_hidden_neuron:[0,1,26],n_i:23,n_input:[0,1,3,27],n_instanc:9,n_iter_i:[9,11],n_job:10,n_k:14,n_l:[12,23],n_layer:1,n_m:9,n_neuron:1,n_neurons_connect:3,n_neurons_layer1:1,n_neurons_layer2:1,n_point:14,n_sampl:[6,8,9,10,14,29],n_split:[6,29],n_step:4,n_t:2,n_x:2,nabla:[1,13],nabla_:[2,13],nabla_w:13,nag:13,naimi:[0,26],naiv:7,naive_kmean:14,najafi:[24,26],name:[0,1,3,4,5,6,7,8,9,10,12,13,14,15,19,20,21,23,24,26,27,28,29],nameerror:[10,29],namespac:[3,4,14],narrow:13,nary_f:2,nary_op_arg:2,nary_op_kwarg:2,nary_oper:2,nation:[1,5,28,29],nativ:[19,26],natur:[0,1,4,8,9,12,13,21,23,25,26],navier:12,nb:23,nb_:20,nbconvert:26,nbviewer:9,nd:14,ndarrai:[2,6],ne:[9,10,20,23,27],nearest:[1,3,6,11],nearli:13,neat:26,neccesari:[6,29],necess:2,necessari:[0,1,3,4,8,14,26],necessarili:[0,4,11,23,26],necesserali:[5,28,29],neck:7,need:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,23,27,28,29],neg:[0,1,3,5,6,7,10,13,20,23,26,28,29],neg_mean_squared_error:[6,29],neglect:23,neglig:23,neighbor:[3,6,11],neither:[4,13],neq:[13,14,23],nervou:12,nest:[2,9,12],nesterov:13,net:[2,4,12],netlib:[20,26],network:[0,9,13,19,25,27],networkd:[],neural:[0,13,19,25,27],neural_network:[0,1,2,26],neuralnetwork:1,neuron:[1,2,3,4,12],neutral:[0,26],neutron:[0,26],never:[1,4,6,9,23,29],new_box:2,new_chang:13,new_hobbit:26,new_root:2,new_trac:2,newaxi:[0,3,6,9,29],newli:[0,26],newton:[1,7,8,13,23],next:[0,1,2,3,4,5,6,7,8,9,13,14,26,27,28],next_guess:13,next_input:4,ng:1,ngini:9,ni:14,nice:[0,1,5,11,26,27,28,29],nielsen:[],niter:13,nitric:0,nlambda:[0,5,6,28,29],nlp:25,nm:23,nm_n:[0,26],nmse:[6,29],nn:[2,5,6,12,20,28,29],nn_model:1,nnmin:2,node:[1,2,3,9,10,12],node_constructor:2,nois:[0,4,5,6,8,9,10,13,15,16,21,26,27,28,29],noise_dimens:4,noisi:[1,6,21,29],non:[0,1,3,5,6,7,9,10,11,12,13,14,20,23,26,27,28,29],noncommerci:[],none:[0,1,2,4,5,9,10,13,23,26,27,28,29],nonlinear:[3,6,8,9,11,12,29],nonneg:[6,9,13,29],nonparametr:6,nonsens:23,nonsingular:20,nonumb:[3,7,8,13,20],nor:[1,4,13],norm:[0,1,5,6,8,11,13,17,26,27,28,29],normal:[3,4,5,6,7,8,9,10,11,12,13,15,16,18,19,20,21,23,26,27,28],normali:[20,26],norwai:[6,21,26],notat:[0,2,5,6,13,14,23,26,27,28,29],note:[0,1,2,3,4,5,6,7,8,11,12,13,14,15,16,19,20,23,25,26],notebook:[0,1,3,9,15,19,21,26,29],notfounderror:[3,4,14],noth:[1,2,5,8,12,14,23,27,28],notic:[4,5,12,13,20,23,26,28],notimplementederror:2,notion:3,nov:[],novel:[3,6,10],novemb:[1,22,24,26],now:[0,2,4,5,6,7,8,10,11,12,14,15,16,17,19,20,21,23,26,27],nowadai:[0,1,3,9,19,26],nox:0,np:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,20,21,23,26,27,28,29],npr:2,nsampl:[6,9,29],nt:2,ntrained_model:[6,28],nu:23,nuclear:[5,27],nuclei:[0,23,26],nucleon:[0,26],nucleu:[0,26],num:4,num_coordin:2,num_hidden_neuron:2,num_it:2,num_neuron:2,num_neurons_hidden:2,num_point:2,num_tre:10,num_valu:2,number:[1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,24,26,28,29],numberid:7,numberparamet:3,numer:[0,5,6,9,10,11,12,13,17,19,20,25,26,27,28,29],numpi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,19,21,23,27,28,29],numpy_vjp:2,numpy_wrapp:2,nunmpi:[5,27],nvalu:9,nx:2,nx_test:[6,28],nx_train:[6,28],nx_train_mean:[6,28],ny:23,ny_pr:[6,28],ny_train:[6,28],ny_train_mean:[6,28],o:[0,6,7,8,9,11,15,20,24,25,26],obei:[6,11,13,27,28,29],object:[0,1,2,4,6,8,10,20,26],obliqu:[5,27],observ:[0,1,3,5,6,7,8,9,10,11,12,13,14,23,28,29],obtain:[0,1,5,6,7,8,9,10,12,13,14,17,20,21,23,26,27,28,29],obviou:[5,6,11,23,27],obviouli:26,obvious:[0,4,5,6,20,26,28,29],oc:27,occupi:0,occur:[0,6,8,9,20,23,26],octob:[22,24,26],od:0,odd:[0,3,7,26,27],odenum:2,odesi:2,odin:26,oen:0,off:[1,3,4,5,9,13,23,28,29],offer:[6,11,19,20,22,24,26,29],offic:[24,26],offici:[22,26],often:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,16,19,20,21,23,26,27,29],ofter:[20,26],ol:[0,13,15,16,17,18,26,27],old:[1,5,10,13,28,29],ols_fit:29,ols_fit_beta:29,ols_sk:6,ols_svd:6,olsbeta:[0,5,28],omega:[2,3,6],omega_0:3,omit:[0,5,26,27,28,29],onc:[1,6,9,11,13,29],one:[0,1,3,4,5,6,7,8,9,10,11,13,14,19,20,21,23,24,26,27,28,29],onehot:1,onehot_vector:1,onehotencod:9,ones:[0,2,5,6,8,9,10,11,13,20,21,26,27,28,29],ones_lik:4,ong:27,onl:3,onli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21,23,26,27,28,29],onlin:[11,22],onto:[5,11,27],open:[0,1,4,6,7,9,15,19,21,22,24,26,29],oper:[0,1,3,5,6,10,11,12,13,15,19,23,26,27,28,29],operation:23,oplu:23,opmiz:13,opportun:0,oppos:[6,13],opposit:[1,5,8,27],opt:[1,5,26,28],optim:[0,2,3,4,5,6,7,9,10,11,14,15,16,17,18,21,28,29],optimis:[1,3],option:[0,1,3,5,6,8,9,11,20,21,27,28,29],optmiz:[1,8,13,27],oral:26,orang:0,order:[0,1,2,3,5,6,7,8,9,10,11,12,15,16,20,21,23,26,27,28,29],ordinari:[0,2,3,7,11,13,15,16,17,19,29],ordinrari:29,oreilli:[25,26],org:[0,3,4,9,11,19,20,21,25,26,28],organ:[6,7,10,20,29],orient:[1,5,23,27,28],origin:[0,3,5,6,8,11,12,13,20,26,27,29],orthogn:[5,27],orthogon:[0,5,6,8,11,13,17,20,26,27,28],orthonorm:[5,27,28],os:[0,1,4,5,6,7,8,9,24,26,27,28,29],oscar:1,oscil:[3,13],oserror:[0,3,4,7,14],oslo:[0,15,19,21,22,24,26,27,28,29],osx:[0,15,19,21,26],other:[0,1,2,3,5,6,7,8,10,13,14,15,19,22,23,24,25,28,29],otherwis:[0,1,4,7,13,20,26],ouput:[5,7,12,28,29],our:[1,2,3,6,7,8,9,10,12,14,15,16,17,18,19,20,21,23,28,29],ourmodel:0,ourselv:[0,5,6,8,11,13,26,27,28,29],out:[0,1,2,4,5,6,7,8,9,10,11,12,13,16,19,20,21,23,26,27,28,29],out_fil:9,outcom:[0,7,9,10,12,23,27],outdoor:9,outer:[6,12,13],outfil:4,outgrad:2,outlier:[0,8,26,27],outlin:[6,10,11,29],outlook:9,outperform:10,output:[0,1,3,4,5,6,7,8,9,10,12,13,16,20,21,23,26,27,28,29],output_bia:1,output_bias_gradi:1,output_shap:4,output_weight:1,output_weights_gradi:1,outputlayer1:12,outputlayer2:12,outsid:4,over1:13,over:[0,1,3,4,5,6,9,10,12,13,20,21,26,27,28,29],overal:[1,10],overcast:9,overcom:[12,13],overdetermin:[0,26],overfit:[0,1,3,6,9,10,13,29],overflow:[1,5,28,29],overhead:12,overlap:[3,7,8,9],overlin:[0,5,6,9,10,11,14,20,26,27,28,29],overst:0,overtrain:4,overview:3,own:[4,5,6,8,12,13,19,20,21,28,29],owner:0,ownmsepredict:0,ownmsetrain:0,ownridgebeta:[0,6,28],ownypredictridg:0,ownytilderidg:0,oxid:0,p0:2,p1:2,p:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,17,20,23,26,27,28,29],p_:[2,4,8,9],p_hidden:2,p_i:[5,23,28,29],p_j:23,p_n:23,p_output:2,p_x:23,pack:[0,26],packag:[0,1,2,3,4,5,6,7,8,9,11,13,14,15,19,21,23,27,28],packtpub:26,packtpublish:26,pad:[3,4],page:[0,9,19,26,28],pai:[0,1,9,13],paid:[],pair:[0,2,3,9,19,23,26],panda:[0,4,5,6,7,9,11,15,19,21,28,29],panel:26,paper:1,paradigm:[0,26],parallel:[10,13,19,20,26],param:2,paramat:2,paramet:[0,1,2,3,4,5,6,7,8,9,10,12,13,16,17,18,21,23,28,29],parameter:[0,6,10,21,26,27],parametr:[0,6,15,16,26,27,29],paramt:[3,5,28,29],parent:2,parent_argnum:2,part:[0,1,3,5,6,10,17,18,20,22,23,24,26,28,29],partial:[0,1,5,6,7,8,10,11,12,13,16,23,26,27,28,29],particip:[19,22,24,26],particl:[0,4,13,23,26],particular:[0,1,2,3,5,6,9,10,11,12,13,16,21,23,25,26,27,28,29],particularli:[5,6,8,11,13,23,27,29],partit:[1,4,9],partli:[6,26],pass:[2,3,12,14],password:21,past:[10,23],patch:[6,23,29],path:[0,3,4,6,7,9,14,15,19,26,27,29],patient:7,patter:4,pattern:[0,3,4,12,22,25,26],pauli:[0,26],pc:[11,19],pca:[0,7,19,26,27],pd:[0,4,5,6,7,9,11,26,27,28,29],pde:2,pdf:[0,3,4,5,6,9,16,21,25,26,28,29],pedagog:[0,26,27],penal:[6,27,28,29],penalti:[6,13,21,27,28,29],penros:[5,6,28],pentagon:13,peopl:[0,1,9,13,19],per:[0,1,6,22,24,26,29],percentag:[0,10,11,24],perceptron:[0,1,7,26],peregrin:26,perfect:[0,1,13,26],perfectli:[4,6,29],perform:[0,2,3,4,5,6,8,10,11,12,13,14,15,16,17,19,20,21,23,26,27,28,29],performac:4,perhap:[0,5,13,26,27,28],perimet:[1,9],period:[1,4,23],permut:11,persist:13,person:[5,6,7,22,24,26,27,28,29],perspect:25,pertin:[12,26],petal:[8,9],peter:[25,27],phantom:23,phase:[6,12],phenomena:23,phi:8,phi_k:8,philosophi:13,phone:[24,26],photo:4,php:[],phrase:[0,26],physic:[0,1,4,7,12,13,23,24,25,26,27,28,29],physicist:[],pi:[2,3,5,6,7,9,12,13,23,28,29],pick:[1,9,10,11,13,14],pickl:1,pictur:[0,26],pie:[19,26],piec:[11,14],pillow:[0,15,19,21,26],pinv:[5,6,13,27,28,29],pip3:[0,1,15,21,26],pip:[0,1,15,19,21,26],pipelin:[0,6,8,10,27,29],pippin:26,pit:4,pitfal:[6,27,28],pitt:12,pixel:[1,3,4],pixel_height:[1,3],pixel_width:[1,3],place:[0,4,6,8,13,20,21,26,29],plai:[0,3,4,5,6,8,11,19,26,27,28,29],plain:[8,10,12,13,14],plan:[6,9,24,25,26],plane:[8,9],plateau:[5,28],platform:[19,26],plausibl:12,pleas:[9,11,13,21,24,26],plenti:1,plethora:[3,12],plot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,19,20,21,23,26,27,28],plot_all_sc:[21,28],plot_confusion_matrix:[7,10],plot_count:6,plot_cumulative_gain:[7,10],plot_data:1,plot_dataset:8,plot_decision_boundari:[9,10],plot_import:10,plot_max:4,plot_min:4,plot_model:4,plot_numb:4,plot_predict:8,plot_regression_predict:9,plot_result:4,plot_roc:[7,10],plot_surfac:[2,6,13,21],plot_train:9,plot_tre:[9,10],plt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,20,21,23,26,27,28,29],plu:[0,3,5,7,26,27,28],pluggabl:[3,4,14],plugin:[3,4,14],pm:[8,29],pmatrix:2,pml:25,pn:3,png:[0,4,6,7,9,26,27,29],point:[0,1,2,3,5,6,7,8,9,10,11,13,14,15,16,17,20,21,23,24,26,27,29],point_1:4,point_2:4,poisson:[19,23,26],poli:[6,8,29],poly100_kernel_svm_clf:8,poly3:0,poly3_plot:0,poly_featur:[8,9],poly_features10:9,poly_fit10:9,poly_fit:9,poly_kernel_svm_clf:8,polydegre:[0,5,6,10,27,28,29],polygon:13,polym:12,polymi:21,polynomi:[0,5,6,7,8,9,10,11,15,16,17,21,26,27,29],polynomial_featur:[6,29],polynomial_svm_clf:8,polynomialfeatur:[0,6,8,9,27,29],polytrop:[0,6,26,29],pool:3,pool_siz:3,poor:[1,13],poorli:[0,27],pop:2,popul:[0,5,26,27,28,29],popular:[0,1,3,6,7,8,9,11,12,15,19,20,21,23,27],popularli:[0,26],portabl:10,portion:[11,13],pose:[0,4,5,6,11,23,26,29],posit:[0,1,2,3,5,7,8,10,11,13,14,20,23,26,27,28,29],possibl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,19,20,21,23,24,26,27,28,29],posterior:[5,28,29],postpon:[0,26,27],postscript:21,postul:[5,28,29],potenti:[0,3,5,6,12,13,26,27,28,29],pott:12,power:[0,1,5,6,8,9,12,13,26,27,29],pp:[5,6,18,28,29],practic:[0,5,6,7,8,21,23,27,28,29],practition:[0,1,3,26],pre:26,preced:[1,11,12,23],preceed:4,preceq:8,precis:[0,2,5,11,13,20,21,23,26,27,28,29],pred:[6,29],predicit:0,predict:[0,1,5,6,7,8,9,10,15,16,19,21,25,26,27,28,29],predict_prob:1,predict_proba:[7,10],predictor:[0,5,6,7,9,10,11,26,27,28],prefer:[0,1,6,8,9,11,13,15,19,21,26],prepar:[0,6,20,21,26,27],preprocess:[0,4,6,7,8,9,10,11,21,28,29],prerequisit:0,prescript:21,presenc:13,present:[0,5,6,7,9,12,13,20,21,23,26,27,28],preserv:[3,11,20],press:[13,25],pretrain:[1,4],pretti:[0,4,8,9,15,19,21,26],prev_centroid:14,prevent:[13,23],previou:[0,1,2,3,4,5,6,8,10,11,12,13,20,21,23,27],previous:[2,3,9,10,23],price:[0,4,9,13],primal:8,primari:[0,7,26],prime:23,primit:2,princip:[0,5,7,19,26,27],principl:[0,6,7,8,14,26,29],print:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,20,23,26,27,28,29],print_funct:[8,9],printout:[0,26],prior:[0,5,6,26,28,29],privat:0,pro:[],prob:[1,23],probabilist:[0,25,26,27],probabl:[0,1,3,4,6,7,10,13,19,26,27],problem:[0,3,4,5,6,7,8,9,10,11,12,16,17,19,20,21,23,29],probml:25,proce:[0,5,6,7,8,9,10,11,13,20,26,27,28,29],procedur:[2,4,5,6,8,10,11,13,21,27,28,29],proceed:20,process:[0,2,4,6,9,10,12,13,15,19,20,21,23,25,26,29],prod:25,prod_:[1,5,7,28,29],produc:[0,3,4,5,6,9,10,11,12,13,19,20,21,23,26,27,28,29],product:[0,1,3,5,6,7,8,12,13,16,19,20,26,27,28,29],profess:[0,26],progag:[],program:[0,1,4,5,6,8,12,14,15,16,19,20,22,23,24,26,27,29],programm:20,progress:[1,4,14],prohibit:[6,29],project1:[6,21],project:[0,1,2,3,5,11,13,17,18,19,22,24,27,28,29],project_root_dir:[0,6,7,9,26,27,29],projectwrit:21,promin:12,promis:8,promot:[24,26],prone:9,pronounc:[13,19,26],proof:[0,11,12,13,26,29],propag:[2,3,13],proper:[0,2,6,7,21,29],properli:[1,6,8,10,13,21],properti:[0,1,3,12,13,16,17,20,26,29],proport:[0,1,5,9,11,13,16,23,26,27],propos:[1,4,6,10,21,26],propto:[5,13,28,29],proton:[0,26],prove:[3,13],provid:[0,1,3,4,5,6,8,9,10,12,13,15,19,20,21,23,26,27,28,29],proxi:[1,13],prune:9,pseudo:[20,23],pseudocod:21,pseudoinv:[5,28],pseudoinvers:[5,6,28],pseudorandom:[6,23,29],psycholog:[0,26],pt:13,publish:[],punish:[0,1,26],pure:[3,9,23],purest:9,puriti:9,purpos:[0,3,10,12,14,26],put:1,py:[0,1,2,3,4,5,6,7,8,9,11,14,26,28,29],py_tf:[3,4,14],pycod:26,pydata:19,pydot:9,pyhton2:26,pylab:[0,7,26],pypi:19,pyplot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,20,21,23,26,27,28,29],pythagora:[5,28,29],python2:[0,15,21,26],python3:[0,1,2,3,4,6,7,8,9,11,14,15,19,21,26,28],python:[1,2,3,4,5,6,8,11,12,13,14,16,21,23,27,28],pytorch:[0,19,21,26],q:[5,6,8,11,23,27,29],qp:8,qquad:[2,11,13,20],qr:[5,6,20,27],quad:[1,13,20],quadrat:[0,8,9,13,15,16,26],qualit:[4,9,21,23],qualiti:[0,9,15,16,19,26,27],quantifi:1,quantil:10,quantit:[0,6,9,21,26,29],quantiti:[0,2,5,6,7,9,10,11,12,14,16,20,23,26,27,28,29],quantum:[4,12,25,26],quartil:[0,27],quench:5,queri:9,question:[0,5,6,9,11,12,13,21,24,26,27,28,29],qugan:4,quick:[4,23],quickli:[1,3,9,11,13],quit:[1,5,6,9,10,12,27,29],quot:4,r2:[0,5,6,26,27,28],r2_score:[0,26],r2score:[0,26],r:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,23,27,28,29],r_1:9,r_2:9,r_j:9,r_m:9,rad:0,radial:[0,8,12],radioact:23,radiu:[0,1,9,27],rag:2,rain:9,rais:[0,2,3,4,7,14,28],ramp:1,ran0:23,ran1:23,ran2:23,ran3:23,rand:[0,4,5,6,9,10,13,15,16,20,26,27,28,29],randint:[6,9,13,29],randn:[0,1,2,5,6,9,11,13,15,16,26,27,28,29],random:[0,1,2,3,4,5,6,8,9,13,14,15,16,19,20,21,26,27,28,29],random_forest_model:10,random_index:13,random_indic:[1,3],random_st:[0,7,8,9,10,11],randomforestclassifi:10,randomli:[1,6,9,13,14,29],rang:[0,1,2,3,4,5,6,7,9,10,11,12,13,14,20,23,26,27,28,29],rangl:[0,6,11,23,26,27],rangle_x:23,rank:[5,27],rankdir:4,raphson:[1,8,13],rapidli:0,rare:[1,13,26,29],raschka:[26,27,28],rasckha:26,rate:[0,1,2,3,4,8,9,10,12,13],rather:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,20,23,26,27,28,29],ratio:[4,7,9,10,11],rational:[0,26],ravel:[5,6,7,8,9,10,11,13,20,27,29],raw:3,rbf:[8,11,12],rbf_kernel_svm_clf:8,rbf_pca:11,rc:[0,23],rc_temp:[0,7],rcond:[0,26,27],rcparam:[0,1,3,7,8,9,10,23,26],re:[2,4,13],reach:[1,4,5,6,9,10,11,12,13,14,28,29],read:[0,2,3,4,5,6,7,8,11,12,16,20,21,22,23,25,28],read_csv:[0,6,7,9,26,29],read_fwf:[0,26],reader:[0,6,20,23,26,27,28],readi:[0,1,5,6,8,10,11,12,20,21,26,28,29],readili:1,readthedoc:19,real:[0,1,2,4,7,10,11,12,20,27,29],real_loss:4,real_output:4,realist:8,realiti:23,realiz:[1,12],realli:[0,1,26],rearrang:13,reason:[0,1,3,4,10,13,25,26],reassign:1,recal:[5,6,9,10,11,12,20,23,26,27,28,29],recast:3,receiv:[1,3,10,12,23],recent:[0,2,3,4,6,7,10,13,14,21,25,26,28,29],recept:[3,12],receptive_field:3,recip:[0,6,7,20,21,26,27],reciproc:[5,28],recogn:[0,4,5,10,26,28,29],recognit:[0,1,3,12,22,25,26],recommen:26,recommend:[0,2,3,4,5,6,8,13,15,18,19,20,21,25,28,29],reconsid:9,reconstruct:11,record:[10,21,22,24,26],rectangl:[9,13],rectangular:[5,27],rectifi:[1,3,12],recur:[0,19,26],recurr:[0,1,19,26],recurs:[9,19,20,26],red:[0,3,4,6,8,9,29],redefin:[0,10,26,27],redefinit:28,reduc:[1,3,5,6,9,10,11,13,26,28,29],reduct:[0,10,11,19,23,26,27],refer:[0,1,2,3,5,6,9,11,12,13,14,20,25,26,27,29],referenc:2,refin:12,refit:[6,29],reflect:[0,1,4,5,21,23,26],refresh:[19,26],refreshprogrammingskil:26,reg:[10,11],regard:[1,9,13],regardless:12,region:[3,4,6,9,12,21],regist:[6,21,23],reglasso:[5,28],regr_1:[0,9],regr_2:[0,9],regr_3:[0,9],regress:[1,8,11,12,15,16,19,20],regressor:[0,7,10,26],regridg:[0,5,6,28,29],regular:[0,3,4,5,6,7,9,13,17,24,26,27,28,29],regularis:6,reilli:[0,15,25,26],reinforc:[0,8,19,26],reiter:1,reject:7,rel:[0,4,6,7,9,12,13,23,26,27,29],relat:[0,1,3,4,5,11,13,14,20,23,26,28,29],relationship:[0,4,9,26],relativeerror:[0,26,27],releas:[1,19,26],relev:[0,1,5,7,11,15,19,21,23,26,28],reli:[0,6,8],reliabilti:21,reliabl:[7,23],relu:[3,4,26],remain:[1,2,4,6,12,20,23,27,28,29],remaind:23,reman:2,remark:1,rememb:[0,8,13,20,21,26],remind:[0,5,11,13,20,23,27,28,29],remov:[0,4,5,6,27,28,29],render:[0,9,26,27],reorder:[5,7,27,28],reorgan:[0,26],repeat:[0,1,3,4,5,6,9,10,11,13,14,20,21,23,26,28,29],repeated:26,repeatedli:[0,6,10,13,29],repet:3,repetit:[6,26,27,29],rephras:13,replac:[0,1,3,4,5,6,10,12,14,15,16,19,21,26,27,28,29],replica:[6,29],repo:21,report:26,reportexampl:21,repositori:[0,4,21,26],repres:[0,1,2,3,4,5,6,7,8,9,10,12,13,23,26,27,28,29],represent:[0,1,3,6,9,23,26,29],representd:3,reproduc:[0,5,6,9,12,15,16,19,21,23,26,27],repuls:[0,26],request:[0,13],requir:[0,1,3,4,5,6,8,9,11,12,13,17,20,26,27,28,29],rerun:9,res1:2,res2:2,res3:2,res_analyt:2,res_analytical1:2,res_analytical2:2,res_analytical3:2,resaml:[6,21],resampl:[0,7,10,19,26,27],rescal:[0,11,12,27],rescu:[5,28,29],reseach:[6,21],research:[0,4,13,19,25,26],resembl:[6,23,29],reserv:[1,5,6,23,28,29],reshap:[0,1,2,3,4,6,8,9,10,15,16,20,26,27,29],residenti:0,residu:[0,5,13,26],resiz:[5,27],resourc:26,respect:[0,1,2,3,5,6,7,8,10,11,12,13,14,16,17,21,23,26,27,28,29],respond:12,respons:[0,7,9,12,26,27],rest:[0,5,27],restat:[0,12,26],restor:4,restored_discrimin:4,restored_gener:4,restrict:[0,3,9,12,26],result:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,23,26,29],retail:0,retain:[5,6,27,29],rethink:29,retriev:26,return_data:14,return_sequ:4,return_x_i:9,reus:[1,3,6,18,21],reveal:[0,12,26],revers:[1,20],review:[19,20],revisit:14,revolut:26,reward:[0,4,26],rewrit:[0,3,5,6,7,8,10,11,12,13,20,21,23,28],rewritten:[2,6,8,10,23,29],rewrot:13,rf:10,rgb:3,rgoj5yh7evk:19,rh:[6,29],rho:[0,10,13,26],rho_1:10,rho_2:10,rho_m:10,rich:[0,26],ride:9,rideclass:9,ridedata:9,ridg:[7,11,13,19,26],ridge_fit:29,ridge_fit_beta:29,ridge_sk:6,ridgebeta:[5,28],right:[0,1,2,3,5,6,7,8,9,10,12,13,14,16,17,20,21,23,26,27,28,29],right_sid:2,rightarrow:[0,1,5,6,8,11,12,13,23,26,27,29],rigor:[0,26],ring:6,rise:[0,26],risk:[0,13,15,16,26],rival:4,river:0,rlm:26,rm:[0,23],rmse:0,rmsporp:13,rmsprop:[1,3,4,13],rnd_clf:10,rng:23,rnn1:4,rnn2:4,rnn:[4,12],rnn_2layer:4,rnn_input:4,rnn_output:4,rnn_train:4,rntrick1:23,rntrick2:23,rntrick3:23,rntrick4:23,ro:[0,13,26],robert:[18,21,25],robust:[0,26],robustscal:[0,27],roc:[7,10],rod:[],role:[0,2,5,6,8,19,26,27,28,29],roll:6,room:[0,24,26],root:[0,5,9,13,23,27,28],rot:26,rotat:[1,8,9,10],rotation_matrix:9,roughli:[1,3],round:[0,7,9,13],routin:[13,20,26],row:[0,1,2,5,6,9,11,20,26,27,28,29],rr:[5,27],rrr:[5,27],rug:13,rule:[0,1,5,6,13,21,26,27,28,29],run:[0,1,2,4,5,6,8,9,11,13,15,19,21,26,27,28,29],runtim:[1,6,14],runtimewarn:[1,6,29],rust:[0,15,19,20,26],rvert:1,rvert_2:1,s:[0,1,2,3,4,5,6,7,9,11,12,13,16,17,18,19,20,21,23,26,27,28],s_1:6,s_:[3,6],s_i:[6,7],s_j:6,s_k:6,saddl:13,sai:[0,1,2,3,4,5,6,7,8,9,10,11,12,20,21,23,26,27,28,29],said:[6,9,13],sake:[0,5,7,11,26,27,28],sale:[0,26],sam:26,same:[0,1,2,3,4,5,6,8,9,11,12,14,17,20,21,23,26,27,28],samm:10,sampl:[0,1,2,3,4,5,6,7,8,9,10,13,14,15,16,19,20,21,23,26,27,28,29],sample_vari:14,sampleexptvari:23,samwis:26,sastri:11,satisfactori:[0,26],satisfi:[1,2,3,6,8,13,20,23,29],satur:[1,6,29],save:[0,4,6,7,9,13,26,27,29],save_fig:[0,6,7,9,10,26,27,29],savefig:[0,4,6,7,9,23,26,27,29],savetxt:4,saw:[5,27],scalabl:10,scalar:[2,5,6,10,27,28,29],scale:[0,1,3,5,6,7,8,9,10,11,12,13,15,16,17,19,20,21,24,26,28],scale_mean:4,scale_std:4,scaler:[0,7,8,9,10,11,21,27,28,29],scan:[5,7,28,29],scari:[5,28,29],scatter:[0,1,6,7,8,9,14,26,27,28,29],scenario:[6,13],schedul:[13,24],scheme:[1,13],schrage:23,scienc:[0,1,10,12,13,19,22,23,24,25],scientif:[0,15,19,21,26],scientist:[0,26],scikit:[3,5,6,8,9,10,13,19,20,21,22,25],scikit_learn:[0,16],scikitlearn:26,scikitplot:[7,10],scipi:[0,3,5,6,13,15,19,20,21,26,27,28,29],scl:6,score:[0,1,3,6,7,9,10,11,15,16,21,24,26,27,29],scores_kfold:[6,29],scratch:[1,13],sdg:13,seaborn:[0,1,3,6,7,26],seamless:[0,15,19,21,26],search:[0,1,3,5,9,13,26,28],sebastian:26,sebastianraschka:26,sec:6,second:[0,2,3,4,5,6,7,8,9,11,12,14,15,16,19,20,21,23,24,26,27,29],secondeigvector:11,secondli:12,section:[4,11,16,17,20,21,23,27,28],sector:0,see:[0,1,2,3,4,5,6,7,8,10,11,12,13,15,16,17,18,19,20,21,23,26,27,28,29],seed:[0,1,2,3,4,5,6,8,9,11,13,14,15,16,21,23,26,27,28,29],seed_imag:4,seek:[1,2,8],seem:[1,3,4],seemingli:[0,26],seen:[0,1,3,5,10,12,17,23,26],segment:13,seismic:6,seldomli:[0,26],select:[1,5,6,8,9,10,11,17,21,22,23,24,25,26,27,28,29],self:[0,1,2,5,7,26,27,28],sell:4,semest:[7,22],semi:[8,13],semilogx:6,send:[5,12,13,24,26],senior:[22,24],sens:[0,4,6,8,21,26,29],sensibl:3,sensit:[0,5,6,9,13,26,27,28,29],sent:[2,29],sentenc:[4,12],separ:[0,1,2,4,6,8,9,12,14,15,19,21,23,26,29],septemb:[17,18,21,26],sequenc:[2,3,4,7,9,10,12,13,19,20,23,26],sequenti:[1,3,4,10,12,23],seri:[0,1,2,3,4,5,6,10,11,12,13,20,26,27,28,29],serif:[0,7,23,26],serv:[0,1,2,3,5,7,13,21,25,26,27,28,29],servic:21,session:[1,21,22,24,26,29],set:[1,4,5,6,7,8,10,11,13,14,16,17,19,20,21,23,24,28,29],set_major_formatt:[6,21],set_major_loc:[6,21],set_tick:[1,6,8],set_ticklabel:[1,6],set_titl:[0,1,2,3,7,12,14,26],set_xlabel:[0,1,2,3,7,12,26],set_xlim:[7,12],set_xticklabel:1,set_ylabel:[0,1,2,3,7,26],set_ylim:[7,12],set_ytick:7,set_yticklabel:[1,6],set_zlim:[6,21],seth:4,setminu:6,setosa:[8,9],setosa_or_versicolor:8,setp:[6,29],setup:[1,4,6,8,19,26,27],sever:[0,3,5,6,7,8,9,11,12,13,19,20,23,26,27,28,29],sgd:[1,3],sgd_clf:8,sgdclassifi:8,sgdreg:13,sgdregressor:13,sgn:[5,27,28],shallow:13,shape:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,20,26,27,28,29],shape_bas:2,share:[1,3,26],she:7,shift:[1,6,12,23,28],ship:3,shire:26,shortcom:13,shorten:4,shorter:23,shorthand:[26,29],shortli:[20,26],should:[0,2,3,5,6,8,9,11,12,15,16,20,21,23,26,27,28,29],show:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,20,21,23,26,27,28,29],show_shap:4,shown:[0,4,5,8,9,11,12,13,20,27],shrink:[3,5,6,8,11,21,27,28],shrinkag:[5,6,27,28],shrunk:11,shuffl:[0,1,4,6,13,27,29],side:[0,2,5,8,12,13,20,26,28,29],sigh:[19,26],sigma0:23,sigma1:23,sigma2:23,sigma:[0,1,5,6,7,10,11,12,13,17,18,20,21,23,26,27,28,29],sigma_0:[5,27,28],sigma_1:[5,27,28],sigma_2:[5,27,28],sigma_:[5,20,26,27,28,29],sigma_fn:[7,12],sigma_i:[0,5,26,27,28],sigma_j:[5,17,27,28],sigma_m:[6,23,29],sigma_n:[11,23],sigma_t:13,sigma_x:23,sigmoid:[1,2,4,7,8,10,12],sigmundson:[6,27,28],sign:[1,2,7,8,10,23,24],signal:[1,3,10,12],signifi:4,signific:1,significantli:[1,13,23],sigurd:26,sim:[4,5,6,13,18,21,23,28,29],similar:[0,1,2,3,4,5,6,7,8,9,10,11,14,17,19,20,21,26,28,29],similarli:[0,1,3,5,8,10,13,23,26,27,28],simpl:[1,2,3,5,6,7,8,10,11,12,14,15,16,17,19,20,21,23,29],simplepredict:10,simpler:[0,1,5,6,7,13,16,19,21,26,28],simplernn:4,simplest:[0,1,3,4,9,10,12,14,26],simpletre:10,simpli:[0,1,2,4,5,6,8,9,10,11,12,15,19,20,21,23,26,27,28,29],simplic:[2,5,6,7,8,9,10,11,12,14,27,28,29],simplicti:[5,27],simplifi:[0,6,9,15,19,21,26,27,28,29],simplist:[3,6,23,29],simul:[6,29],simultan:[6,29],sin:[0,1,2,3,4,9,12,13,20,26],sinc:[0,1,2,3,5,6,7,8,9,10,11,13,20,23,25,26,27,28,29],sine:[3,12],singl:[0,1,2,3,5,6,7,8,9,12,13,20,23,26,27,28,29],singular:[0,6,13,20,21,26,28,29],sinusoid:3,site:[0,1,2,3,4,6,7,8,9,11,14,21,22,26,28],situat:[0,4,5,7,13,23,26,27],six:[3,23],size:[0,1,2,3,4,5,6,8,9,10,11,13,20,21,23,26,28,29],sketch:10,ski:9,skill:0,skip:11,skl:[0,6,26,27,28],sklearn:[0,1,3,5,6,7,8,9,10,11,13,14,26,27,28,29],skplt:[7,10],sl:[6,28],slack:8,slice:[2,20,26],slide:[0,3,15,16,21,23,26,27,29],slight:[6,13,29],slightli:[1,2,3,5,6,7,10,23,27,28,29],slope:[8,11,12],slow:[0,2,8,13,27],slower:[5,20,26,27,28],slowest:20,slowli:12,slp:1,small:[0,1,2,3,5,6,8,9,10,11,12,13,19,20,21,23,26,27,28,29],smaller:[0,1,2,5,6,8,9,11,13,23,26,27,28,29],smallest:[0,4,14,15,16,26],smallest_row_index:14,smooth:[0,3,6,9,13,21,26],sn:[0,1,3,6,7,26],sne:11,sneak:26,so:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18,19,20,21,23,24,26,27,28,29],soar:6,social:0,soft:[1,7,10,12],soften:8,softmax:[3,7],softwar:[0,8,15,19,20],sol:8,sole:[0,6,26],solid:[0,7],solut:[0,1,2,3,5,6,8,10,11,13,17,18,20,21,23,26,27,28,29],soluton:2,solv:[0,1,3,5,6,8,10,11,12,13,20,21,26,27],solve_expdec:2,solve_ode_deep_neural_network:2,solve_ode_neural_network:2,solve_pde_deep_neural_network:2,solveod:2,solveode_popul:2,solver:[2,7,8,9,10,11,20,26],some:[0,1,2,3,4,5,6,7,8,9,10,11,12,14,21,23,26,28,29],some_model:[6,27,28],somehow:4,someth:[0,1,3,4,7,9,11,21,23,26,27],sometim:[0,1,11,12,13,14,26,27],soon:[20,24,27],sophist:[0,26],sopt:13,sort:[5,6,9,11,23,27,29],sound:[3,5,28,29],sourc:[0,1,3,6,15,19,20,21,23,26,29],space:[0,1,4,5,8,9,11,12,13,14,23,27,28,29],span:[0,3,5,9,11,20,26,27],spare:1,spars:[3,6,20,26],sparse_mtx:[20,26],sparsecategoricalcrossentropi:3,sparsiti:10,spatial:[1,2,3,12],speak:23,special:[6,7,10,12,13,20,23,26,27,28,29],specif:[0,1,2,3,4,5,6,7,8,9,11,12,16,19,20,21,23,25,26,27,28,29],specifi:[0,3,5,6,7,9,11,13,14,21,23,26,28,29],specifici:[0,10,26],spectacular:3,spectral:1,speech:[0,1,3,4,12],speed:[1,2,4,13],spend:23,spent:21,sphere:[0,27],spin:6,spite:0,spline:8,split:[1,3,4,5,6,8,9,10,11,14,17,21,23,28,29],splite:0,splitter:[1,10],spontan:23,spot:3,spread:[0,11,23,26,27],springer:[18,21,25,26],spuriou:13,sqquar:28,sqrsignal:3,sqrt:[0,3,4,5,6,8,10,11,13,17,23,27,28,29],squar:[1,2,3,4,7,8,9,11,13,14,15,16,17,19,20,23,29],squarederror:10,squaredeuclidean:14,squash:12,srtm:[6,21],srtm_data_norway_1:[6,21],stabil:[5,21],stabl:[0,4,5,6,9,11,19,21,26,27,28],stack:[2,3,4],stage:[5,13,21],stai:[0,2,4,5,11,17,26,27],stand:[0,5,9,12,26,27,28],standadscal:27,standard:[0,1,4,5,6,7,8,10,12,15,16,17,20,21,23,26,28],standard_basi:2,standardscal:[0,6,7,8,9,10,11,27,28,29],stanford:13,start:[0,1,2,3,4,5,6,8,9,10,11,12,13,14,20,23,24,26,27,29],start_box:2,start_nod:2,start_tim:14,stat:[6,29],state:[1,2,4,5,6,7,8,10,11,12,13,19,23,27,28,29],statement:[0,7,20,26],stationari:[],statist:[0,1,3,4,7,9,10,11,12,13,14,18,20,21,22,25,27],statu:[0,7,9,11,26],stavang:[6,21],std:[0,4,6,26,27,29],steep:13,step:[0,1,2,4,6,7,9,10,11,12,13,14,20,21,26],step_fn:[7,12],step_length:13,steps_list:9,stereo:3,still:[0,2,3,5,6,11,13,17,23,29],stimuli:12,stk2100:[25,26],stk3155:[15,21,22,24],stk4021:[25,26],stk4051:[25,26],stk4155:[22,24],stk5000:25,stk:[25,26],stochast:[0,1,5,6,8,11,12,15,16,21,26,28,29],stock:4,stoke:12,stone:[0,7,21],stop:[1,4,9,11,13,14],stopiter:[0,7],storag:[5,27],store:[0,1,2,3,6,11,13,21,23,26],storehaug:[24,26],str:[1,3,4],straight:[0,6,8,13,26,29],straightforward:[0,2,3,5,6,8,9,10,13,20,26,27,28,29],strategi:[0,1,9,26],stratifi:[6,29],strength:[0,5,14,27],stretch:11,strict:[8,13],strictli:[8,13],stride:[4,20],strike:6,string:1,stroke:7,strong:[3,6,9,10,12,20,23,29],strongli:[0,8,19,20],stronli:0,structur:[0,1,2,3,6,9,10,12,19,26,29],stuck:[1,13],student:[0,21,22,24,25,26],studi:[0,3,4,5,6,7,8,11,12,13,17,19,21,25,26,27,28],studier:25,style:[0,7,9,20,26],sub:[9,12],subarg:2,subdivid:[0,20,26],subfield:0,subject:[6,8,23],submit:26,subplot:[0,1,3,4,6,7,8,9,10,14,26,29],subplots_adjust:[8,23],subprogram:[20,26],subract:[0,27],subroutin:[0,26],subscript:1,subsequ:[1,4,5,6,12,20,23,27,29],subset:[1,6,9,12,13,19,26,29],subspac:[0,8,11,27],substanti:[9,10],substep:11,substitut:[3,6,12,20,29],subsubset:9,subtask:6,subtl:1,subtract:[0,4,5,6,11,13,17,20,21,23,28,29],subtre:9,subval:2,succeed:[0,4,26],success:[3,7,9,13,23],successfulli:[4,9],sudo:[0,15,19,21,26],suffer:[0,1,2,5,10,26,27,28],suffici:[1,6,8,11,13,29],suggest:[1,13,21,25],suit:[8,12],suitabl:[0,23,27],sum:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,20,21,23,26,27,28],sum_:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,23,26,27,28,29],sum_i:[0,2,5,6,8,13,17,21,27,28,29],sum_j:6,sum_ja_:0,sum_k:[6,8,12,20],sum_logist:13,sum_m:3,sum_n:3,sum_nx_:3,summar:[5,6,9,28,29],summari:[1,3,4,10,22,28],summat:[0,3,16,27],sunni:9,superconduct:28,superfici:3,superscript:[1,12],supervis:[0,5,6,7,9,12,19,26,27,29],supplement:[7,21],support:[0,1,9,10,11,13,19,26,27],suppos:[0,5,6,7,8,10,11,12,13,20,26,27,28,29],suppress:[5,8,13,28],sure:[0,1,4,6,21],surf:[6,21],surfac:[0,6,21,26],surpass:6,surpris:[0,26],surround:[3,19],survei:[0,5,6,26,27,28,29],svc:[8,9,10],svd:[0,6,11,17,26,29],svdinv:[5,28],svm:[8,9,10,11],svm_clf:[8,10],swath:[5,27],sy:13,symbol:[1,3,4,5,11,13,14,19,23,26,27,28],symmeteri:1,symmetr:[0,5,8,11,12,13,20,26,27],symmetri:[6,9],sympi:[0,15,19,21,26],synonim:23,syntax:[1,13],syntaxerror:[1,8],system:[0,1,3,4,6,7,9,10,12,13,15,19,20,21,26],systemat:[4,6,29],t0:[3,6,13],t1:[2,13],t2:2,t3:2,t:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,26,29],t_0:[2,9,13],t_1:13,t_2:[],t_:2,t_b:10,t_i:[1,2,5,12,27],t_j:12,t_k:9,tabl:[9,21,23,24,26],tabul:[0,26],tabular:26,tackl:4,tag:[2,3,4,5,6,7,12,13,14,20,23,27],taht:[0,26],tail:23,tailor:[2,8,11,26],taiwan:[0,26],take:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,19,20,23,26,27,28,29],taken:[0,1,3,6,10,13,20,26,29],tan:3,tangent:[1,4,12,13],tanh:[1,4,7,8,12],target:[0,1,2,3,4,5,6,7,8,9,10,11,12,26,27,28,29],target_iscomplex:2,target_meta:2,target_nam:9,target_shap:2,task:[0,1,3,6,9,11,12,14,21,26,29],tau:[3,5,23,28,29],taught:26,tax:0,taylor:[2,13],taylornr:13,tc:8,td:[1,6,26,29],teach:26,team:1,teaser:0,technic:[0,5,6,13,15,21,26,27],techniqu:[0,1,8,10,13,19,23,25,26,27,29],technolog:[0,1],tell:[0,4,6,10,11,13,23,29],temp1:1,temp2:1,temp:1,temperatur:[0,9,26],temporarili:1,ten:[3,17,26],tend:[3,5,6,8,9,10,12,13,14,27,28,29],tendenc:[0,26],tension:[6,29],tensor:3,tensorflow:[0,2,4,8,14,15,19,20,21,22,25,26,27],term1:[5,6,11,21,27],term2:[5,6,11,21,27],term3:[5,6,11,21,27],term4:[5,6,11,21,27],term:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,21,23,26,27,28],termin:[0,4,5,9,10,13,15,26,27],terrain1:[6,21],terrain:[6,21],test:[3,4,5,6,7,8,9,10,13,17,20,21,23,29],test_acc:3,test_accuraci:[1,3],test_error:6,test_imag:[3,4],test_ind:[6,29],test_input:4,test_label:[3,4],test_loss:3,test_pr:1,test_predict:1,test_rnn:4,test_scor:[7,10],test_siz:[0,1,3,5,6,10,26,27,28,29],test_split:9,tester:28,testerror:[0,6,27,29],testi:4,testpredict:4,testx:4,text:[0,1,2,4,5,8,9,11,13,15,20,23,25,27,29],textbook:[16,17,21,27,29],textual:9,textur:[1,9],tf:[1,3,4,13,14],tf_loadlibrari:[3,4,14],th:[0,1,2,5,6,7,9,12,13,14,15,16,20,21,23,26,27,28,29],than:[0,1,2,3,4,5,6,7,9,10,11,12,13,17,19,23,26,27,28,29],thank:[4,6,27,28],theano:[1,19,26],thei:[0,1,2,3,4,5,6,7,8,9,11,12,13,20,21,23,26,27,28,29],them:[0,1,3,4,6,8,9,10,11,12,13,20,21,26,27,28,29],theme:[0,26],themselv:[0,23,26],thenc:[6,29],theorem:[2,6,7,27],theoret:[0,4,10,26],theori:[0,1,3,8,9,12,13,18,19,21,25,26,28],thereaft:[0,5,6,11,12,15,16,17,20,21,26,29],therebi:[0,5,7,11,26,27,28],therefor:[0,1,2,3,4,6,7,8,11,13,23,26,27,29],therein:11,thereof:[0,6,13,26,29],theta:[1,4,13,23],theta_:[1,13],theta_i:1,theta_linreg:13,theta_t:13,thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,19,20,21,22,23,25,27,28,29],thing:[0,1,2,4,5,7,9,23,26,28,29],think:[0,1,3,4,6,9,12,13,14,23,26,29],third:[0,3,6,13,24,26,29],thirti:7,thorughout:26,those:[0,3,5,6,8,9,10,11,20,21,22,26,27,29],though:[1,2,3,4,13,20,23],thought:[6,14,21,23,29],thousand:[0,1,21,27],three:[0,1,3,5,6,8,9,12,15,20,21,22,23,24,26,27,28,29],threshold:[1,3,9,10,11,12,13],through:[0,1,2,3,4,5,6,8,11,12,13,14,19,20,23,26,27,28,29],throughout:[0,4,5,14,19,20,23,26],thu:[0,1,2,5,6,7,8,10,11,12,13,21,24,26,27,28,29],thumb:[0,6,21,26,27],thursdai:[24,27],tibshirani:[6,18,21,22,25,26,29],tick:6,tick_param:6,ticker:[6,13,21,23],tif:[6,21],tight_layout:[1,7],tightli:11,tild:[0,5,6,7,11,15,16,17,18,21,23,26,27,28,29],till:[0,4,7,8,9,10,12,20,26,27,28],time:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,19,20,21,23,26,27,28,29],timeit:4,timer:4,tini:1,tip:3,titl:[0,1,2,3,4,6,7,8,9,10,13,21,23,26,29],tmp:13,tn:[2,3,7],to_categor:[1,3,4],to_categorical_numpi:1,to_numer:[0,6,26,29],todai:3,togeth:[0,3,6,8,11,13,19,26],toi:14,told:13,toler:[2,6,14],tolist:4,tomographi:12,too:[0,2,4,5,6,9,11,13,15,23,25,26,27,29],took:[8,26],tool:[0,1,3,6,13,19,27,29],toolbox:8,top:[0,3,5,6,9,10,18,19,26,28,29],topic:[0,5,6,7,8,19,21,27,28],topograph:21,topolog:[1,3,12],toposort:2,torkjellsdatt:[24,26],toss:[10,23],total:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,20,23,24,26,27,29],total_loss:4,totalclustervari:14,totalscatt:14,toward:[1,2,7,12,13,21],town:0,tp:[4,7],tpng:9,tpu:[13,19,26],tqdm:6,tr:27,trace:2,trace_stack:2,traceback:[0,2,3,4,6,7,10,13,14,21,26,28,29],tracer:2,track:[3,13,14,20,27],tract:0,tractabl:[0,26,27],trade:[5,9,28,29],tradeoff:[0,5,21,26,27,28],tradit:[0,1,4,6,26,29],train:[2,3,5,6,8,9,10,11,12,13,17,21,28,29],train_accuraci:[0,1,3,26],train_dataset:4,train_end:[0,1,27],train_error:6,train_imag:[3,4],train_ind:[6,29],train_label:[3,4],train_pr:1,train_siz:[0,1,3,27],train_step:4,train_test_split:[0,1,3,5,6,7,9,10,11,26,27,28,29],train_test_split_numpi:[0,1,27],trainable_vari:4,trained_model:[6,27,28],trainerror:[0,27],traini:4,training_checkpoint:4,training_dataset:4,training_gradi:13,trainingerror:[6,29],trainpredict:4,trainscor:4,trainx:4,trait:[0,26],trajectori:4,transfer:9,transform:[0,5,6,7,8,9,10,11,12,13,19,20,26,27,28,29],transit:[6,12],translat:[1,4,6,10,26,27,28],translate_vjp:2,transpos:[1,5,11,20,27,28],travers:[0,5],treat:[0,1,3,6,12,13,23,26,27,28,29],tree:[0,1,6,19,21,26],tree_clf:[9,10],tree_clf_:9,tree_clf_sr:9,tree_reg1:9,tree_reg2:9,tree_reg:9,trend:23,treue:7,trevor:[18,21,25],tri:[2,3,4,9,13],triain:0,trial:[0,2,4,6,13,23,26,29],triangl:13,triangular:20,trick:[3,4,8,11,13,23],trickier:23,tridiagon:20,trigger:[0,7],trillion:19,trivial:[0,1,5,11,23,26,28],troubl:[0,8,12,27],truck:3,true_beta:[6,27,28],true_divid:1,true_fun:[6,29],trust:9,tucker:8,tuesdai:[24,26,29],tumor:[7,9],tumour:7,tunabl:1,tune:[4,9,13,20,26],tupl:2,turbul:[],turn:[0,1,5,6,7,8,9,10,11,12,13,20,21,23,26,27,29],tutori:[1,4],tv:2,tveito:2,tweak:[1,4,10,23],twice:13,twist:11,two:[0,1,2,4,5,6,7,9,10,11,12,13,15,16,20,22,23,25,26,28,29],tx:13,tx_1:13,txt:4,ty:13,type:[0,1,3,6,8,10,13,16,20,21,23,27,28,29],typeerror:[2,6,13,21],typic:[0,1,2,3,4,5,7,9,10,12,13,23,26,27,28,29],typo:21,u:[0,2,5,6,8,10,11,12,17,20,26,27,28],u_:20,u_i:12,u_m:10,u_t:[],ua:[0,26],ubuntu:[0,15,19,21,26],uci:0,uio:[21,24,25],un:14,unabl:9,unari:[20,26],unary_f:2,unary_oper:2,unary_to_nari:2,unbalanc:[6,9,29],unbias:[0,5,6,26,28,29],unbroadcast:2,unbroadcast_f:2,uncent:[6,28],uncertainti:[0,5,26,28,29],uncertitud:23,unchang:[1,3],uncorrel:[10,23],undefin:[5,27],under:[0,1,5,6,10,13,15,16,19,21,26,27,28,29],underdetermin:[0,26],underfit:[1,6,29],underflowproblem:[5,28,29],undergo:[5,28,29],undergradu:[22,24],underli:[0,1,9,13,23,26],underset:[4,14],understand:[0,1,3,5,6,10,13,14,19,26,27,28],understood:[8,13],undesir:8,undetermin:[5,8,28,29],undo:4,unexpect:[6,13,21,29],unexpected:23,unfair:[6,27,28],unfortun:[1,8,9,10],unicode_liter:[8,9],uniform:[0,1,5,6,11,13,15,16,21,23,26,27],uniformli:[13,23],unifrompdf:23,unimport:13,union:[5,6,28,29],uniqu:[0,2,6,13,14,20,26,29],unique_cluster_label:14,unit:[0,1,3,4,5,10,12,23,26,27,28],unitari:[5,6,20,27],unitarili:[20,26],uniti:23,univari:23,univers:[0,1,2,13,15,19,21,22,24,26,27,28,29],unix:1,unknow:[0,20,26],unknown:[0,1,3,4,5,6,8,10,13,16,20,26,27,28,29],unknowwn:12,unlabel:1,unless:[0,3,6,11,13,21,26,29],unlik:[1,3,8,13],unnecessarili:9,unord:3,unravel:1,unrol:[3,11],unseen:[0,7,9],unstabl:1,unsupervis:[0,1,4,12,19,26],unsymmetr:[20,26],until:[1,2,4,9,12,13,14],untouch:0,unusu:12,up:[1,3,4,5,6,8,10,11,13,14,16,18,19,20,21,23,24,28],updat:[1,2,10,12,13,14],uploa:26,upload:[19,21,25],uploda:[],upon:[0,1,6,7,11,20,21],upper:[0,8,9,16,20,27],uppercas:[20,26],upsampl:4,upscal:4,url:[0,7,26,27],us:[4,5,6,8,9,10,11,12,14,15,16,17,18,20,22,23,25,28,29],usa:26,usag:[0,8,19,26,27],usd10000:0,usd:0,use_bia:4,usecol:[0,26],useless:1,user:[0,1,2,3,4,6,7,8,9,11,14,15,19,20,21,26,27,28],usernam:21,userwarn:6,usetex:23,usg:[6,21],usr:23,usual:[0,3,4,7,12,13,14,26],ut:[5,28],utf:[0,7],util:[1,3,4,6,7,10,14,26,29],ux:20,v0:23,v1:23,v2:23,v:[2,4,5,6,11,13,17,19,27,28],v_0:11,va:1,vahid:26,val:13,val_accuraci:3,val_loss:4,vale:2,valid:[0,1,4,7,9,10,13,19,23,26,27],validation_data:3,validation_split:4,valu:[0,1,2,3,4,6,7,8,9,10,12,13,14,15,16,19,20,21,26],valuat:9,valueerror:2,valy:4,van:[0,18,21,26,27,28,29],vandenbergh:[8,13],vandermond:[0,26],vanilla:[0,6,11,14,27,28],vanish:[1,4,13,23],var_x:23,varabl:8,varepsilon:[5,6,18,21,28,29],varepsilon_:[5,6,28,29],varepsilon_i:[5,6,28,29],vari:[0,1,3,5,6,10,15,16,26,29],variabl:[0,1,2,5,6,7,8,10,11,12,13,14,20,26,27,28,29],varianc:[0,1,5,7,9,10,11,13,14,18,19,20,23,26,27],variance_i:[5,11,27],variance_x:[5,11,27],variant:[0,1,6,8,12,13,26,27],variat:[3,4,11,26],varieti:[0,3,12,15,19,21,26],variou:[1,3,5,6,7,8,9,11,12,13,16,18,19,20,21,23,27,28],varydimens:4,vastli:3,vaue:1,vault:0,vdot:[2,13],ve:21,vec:[6,29],vector:[0,1,2,3,4,5,6,7,9,10,11,13,14,16,17,19,28,29],vector_mean:14,veloc:[],ventur:[0,8,15,19,26],verbos:[1,3,4],veri:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,21,23,25,26,27,28,29],verifi:[3,11,20,26],versatil:[8,26],versicolor:[8,9],version:[0,3,10,13,14,15,19,20,21,23,26],versu:1,vert:[0,1,5,6,7,8,9,11,13,17,26,27,28,29],vert_1:[5,6,27,28,29],vert_2:[5,6,11,17,27,28,29],via:[0,5,6,7,8,9,10,11,12,15,19,20,21,22,23,24,26,27,28,29],vidal:11,video:[0,1,12,19,22,24,26,27,28,29],view:[1,3,5,6,12,13,23,25,26,28,29],violat:8,virginica:9,viridi:[0,1,2,3,26],virtual:1,viscos:13,viscou:13,visibledeprecationwarn:2,vision:[0,3],visual:[0,3,11,12,15,19,26,27],visualis:1,viz:[6,8,23],vjp:2,vjp_argnum:2,vjpfun:2,vjpmaker:2,vjpnode:2,vjps_dict:2,vmap:13,vmax:[1,6],vmin:[1,6],voic:3,volum:[0,3,26],vote:10,voting_clf:10,votingclassifi:10,votingsimpl:10,vs:[0,4,6,29],vspace:2,vstack:[5,11,20,23,26,27],vt:[5,27,28],w1:8,w2:[8,11],w3:8,w:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,20,23,26,27,29],w_1:[8,20],w_1x_1:8,w_1x_:8,w_2:[8,20],w_2x_2:8,w_2x_:8,w_3:20,w_4:20,w_:[1,12],w_hidden:2,w_i:[1,2,10],w_ix_i:12,w_j:20,w_m:20,w_output:2,w_px_:8,w_px_p:8,wa:[0,1,3,4,5,6,7,10,11,12,14,17,20,21,26,27,28,29],wai:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,17,20,23,26,27,28],walk:9,walker:23,wang:[0,26],want:[0,1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,19,21,23,26,27,28,29],warn:[1,4,8],warrant:[6,29],wast:3,watch:19,wave:3,wavelet:8,we:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,27,28,29],weak:[9,10,14],weather:[1,12],web:[19,22,24,26],weblink:[],webpag:26,websit:[6,20,21,22,26],wedg:[8,23],wednesdai:[24,26,29],wee:11,week:[0,5,6,7,21,22,24],weekli:[16,19,21,24,25,26],weight:[0,1,2,3,6,7,9,10,12,13,21,23],weigth:2,welcom:[8,19],well:[0,1,2,3,4,5,6,7,8,9,10,12,13,15,16,19,20,21,23,25,26,27,28,29],went:8,were:[0,1,3,4,5,6,7,8,10,11,12,14,23,26,27,29],wessel:[0,18,21,26,27,28,29],what:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,19,20,21,23],whatev:3,when:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,20,21,23,26,27,28,29],whenev:[13,23],where:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,26,27,28,29],wherea:[6,23,29],wherefrom:21,wherein:[1,12],whether:[0,3,5,7,9,21,23,26,28],which:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26,27,28,29],whichev:[1,3],white:9,whiteboard:28,who:[0,22],whole:[1,3,4,5,9,11,13,28,29],whose:[0,6,10,23,27,29],whow:[11,27],whrn:29,why:[0,1,3,6,13,21,28],wide:[0,1,3,6,7,12,15,19,20,21,26,29],widehat:[6,29],width:[0,3,8,9,26],wieringen:[0,18,21,26,27,28,29],win:10,wind:9,wing:[24,26],winther:2,wiothout:[6,27],wiscons:7,wisconsin:10,wisdom:[6,28],wise:[0,1,5,12,13,27],wish:[0,2,5,7,8,11,13,14,20,21,26,27],with_std:[0,27,29],wither:6,within:[0,2,3,4,7,9,12,13,14,23,25,26],withinclust:14,without:[0,1,5,6,8,9,11,12,13,26,27,28,29],won:[0,26],wonder:8,word:[0,1,3,4,5,6,7,14,23,26,27,28,29],work:[0,1,4,6,7,8,9,13,15,19,21,22,23,24,26,27,29],workshop:26,world:[0,8,27],worldwid:[0,26],wors:[0,1,3,4,6,26,29],worst:9,worth:9,worthi:21,would:[0,1,3,5,6,7,8,9,10,11,12,13,20,21,23,26,27,28,29],wrap:[6,20,26],wrap_util:2,write:[0,1,2,3,5,6,7,8,12,13,15,16,17,20,26,27,29],written:[0,2,3,5,11,12,13,16,19,20,21,23,26,27,28,29],wrong:[1,8],wrongli:10,wrote:[5,11,27],wrt:[2,10,13],wth:[10,13],www:[19,20,21,25,26,28],wx_1:8,x0:8,x1:[4,8,9,10,13],x1_exampl:8,x1d:8,x2:[8,9,10,13],x2d:[8,11],x2d_train:11,x2dsl:11,x3:[8,9],x4:9,x:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,23,26,29],x_0:[0,5,11,20,26,27,28,29],x_1:[0,2,5,6,7,8,9,10,11,13,20,23,26,27,28,29],x_2:[0,2,5,6,7,8,9,10,11,13,20,23,26,27,29],x_3:[8,20,23],x_4:20,x_:[0,2,3,5,6,8,10,11,13,14,18,20,21,23,26,27,28,29],x_center:11,x_data:1,x_data_ful:1,x_hidden:2,x_i:[0,1,2,5,6,7,8,9,10,11,12,13,14,17,20,23,26,27,28,29],x_input:2,x_ix_:[0,26],x_iy_i:8,x_j:[0,2,8,9,12,16,23,27],x_jy_j:8,x_k:[12,14,20,23,27],x_l:23,x_m:[6,12,20,23,29],x_n:[0,2,3,6,8,11,12,13,20,23,26,29],x_new:[9,10],x_offset:[6,27,28],x_output:2,x_p:[3,7,9],x_poli:9,x_poly10:9,x_pred:4,x_prev:2,x_reduc:11,x_scale:8,x_small:13,x_test:[0,1,3,5,6,7,9,10,11,26,27,28,29],x_test_own:6,x_test_scal:[0,6,7,9,10,11,27,28,29],x_tot:4,x_train:[0,1,3,4,5,6,7,9,10,11,26,27,28,29],x_train_mean:[6,27,28,29],x_train_own:6,x_train_scal:[0,6,7,9,10,11,27,28,29],x_val:1,xarrai:[19,26],xavier:1,xbkjd4ccgq:26,xbnew:13,xcode:[0,15,19,21,26],xdclassiffierconfus:10,xdclassiffierroc:10,xg_clf:10,xgb:10,xgbclassifi:10,xgboost:9,xgboot:10,xgbregressor:10,xgparam:10,xgtree:10,xi:[8,13],xi_1:8,xi_:8,xi_i:8,xinv:28,xk:8,xla:[13,19,26],xlabel:[0,1,2,3,4,5,6,7,8,9,10,13,21,23,26,28,29],xlim:[6,10,29],xm:9,xmesh:13,xnew:[0,13,26],xp:23,xpanda:[0,27],xpd:[5,11,27],xplot:0,xs:9,xscale:[0,27],xsr:9,xt_x:13,xtest:[6,29],xtick:[3,6,8,9,29],xtrain:[6,29],xu:[0,26],xx:[0,20,26],xy:[0,6,8,20,21,26],xytext:8,xz:[20,26],y1:4,y2:4,y3:4,y:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,23,26,27,28,29],y_0:[0,5,11,20,26,27,28,29],y_1:[0,5,8,9,11,13,20,26,27,28,29],y_1y_1:8,y_1y_1k:8,y_1y_2:8,y_1y_2k:8,y_1y_n:8,y_1y_nk:8,y_2:[0,5,8,9,11,20,26,27],y_2y_1:8,y_2y_1k:8,y_2y_2:8,y_2y_2k:8,y_3:[0,9,20],y_4:20,y_:[0,1,5,6,10,11,20,26,27,28,29],y_data:[0,1,5,6,26,27,28,29],y_data_ful:1,y_decis:8,y_fit:[0,27],y_i:[0,1,5,6,7,8,9,10,11,12,13,15,16,17,18,20,21,26,27,28,29],y_if_:10,y_ix_:[0,26],y_ix_i:[7,8,13,27],y_iy_jk:8,y_j:[6,8,12,21,29],y_k:12,y_m:20,y_model:[0,4,5,6,26,27,28,29],y_n:[8,13],y_ny_1:8,y_ny_1k:8,y_ny_2:8,y_ny_2k:8,y_ny_n:8,y_ny_nk:8,y_offset:[6,27,28],y_plot:9,y_pred1:9,y_pred2:9,y_pred:[0,1,4,6,7,8,9,10,27,28,29],y_pred_rf:10,y_pred_tre:10,y_proba:[7,10],y_scaler:[6,28,29],y_test:[0,1,3,4,5,6,7,9,10,11,26,27,28,29],y_test_onehot:1,y_test_predict:0,y_test_scal:29,y_tot:4,y_train:[0,1,3,4,5,6,7,9,10,11,26,27,28,29],y_train_mean:[6,27,28],y_train_onehot:1,y_train_predict:0,y_train_scal:[6,28,29],y_val:1,yadav:[],ye:[3,6,7,29],year:[0,19,26],yet:[0,1,6,8,11,13,26],yi:13,yield:[0,2,5,6,7,8,10,12,13,14,20,23,26,28,29],yk:8,ylabel:[0,1,2,3,4,5,6,7,8,9,10,13,21,23,26,28,29],ylim:[3,6,29],ym:9,ymesh:13,yn:0,yo:[8,9,10],yoshua:[1,25],you:[0,1,2,3,4,5,6,8,9,10,11,13,15,16,17,19,20,21,23,24,25,26,27,28,29],young:0,your:[1,2,4,5,6,8,11,13,17,19,20,21,28,29],yourself:[11,13,26],youtub:19,ypred:[6,29],ypredict2:13,ypredict:[0,13,26,27],ypredictlasso:[5,28],ypredictol:[0,5,28,29],ypredictown:[6,27,28],ypredictownridg:[6,28],ypredictridg:[0,5,6,28,29],ypredictskl:[6,27,28],yridg:26,ys:9,ytest:[6,29],ytick:[3,6,8,9,29],ytild:[0,6,26,27,29],ytilde_test_ol:29,ytilde_test_ridg:29,ytildelasso:[5,28],ytildenp:[0,26,27],ytildeol:[0,5,28],ytildeownridg:[6,28],ytilderidg:[5,6,28],ytrain:[6,29],yuxi:26,yx:[20,26],yy:[20,26],yz:[20,26],z:[0,1,2,3,4,5,6,7,8,9,11,12,13,20,21,23,26,27,29],z_0:[20,26],z_1:[20,26],z_2:[20,26],z_:[1,2,12,20,26],z_c:1,z_h:1,z_hidden:2,z_i:[1,12],z_j:[1,12],z_k:[12,27],z_m:1,z_mod:9,z_o:1,z_output:2,zaman:23,zaxi:[6,21],zero:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,18,20,21,23,26,27,28,29],zeros_lik:4,zeroth:27,zfill:4,zip:[2,4,6],zm_h:[0,26],zn:0,zone:0,zoom:26,zx:[20,26],zy:[20,26],zz:[20,26]},titles:["3. Linear Regression","14. Building a Feed Forward Neural Network","15. Solving Differential Equations with Deep Learning","16. Convolutional Neural Networks","17. Recurrent neural networks: Overarching view","4. Ridge and Lasso Regression","5. Resampling Methods","6. Logistic Regression","8. Support Vector Machines, overarching aims","9. Decision trees, overarching aims","10. Ensemble Methods: From a Single Tree to Many Trees and Extreme Boosting, Meet the Jungle of Methods","11. Basic ideas of the Principal Component Analysis (PCA)","13. Neural networks","7. Optimization, the central part of any Machine Learning algortithm","12. Clustering and Unsupervised Learning","Exercises week 34","Exercises week 35","Exercises week 36","Exercises week 37","Applied Data Analysis and Machine Learning","2. Linear Algebra, Handling of Arrays and more Python Features","Project 1 on Machine Learning, deadline October 7 (midnight), 2024","Teaching schedule with links to material","1. Elements of Probability Theory and Statistical Data Analysis","Teachers and Grading","Textbooks","Week 34: Introduction to the course, Logistics and Practicalities","Week 35: From Ordinary Linear Regression to Ridge and Lasso Regression","Week 36: Linear Regression and Statistical interpretations","Week 37: Statistical interpretations and Resampling Methods"],titleterms:{"1":[0,15,16,17,18,21,26,27],"14":29,"17":[],"18":[],"2":[0,15,16,17,18,26,27,28],"2023":24,"2024":21,"26":27,"3":[0,15,16,26,27],"34":[15,26],"35":[16,27],"36":[17,28],"37":[18,29],"4":[0,27],"5":0,"7":21,"9":[],"case":[8,10,23,27,28],"do":[1,28,29],"final":[12,27,28],"function":[0,1,6,7,8,10,11,12,13,21,23,26,27,28,29],"import":[5,20,26,27,28],"new":[4,28,29],A:[0,1,4,8,9,26,28,29],And:[26,27,28],For:27,In:24,Ising:6,The:[0,1,2,3,5,6,7,8,9,11,12,17,19,26,27,28,29],To:[26,27],With:[4,28],about:[26,27],abov:28,activ:[1,12,28],ad:[0,6,17,21,26,27],adaboost:10,adagrad:13,adam:13,adapt:10,adjust:1,adversari:4,again:[3,9],ai:[21,26],aim:[8,9,17,18,26],aka:[26,27],algebra:[20,26],algorithm:[9,10,11,12,27],algortithm:13,all:8,altern:[],an:[0,4,10,26],analys:[5,27],analysi:[0,5,6,11,19,21,23,26,27,28,29],analyt:[0,16,17],analyz:[],ani:13,anoth:[9,28,29],appli:19,approach:[0,8,14,26,29],approxim:12,architectur:1,arrai:[20,26],assist:24,assumpt:[28,29],august:27,autocorrel:23,autograd:[2,13],automat:13,b:[17,21],back:[1,11,12],background:[19,21,29],bag:10,base:[13,29],basic:[0,5,7,9,10,11,20,27,28,29],batch:1,bay:[5,28,29],befor:11,beta:[28,29],better:8,bia:[6,21,29],binari:1,bind:26,bird:10,boldsymbol:[27,28,29],boost:10,bootstrap:[6,10,29],boston:0,breast:1,brief:[26,29],bring:12,build:[1,3,9],c:[21,26],calcul:27,can:[26,29],cancer:[1,7,9,11],cart:9,center:27,central:[13,19,23,29],chain:12,chang:10,channel:26,chi:[0,26],choos:1,cifar01:3,classic:11,classif:[1,9,10],classifi:8,clip:1,cluster:14,cnn:3,code:[0,1,2,5,9,11,12,13,14,26,27,28,29],collect:[1,3],commun:26,compar:[2,10],comparison:28,complet:27,complex:[0,6,21,27],complic:6,compon:11,comput:9,computation:29,computerlab:26,con:9,concept:23,condit:[28,29],confid:29,conjug:13,contn:26,convex:[8,13],convolut:[3,12],correctli:[28,29],correl:[11,27],cost:[1,10,27,28,29],cours:[19,25,26],covari:[5,11,23,27],cover:26,critic:[],cross:[6,21,29],cython:26,d:21,data:[0,1,3,6,7,9,11,15,16,19,21,23,26,27,28],dataset:[1,3],deadlin:[21,26],decai:2,decemb:[],decis:[9,10],decomposit:[5,11,17,20,27],deep:[1,2,26],defin:[1,26],degre:[0,27],deliveri:21,delta:29,dens:[0,26],deriv:[5,12,27,28,29],descent:[2,10,13],descript:21,design:27,detail:[3,26],develop:1,diagon:11,differ:8,differenti:[2,13],diffus:2,dimension:[2,3,8,21,27],disadvantag:9,discret:23,distribut:[5,23,28,29],distrubut:29,doe:[27,28],domain:23,down:1,dropout:1,e:21,economi:27,electron:21,element:[0,23,26],elimin:20,energi:26,ensembl:10,entropi:9,environ:[0,15,26],equat:[0,2,12,26,27,28],error:[0,10,26,27,29],essenti:26,estim:[28,29],etc:26,euler:2,evalu:1,exampl:[0,1,2,3,4,6,7,8,9,10,26,27,28,29],exercis:[0,6,15,16,17,18,26,27,29],expect:[18,23,28,29],expens:29,experi:23,explor:[0,15,16,26],exponenti:2,express:[17,18,27],extrapol:4,extrem:[10,26],ey:10,f:21,fall:24,famili:[1,26,27],famou:20,fantast:27,featur:[9,20,27],feed:[1,12],find:29,fine:1,first:[4,12,26,27,28],fit:[0,10,26,28],fix:27,fold:29,forc:3,forest:10,format:[21,26],forward:[1,2,12],fourier:3,frank:[6,21,27],freedom:[0,27],frequent:27,frequentist:[0,26],from:[5,10,12,27,28,29],full:2,further:[3,5,27],g:21,gan:4,gaussian:20,gd:13,gener:[4,9,26],geometr:11,gini:9,good:[0,26],grade:[24,26],gradient:[1,2,10,13],growth:2,ha:19,handl:[20,26,27],happen:[28,29],hessian:27,hidden:2,histogram:29,hous:0,hyperparamet:1,hyperplan:8,i:1,id3:9,idea:11,ident:[28,29],identifi:29,ii:26,iid:[28,29],illustr:28,implement:1,implic:[5,27],improv:1,includ:13,increment:11,independ:[28,29],index:9,inform:24,input:2,instal:[19,21,26],instructor:24,intercept:27,interpret:[5,11,26,27,28,29],interv:29,introduc:[11,13,27],introduct:[0,6,19,20,21,26],invers:[5,20,28],invert:27,iter:10,its:27,jacobian:27,jax:13,julia:26,jungl:10,k:29,kera:[1,3],kernel:[8,11],lagrangian:8,lasso:[5,6,21,27,28,29],last:[27,29],later:[5,27],layer:[1,2,3,12],learn:[0,1,2,11,13,14,15,16,19,21,26,27,28,29],least:[5,6,18,21,26,27,28],lectur:[26,27,28,29],level:10,librari:[19,26],likelihood:[7,28,29],limit:[1,13,23,29],linear:[0,8,13,20,26,27,28],link:[5,11,22,25,27,28,29],literatur:21,logist:[7,26],loss:27,lu:20,machin:[0,8,13,19,21,26],made:[28,29],main:[23,26],make:[0,9,10,15,16,26,27],mani:[10,12],manipul:27,margin:[28,29],mass:26,materi:[21,22,26,27,28,29],math:[5,27],mathemat:[3,5,8,27],matric:[5,20,26,28],matrix:[1,5,11,12,20,26,27,28],matter:[0,26],max:27,maximum:[28,29],mean:[0,27,28],meet:[5,10,23,26,27],mercer:8,method:[6,9,10,13,21,26,29],midnight:21,min:27,minim:26,ml:26,mle:[28,29],mlp:12,mnist:[3,4],model:[0,1,4,6,12,26],momentum:13,mondai:[27,28],moon:[8,9],more:[3,6,20,21,26,27,28,29],multilay:12,multipl:[1,3],multipli:8,need:[21,26],network:[1,2,3,4,7,12,26],neural:[1,2,3,4,7,12,26],non:8,normal:[0,1,29],notat:12,note:[21,27,28,29],novemb:[],now:[1,9,13,28,29],nuclear:[0,26],numba:26,number:[0,2,23,27],numer:[2,21,23],numpi:[20,26],object:3,obtain:11,octob:21,od:2,off:[6,21],ol:[5,6,21,28,29],one:[2,12],oper:20,optim:[1,8,13,19,26,27],order:13,ordinari:[5,6,18,21,26,27,28],organ:[0,26],oslo:25,other:[4,9,11,12,20,21,26,27],our:[0,4,5,11,13,26,27],outcom:[19,26],output:2,overarch:[0,4,8,9,17,18,26,27],overview:[10,26],own:[0,10,11,15,16,26,27],packag:[20,26],panda:[26,27],paper:21,paramet:[26,27],part:[13,19,21,27],partial:2,pass:1,path:[],pca:11,pdf:23,pencil:21,perceptron:12,perform:[1,9],period:3,perspect:1,plan:[27,28,29],plot:29,point:4,poisson:2,polynomi:[3,28],popul:2,popular:26,practic:[13,24,26],pre:[1,3],preambl:21,predict:4,preprocess:27,prerequisit:[3,19,26],princip:11,principl:3,pro:9,probabl:[5,23,28,29],problem:[1,2,13,26,27,28],procedur:[9,26],process:[1,3],program:[2,13,21],project:[6,21,26],prop:13,propag:[1,12],properti:[5,23,27],python:[0,9,15,19,20,26],quick:8,r:26,random:[10,11,23],read:[9,26,27,29],real:[6,21,26],recommend:[26,27],rectangular:28,recurr:[4,12],reduc:[0,27],reduct:3,refer:21,reformul:2,regress:[0,5,6,7,9,10,13,17,18,21,26,27,28,29],regular:1,relat:27,relev:[25,27,29],relu:1,remark:3,remind:[6,8,26],repeat:27,replac:13,report:21,repositori:29,requir:[2,19],resampl:[6,21,29],rescal:[6,28],residu:27,resourc:2,result:[27,28],revisit:13,rewrit:[26,27,29],rgeress:[],ridg:[0,5,6,17,18,21,27,28,29],rm:13,rule:12,s:[8,10,29],same:[13,29],sampl:11,scale:[27,29],schedul:[22,26],schemat:9,scheme:2,scienc:26,scikit:[0,1,11,15,16,26,27,28,29],second:13,semest:24,septemb:[28,29],session:[27,28],set:[0,2,3,9,12,15,26,27],sgd:13,should:1,similar:13,simpl:[0,4,9,13,26,27,28],singl:10,singular:[5,11,17,27],size:27,soft:8,softmax:1,softwar:[21,26],solv:[2,28],solver:13,some:[13,20,27],specifi:2,split:[0,15,16,26,27],squar:[0,5,6,10,18,21,26,27,28],standard:[13,27,29],state:[0,26],statist:[5,6,19,23,26,28,29],steepest:[10,13],step:29,still:27,stochast:[13,23],strongli:26,structur:[],subtract:27,suggest:26,sum:29,summari:[24,26],superposit:3,supervis:1,support:8,svd:[5,27,28],systemat:3,t:[27,28],teach:[22,24],teacher:[24,26],technic:28,techniqu:[6,11,21],technolog:19,tensorflow:[1,3],tent:26,term:29,test:[0,1,15,16,26,27,28],text:26,textbook:[25,26],theorem:[5,8,11,12,23,28,29],theori:23,thi:[17,18,26],think:27,thursdai:29,tip:13,togeth:12,tool:[21,26],top:1,topic:26,toward:11,trade:[6,21],tradeoff:[6,29],train:[0,1,4,15,16,26,27],transform:3,tree:[9,10],tuesdai:28,tune:1,two:[3,8,19,21,27],type:[2,4,12,26],uio:26,understand:29,univers:[12,25],unsupervis:14,up:[0,2,9,12,15,26,27,29],us:[0,1,2,3,7,13,19,21,26,27],usag:[28,29],valid:[6,21,29],valu:[5,11,17,18,23,27,28,29],variabl:23,varianc:[6,21,28,29],variou:[0,15,26,29],vector:[8,12,20,26,27],view:[0,4,10,27],visual:[1,9],vs:3,wai:[9,29],wave:2,we:26,wednesdai:28,week:[15,16,17,18,26,27,28,29],weekli:[22,29],what:[0,26,27,28,29],which:1,why:[26,27,29],wisconsin:7,wrap:[27,29],write:[4,11,21,28],x:[27,28],xgboost:10,yet:28,your:[0,10,15,16,26,27],yourself:[]}}) \ No newline at end of file diff --git a/doc/LectureNotes/_build/html/week37.html b/doc/LectureNotes/_build/html/week37.html new file mode 100644 index 000000000..32a4cc488 --- /dev/null +++ b/doc/LectureNotes/_build/html/week37.html @@ -0,0 +1,3026 @@ + + + + + + + + Week 37: Statistical interpretations and Resampling Methods — Applied Data Analysis and Machine Learning + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    + + + +
    +
    + + + + + + + + +
    + +
    +
    + +
    + + + + + + + + + + + + + + +
    + + +
    + +
    + Contents +
    + +
    +
    +
    +
    +
    + +
    +

    Week 37: Statistical interpretations and Resampling Methods

    + +
    +
    + +
    +

    Contents

    +
    + +
    +
    +
    + +
    + + +
    +

    Week 37: Statistical interpretations and Resampling Methods¶

    +

    Morten Hjorth-Jensen, Department of Physics, University of Oslo and Department of Physics and Astronomy and Facility for Rare Isotope Beams, Michigan State University

    +

    Date: September 9, 2024

    +
    +

    Plans for week 37¶

    +

    Material for the lecture on Monday September 9.

    + + + +

    Material for the active learning sessions on Tuesday and Wednesday.

    +
      +
    • Calculations of expectation values

    • +
    • Exercise set for week 37

    • +
    • Work on project 1

    • +
    • See also additional note on scaling (jupyter-notebook) sent separately. This will be discussed during the first hour of each session. This note is added at the end of these slides.

    • +
    • For more discussions of Ridge regression and calculation of averages, Wessel van Wieringen’s article is highly recommended.

    • +
    +
    +
    +

    Material from last week and relevant for the weekly exercises¶

    +
    +
    +

    Linking the regression analysis with a statistical interpretation¶

    +

    We will now couple the discussions of ordinary least squares, Ridge +and Lasso regression with a statistical interpretation, that is we +move from a linear algebra analysis to a statistical analysis. In +particular, we will focus on what the regularization terms can result +in. We will amongst other things show that the regularization +parameter can reduce considerably the variance of the parameters +\(\beta\).

    +

    The +advantage of doing linear regression is that we actually end up with +analytical expressions for several statistical quantities.
    +Standard least squares and Ridge regression allow us to +derive quantities like the variance and other expectation values in a +rather straightforward way.

    +

    It is assumed that \(\varepsilon_i +\sim \mathcal{N}(0, \sigma^2)\) and the \(\varepsilon_{i}\) are +independent, i.e.:

    +
    +\[\begin{split} +\begin{align*} +\mbox{Cov}(\varepsilon_{i_1}, +\varepsilon_{i_2}) & = \left\{ \begin{array}{lcc} \sigma^2 & \mbox{if} +& i_1 = i_2, \\ 0 & \mbox{if} & i_1 \not= i_2. \end{array} \right. +\end{align*} +\end{split}\]
    +

    The randomness of \(\varepsilon_i\) implies that +\(\mathbf{y}_i\) is also a random variable. In particular, +\(\mathbf{y}_i\) is normally distributed, because \(\varepsilon_i \sim +\mathcal{N}(0, \sigma^2)\) and \(\mathbf{X}_{i,\ast} \, \boldsymbol{\beta}\) is a +non-random scalar. To specify the parameters of the distribution of +\(\mathbf{y}_i\) we need to calculate its first two moments.

    +

    Recall that \(\boldsymbol{X}\) is a matrix of dimensionality \(n\times p\). The +notation above \(\mathbf{X}_{i,\ast}\) means that we are looking at the +row number \(i\) and perform a sum over all values \(p\).

    +
    +
    +

    Assumptions made¶

    +

    The assumption we have made here can be summarized as (and this is going to be useful when we discuss the bias-variance trade off) +that there exists a function \(f(\boldsymbol{x})\) and a normal distributed error \(\boldsymbol{\varepsilon}\sim \mathcal{N}(0, \sigma^2)\) +which describe our data

    +
    +\[ +\boldsymbol{y} = f(\boldsymbol{x})+\boldsymbol{\varepsilon} +\]
    +

    We approximate this function with our model from the solution of the linear regression equations, that is our +function \(f\) is approximated by \(\boldsymbol{\tilde{y}}\) where we want to minimize \((\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\), our MSE, with

    +
    +\[ +\boldsymbol{\tilde{y}} = \boldsymbol{X}\boldsymbol{\beta}. +\]
    +
    +
    +

    Expectation value and variance¶

    +

    We can calculate the expectation value of \(\boldsymbol{y}\) for a given element \(i\)

    +
    +\[ +\begin{align*} +\mathbb{E}(y_i) & = +\mathbb{E}(\mathbf{X}_{i, \ast} \, \boldsymbol{\beta}) + \mathbb{E}(\varepsilon_i) +\, \, \, = \, \, \, \mathbf{X}_{i, \ast} \, \beta, +\end{align*} +\]
    +

    while +its variance is

    +
    +\[\begin{split} +\begin{align*} \mbox{Var}(y_i) & = \mathbb{E} \{ [y_i +- \mathbb{E}(y_i)]^2 \} \, \, \, = \, \, \, \mathbb{E} ( y_i^2 ) - +[\mathbb{E}(y_i)]^2 \\ & = \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, +\beta + \varepsilon_i )^2] - ( \mathbf{X}_{i, \ast} \, \boldsymbol{\beta})^2 \\ & += \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, \boldsymbol{\beta})^2 + 2 \varepsilon_i +\mathbf{X}_{i, \ast} \, \boldsymbol{\beta} + \varepsilon_i^2 ] - ( \mathbf{X}_{i, +\ast} \, \beta)^2 \\ & = ( \mathbf{X}_{i, \ast} \, \boldsymbol{\beta})^2 + 2 +\mathbb{E}(\varepsilon_i) \mathbf{X}_{i, \ast} \, \boldsymbol{\beta} + +\mathbb{E}(\varepsilon_i^2 ) - ( \mathbf{X}_{i, \ast} \, \boldsymbol{\beta})^2 +\\ & = \mathbb{E}(\varepsilon_i^2 ) \, \, \, = \, \, \, +\mbox{Var}(\varepsilon_i) \, \, \, = \, \, \, \sigma^2. +\end{align*} +\end{split}\]
    +

    Hence, \(y_i \sim \mathcal{N}( \mathbf{X}_{i, \ast} \, \boldsymbol{\beta}, \sigma^2)\), that is \(\boldsymbol{y}\) follows a normal distribution with +mean value \(\boldsymbol{X}\boldsymbol{\beta}\) and variance \(\sigma^2\) (not be confused with the singular values of the SVD).

    +
    +
    +

    Expectation value and variance for \(\boldsymbol{\beta}\)¶

    +

    With the OLS expressions for the optimal parameters \(\boldsymbol{\hat{\beta}}\) we can evaluate the expectation value

    +
    +\[ +\mathbb{E}(\boldsymbol{\hat{\beta}}) = \mathbb{E}[ (\mathbf{X}^{\top} \mathbf{X})^{-1}\mathbf{X}^{T} \mathbf{Y}]=(\mathbf{X}^{T} \mathbf{X})^{-1}\mathbf{X}^{T} \mathbb{E}[ \mathbf{Y}]=(\mathbf{X}^{T} \mathbf{X})^{-1} \mathbf{X}^{T}\mathbf{X}\boldsymbol{\beta}=\boldsymbol{\beta}. +\]
    +

    This means that the estimator of the regression parameters is unbiased.

    +

    We can also calculate the variance

    +

    The variance of the optimal value \(\boldsymbol{\hat{\beta}}\) is

    +
    +\[\begin{split} +\begin{eqnarray*} +\mbox{Var}(\boldsymbol{\hat{\beta}}) & = & \mathbb{E} \{ [\boldsymbol{\beta} - \mathbb{E}(\boldsymbol{\beta})] [\boldsymbol{\beta} - \mathbb{E}(\boldsymbol{\beta})]^{T} \} +\\ +& = & \mathbb{E} \{ [(\mathbf{X}^{T} \mathbf{X})^{-1} \, \mathbf{X}^{T} \mathbf{y} - \boldsymbol{\beta}] \, [(\mathbf{X}^{T} \mathbf{X})^{-1} \, \mathbf{X}^{T} \mathbf{y} - \boldsymbol{\beta}]^{T} \} +\\ +% & = & \mathbb{E} \{ [(\mathbf{X}^{T} \mathbf{X})^{-1} \, \mathbf{X}^{T} \mathbf{y}] \, [(\mathbf{X}^{T} \mathbf{X})^{-1} \, \mathbf{X}^{T} \mathbf{y}]^{T} \} - \boldsymbol{\beta} \, \boldsymbol{\beta}^{T} +% \\ +% & = & \mathbb{E} \{ (\mathbf{X}^{T} \mathbf{X})^{-1} \, \mathbf{X}^{T} \mathbf{y} \, \mathbf{y}^{T} \, \mathbf{X} \, (\mathbf{X}^{T} \mathbf{X})^{-1} \} - \boldsymbol{\beta} \, \boldsymbol{\beta}^{T} +% \\ +& = & (\mathbf{X}^{T} \mathbf{X})^{-1} \, \mathbf{X}^{T} \, \mathbb{E} \{ \mathbf{y} \, \mathbf{y}^{T} \} \, \mathbf{X} \, (\mathbf{X}^{T} \mathbf{X})^{-1} - \boldsymbol{\beta} \, \boldsymbol{\beta}^{T} +\\ +& = & (\mathbf{X}^{T} \mathbf{X})^{-1} \, \mathbf{X}^{T} \, \{ \mathbf{X} \, \boldsymbol{\beta} \, \boldsymbol{\beta}^{T} \, \mathbf{X}^{T} + \sigma^2 \} \, \mathbf{X} \, (\mathbf{X}^{T} \mathbf{X})^{-1} - \boldsymbol{\beta} \, \boldsymbol{\beta}^{T} +% \\ +% & = & (\mathbf{X}^T \mathbf{X})^{-1} \, \mathbf{X}^T \, \mathbf{X} \, \boldsymbol{\beta} \, \boldsymbol{\beta}^T \, \mathbf{X}^T \, \mathbf{X} \, (\mathbf{X}^T % \mathbf{X})^{-1} +% \\ +% & & + \, \, \sigma^2 \, (\mathbf{X}^T \mathbf{X})^{-1} \, \mathbf{X}^T \, \mathbf{X} \, (\mathbf{X}^T \mathbf{X})^{-1} - \boldsymbol{\beta} \boldsymbol{\beta}^T +\\ +& = & \boldsymbol{\beta} \, \boldsymbol{\beta}^{T} + \sigma^2 \, (\mathbf{X}^{T} \mathbf{X})^{-1} - \boldsymbol{\beta} \, \boldsymbol{\beta}^{T} +\, \, \, = \, \, \, \sigma^2 \, (\mathbf{X}^{T} \mathbf{X})^{-1}, +\end{eqnarray*} +\end{split}\]
    +

    where we have used that \(\mathbb{E} (\mathbf{y} \mathbf{y}^{T}) = +\mathbf{X} \, \boldsymbol{\beta} \, \boldsymbol{\beta}^{T} \, \mathbf{X}^{T} + +\sigma^2 \, \mathbf{I}_{nn}\). From \(\mbox{Var}(\boldsymbol{\beta}) = \sigma^2 +\, (\mathbf{X}^{T} \mathbf{X})^{-1}\), one obtains an estimate of the +variance of the estimate of the \(j\)-th regression coefficient: +\(\boldsymbol{\sigma}^2 (\boldsymbol{\beta}_j ) = \boldsymbol{\sigma}^2 [(\mathbf{X}^{T} \mathbf{X})^{-1}]_{jj} \). This may be used to +construct a confidence interval for the estimates.

    +

    In a similar way, we can obtain analytical expressions for say the +expectation values of the parameters \(\boldsymbol{\beta}\) and their variance +when we employ Ridge regression, allowing us again to define a confidence interval.

    +

    It is rather straightforward to show that

    +
    +\[ +\mathbb{E} \big[ \hat{\boldsymbol{\beta}}^{\mathrm{Ridge}} \big]=(\mathbf{X}^{T} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X})\boldsymbol{\beta}. +\]
    +

    We see clearly that +\(\mathbb{E} \big[ \hat{\boldsymbol{\beta}}^{\mathrm{Ridge}} \big] \not= \hat{\boldsymbol{\beta}}^{\mathrm{OLS}}\) for any \(\lambda > 0\).

    +

    We can also compute the variance as

    +
    +\[ +\mbox{Var}[\hat{\boldsymbol{\beta}}^{\mathrm{Ridge}}]=\sigma^2[ \mathbf{X}^{T} \mathbf{X} + \lambda \mathbf{I} ]^{-1} \mathbf{X}^{T} \mathbf{X} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I} ]^{-1}\}^{T}, +\]
    +

    and it is easy to see that if the parameter \(\lambda\) goes to infinity then the variance of Ridge parameters \(\boldsymbol{\beta}\) goes to zero.

    +

    With this, we can compute the difference

    +
    +\[ +\mbox{Var}[\hat{\boldsymbol{\beta}}^{\mathrm{OLS}}]-\mbox{Var}(\hat{\boldsymbol{\beta}}^{\mathrm{Ridge}})=\sigma^2 [ \mathbf{X}^{T} \mathbf{X} + \lambda \mathbf{I} ]^{-1}[ 2\lambda\mathbf{I} + \lambda^2 (\mathbf{X}^{T} \mathbf{X})^{-1} ] \{ [ \mathbf{X}^{T} \mathbf{X} + \lambda \mathbf{I} ]^{-1}\}^{T}. +\]
    +

    The difference is non-negative definite since each component of the +matrix product is non-negative definite. +This means the variance we obtain with the standard OLS will always for \(\lambda > 0\) be larger than the variance of \(\boldsymbol{\beta}\) obtained with the Ridge estimator. This has interesting consequences when we discuss the so-called bias-variance trade-off below.

    +

    For more discussions of Ridge regression and calculation of averages, Wessel van Wieringen’s article is highly recommended.

    +
    +
    +

    Material for lecture Thursday September 14¶

    +
    +
    +

    Deriving OLS from a probability distribution¶

    +

    Our basic assumption when we derived the OLS equations was to assume +that our output is determined by a given continuous function +\(f(\boldsymbol{x})\) and a random noise \(\boldsymbol{\epsilon}\) given by the normal +distribution with zero mean value and an undetermined variance +\(\sigma^2\).

    +

    We found above that the outputs \(\boldsymbol{y}\) have a mean value given by +\(\boldsymbol{X}\hat{\boldsymbol{\beta}}\) and variance \(\sigma^2\). Since the entries to +the design matrix are not stochastic variables, we can assume that the +probability distribution of our targets is also a normal distribution +but now with mean value \(\boldsymbol{X}\hat{\boldsymbol{\beta}}\). This means that a +single output \(y_i\) is given by the Gaussian distribution

    +
    +\[ +y_i\sim \mathcal{N}(\boldsymbol{X}_{i,*}\boldsymbol{\beta}, \sigma^2)=\frac{1}{\sqrt{2\pi\sigma^2}}\exp{\left[-\frac{(y_i-\boldsymbol{X}_{i,*}\boldsymbol{\beta})^2}{2\sigma^2}\right]}. +\]
    +
    +
    +

    Independent and Identically Distrubuted (iid)¶

    +

    We assume now that the various \(y_i\) values are stochastically distributed according to the above Gaussian distribution. +We define this distribution as

    +
    +\[ +p(y_i, \boldsymbol{X}\vert\boldsymbol{\beta})=\frac{1}{\sqrt{2\pi\sigma^2}}\exp{\left[-\frac{(y_i-\boldsymbol{X}_{i,*}\boldsymbol{\beta})^2}{2\sigma^2}\right]}, +\]
    +

    which reads as finding the likelihood of an event \(y_i\) with the input variables \(\boldsymbol{X}\) given the parameters (to be determined) \(\boldsymbol{\beta}\).

    +

    Since these events are assumed to be independent and identicall distributed we can build the probability distribution function (PDF) for all possible event \(\boldsymbol{y}\) as the product of the single events, that is we have

    +
    +\[ +p(\boldsymbol{y},\boldsymbol{X}\vert\boldsymbol{\beta})=\prod_{i=0}^{n-1}\frac{1}{\sqrt{2\pi\sigma^2}}\exp{\left[-\frac{(y_i-\boldsymbol{X}_{i,*}\boldsymbol{\beta})^2}{2\sigma^2}\right]}=\prod_{i=0}^{n-1}p(y_i,\boldsymbol{X}\vert\boldsymbol{\beta}). +\]
    +

    We will write this in a more compact form reserving \(\boldsymbol{D}\) for the domain of events, including the ouputs (targets) and the inputs. That is +in case we have a simple one-dimensional input and output case

    +
    +\[ +\boldsymbol{D}=[(x_0,y_0), (x_1,y_1),\dots, (x_{n-1},y_{n-1})]. +\]
    +

    In the more general case the various inputs should be replaced by the possible features represented by the input data set \(\boldsymbol{X}\). +We can now rewrite the above probability as

    +
    +\[ +p(\boldsymbol{D}\vert\boldsymbol{\beta})=\prod_{i=0}^{n-1}\frac{1}{\sqrt{2\pi\sigma^2}}\exp{\left[-\frac{(y_i-\boldsymbol{X}_{i,*}\boldsymbol{\beta})^2}{2\sigma^2}\right]}. +\]
    +

    It is a conditional probability (see below) and reads as the likelihood of a domain of events \(\boldsymbol{D}\) given a set of parameters \(\boldsymbol{\beta}\).

    +
    +
    +

    Maximum Likelihood Estimation (MLE)¶

    +

    In statistics, maximum likelihood estimation (MLE) is a method of +estimating the parameters of an assumed probability distribution, +given some observed data. This is achieved by maximizing a likelihood +function so that, under the assumed statistical model, the observed +data is the most probable.

    +

    We will assume here that our events are given by the above Gaussian +distribution and we will determine the optimal parameters \(\beta\) by +maximizing the above PDF. However, computing the derivatives of a +product function is cumbersome and can easily lead to overflow and/or +underflowproblems, with potentials for loss of numerical precision.

    +

    In practice, it is more convenient to maximize the logarithm of the +PDF because it is a monotonically increasing function of the argument. +Alternatively, and this will be our option, we will minimize the +negative of the logarithm since this is a monotonically decreasing +function.

    +

    Note also that maximization/minimization of the logarithm of the PDF +is equivalent to the maximization/minimization of the function itself.

    +
    +
    +

    A new Cost Function¶

    +

    We could now define a new cost function to minimize, namely the negative logarithm of the above PDF

    +
    +\[ +C(\boldsymbol{\beta}=-\log{\prod_{i=0}^{n-1}p(y_i,\boldsymbol{X}\vert\boldsymbol{\beta})}=-\sum_{i=0}^{n-1}\log{p(y_i,\boldsymbol{X}\vert\boldsymbol{\beta})}, +\]
    +

    which becomes

    +
    +\[ +C(\boldsymbol{\beta}=\frac{n}{2}\log{2\pi\sigma^2}+\frac{\vert\vert (\boldsymbol{y}-\boldsymbol{X}\boldsymbol{\beta})\vert\vert_2^2}{2\sigma^2}. +\]
    +

    Taking the derivative of the new cost function with respect to the parameters \(\beta\) we recognize our familiar OLS equation, namely

    +
    +\[ +\boldsymbol{X}^T\left(\boldsymbol{y}-\boldsymbol{X}\boldsymbol{\beta}\right) =0, +\]
    +

    which leads to the well-known OLS equation for the optimal paramters \(\beta\)

    +
    +\[ +\hat{\boldsymbol{\beta}}^{\mathrm{OLS}}=\left(\boldsymbol{X}^T\boldsymbol{X}\right)^{-1}\boldsymbol{X}^T\boldsymbol{y}! +\]
    +

    Before we make a similar analysis for Ridge and Lasso regression, we need a short reminder on statistics.

    +
    +
    +

    More basic Statistics and Bayes’ theorem¶

    +

    A central theorem in statistics is Bayes’ theorem. This theorem plays a similar role as the good old Pythagoras’ theorem in geometry. +Bayes’ theorem is extremely simple to derive. But to do so we need some basic axioms from statistics.

    +

    Assume we have two domains of events \(X=[x_0,x_1,\dots,x_{n-1}]\) and \(Y=[y_0,y_1,\dots,y_{n-1}]\).

    +

    We define also the likelihood for \(X\) and \(Y\) as \(p(X)\) and \(p(Y)\) respectively. +The likelihood of a specific event \(x_i\) (or \(y_i\)) is then written as \(p(X=x_i)\) or just \(p(x_i)=p_i\).

    +

    Union of events is given by.

    +
    +\[ +p(X \cup Y)= p(X)+p(Y)-p(X \cap Y). +\]
    +

    The product rule (aka joint probability) is given by.

    +
    +\[ +p(X \cup Y)= p(X,Y)= p(X\vert Y)p(Y)=p(Y\vert X)p(X), +\]
    +

    where we read \(p(X\vert Y)\) as the likelihood of obtaining \(X\) given \(Y\).

    +

    If we have independent events then \(p(X,Y)=p(X)p(Y)\).

    +
    +
    +

    Marginal Probability¶

    +

    The marginal probability is defined in terms of only one of the set of variables \(X,Y\). For a discrete probability we have

    +
    +\[ +p(X)=\sum_{i=0}^{n-1}p(X,Y=y_i)=\sum_{i=0}^{n-1}p(X\vert Y=y_i)p(Y=y_i)=\sum_{i=0}^{n-1}p(X\vert y_i)p(y_i). +\]
    +
    +
    +

    Conditional Probability¶

    +

    The conditional probability, if \(p(Y) > 0\), is

    +
    +\[ +p(X\vert Y)= \frac{p(X,Y)}{p(Y)}=\frac{p(X,Y)}{\sum_{i=0}^{n-1}p(Y\vert X=x_i)p(x_i)}. +\]
    +
    +
    +

    Bayes’ Theorem¶

    +

    If we combine the conditional probability with the marginal probability and the standard product rule, we have

    +
    +\[ +p(X\vert Y)= \frac{p(X,Y)}{p(Y)}, +\]
    +

    which we can rewrite as

    +
    +\[ +p(X\vert Y)= \frac{p(X,Y)}{\sum_{i=0}^{n-1}p(Y\vert X=x_i)p(x_i)}=\frac{p(Y\vert X)p(X)}{\sum_{i=0}^{n-1}p(Y\vert X=x_i)p(x_i)}, +\]
    +

    which is Bayes’ theorem. It allows us to evaluate the uncertainty in in \(X\) after we have observed \(Y\). We can easily interchange \(X\) with \(Y\).

    +
    +
    +

    Interpretations of Bayes’ Theorem¶

    +

    The quantity \(p(Y\vert X)\) on the right-hand side of the theorem is +evaluated for the observed data \(Y\) and can be viewed as a function of +the parameter space represented by \(X\). This function is not +necesseraly normalized and is normally called the likelihood function.

    +

    The function \(p(X)\) on the right hand side is called the prior while the function on the left hand side is the called the posterior probability. The denominator on the right hand side serves as a normalization factor for the posterior distribution.

    +

    Let us try to illustrate Bayes’ theorem through an example.

    +
    +
    +

    Example of Usage of Bayes’ theorem¶

    +

    Let us suppose that you are undergoing a series of mammography scans in +order to rule out possible breast cancer cases. We define the +sensitivity for a positive event by the variable \(X\). It takes binary +values with \(X=1\) representing a positive event and \(X=0\) being a +negative event. We reserve \(Y\) as a classification parameter for +either a negative or a positive breast cancer confirmation. (Short note on wordings: positive here means having breast cancer, although none of us would consider this being a positive thing).

    +

    We let \(Y=1\) represent the the case of having breast cancer and \(Y=0\) as not.

    +

    Let us assume that if you have breast cancer, the test will be positive with a probability of \(0.8\), that is we have

    +
    +\[ +p(X=1\vert Y=1) =0.8. +\]
    +

    This obviously sounds scary since many would conclude that if the test is positive, there is a likelihood of \(80\%\) for having cancer. +It is however not correct, as the following Bayesian analysis shows.

    +
    +
    +

    Doing it correctly¶

    +

    If we look at various national surveys on breast cancer, the general likelihood of developing breast cancer is a very small number. +Let us assume that the prior probability in the population as a whole is

    +
    +\[ +p(Y=1) =0.004. +\]
    +

    We need also to account for the fact that the test may produce a false positive result (false alarm). Let us here assume that we have

    +
    +\[ +p(X=1\vert Y=0) =0.1. +\]
    +

    Using Bayes’ theorem we can then find the posterior probability that the person has breast cancer in case of a positive test, that is we can compute

    +
    +\[ +p(Y=1\vert X=1)=\frac{p(X=1\vert Y=1)p(Y=1)}{p(X=1\vert Y=1)p(Y=1)+p(X=1\vert Y=0)p(Y=0)}=\frac{0.8\times 0.004}{0.8\times 0.004+0.1\times 0.996}=0.031. +\]
    +

    That is, in case of a positive test, there is only a \(3\%\) chance of having breast cancer!

    +
    +
    +

    Bayes’ Theorem and Ridge and Lasso Regression¶

    +

    Using Bayes’ theorem we can gain a better intuition about Ridge and Lasso regression.

    +

    For ordinary least squares we postulated that the maximum likelihood for the doamin of events \(\boldsymbol{D}\) (one-dimensional case)

    +
    +\[ +\boldsymbol{D}=[(x_0,y_0), (x_1,y_1),\dots, (x_{n-1},y_{n-1})], +\]
    +

    is given by

    +
    +\[ +p(\boldsymbol{D}\vert\boldsymbol{\beta})=\prod_{i=0}^{n-1}\frac{1}{\sqrt{2\pi\sigma^2}}\exp{\left[-\frac{(y_i-\boldsymbol{X}_{i,*}\boldsymbol{\beta})^2}{2\sigma^2}\right]}. +\]
    +

    In Bayes’ theorem this function plays the role of the so-called likelihood. We could now ask the question what is the posterior probability of a parameter set \(\boldsymbol{\beta}\) given a domain of events \(\boldsymbol{D}\)? That is, how can we define the posterior probability

    +
    +\[ +p(\boldsymbol{\beta}\vert\boldsymbol{D}). +\]
    +

    Bayes’ theorem comes to our rescue here since (omitting the normalization constant)

    +
    +\[ +p(\boldsymbol{\beta}\vert\boldsymbol{D})\propto p(\boldsymbol{D}\vert\boldsymbol{\beta})p(\boldsymbol{\beta}). +\]
    +

    We have a model for \(p(\boldsymbol{D}\vert\boldsymbol{\beta})\) but need one for the prior \(p(\boldsymbol{\beta}\)!

    +
    +
    +

    Ridge and Bayes¶

    +

    With the posterior probability defined by a likelihood which we have +already modeled and an unknown prior, we are now ready to make +additional models for the prior.

    +

    We can, based on our discussions of the variance of \(\boldsymbol{\beta}\) and the mean value, assume that the prior for the values \(\boldsymbol{\beta}\) is given by a Gaussian with mean value zero and variance \(\tau^2\), that is

    +
    +\[ +p(\boldsymbol{\beta})=\prod_{j=0}^{p-1}\exp{\left(-\frac{\beta_j^2}{2\tau^2}\right)}. +\]
    +

    Our posterior probability becomes then (omitting the normalization factor which is just a constant)

    +
    +\[ +p(\boldsymbol{\beta\vert\boldsymbol{D})}=\prod_{i=0}^{n-1}\frac{1}{\sqrt{2\pi\sigma^2}}\exp{\left[-\frac{(y_i-\boldsymbol{X}_{i,*}\boldsymbol{\beta})^2}{2\sigma^2}\right]}\prod_{j=0}^{p-1}\exp{\left(-\frac{\beta_j^2}{2\tau^2}\right)}. +\]
    +

    We can now optimize this quantity with respect to \(\boldsymbol{\beta}\). As we +did for OLS, this is most conveniently done by taking the negative +logarithm of the posterior probability. Doing so and leaving out the +constants terms that do not depend on \(\beta\), we have

    +
    +\[ +C(\boldsymbol{\beta})=\frac{\vert\vert (\boldsymbol{y}-\boldsymbol{X}\boldsymbol{\beta})\vert\vert_2^2}{2\sigma^2}+\frac{1}{2\tau^2}\vert\vert\boldsymbol{\beta}\vert\vert_2^2, +\]
    +

    and replacing \(1/2\tau^2\) with \(\lambda\) we have

    +
    +\[ +C(\boldsymbol{\beta})=\frac{\vert\vert (\boldsymbol{y}-\boldsymbol{X}\boldsymbol{\beta})\vert\vert_2^2}{2\sigma^2}+\lambda\vert\vert\boldsymbol{\beta}\vert\vert_2^2, +\]
    +

    which is our Ridge cost function! Nice, isn’t it?

    +
    +
    +

    Lasso and Bayes¶

    +

    To derive the Lasso cost function, we simply replace the Gaussian prior with an exponential distribution (Laplace in this case) with zero mean value, that is

    +
    +\[ +p(\boldsymbol{\beta})=\prod_{j=0}^{p-1}\exp{\left(-\frac{\vert\beta_j\vert}{\tau}\right)}. +\]
    +

    Our posterior probability becomes then (omitting the normalization factor which is just a constant)

    +
    +\[ +p(\boldsymbol{\beta}\vert\boldsymbol{D})=\prod_{i=0}^{n-1}\frac{1}{\sqrt{2\pi\sigma^2}}\exp{\left[-\frac{(y_i-\boldsymbol{X}_{i,*}\boldsymbol{\beta})^2}{2\sigma^2}\right]}\prod_{j=0}^{p-1}\exp{\left(-\frac{\vert\beta_j\vert}{\tau}\right)}. +\]
    +

    Taking the negative +logarithm of the posterior probability and leaving out the +constants terms that do not depend on \(\beta\), we have

    +
    +\[ +C(\boldsymbol{\beta}=\frac{\vert\vert (\boldsymbol{y}-\boldsymbol{X}\boldsymbol{\beta})\vert\vert_2^2}{2\sigma^2}+\frac{1}{\tau}\vert\vert\boldsymbol{\beta}\vert\vert_1, +\]
    +

    and replacing \(1/\tau\) with \(\lambda\) we have

    +
    +\[ +C(\boldsymbol{\beta}=\frac{\vert\vert (\boldsymbol{y}-\boldsymbol{X}\boldsymbol{\beta})\vert\vert_2^2}{2\sigma^2}+\lambda\vert\vert\boldsymbol{\beta}\vert\vert_1, +\]
    +

    which is our Lasso cost function!

    +
    +
    +

    Why resampling methods¶

    +

    Before we proceed, we need to rethink what we have been doing. In our +eager to fit the data, we have omitted several important elements in +our regression analysis. In what follows we will

    +
      +
    1. look at statistical properties, including a discussion of mean values, variance and the so-called bias-variance tradeoff

    2. +
    3. introduce resampling techniques like cross-validation, bootstrapping and jackknife and more

    4. +
    +

    and discuss how to select a given model (one of the difficult parts in machine learning).

    +
    +
    +

    Resampling methods¶

    +

    Resampling methods are an indispensable tool in modern +statistics. They involve repeatedly drawing samples from a training +set and refitting a model of interest on each sample in order to +obtain additional information about the fitted model. For example, in +order to estimate the variability of a linear regression fit, we can +repeatedly draw different samples from the training data, fit a linear +regression to each new sample, and then examine the extent to which +the resulting fits differ. Such an approach may allow us to obtain +information that would not be available from fitting the model only +once using the original training sample.

    +

    Two resampling methods are often used in Machine Learning analyses,

    +
      +
    1. The bootstrap method

    2. +
    3. and Cross-Validation

    4. +
    +

    In addition there are several other methods such as the Jackknife and the Blocking methods. We will discuss in particular +cross-validation and the bootstrap method.

    +
    +
    +

    Resampling approaches can be computationally expensive¶

    +

    Resampling approaches can be computationally expensive, because they +involve fitting the same statistical method multiple times using +different subsets of the training data. However, due to recent +advances in computing power, the computational requirements of +resampling methods generally are not prohibitive. In this chapter, we +discuss two of the most commonly used resampling methods, +cross-validation and the bootstrap. Both methods are important tools +in the practical application of many statistical learning +procedures. For example, cross-validation can be used to estimate the +test error associated with a given statistical learning method in +order to evaluate its performance, or to select the appropriate level +of flexibility. The process of evaluating a model’s performance is +known as model assessment, whereas the process of selecting the proper +level of flexibility for a model is known as model selection. The +bootstrap is widely used.

    +
    +
    +

    Why resampling methods ?¶

    +

    Statistical analysis.

    +
      +
    • Our simulations can be treated as computer experiments. This is particularly the case for Monte Carlo methods which are widely used in statistical analyses.

    • +
    • The results can be analysed with the same statistical tools as we would use when analysing experimental data.

    • +
    • As in all experiments, we are looking for expectation values and an estimate of how accurate they are, i.e., possible sources for errors.

    • +
    +
    +
    +

    Statistical analysis¶

    +
      +
    • As in other experiments, many numerical experiments have two classes of errors:

      +
        +
      • Statistical errors

      • +
      • Systematical errors

      • +
      +
    • +
    • Statistical errors can be estimated using standard tools from statistics

    • +
    • Systematical errors are method specific and must be treated differently from case to case.

    • +
    +
    +
    +

    Resampling methods¶

    +

    With all these analytical equations for both the OLS and Ridge +regression, we will now outline how to assess a given model. This will +lead to a discussion of the so-called bias-variance tradeoff (see +below) and so-called resampling methods.

    +

    One of the quantities we have discussed as a way to measure errors is +the mean-squared error (MSE), mainly used for fitting of continuous +functions. Another choice is the absolute error.

    +

    In the discussions below we will focus on the MSE and in particular since we will split the data into test and training data, +we discuss the

    +
      +
    1. prediction error or simply the test error \(\mathrm{Err_{Test}}\), where we have a fixed training set and the test error is the MSE arising from the data reserved for testing. We discuss also the

    2. +
    3. training error \(\mathrm{Err_{Train}}\), which is the average loss over the training data.

    4. +
    +

    As our model becomes more and more complex, more of the training data tends to used. The training may thence adapt to more complicated structures in the data. This may lead to a decrease in the bias (see below for code example) and a slight increase of the variance for the test error. +For a certain level of complexity the test error will reach minimum, before starting to increase again. The +training error reaches a saturation.

    +
    +
    +

    Resampling methods: Bootstrap¶

    +

    Bootstrapping is a non-parametric approach to statistical inference +that substitutes computation for more traditional distributional +assumptions and asymptotic results. Bootstrapping offers a number of +advantages:

    +
      +
    1. The bootstrap is quite general, although there are some cases in which it fails.

    2. +
    3. Because it does not require distributional assumptions (such as normally distributed errors), the bootstrap can provide more accurate inferences when the data are not well behaved or when the sample size is small.

    4. +
    5. It is possible to apply the bootstrap to statistics with sampling distributions that are difficult to derive, even asymptotically.

    6. +
    7. It is relatively simple to apply the bootstrap to complex data-collection plans (such as stratified and clustered samples).

    8. +
    +

    The textbook by Davison on the Bootstrap Methods and their Applications provides many more insights and proofs. In this course we will take a more practical approach and use the results and theorems provided in the literature. For those interested in reading more about the bootstrap methods, we recommend the above text and the one by Efron and Tibshirani.

    +

    Before we proceed however, we need to remind ourselves about a central theorem in statistics, namely the so-called central limit theorem.

    +
    +
    +

    The Central Limit Theorem¶

    +

    Suppose we have a PDF \(p(x)\) from which we generate a series \(N\) +of averages \(\mathbb{E}[x_i]\). Each mean value \(\mathbb{E}[x_i]\) +is viewed as the average of a specific measurement, e.g., throwing +dice 100 times and then taking the average value, or producing a certain +amount of random numbers. +For notational ease, we set \(\mathbb{E}[x_i]=x_i\) in the discussion +which follows. We do the same for \(\mathbb{E}[z]=z\).

    +

    If we compute the mean \(z\) of \(m\) such mean values \(x_i\)

    +
    +\[ +z=\frac{x_1+x_2+\dots+x_m}{m}, +\]
    +

    the question we pose is which is the PDF of the new variable \(z\).

    +
    +
    +

    Finding the Limit¶

    +

    The probability of obtaining an average value \(z\) is the product of the +probabilities of obtaining arbitrary individual mean values \(x_i\), +but with the constraint that the average is \(z\). We can express this through +the following expression

    +
    +\[ +\tilde{p}(z)=\int dx_1p(x_1)\int dx_2p(x_2)\dots\int dx_mp(x_m) + \delta(z-\frac{x_1+x_2+\dots+x_m}{m}), +\]
    +

    where the \(\delta\)-function enbodies the constraint that the mean is \(z\). +All measurements that lead to each individual \(x_i\) are expected to +be independent, which in turn means that we can express \(\tilde{p}\) as the +product of individual \(p(x_i)\). The independence assumption is important in the derivation of the central limit theorem.

    +
    +
    +

    Rewriting the \(\delta\)-function¶

    +

    If we use the integral expression for the \(\delta\)-function

    +
    +\[ +\delta(z-\frac{x_1+x_2+\dots+x_m}{m})=\frac{1}{2\pi}\int_{-\infty}^{\infty} + dq\exp{\left(iq(z-\frac{x_1+x_2+\dots+x_m}{m})\right)}, +\]
    +

    and inserting \(e^{i\mu q-i\mu q}\) where \(\mu\) is the mean value +we arrive at

    +
    +\[ +\tilde{p}(z)=\frac{1}{2\pi}\int_{-\infty}^{\infty} + dq\exp{\left(iq(z-\mu)\right)}\left[\int_{-\infty}^{\infty} + dxp(x)\exp{\left(iq(\mu-x)/m\right)}\right]^m, +\]
    +

    with the integral over \(x\) resulting in

    +
    +\[ +\int_{-\infty}^{\infty}dxp(x)\exp{\left(iq(\mu-x)/m\right)}= + \int_{-\infty}^{\infty}dxp(x) + \left[1+\frac{iq(\mu-x)}{m}-\frac{q^2(\mu-x)^2}{2m^2}+\dots\right]. +\]
    +
    +
    +

    Identifying Terms¶

    +

    The second term on the rhs disappears since this is just the mean and +employing the definition of \(\sigma^2\) we have

    +
    +\[ +\int_{-\infty}^{\infty}dxp(x)e^{\left(iq(\mu-x)/m\right)}= + 1-\frac{q^2\sigma^2}{2m^2}+\dots, +\]
    +

    resulting in

    +
    +\[ +\left[\int_{-\infty}^{\infty}dxp(x)\exp{\left(iq(\mu-x)/m\right)}\right]^m\approx + \left[1-\frac{q^2\sigma^2}{2m^2}+\dots \right]^m, +\]
    +

    and in the limit \(m\rightarrow \infty\) we obtain

    +
    +\[ +\tilde{p}(z)=\frac{1}{\sqrt{2\pi}(\sigma/\sqrt{m})} + \exp{\left(-\frac{(z-\mu)^2}{2(\sigma/\sqrt{m})^2}\right)}, +\]
    +

    which is the normal distribution with variance +\(\sigma^2_m=\sigma^2/m\), where \(\sigma\) is the variance of the PDF \(p(x)\) +and \(\mu\) is also the mean of the PDF \(p(x)\).

    +
    +
    +

    Wrapping it up¶

    +

    Thus, the central limit theorem states that the PDF \(\tilde{p}(z)\) of +the average of \(m\) random values corresponding to a PDF \(p(x)\) +is a normal distribution whose mean is the +mean value of the PDF \(p(x)\) and whose variance is the variance +of the PDF \(p(x)\) divided by \(m\), the number of values used to compute \(z\).

    +

    The central limit theorem leads to the well-known expression for the +standard deviation, given by

    +
    +\[ +\sigma_m= +\frac{\sigma}{\sqrt{m}}. +\]
    +

    The latter is true only if the average value is known exactly. This is obtained in the limit +\(m\rightarrow \infty\) only. Because the mean and the variance are measured quantities we obtain +the familiar expression in statistics (the so-called Bessel correction)

    +
    +\[ +\sigma_m\approx +\frac{\sigma}{\sqrt{m-1}}. +\]
    +

    In many cases however the above estimate for the standard deviation, +in particular if correlations are strong, may be too simplistic. Keep +in mind that we have assumed that the variables \(x\) are independent +and identically distributed. This is obviously not always the +case. For example, the random numbers (or better pseudorandom numbers) +we generate in various calculations do always exhibit some +correlations.

    +

    The theorem is satisfied by a large class of PDFs. Note however that for a +finite \(m\), it is not always possible to find a closed form /analytic expression for +\(\tilde{p}(x)\).

    +
    +
    +

    Confidence Intervals¶

    +

    Confidence intervals are used in statistics and represent a type of estimate +computed from the observed data. This gives a range of values for an +unknown parameter such as the parameters \(\boldsymbol{\beta}\) from linear regression.

    +

    With the OLS expressions for the parameters \(\boldsymbol{\beta}\) we found +\(\mathbb{E}(\boldsymbol{\beta}) = \boldsymbol{\beta}\), which means that the estimator of the regression parameters is unbiased.

    +

    We found also that the variance of the estimate of the \(j\)-th regression coefficient is +\(\boldsymbol{\sigma}^2 (\boldsymbol{\beta}_j ) = \boldsymbol{\sigma}^2 [(\mathbf{X}^{T} \mathbf{X})^{-1}]_{jj} \).

    +

    This quantity will be used to +construct a confidence interval for the estimates.

    +
    +
    +

    Standard Approach based on the Normal Distribution¶

    +

    We will assume that the parameters \(\beta\) follow a normal +distribution. We can then define the confidence interval. Here we will be using as +shorthands \(\mu_{\beta}\) for the above mean value and \(\sigma_{\beta}\) +for the standard deviation. We have then a confidence interval

    +
    +\[ +\left(\mu_{\beta}\pm \frac{z\sigma_{\beta}}{\sqrt{n}}\right), +\]
    +

    where \(z\) defines the level of certainty (or confidence). For a normal +distribution typical parameters are \(z=2.576\) which corresponds to a +confidence of \(99\%\) while \(z=1.96\) corresponds to a confidence of +\(95\%\). A confidence level of \(95\%\) is commonly used and it is +normally referred to as a two-sigmas confidence level, that is we +approximate \(z\approx 2\).

    +

    For more discussions of confidence intervals (and in particular linked with a discussion of the bootstrap method), see chapter 5 of the textbook by Davison on the Bootstrap Methods and their Applications

    +

    In this text you will also find an in-depth discussion of the +Bootstrap method, why it works and various theorems related to it.

    +
    +
    +

    Resampling methods: Bootstrap background¶

    +

    Since \(\widehat{\beta} = \widehat{\beta}(\boldsymbol{X})\) is a function of random variables, +\(\widehat{\beta}\) itself must be a random variable. Thus it has +a pdf, call this function \(p(\boldsymbol{t})\). The aim of the bootstrap is to +estimate \(p(\boldsymbol{t})\) by the relative frequency of +\(\widehat{\beta}\). You can think of this as using a histogram +in the place of \(p(\boldsymbol{t})\). If the relative frequency closely +resembles \(p(\vec{t})\), then using numerics, it is straight forward to +estimate all the interesting parameters of \(p(\boldsymbol{t})\) using point +estimators.

    +
    +
    +

    Resampling methods: More Bootstrap background¶

    +

    In the case that \(\widehat{\beta}\) has +more than one component, and the components are independent, we use the +same estimator on each component separately. If the probability +density function of \(X_i\), \(p(x)\), had been known, then it would have +been straightforward to do this by:

    +
      +
    1. Drawing lots of numbers from \(p(x)\), suppose we call one such set of numbers \((X_1^*, X_2^*, \cdots, X_n^*)\).

    2. +
    3. Then using these numbers, we could compute a replica of \(\widehat{\beta}\) called \(\widehat{\beta}^*\).

    4. +
    +

    By repeated use of the above two points, many +estimates of \(\widehat{\beta}\) can be obtained. The +idea is to use the relative frequency of \(\widehat{\beta}^*\) +(think of a histogram) as an estimate of \(p(\boldsymbol{t})\).

    +
    +
    +

    Resampling methods: Bootstrap approach¶

    +

    But +unless there is enough information available about the process that +generated \(X_1,X_2,\cdots,X_n\), \(p(x)\) is in general +unknown. Therefore, Efron in 1979 asked the +question: What if we replace \(p(x)\) by the relative frequency +of the observation \(X_i\)?

    +

    If we draw observations in accordance with +the relative frequency of the observations, will we obtain the same +result in some asymptotic sense? The answer is yes.

    +
    +
    +

    Resampling methods: Bootstrap steps¶

    +

    The independent bootstrap works like this:

    +
      +
    1. Draw with replacement \(n\) numbers for the observed variables \(\boldsymbol{x} = (x_1,x_2,\cdots,x_n)\).

    2. +
    3. Define a vector \(\boldsymbol{x}^*\) containing the values which were drawn from \(\boldsymbol{x}\).

    4. +
    5. Using the vector \(\boldsymbol{x}^*\) compute \(\widehat{\beta}^*\) by evaluating \(\widehat \beta\) under the observations \(\boldsymbol{x}^*\).

    6. +
    7. Repeat this process \(k\) times.

    8. +
    +

    When you are done, you can draw a histogram of the relative frequency +of \(\widehat \beta^*\). This is your estimate of the probability +distribution \(p(t)\). Using this probability distribution you can +estimate any statistics thereof. In principle you never draw the +histogram of the relative frequency of \(\widehat{\beta}^*\). Instead +you use the estimators corresponding to the statistic of interest. For +example, if you are interested in estimating the variance of \(\widehat +\beta\), apply the etsimator \(\widehat \sigma^2\) to the values +\(\widehat \beta^*\).

    +
    +
    +

    Code example for the Bootstrap method¶

    +

    The following code starts with a Gaussian distribution with mean value +\(\mu =100\) and variance \(\sigma=15\). We use this to generate the data +used in the bootstrap analysis. The bootstrap analysis returns a data +set after a given number of bootstrap operations (as many as we have +data points). This data set consists of estimated mean values for each +bootstrap operation. The histogram generated by the bootstrap method +shows that the distribution for these mean values is also a Gaussian, +centered around the mean value \(\mu=100\) but with standard deviation +\(\sigma/\sqrt{n}\), where \(n\) is the number of bootstrap samples (in +this case the same as the number of original data points). The value +of the standard deviation is what we expect from the central limit +theorem.

    +
    +
    +
    %matplotlib inline
    +
    +import numpy as np
    +from time import time
    +from scipy.stats import norm
    +import matplotlib.pyplot as plt
    +
    +# Returns mean of bootstrap samples 
    +# Bootstrap algorithm
    +def bootstrap(data, datapoints):
    +    t = np.zeros(datapoints)
    +    n = len(data)
    +    # non-parametric bootstrap         
    +    for i in range(datapoints):
    +        t[i] = np.mean(data[np.random.randint(0,n,n)])
    +    # analysis    
    +    print("Bootstrap Statistics :")
    +    print("original           bias      std. error")
    +    print("%8g %8g %14g %15g" % (np.mean(data), np.std(data),np.mean(t),np.std(t)))
    +    return t
    +
    +# We set the mean value to 100 and the standard deviation to 15
    +mu, sigma = 100, 15
    +datapoints = 10000
    +# We generate random numbers according to the normal distribution
    +x = mu + sigma*np.random.randn(datapoints)
    +# bootstrap returns the data sample                                    
    +t = bootstrap(x, datapoints)
    +
    +
    +
    +
    +
    Bootstrap Statistics :
    +original           bias      std. error
    + 99.9841  15.0402        99.9828          0.1512
    +
    +
    +
    +
    +

    We see that our new variance and from that the standard deviation, agrees with the central limit theorem.

    +
    +
    +

    Plotting the Histogram¶

    +
    +
    +
    # the histogram of the bootstrapped data (normalized data if density = True)
    +n, binsboot, patches = plt.hist(t, 50, density=True, facecolor='red', alpha=0.75)
    +# add a 'best fit' line  
    +y = norm.pdf(binsboot, np.mean(t), np.std(t))
    +lt = plt.plot(binsboot, y, 'b', linewidth=1)
    +plt.xlabel('x')
    +plt.ylabel('Probability')
    +plt.grid(True)
    +plt.show()
    +
    +
    +
    +
    +_images/week37_144_0.png +
    +
    +
    +
    +

    The bias-variance tradeoff¶

    +

    We will discuss the bias-variance tradeoff in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks. Consider a dataset \(\mathcal{D}\) consisting of the data +\(\mathbf{X}_\mathcal{D}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\}\).

    +

    Let us assume that the true data is generated from a noisy model

    +
    +\[ +\boldsymbol{y}=f(\boldsymbol{x}) + \boldsymbol{\epsilon} +\]
    +

    where \(\epsilon\) is normally distributed with mean zero and standard deviation \(\sigma^2\).

    +

    In our derivation of the ordinary least squares method we defined then +an approximation to the function \(f\) in terms of the parameters +\(\boldsymbol{\beta}\) and the design matrix \(\boldsymbol{X}\) which embody our model, +that is \(\boldsymbol{\tilde{y}}=\boldsymbol{X}\boldsymbol{\beta}\).

    +

    Thereafter we found the parameters \(\boldsymbol{\beta}\) by optimizing the means squared error via the so-called cost function

    +
    +\[ +C(\boldsymbol{X},\boldsymbol{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]. +\]
    +

    We can rewrite this as

    +
    +\[ +\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\sigma^2. +\]
    +

    The three terms represent the square of the bias of the learning +method, which can be thought of as the error caused by the simplifying +assumptions built into the method. The second term represents the +variance of the chosen model and finally the last terms is variance of +the error \(\boldsymbol{\epsilon}\).

    +

    To derive this equation, we need to recall that the variance of \(\boldsymbol{y}\) and \(\boldsymbol{\epsilon}\) are both equal to \(\sigma^2\). The mean value of \(\boldsymbol{\epsilon}\) is by definition equal to zero. Furthermore, the function \(f\) is not a stochastics variable, idem for \(\boldsymbol{\tilde{y}}\). +We use a more compact notation in terms of the expectation value

    +
    +\[ +\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\mathbb{E}\left[(\boldsymbol{f}+\boldsymbol{\epsilon}-\boldsymbol{\tilde{y}})^2\right], +\]
    +

    and adding and subtracting \(\mathbb{E}\left[\boldsymbol{\tilde{y}}\right]\) we get

    +
    +\[ +\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\mathbb{E}\left[(\boldsymbol{f}+\boldsymbol{\epsilon}-\boldsymbol{\tilde{y}}+\mathbb{E}\left[\boldsymbol{\tilde{y}}\right]-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2\right], +\]
    +

    which, using the abovementioned expectation values can be rewritten as

    +
    +\[ +\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\mathbb{E}\left[(\boldsymbol{y}-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2\right]+\mathrm{Var}\left[\boldsymbol{\tilde{y}}\right]+\sigma^2, +\]
    +

    that is the rewriting in terms of the so-called bias, the variance of the model \(\boldsymbol{\tilde{y}}\) and the variance of \(\boldsymbol{\epsilon}\).

    +
    +
    +

    A way to Read the Bias-Variance Tradeoff¶

    + + +

    Figure 1:

    +
    +
    +

    Example code for Bias-Variance tradeoff¶

    +
    +
    +
    import matplotlib.pyplot as plt
    +import numpy as np
    +from sklearn.linear_model import LinearRegression, Ridge, Lasso
    +from sklearn.preprocessing import PolynomialFeatures
    +from sklearn.model_selection import train_test_split
    +from sklearn.pipeline import make_pipeline
    +from sklearn.utils import resample
    +
    +np.random.seed(2018)
    +
    +n = 500
    +n_boostraps = 100
    +degree = 18  # A quite high value, just to show.
    +noise = 0.1
    +
    +# Make data set.
    +x = np.linspace(-1, 3, n).reshape(-1, 1)
    +y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2) + np.random.normal(0, 0.1, x.shape)
    +
    +# Hold out some test data that is never used in training.
    +x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
    +
    +# Combine x transformation and model into one operation.
    +# Not neccesary, but convenient.
    +model = make_pipeline(PolynomialFeatures(degree=degree), LinearRegression(fit_intercept=False))
    +
    +# The following (m x n_bootstraps) matrix holds the column vectors y_pred
    +# for each bootstrap iteration.
    +y_pred = np.empty((y_test.shape[0], n_boostraps))
    +for i in range(n_boostraps):
    +    x_, y_ = resample(x_train, y_train)
    +
    +    # Evaluate the new model on the same test data each time.
    +    y_pred[:, i] = model.fit(x_, y_).predict(x_test).ravel()
    +
    +# Note: Expectations and variances taken w.r.t. different training
    +# data sets, hence the axis=1. Subsequent means are taken across the test data
    +# set in order to obtain a total value, but before this we have error/bias/variance
    +# calculated per data point in the test set.
    +# Note 2: The use of keepdims=True is important in the calculation of bias as this 
    +# maintains the column vector form. Dropping this yields very unexpected results.
    +error = np.mean( np.mean((y_test - y_pred)**2, axis=1, keepdims=True) )
    +bias = np.mean( (y_test - np.mean(y_pred, axis=1, keepdims=True))**2 )
    +variance = np.mean( np.var(y_pred, axis=1, keepdims=True) )
    +print('Error:', error)
    +print('Bias^2:', bias)
    +print('Var:', variance)
    +print('{} >= {} + {} = {}'.format(error, bias, variance, bias+variance))
    +
    +plt.plot(x[::5, :], y[::5, :], label='f(x)')
    +plt.scatter(x_test, y_test, label='Data points')
    +plt.scatter(x_test, np.mean(y_pred, axis=1), label='Pred')
    +plt.legend()
    +plt.show()
    +
    +
    +
    +
    +
    Error: 0.013121574015585152
    +Bias^2: 0.012073649446193166
    +Var: 0.0010479245693919886
    +0.013121574015585152 >= 0.012073649446193166 + 0.0010479245693919886 = 0.013121574015585155
    +
    +
    +_images/week37_160_1.png +
    +
    +
    +
    +

    Understanding what happens¶

    +
    +
    +
    import matplotlib.pyplot as plt
    +import numpy as np
    +from sklearn.linear_model import LinearRegression, Ridge, Lasso
    +from sklearn.preprocessing import PolynomialFeatures
    +from sklearn.model_selection import train_test_split
    +from sklearn.pipeline import make_pipeline
    +from sklearn.utils import resample
    +
    +np.random.seed(2018)
    +
    +n = 40
    +n_boostraps = 100
    +maxdegree = 14
    +
    +
    +# Make data set.
    +x = np.linspace(-3, 3, n).reshape(-1, 1)
    +y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2)+ np.random.normal(0, 0.1, x.shape)
    +error = np.zeros(maxdegree)
    +bias = np.zeros(maxdegree)
    +variance = np.zeros(maxdegree)
    +polydegree = np.zeros(maxdegree)
    +x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
    +
    +for degree in range(maxdegree):
    +    model = make_pipeline(PolynomialFeatures(degree=degree), LinearRegression(fit_intercept=False))
    +    y_pred = np.empty((y_test.shape[0], n_boostraps))
    +    for i in range(n_boostraps):
    +        x_, y_ = resample(x_train, y_train)
    +        y_pred[:, i] = model.fit(x_, y_).predict(x_test).ravel()
    +
    +    polydegree[degree] = degree
    +    error[degree] = np.mean( np.mean((y_test - y_pred)**2, axis=1, keepdims=True) )
    +    bias[degree] = np.mean( (y_test - np.mean(y_pred, axis=1, keepdims=True))**2 )
    +    variance[degree] = np.mean( np.var(y_pred, axis=1, keepdims=True) )
    +    print('Polynomial degree:', degree)
    +    print('Error:', error[degree])
    +    print('Bias^2:', bias[degree])
    +    print('Var:', variance[degree])
    +    print('{} >= {} + {} = {}'.format(error[degree], bias[degree], variance[degree], bias[degree]+variance[degree]))
    +
    +plt.plot(polydegree, error, label='Error')
    +plt.plot(polydegree, bias, label='bias')
    +plt.plot(polydegree, variance, label='Variance')
    +plt.legend()
    +plt.show()
    +
    +
    +
    +
    +
    Polynomial degree: 0
    +Error: 0.32149601703519115
    +Bias^2: 0.3123314713548606
    +Var: 0.009164545680330616
    +0.32149601703519115 >= 0.3123314713548606 + 0.009164545680330616 = 0.3214960170351912
    +Polynomial degree: 1
    +Error: 0.08426840630693411
    +Bias^2: 0.0796891867672603
    +Var: 0.004579219539673834
    +0.08426840630693411 >= 0.0796891867672603 + 0.004579219539673834 = 0.08426840630693413
    +Polynomial degree: 2
    +Error: 0.10398646080125035
    +Bias^2: 0.1007711427354898
    +Var: 0.0032153180657605116
    +0.10398646080125035 >= 0.1007711427354898 + 0.0032153180657605116 = 0.10398646080125032
    +Polynomial degree: 3
    +Error: 0.06547790180152355
    +Bias^2: 0.06208238634231949
    +Var: 0.0033955154592040936
    +0.06547790180152355 >= 0.06208238634231949 + 0.0033955154592040936 = 0.06547790180152359
    +Polynomial degree: 4
    +Error: 0.06844519414009445
    +Bias^2: 0.06453579006728324
    +Var: 0.003909404072811226
    +0.06844519414009445 >= 0.06453579006728324 + 0.003909404072811226 = 0.06844519414009446
    +Polynomial degree: 5
    +Error: 0.05227921801205686
    +Bias^2: 0.0481872773043029
    +Var: 0.004091940707753939
    +0.05227921801205686 >= 0.0481872773043029 + 0.004091940707753939 = 0.052279218012056844
    +
    +
    +
    Polynomial degree: 6
    +Error: 0.037813671417389005
    +Bias^2: 0.033657685071527665
    +Var: 0.00415598634586135
    +0.037813671417389005 >= 0.033657685071527665 + 0.00415598634586135 = 0.03781367141738902
    +Polynomial degree: 7
    +Error: 0.02760977349102253
    +Bias^2: 0.022999498260366312
    +Var: 0.004610275230656212
    +0.02760977349102253 >= 0.022999498260366312 + 0.004610275230656212 = 0.027609773491022525
    +Polynomial degree: 8
    +Error: 0.017355848195593347
    +Bias^2: 0.010331721306655127
    +Var: 0.007024126888938232
    +0.017355848195593347 >= 0.010331721306655127 + 0.007024126888938232 = 0.01735584819559336
    +Polynomial degree: 9
    +Error: 0.02660572763718093
    +Bias^2: 0.010018312644137363
    +Var: 0.016587414993043573
    +0.02660572763718093 >= 0.010018312644137363 + 0.016587414993043573 = 0.026605727637180936
    +Polynomial degree: 10
    +Error: 0.021592704588025025
    +Bias^2: 0.010516485576645508
    +Var: 0.011076219011379514
    +0.021592704588025025 >= 0.010516485576645508 + 0.011076219011379514 = 0.021592704588025022
    +
    +
    +
    Polynomial degree: 11
    +Error: 0.07160048164233104
    +Bias^2: 0.014436800088904942
    +Var: 0.05716368155342608
    +0.07160048164233104 >= 0.014436800088904942 + 0.05716368155342608 = 0.07160048164233102
    +Polynomial degree: 12
    +Error: 0.11547777218872497
    +Bias^2: 0.01628578269596628
    +Var: 0.09919198949275869
    +0.11547777218872497 >= 0.01628578269596628 + 0.09919198949275869 = 0.11547777218872497
    +
    +
    +
    Polynomial degree: 13
    +Error: 0.22842468702219465
    +Bias^2: 0.01975416527185249
    +Var: 0.20867052175034223
    +0.22842468702219465 >= 0.01975416527185249 + 0.20867052175034223 = 0.2284246870221947
    +
    +
    +_images/week37_162_4.png +
    +
    +
    +
    +

    Summing up¶

    +

    The bias-variance tradeoff summarizes the fundamental tension in +machine learning, particularly supervised learning, between the +complexity of a model and the amount of training data needed to train +it. Since data is often limited, in practice it is often useful to +use a less-complex model with higher bias, that is a model whose asymptotic +performance is worse than another model because it is easier to +train and less sensitive to sampling noise arising from having a +finite-sized training dataset (smaller variance).

    +

    The above equations tell us that in +order to minimize the expected test error, we need to select a +statistical learning method that simultaneously achieves low variance +and low bias. Note that variance is inherently a nonnegative quantity, +and squared bias is also nonnegative. Hence, we see that the expected +test MSE can never lie below \(Var(\epsilon)\), the irreducible error.

    +

    What do we mean by the variance and bias of a statistical learning +method? The variance refers to the amount by which our model would change if we +estimated it using a different training data set. Since the training +data are used to fit the statistical learning method, different +training data sets will result in a different estimate. But ideally the +estimate for our model should not vary too much between training +sets. However, if a method has high variance then small changes in +the training data can result in large changes in the model. In general, more +flexible statistical methods have higher variance.

    +

    You may also find this recent article of interest.

    +
    +
    +

    Another Example from Scikit-Learn’s Repository¶

    +
    +
    +
    """
    +============================
    +Underfitting vs. Overfitting
    +============================
    +
    +This example demonstrates the problems of underfitting and overfitting and
    +how we can use linear regression with polynomial features to approximate
    +nonlinear functions. The plot shows the function that we want to approximate,
    +which is a part of the cosine function. In addition, the samples from the
    +real function and the approximations of different models are displayed. The
    +models have polynomial features of different degrees. We can see that a
    +linear function (polynomial with degree 1) is not sufficient to fit the
    +training samples. This is called **underfitting**. A polynomial of degree 4
    +approximates the true function almost perfectly. However, for higher degrees
    +the model will **overfit** the training data, i.e. it learns the noise of the
    +training data.
    +We evaluate quantitatively **overfitting** / **underfitting** by using
    +cross-validation. We calculate the mean squared error (MSE) on the validation
    +set, the higher, the less likely the model generalizes correctly from the
    +training data.
    +"""
    +
    +print(__doc__)
    +
    +import numpy as np
    +import matplotlib.pyplot as plt
    +from sklearn.pipeline import Pipeline
    +from sklearn.preprocessing import PolynomialFeatures
    +from sklearn.linear_model import LinearRegression
    +from sklearn.model_selection import cross_val_score
    +
    +
    +def true_fun(X):
    +    return np.cos(1.5 * np.pi * X)
    +
    +np.random.seed(0)
    +
    +n_samples = 30
    +degrees = [1, 4, 15]
    +
    +X = np.sort(np.random.rand(n_samples))
    +y = true_fun(X) + np.random.randn(n_samples) * 0.1
    +
    +plt.figure(figsize=(14, 5))
    +for i in range(len(degrees)):
    +    ax = plt.subplot(1, len(degrees), i + 1)
    +    plt.setp(ax, xticks=(), yticks=())
    +
    +    polynomial_features = PolynomialFeatures(degree=degrees[i],
    +                                             include_bias=False)
    +    linear_regression = LinearRegression()
    +    pipeline = Pipeline([("polynomial_features", polynomial_features),
    +                         ("linear_regression", linear_regression)])
    +    pipeline.fit(X[:, np.newaxis], y)
    +
    +    # Evaluate the models using crossvalidation
    +    scores = cross_val_score(pipeline, X[:, np.newaxis], y,
    +                             scoring="neg_mean_squared_error", cv=10)
    +
    +    X_test = np.linspace(0, 1, 100)
    +    plt.plot(X_test, pipeline.predict(X_test[:, np.newaxis]), label="Model")
    +    plt.plot(X_test, true_fun(X_test), label="True function")
    +    plt.scatter(X, y, edgecolor='b', s=20, label="Samples")
    +    plt.xlabel("x")
    +    plt.ylabel("y")
    +    plt.xlim((0, 1))
    +    plt.ylim((-2, 2))
    +    plt.legend(loc="best")
    +    plt.title("Degree {}\nMSE = {:.2e}(+/- {:.2e})".format(
    +        degrees[i], -scores.mean(), scores.std()))
    +plt.show()
    +
    +
    +
    +
    +
    ============================
    +Underfitting vs. Overfitting
    +============================
    +
    +This example demonstrates the problems of underfitting and overfitting and
    +how we can use linear regression with polynomial features to approximate
    +nonlinear functions. The plot shows the function that we want to approximate,
    +which is a part of the cosine function. In addition, the samples from the
    +real function and the approximations of different models are displayed. The
    +models have polynomial features of different degrees. We can see that a
    +linear function (polynomial with degree 1) is not sufficient to fit the
    +training samples. This is called **underfitting**. A polynomial of degree 4
    +approximates the true function almost perfectly. However, for higher degrees
    +the model will **overfit** the training data, i.e. it learns the noise of the
    +training data.
    +We evaluate quantitatively **overfitting** / **underfitting** by using
    +cross-validation. We calculate the mean squared error (MSE) on the validation
    +set, the higher, the less likely the model generalizes correctly from the
    +training data.
    +
    +
    +_images/week37_165_1.png +
    +
    +
    +
    +

    Various steps in cross-validation¶

    +

    When the repetitive splitting of the data set is done randomly, +samples may accidently end up in a fast majority of the splits in +either training or test set. Such samples may have an unbalanced +influence on either model building or prediction evaluation. To avoid +this \(k\)-fold cross-validation structures the data splitting. The +samples are divided into \(k\) more or less equally sized exhaustive and +mutually exclusive subsets. In turn (at each split) one of these +subsets plays the role of the test set while the union of the +remaining subsets constitutes the training set. Such a splitting +warrants a balanced representation of each sample in both training and +test set over the splits. Still the division into the \(k\) subsets +involves a degree of randomness. This may be fully excluded when +choosing \(k=n\). This particular case is referred to as leave-one-out +cross-validation (LOOCV).

    +
    +
    +

    Cross-validation in brief¶

    +

    For the various values of \(k\)

    +
      +
    1. shuffle the dataset randomly.

    2. +
    3. Split the dataset into \(k\) groups.

    4. +
    5. For each unique group:

    6. +
    +

    a. Decide which group to use as set for test data

    +

    b. Take the remaining groups as a training data set

    +

    c. Fit a model on the training set and evaluate it on the test set

    +

    d. Retain the evaluation score and discard the model

    +
      +
    1. Summarize the model using the sample of model evaluation scores

    2. +
    +
    +
    +

    Code Example for Cross-validation and \(k\)-fold Cross-validation¶

    +

    The code here uses Ridge regression with cross-validation (CV) resampling and \(k\)-fold CV in order to fit a specific polynomial.

    +
    +
    +
    import numpy as np
    +import matplotlib.pyplot as plt
    +from sklearn.model_selection import KFold
    +from sklearn.linear_model import Ridge
    +from sklearn.model_selection import cross_val_score
    +from sklearn.preprocessing import PolynomialFeatures
    +
    +# A seed just to ensure that the random numbers are the same for every run.
    +# Useful for eventual debugging.
    +np.random.seed(3155)
    +
    +# Generate the data.
    +nsamples = 100
    +x = np.random.randn(nsamples)
    +y = 3*x**2 + np.random.randn(nsamples)
    +
    +## Cross-validation on Ridge regression using KFold only
    +
    +# Decide degree on polynomial to fit
    +poly = PolynomialFeatures(degree = 6)
    +
    +# Decide which values of lambda to use
    +nlambdas = 500
    +lambdas = np.logspace(-3, 5, nlambdas)
    +
    +# Initialize a KFold instance
    +k = 5
    +kfold = KFold(n_splits = k)
    +
    +# Perform the cross-validation to estimate MSE
    +scores_KFold = np.zeros((nlambdas, k))
    +
    +i = 0
    +for lmb in lambdas:
    +    ridge = Ridge(alpha = lmb)
    +    j = 0
    +    for train_inds, test_inds in kfold.split(x):
    +        xtrain = x[train_inds]
    +        ytrain = y[train_inds]
    +
    +        xtest = x[test_inds]
    +        ytest = y[test_inds]
    +
    +        Xtrain = poly.fit_transform(xtrain[:, np.newaxis])
    +        ridge.fit(Xtrain, ytrain[:, np.newaxis])
    +
    +        Xtest = poly.fit_transform(xtest[:, np.newaxis])
    +        ypred = ridge.predict(Xtest)
    +
    +        scores_KFold[i,j] = np.sum((ypred - ytest[:, np.newaxis])**2)/np.size(ypred)
    +
    +        j += 1
    +    i += 1
    +
    +
    +estimated_mse_KFold = np.mean(scores_KFold, axis = 1)
    +
    +## Cross-validation using cross_val_score from sklearn along with KFold
    +
    +# kfold is an instance initialized above as:
    +# kfold = KFold(n_splits = k)
    +
    +estimated_mse_sklearn = np.zeros(nlambdas)
    +i = 0
    +for lmb in lambdas:
    +    ridge = Ridge(alpha = lmb)
    +
    +    X = poly.fit_transform(x[:, np.newaxis])
    +    estimated_mse_folds = cross_val_score(ridge, X, y[:, np.newaxis], scoring='neg_mean_squared_error', cv=kfold)
    +
    +    # cross_val_score return an array containing the estimated negative mse for every fold.
    +    # we have to the the mean of every array in order to get an estimate of the mse of the model
    +    estimated_mse_sklearn[i] = np.mean(-estimated_mse_folds)
    +
    +    i += 1
    +
    +## Plot and compare the slightly different ways to perform cross-validation
    +
    +plt.figure()
    +
    +plt.plot(np.log10(lambdas), estimated_mse_sklearn, label = 'cross_val_score')
    +plt.plot(np.log10(lambdas), estimated_mse_KFold, 'r--', label = 'KFold')
    +
    +plt.xlabel('log10(lambda)')
    +plt.ylabel('mse')
    +
    +plt.legend()
    +
    +plt.show()
    +
    +
    +
    +
    +_images/week37_169_0.png +
    +
    +
    +
    +

    More examples on bootstrap and cross-validation and errors¶

    +
    +
    +
    # Common imports
    +import os
    +import numpy as np
    +import pandas as pd
    +import matplotlib.pyplot as plt
    +from sklearn.linear_model import LinearRegression, Ridge, Lasso
    +from sklearn.model_selection import train_test_split
    +from sklearn.utils import resample
    +from sklearn.metrics import mean_squared_error
    +# Where to save the figures and data files
    +PROJECT_ROOT_DIR = "Results"
    +FIGURE_ID = "Results/FigureFiles"
    +DATA_ID = "DataFiles/"
    +
    +if not os.path.exists(PROJECT_ROOT_DIR):
    +    os.mkdir(PROJECT_ROOT_DIR)
    +
    +if not os.path.exists(FIGURE_ID):
    +    os.makedirs(FIGURE_ID)
    +
    +if not os.path.exists(DATA_ID):
    +    os.makedirs(DATA_ID)
    +
    +def image_path(fig_id):
    +    return os.path.join(FIGURE_ID, fig_id)
    +
    +def data_path(dat_id):
    +    return os.path.join(DATA_ID, dat_id)
    +
    +def save_fig(fig_id):
    +    plt.savefig(image_path(fig_id) + ".png", format='png')
    +
    +infile = open(data_path("EoS.csv"),'r')
    +
    +# Read the EoS data as  csv file and organize the data into two arrays with density and energies
    +EoS = pd.read_csv(infile, names=('Density', 'Energy'))
    +EoS['Energy'] = pd.to_numeric(EoS['Energy'], errors='coerce')
    +EoS = EoS.dropna()
    +Energies = EoS['Energy']
    +Density = EoS['Density']
    +#  The design matrix now as function of various polytrops
    +
    +Maxpolydegree = 30
    +X = np.zeros((len(Density),Maxpolydegree))
    +X[:,0] = 1.0
    +testerror = np.zeros(Maxpolydegree)
    +trainingerror = np.zeros(Maxpolydegree)
    +polynomial = np.zeros(Maxpolydegree)
    +
    +trials = 100
    +for polydegree in range(1, Maxpolydegree):
    +    polynomial[polydegree] = polydegree
    +    for degree in range(polydegree):
    +        X[:,degree] = Density**(degree/3.0)
    +
    +# loop over trials in order to estimate the expectation value of the MSE
    +    testerror[polydegree] = 0.0
    +    trainingerror[polydegree] = 0.0
    +    for samples in range(trials):
    +        x_train, x_test, y_train, y_test = train_test_split(X, Energies, test_size=0.2)
    +        model = LinearRegression(fit_intercept=False).fit(x_train, y_train)
    +        ypred = model.predict(x_train)
    +        ytilde = model.predict(x_test)
    +        testerror[polydegree] += mean_squared_error(y_test, ytilde)
    +        trainingerror[polydegree] += mean_squared_error(y_train, ypred) 
    +
    +    testerror[polydegree] /= trials
    +    trainingerror[polydegree] /= trials
    +    print("Degree of polynomial: %3d"% polynomial[polydegree])
    +    print("Mean squared error on training data: %.8f" % trainingerror[polydegree])
    +    print("Mean squared error on test data: %.8f" % testerror[polydegree])
    +
    +plt.plot(polynomial, np.log10(trainingerror), label='Training Error')
    +plt.plot(polynomial, np.log10(testerror), label='Test Error')
    +plt.xlabel('Polynomial degree')
    +plt.ylabel('log10[MSE]')
    +plt.legend()
    +plt.show()
    +
    +
    +
    +
    +
    Degree of polynomial:   1
    +Mean squared error on training data: 446033.51374050
    +Mean squared error on test data: 455173.80460179
    +Degree of polynomial:   2
    +Mean squared error on training data: 114550.54637219
    +Mean squared error on test data: 129963.83146596
    +Degree of polynomial:   3
    +Mean squared error on training data: 9054.61775176
    +Mean squared error on test data: 10572.87627342
    +Degree of polynomial:   4
    +Mean squared error on training data: 302.15313054
    +Mean squared error on test data: 433.26292364
    +
    +
    +
    Degree of polynomial:   5
    +Mean squared error on training data: 3.64316192
    +Mean squared error on test data: 7.23528337
    +Degree of polynomial:   6
    +Mean squared error on training data: 3.56589683
    +Mean squared error on test data: 10.50427787
    +Degree of polynomial:   7
    +Mean squared error on training data: 0.47313680
    +Mean squared error on test data: 1.53738247
    +Degree of polynomial:   8
    +Mean squared error on training data: 0.04926746
    +Mean squared error on test data: 0.14629156
    +Degree of polynomial:   9
    +Mean squared error on training data: 0.02546675
    +Mean squared error on test data: 0.11202337
    +
    +
    +
    Degree of polynomial:  10
    +Mean squared error on training data: 0.02424794
    +Mean squared error on test data: 0.22467274
    +Degree of polynomial:  11
    +Mean squared error on training data: 0.01594452
    +Mean squared error on test data: 1.07641937
    +Degree of polynomial:  12
    +Mean squared error on training data: 0.00805074
    +Mean squared error on test data: 0.04295757
    +Degree of polynomial:  13
    +Mean squared error on training data: 0.00781918
    +Mean squared error on test data: 0.56965674
    +Degree of polynomial:  14
    +Mean squared error on training data: 0.00465099
    +Mean squared error on test data: 0.28443039
    +
    +
    +
    Degree of polynomial:  15
    +Mean squared error on training data: 0.00420072
    +Mean squared error on test data: 568.47051432
    +Degree of polynomial:  16
    +Mean squared error on training data: 0.00325450
    +Mean squared error on test data: 48.97630233
    +Degree of polynomial:  17
    +Mean squared error on training data: 0.00242954
    +Mean squared error on test data: 2.52780600
    +Degree of polynomial:  18
    +Mean squared error on training data: 0.00219195
    +Mean squared error on test data: 429.25695398
    +Degree of polynomial:  19
    +Mean squared error on training data: 0.00154853
    +Mean squared error on test data: 239.97065359
    +
    +
    +
    Degree of polynomial:  20
    +Mean squared error on training data: 0.00140846
    +Mean squared error on test data: 1350.24493666
    +Degree of polynomial:  21
    +Mean squared error on training data: 0.00119688
    +Mean squared error on test data: 1840.50530832
    +Degree of polynomial:  22
    +Mean squared error on training data: 0.00092898
    +Mean squared error on test data: 1184.60929685
    +Degree of polynomial:  23
    +Mean squared error on training data: 0.00089193
    +Mean squared error on test data: 3892.17483760
    +
    +
    +
    Degree of polynomial:  24
    +Mean squared error on training data: 0.00083355
    +Mean squared error on test data: 1332.46736215
    +Degree of polynomial:  25
    +Mean squared error on training data: 0.00079904
    +Mean squared error on test data: 7577.76690383
    +Degree of polynomial:  26
    +Mean squared error on training data: 0.00075590
    +Mean squared error on test data: 1079.36895644
    +Degree of polynomial:  27
    +Mean squared error on training data: 0.00068091
    +Mean squared error on test data: 3207.25343155
    +Degree of polynomial:  28
    +Mean squared error on training data: 0.00063362
    +Mean squared error on test data: 674.79633065
    +
    +
    +
    Degree of polynomial:  29
    +Mean squared error on training data: 0.00063866
    +Mean squared error on test data: 3099.60342978
    +
    +
    +
    /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_85796/626635268.py:73: RuntimeWarning: divide by zero encountered in log10
    +  plt.plot(polynomial, np.log10(trainingerror), label='Training Error')
    +/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_85796/626635268.py:74: RuntimeWarning: divide by zero encountered in log10
    +  plt.plot(polynomial, np.log10(testerror), label='Test Error')
    +
    +
    +_images/week37_171_8.png +
    +
    +

    Note that we kept the intercept column in the fitting here. This means that we need to set the intercept in the call to the Scikit-Learn function as False. Alternatively, we could have set up the design matrix \(X\) without the first column of ones.

    +
    +
    +

    The same example but now with cross-validation¶

    +

    In this example we keep the intercept column again but add cross-validation in order to estimate the best possible value of the means squared error.

    +
    +
    +
    # Common imports
    +import os
    +import numpy as np
    +import pandas as pd
    +import matplotlib.pyplot as plt
    +from sklearn.linear_model import LinearRegression, Ridge, Lasso
    +from sklearn.metrics import mean_squared_error
    +from sklearn.model_selection import KFold
    +from sklearn.model_selection import cross_val_score
    +
    +
    +# Where to save the figures and data files
    +PROJECT_ROOT_DIR = "Results"
    +FIGURE_ID = "Results/FigureFiles"
    +DATA_ID = "DataFiles/"
    +
    +if not os.path.exists(PROJECT_ROOT_DIR):
    +    os.mkdir(PROJECT_ROOT_DIR)
    +
    +if not os.path.exists(FIGURE_ID):
    +    os.makedirs(FIGURE_ID)
    +
    +if not os.path.exists(DATA_ID):
    +    os.makedirs(DATA_ID)
    +
    +def image_path(fig_id):
    +    return os.path.join(FIGURE_ID, fig_id)
    +
    +def data_path(dat_id):
    +    return os.path.join(DATA_ID, dat_id)
    +
    +def save_fig(fig_id):
    +    plt.savefig(image_path(fig_id) + ".png", format='png')
    +
    +infile = open(data_path("EoS.csv"),'r')
    +
    +# Read the EoS data as  csv file and organize the data into two arrays with density and energies
    +EoS = pd.read_csv(infile, names=('Density', 'Energy'))
    +EoS['Energy'] = pd.to_numeric(EoS['Energy'], errors='coerce')
    +EoS = EoS.dropna()
    +Energies = EoS['Energy']
    +Density = EoS['Density']
    +#  The design matrix now as function of various polytrops
    +
    +Maxpolydegree = 30
    +X = np.zeros((len(Density),Maxpolydegree))
    +X[:,0] = 1.0
    +estimated_mse_sklearn = np.zeros(Maxpolydegree)
    +polynomial = np.zeros(Maxpolydegree)
    +k =5
    +kfold = KFold(n_splits = k)
    +
    +for polydegree in range(1, Maxpolydegree):
    +    polynomial[polydegree] = polydegree
    +    for degree in range(polydegree):
    +        X[:,degree] = Density**(degree/3.0)
    +        OLS = LinearRegression(fit_intercept=False)
    +# loop over trials in order to estimate the expectation value of the MSE
    +    estimated_mse_folds = cross_val_score(OLS, X, Energies, scoring='neg_mean_squared_error', cv=kfold)
    +#[:, np.newaxis]
    +    estimated_mse_sklearn[polydegree] = np.mean(-estimated_mse_folds)
    +
    +plt.plot(polynomial, np.log10(estimated_mse_sklearn), label='Test Error')
    +plt.xlabel('Polynomial degree')
    +plt.ylabel('log10[MSE]')
    +plt.legend()
    +plt.show()
    +
    +
    +
    +
    +
    /var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_85796/3817475779.py:63: RuntimeWarning: divide by zero encountered in log10
    +  plt.plot(polynomial, np.log10(estimated_mse_sklearn), label='Test Error')
    +
    +
    +_images/week37_174_1.png +
    +
    +
    +
    +

    Notes on scaling with examples¶

    +

    The programs here use both ordinrary least squares (OLS) and Ridge +regression with one value only for the hyperparameter \(\lambda\). The +first example has no scaling and includes the intercept as well and we +are trying to fit a second-order polynomial. The second code takes out +the intercept and subtracts the mean values of each column of the +design matrix and the mean value of the outputs.

    +

    The third and final code uses Scikit-Learn as library in order to +calculate the optimal parameters for OLS and Ridge regression. Note +that it is highly recommended to not include the intercept in Ridge +and Lasso regression, in order to avoid penalizing the optimization by +the intercept. The second and third codes do thus not include the +intercept. In the second code we do the scaling ourselves while the +last code uses the standard scaler option included in Scikit-Learn, known as centering (where +we subtract the mean values).

    +
    +
    +
    import matplotlib.pyplot as plt
    +import numpy as np
    +from sklearn.linear_model import LinearRegression
    +from sklearn.preprocessing import PolynomialFeatures
    +from sklearn.model_selection import train_test_split
    +from sklearn.preprocessing import StandardScaler
    +
    +def MSE(y_data,y_model):
    +    n = np.size(y_model)
    +    return np.sum((y_data-y_model)**2)/n
    +
    +def OLS_fit_beta(X, y):
    +    return np.linalg.pinv(X.T @ X) @ X.T @ y
    +
    +def Ridge_fit_beta(X, y,L,d):
    +    I = np.eye(d,d)
    +    return np.linalg.pinv(X.T @ X + L*I) @ X.T @ y
    +
    +# Same random numbers for each test.
    +np.random.seed(2018)
    +n = 100
    +d = 3
    +# hyperparameter lambda
    +Lambda = 0.01
    +
    +# Make data set, simple second-order polynomial
    +x = np.linspace(-3, 3, n)
    +y = 2.0 + 0.5*x + 5.0*(x**2)+ np.random.randn(n)
    +
    +# The design matrix X includes the intercept and no scaling is made
    +X = np.zeros((len(x), d))
    +for p in range(d):     
    +    X[:, p] = x ** (p) 
    +
    +
    +#Split data, no scaling is used and we include the intercept
    +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    +
    +
    +#Calculate beta, own code
    +beta_OLS = OLS_fit_beta(X_train, y_train)
    +beta_Ridge = Ridge_fit_beta(X_train, y_train,Lambda,d)
    +print(beta_OLS)
    +print(beta_Ridge)
    +#predict value
    +ytilde_test_OLS = X_test @ beta_OLS
    +ytilde_test_Ridge = X_test @ beta_Ridge
    +
    +#Calculate MSE
    +print("  ")
    +print("test MSE of OLS:")
    +print(MSE(y_test,ytilde_test_OLS))
    +print("  ")
    +print("test MSE of Ridge")
    +print(MSE(y_test,ytilde_test_Ridge))
    +
    +plt.scatter(x,y,label='Data')
    +plt.plot(x, X @ beta_OLS,'*', label="OLS_Fit")
    +plt.plot(x, X @ beta_Ridge, label="Ridge_Fit")
    +plt.grid()
    +plt.legend()
    +plt.show()
    +
    +
    +
    +
    +
    [1.79934087 0.47179152 5.01549939]
    +[1.79909592 0.47176716 5.01550546]
    +  
    +test MSE of OLS:
    +1.139431112903922
    +  
    +test MSE of Ridge
    +1.1395235273363669
    +
    +
    +_images/week37_176_1.png +
    +
    +

    In this example we do not include the intercept and we scale the data by subtracting the mean values. This follows the discussion in the lecture material. +see also the weekly slides for week 36. +It is recommended whrn we use Ridge and Lasso regression to not include the intercept in the optimization process.

    +

    Before we discuss the code, we repeat some of the basic math from the slides of week 36.

    +

    Let us try to understand what this may imply mathematically when we +subtract the mean values, also known as zero centering or simply centering. For +simplicity, we will focus on ordinary regression, as done in the above example.

    +

    The cost/loss function for regression is

    +
    +\[ +C(\beta_0, \beta_1, ... , \beta_{p-1}) = \frac{1}{n}\sum_{i=0}^{n} \left(y_i - \beta_0 - \sum_{j=1}^{p-1} X_{ij}\beta_j\right)^2,. +\]
    +

    Recall also that we use the squared value. This expression can lead to an +increased penalty for higher differences between predicted and +output/target values.

    +

    What we have done is to single out the \(\beta_0\) term in the +definition of the mean squared error (MSE). The design matrix \(X\) +does in this case not contain any intercept column. When we take the +derivative with respect to \(\beta_0\), we want the derivative to obey

    +
    +\[ +\frac{\partial C}{\partial \beta_j} = 0, +\]
    +

    for all \(j\). For \(\beta_0\) we have

    +
    +\[ +\frac{\partial C}{\partial \beta_0} = -\frac{2}{n}\sum_{i=0}^{n-1} \left(y_i - \beta_0 - \sum_{j=1}^{p-1} X_{ij} \beta_j\right). +\]
    +

    Multiplying away the constant \(2/n\), we obtain

    +
    +\[ +\sum_{i=0}^{n-1} \beta_0 = \sum_{i=0}^{n-1}y_i - \sum_{i=0}^{n-1} \sum_{j=1}^{p-1} X_{ij} \beta_j. +\]
    +

    Let us specialize first to the case where we have only two parameters \(\beta_0\) and \(\beta_1\). +Our result for \(\beta_0\) simplifies then to

    +
    +\[ +n\beta_0 = \sum_{i=0}^{n-1}y_i - \sum_{i=0}^{n-1} X_{i1} \beta_1. +\]
    +

    We obtain then

    +
    +\[ +\beta_0 = \frac{1}{n}\sum_{i=0}^{n-1}y_i - \beta_1\frac{1}{n}\sum_{i=0}^{n-1} X_{i1}. +\]
    +

    If we define

    +
    +\[ +\mu_{\boldsymbol{x}_1}=\frac{1}{n}\sum_{i=0}^{n-1} X_{i1}, +\]
    +

    and the mean value of the outputs as

    +
    +\[ +\mu_y=\frac{1}{n}\sum_{i=0}^{n-1}y_i, +\]
    +

    we have

    +
    +\[ +\beta_0 = \mu_y - \beta_1\mu_{\boldsymbol{x}_1}. +\]
    +

    In the general case with more parameters than \(\beta_0\) and \(\beta_1\), we have

    +
    +\[ +\beta_0 = \frac{1}{n}\sum_{i=0}^{n-1}y_i - \frac{1}{n}\sum_{i=0}^{n-1}\sum_{j=1}^{p-1} X_{ij}\beta_j. +\]
    +

    We can rewrite the latter equation as

    +
    +\[ +\beta_0 = \frac{1}{n}\sum_{i=0}^{n-1}y_i - \sum_{j=1}^{p-1} \mu_{\boldsymbol{x}_j}\beta_j, +\]
    +

    where we have defined

    +
    +\[ +\mu_{\boldsymbol{x}_j}=\frac{1}{n}\sum_{i=0}^{n-1} X_{ij}, +\]
    +

    the mean value for all elements of the column vector \(\boldsymbol{x}_j\).

    +

    Replacing \(y_i\) with \(y_i - y_i - \overline{\boldsymbol{y}}\) and centering also our design matrix results in a cost function (in vector-matrix disguise)

    +
    +\[ +C(\boldsymbol{\beta}) = (\boldsymbol{\tilde{y}} - \tilde{X}\boldsymbol{\beta})^T(\boldsymbol{\tilde{y}} - \tilde{X}\boldsymbol{\beta}). +\]
    +

    If we minimize with respect to \(\boldsymbol{\beta}\) we have then

    +
    +\[ +\hat{\boldsymbol{\beta}} = (\tilde{X}^T\tilde{X})^{-1}\tilde{X}^T\boldsymbol{\tilde{y}}, +\]
    +

    where \(\boldsymbol{\tilde{y}} = \boldsymbol{y} - \overline{\boldsymbol{y}}\) +and \(\tilde{X}_{ij} = X_{ij} - \frac{1}{n}\sum_{k=0}^{n-1}X_{kj}\).

    +

    For Ridge regression we need to add \(\lambda \boldsymbol{\beta}^T\boldsymbol{\beta}\) to the cost function and get then

    +
    +\[ +\hat{\boldsymbol{\beta}} = (\tilde{X}^T\tilde{X} + \lambda I)^{-1}\tilde{X}^T\boldsymbol{\tilde{y}}. +\]
    +

    Now we try to implement this.

    +
    +
    +
    np.random.seed(2018)
    +n = 100
    +# we do not include the intercept
    +d = 2
    +Lambda = 0.01
    +
    +# Make data set.
    +x = np.linspace(-3, 3, n)
    +y = 2.0 + 0.5*x + 5.0*(x**2)+ np.random.randn(n)
    +
    +#Design matrix X does not include the intercept. 
    +X = np.zeros((len(x), d))
    +for p in range(d):     
    +    X[:, p] = x ** (p+1)
    +
    +
    +#Split data in train and test
    +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    +
    +# Scale data by subtracting mean value,own implementation
    +#For our own implementation, we will need to deal with the intercept by centering the design matrix and the target variable
    +X_train_mean = np.mean(X_train,axis=0)
    +#Center by removing mean from each feature
    +X_train_scaled = X_train - X_train_mean
    +X_test_scaled = X_test - X_train_mean
    +#The model intercept (called y_scaler) is given by the mean of the target variable (IF X is centered, note)
    +y_scaler = np.mean(y_train)
    +y_train_scaled = y_train - y_scaler
    +
    +
    +#Calculate beta
    +beta_OLS = OLS_fit_beta(X_train_scaled, y_train_scaled)
    +beta_Ridge = Ridge_fit_beta(X_train_scaled, y_train_scaled,Lambda,d)
    +print(beta_OLS)
    +print(beta_Ridge)
    +# calculate intercepts and print them
    +interceptOLS = y_scaler - X_train_mean @ beta_OLS
    +interceptRidge = y_scaler - X_train_mean @ beta_Ridge
    +print(interceptOLS)
    +print(interceptRidge)
    +
    +#predict value with intercept
    +ytilde_test_OLS = X_test_scaled @ beta_OLS+y_scaler
    +ytilde_test_Ridge = X_test_scaled @ beta_Ridge+y_scaler
    +
    +
    +#Calculate MSE
    +
    +print("  ")
    +print("test MSE of OLS:")
    +print(MSE(y_test,ytilde_test_OLS))
    +print("  ")
    +print("test MSE of Ridge")
    +print(MSE(y_test,ytilde_test_Ridge))
    +
    +plt.scatter(x,y,label='Data')
    +plt.plot(x, X @ beta_OLS+interceptOLS,'*', label="OLS_Fit")
    +plt.plot(x, X @ beta_Ridge+interceptRidge, label="Ridge_Fit")
    +plt.grid()
    +plt.legend()
    +plt.show()
    +
    +
    +
    +
    +
    [0.47179152 5.01549939]
    +[0.47176783 5.01542292]
    +1.7993408651198877
    +1.7995707762668065
    +  
    +test MSE of OLS:
    +1.1394311129039245
    +  
    +test MSE of Ridge
    +1.1395084586525954
    +
    +
    +_images/week37_208_1.png +
    +
    +

    Finally, instead of using our own function we repeat the same example +using the standardscaler functionality of the library +Scikit-Learn. Here we limit ourselves to Ridge regression only.

    +
    +
    +
    from sklearn import linear_model
    +np.random.seed(2018)
    +n = 10
    +d = 2
    +Lambda = 0.01
    +
    +# Make data set.
    +x = np.linspace(-3, 3, n)
    +y = 2.0 + 0.5*x + 5.0*(x**2)+ np.random.randn(n)
    +
    +# Design matrix X does not include the intercept. 
    +X = np.zeros((n, d))
    +for p in range(d):     
    +    X[:, p] = x ** (p+1)
    +
    +#Split data in train and test
    +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    +# Scale data by subtracting mean value of the input using scikit-learn
    +scaler = StandardScaler(with_std=False)
    +scaler.fit(X_train)
    +X_train_mean = np.mean(X_train,axis=0)
    +X_train_scaled = scaler.transform(X_train)
    +X_test_scaled = scaler.transform(X_test)
    +# We scale also the output, here by our own code
    +y_scaler = np.mean(y_train)
    +y_train_scaled = y_train - y_scaler
    +y_test_scaled = y_test- y_scaler
    +
    +#Calculate beta
    +OLS = LinearRegression()
    +betaOLS=OLS.fit(X_train_scaled,y_train_scaled)
    +ypredictOLS = OLS.predict(X_test_scaled)
    +linear_model.Ridge(Lambda)
    +RegRidge.fit(X_train_scaled,y_train_scaled)
    +ypredictRidge = RegRidge.predict(X_test_scaled)
    +betaOLS = OLS.coef_
    +betaRidge = RegRidge.coef_
    +print(betaOLS)
    +print(betaRidge)
    +interceptOLS = np.mean(y_train) - X_train_mean @ betaOLS
    +interceptRidge = y_scaler - X_train_mean @ betaRidge
    +print(interceptOLS)
    +print(interceptRidge)
    +#predict value 
    +ytilde_test_Ridge = X_test_scaled @ betaRidge+y_scaler
    +ytilde_test_OLS = X_test_scaled @ betaOLS+y_scaler
    +
    +#Calculate MSE
    +print("  ")
    +print("test MSE of OLS")
    +print(MSE(y_test,ytilde_test_OLS))
    +print("  ")
    +print("test MSE of Ridge")
    +print(MSE(y_test,ytilde_test_Ridge))
    +plt.scatter(x,y,label='Data')
    +plt.plot(x, X @ RegRidge.coef_ + RegRidge.intercept_ , label="Ridge_Fit")
    +plt.grid()
    +plt.legend()
    +plt.show()
    +
    +
    +
    +
    +
    ---------------------------------------------------------------------------
    +NameError                                 Traceback (most recent call last)
    +Cell In[11], line 34
    +     32 ypredictOLS = OLS.predict(X_test_scaled)
    +     33 linear_model.Ridge(Lambda)
    +---> 34 RegRidge.fit(X_train_scaled,y_train_scaled)
    +     35 ypredictRidge = RegRidge.predict(X_test_scaled)
    +     36 betaOLS = OLS.coef_
    +
    +NameError: name 'RegRidge' is not defined
    +
    +
    +
    +
    +
    +
    + + + + +
    + + + + + +
    +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2021.
    +

    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/LectureNotes/_build/jupyter_execute/exercisesweek37.ipynb b/doc/LectureNotes/_build/jupyter_execute/exercisesweek37.ipynb new file mode 100644 index 000000000..8b605c017 --- /dev/null +++ b/doc/LectureNotes/_build/jupyter_execute/exercisesweek37.ipynb @@ -0,0 +1,268 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "2a3463de", + "metadata": { + "editable": true + }, + "source": [ + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "442e0844", + "metadata": { + "editable": true + }, + "source": [ + "# Exercises week 37\n", + "**September 9-13, 2024**\n", + "\n", + "Date: **Deadline is Friday September 13 at midnight**" + ] + }, + { + "cell_type": "markdown", + "id": "0c0df373", + "metadata": { + "editable": true + }, + "source": [ + "## Overarching aims of the exercises this week\n", + "\n", + "This exercise deals with various mean values and variances in linear\n", + "regression method (here it may be useful to look up chapter 3,\n", + "equation (3.8) of [Trevor Hastie, Robert Tibshirani, Jerome\n", + "H. Friedman, The Elements of Statistical Learning,\n", + "Springer](https://www.springer.com/gp/book/9780387848570)). The\n", + "exercise is also a part of project 1 and can be reused in the theory\n", + "part of the project.\n", + "\n", + "For more discussions on Ridge regression and calculation of\n", + "expectation values, [Wessel van\n", + "Wieringen's](https://arxiv.org/abs/1509.09169) article is highly\n", + "recommended.\n", + "\n", + "The assumption we have made is that there exists a continuous function\n", + "$f(\\boldsymbol{x})$ and a normal distributed error $\\boldsymbol{\\varepsilon}\\sim N(0,\n", + "\\sigma^2)$ which describes our data" + ] + }, + { + "cell_type": "markdown", + "id": "a1ac8666", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{y} = f(\\boldsymbol{x})+\\boldsymbol{\\varepsilon}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "ee6ce4be", + "metadata": { + "editable": true + }, + "source": [ + "We then approximate this function $f(\\boldsymbol{x})$ with our model $\\boldsymbol{\\tilde{y}}$ from the solution of the linear regression equations (ordinary least squares OLS), that is our\n", + "function $f$ is approximated by $\\boldsymbol{\\tilde{y}}$ where we minimized $(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2$, with" + ] + }, + { + "cell_type": "markdown", + "id": "2d50b2e4", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{\\tilde{y}} = \\boldsymbol{X}\\boldsymbol{\\beta}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "3645cccd", + "metadata": { + "editable": true + }, + "source": [ + "The matrix $\\boldsymbol{X}$ is the so-called design or feature matrix." + ] + }, + { + "cell_type": "markdown", + "id": "6a378434", + "metadata": { + "editable": true + }, + "source": [ + "## Exercise 1: Expectation values for ordinary least squares expressions\n", + "\n", + "Show that the expectation value of $\\boldsymbol{y}$ for a given element $i$" + ] + }, + { + "cell_type": "markdown", + "id": "ce9b87a9", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}(y_i) =\\sum_{j}x_{ij} \\beta_j=\\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "a6435e39", + "metadata": { + "editable": true + }, + "source": [ + "and that\n", + "its variance is" + ] + }, + { + "cell_type": "markdown", + "id": "75d89e64", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mbox{Var}(y_i) = \\sigma^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "b5aef4d3", + "metadata": { + "editable": true + }, + "source": [ + "Hence, $y_i \\sim N( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta}, \\sigma^2)$, that is $\\boldsymbol{y}$ follows a normal distribution with \n", + "mean value $\\boldsymbol{X}\\boldsymbol{\\beta}$ and variance $\\sigma^2$.\n", + "\n", + "With the OLS expressions for the optimal parameters $\\boldsymbol{\\hat{\\beta}}$ show that" + ] + }, + { + "cell_type": "markdown", + "id": "17012dce", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}(\\boldsymbol{\\hat{\\beta}}) = \\boldsymbol{\\beta}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "4da3a821", + "metadata": { + "editable": true + }, + "source": [ + "Show finally that the variance of $\\boldsymbol{\\boldsymbol{\\beta}}$ is" + ] + }, + { + "cell_type": "markdown", + "id": "0ba77c7b", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mbox{Var}(\\boldsymbol{\\hat{\\beta}}) = \\sigma^2 \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "5c66de05", + "metadata": { + "editable": true + }, + "source": [ + "We can use the last expression when we define a [so-called confidence interval](https://en.wikipedia.org/wiki/Confidence_interval) for the parameters $\\beta$. \n", + "A given parameter $\\beta_j$ is given by the diagonal matrix element of the above matrix." + ] + }, + { + "cell_type": "markdown", + "id": "43b92138", + "metadata": { + "editable": true + }, + "source": [ + "## Exercise 2: Expectation values for Ridge regression\n", + "\n", + "Show that" + ] + }, + { + "cell_type": "markdown", + "id": "afea98ca", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E} \\big[ \\hat{\\boldsymbol{\\beta}}^{\\mathrm{Ridge}} \\big]=(\\mathbf{X}^{T} \\mathbf{X} + \\lambda \\mathbf{I}_{pp})^{-1} (\\mathbf{X}^{\\top} \\mathbf{X})\\boldsymbol{\\beta}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "13d7fd96", + "metadata": { + "editable": true + }, + "source": [ + "We see clearly that\n", + "$\\mathbb{E} \\big[ \\hat{\\boldsymbol{\\beta}}^{\\mathrm{Ridge}} \\big] \\not= \\mathbb{E} \\big[\\hat{\\boldsymbol{\\beta}}^{\\mathrm{OLS}}\\big ]$ for any $\\lambda > 0$.\n", + "\n", + "Show also that the variance is" + ] + }, + { + "cell_type": "markdown", + "id": "77d1d47e", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mbox{Var}[\\hat{\\boldsymbol{\\beta}}^{\\mathrm{Ridge}}]=\\sigma^2[ \\mathbf{X}^{T} \\mathbf{X} + \\lambda \\mathbf{I} ]^{-1} \\mathbf{X}^{T}\\mathbf{X} \\{ [ \\mathbf{X}^{\\top} \\mathbf{X} + \\lambda \\mathbf{I} ]^{-1}\\}^{T},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "2fa6bdfd", + "metadata": { + "editable": true + }, + "source": [ + "and it is easy to see that if the parameter $\\lambda$ goes to infinity then the variance of the Ridge parameters $\\boldsymbol{\\beta}$ goes to zero." + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/doc/LectureNotes/_build/jupyter_execute/exercisesweek37.txt b/doc/LectureNotes/_build/jupyter_execute/exercisesweek37.txt new file mode 100644 index 000000000..e69de29bb diff --git a/doc/LectureNotes/_build/jupyter_execute/week37.ipynb b/doc/LectureNotes/_build/jupyter_execute/week37.ipynb new file mode 100644 index 000000000..02de1a2cf --- /dev/null +++ b/doc/LectureNotes/_build/jupyter_execute/week37.ipynb @@ -0,0 +1,4011 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "672fea2a", + "metadata": { + "editable": true + }, + "source": [ + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "479a6913", + "metadata": { + "editable": true + }, + "source": [ + "# Week 37: Statistical interpretations and Resampling Methods\n", + "**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and Facility for Rare Isotope Beams, Michigan State University\n", + "\n", + "Date: **September 9, 2024**\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "10b8f456", + "metadata": { + "editable": true + }, + "source": [ + "## Plans for week 37\n", + "\n", + "**Material for the lecture on Monday September 9.**\n", + "\n", + "\n", + "\n", + " * Resampling techniques, Bootstrap and cross validation and bias-variance tradeoff\n", + "\n", + " * Statistical interpretation of Ridge and Lasso regression\n", + "\n", + " * Readings and Videos:\n", + "\n", + " * Hastie et al Chapter 7, here we recommend 7.1-7.5 and 7.10 (cross-validation) and 7.11 (bootstrap). \n", + "\n", + " * [Video on cross validation](https://www.youtube.com/watch?v=fSytzGwwBVw)\n", + "\n", + " * [Video on Bootstrapping](https://www.youtube.com/watch?v=Xz0x-8-cgaQ)\n", + "\n", + " * [Video on bias-variance tradeoff](https://www.youtube.com/watch?v=EuBBz3bI-aA)\n", + "\n", + "**Material for the active learning sessions on Tuesday and Wednesday.**\n", + "\n", + " * Calculations of expectation values\n", + "\n", + " * Exercise set for week 37\n", + "\n", + " * Work on project 1\n", + "\n", + " * See also additional note on scaling (jupyter-notebook) sent separately. This will be discussed during the first hour of each session. This note is added at the end of these slides.\n", + "\n", + " * For more discussions of Ridge regression and calculation of averages, [Wessel van Wieringen's](https://arxiv.org/abs/1509.09169) article is highly recommended." + ] + }, + { + "cell_type": "markdown", + "id": "f7e43b1b", + "metadata": { + "editable": true + }, + "source": [ + "## Material from last week and relevant for the weekly exercises" + ] + }, + { + "cell_type": "markdown", + "id": "af6a447a", + "metadata": { + "editable": true + }, + "source": [ + "## Linking the regression analysis with a statistical interpretation\n", + "\n", + "We will now couple the discussions of ordinary least squares, Ridge\n", + "and Lasso regression with a statistical interpretation, that is we\n", + "move from a linear algebra analysis to a statistical analysis. In\n", + "particular, we will focus on what the regularization terms can result\n", + "in. We will amongst other things show that the regularization\n", + "parameter can reduce considerably the variance of the parameters\n", + "$\\beta$.\n", + "\n", + "The\n", + "advantage of doing linear regression is that we actually end up with\n", + "analytical expressions for several statistical quantities. \n", + "Standard least squares and Ridge regression allow us to\n", + "derive quantities like the variance and other expectation values in a\n", + "rather straightforward way.\n", + "\n", + "It is assumed that $\\varepsilon_i\n", + "\\sim \\mathcal{N}(0, \\sigma^2)$ and the $\\varepsilon_{i}$ are\n", + "independent, i.e.:" + ] + }, + { + "cell_type": "markdown", + "id": "b6b7ea38", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\begin{align*} \n", + "\\mbox{Cov}(\\varepsilon_{i_1},\n", + "\\varepsilon_{i_2}) & = \\left\\{ \\begin{array}{lcc} \\sigma^2 & \\mbox{if}\n", + "& i_1 = i_2, \\\\ 0 & \\mbox{if} & i_1 \\not= i_2. \\end{array} \\right.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "e53d8d41", + "metadata": { + "editable": true + }, + "source": [ + "The randomness of $\\varepsilon_i$ implies that\n", + "$\\mathbf{y}_i$ is also a random variable. In particular,\n", + "$\\mathbf{y}_i$ is normally distributed, because $\\varepsilon_i \\sim\n", + "\\mathcal{N}(0, \\sigma^2)$ and $\\mathbf{X}_{i,\\ast} \\, \\boldsymbol{\\beta}$ is a\n", + "non-random scalar. To specify the parameters of the distribution of\n", + "$\\mathbf{y}_i$ we need to calculate its first two moments. \n", + "\n", + "Recall that $\\boldsymbol{X}$ is a matrix of dimensionality $n\\times p$. The\n", + "notation above $\\mathbf{X}_{i,\\ast}$ means that we are looking at the\n", + "row number $i$ and perform a sum over all values $p$." + ] + }, + { + "cell_type": "markdown", + "id": "401644e7", + "metadata": { + "editable": true + }, + "source": [ + "## Assumptions made\n", + "\n", + "The assumption we have made here can be summarized as (and this is going to be useful when we discuss the bias-variance trade off)\n", + "that there exists a function $f(\\boldsymbol{x})$ and a normal distributed error $\\boldsymbol{\\varepsilon}\\sim \\mathcal{N}(0, \\sigma^2)$\n", + "which describe our data" + ] + }, + { + "cell_type": "markdown", + "id": "0603387c", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{y} = f(\\boldsymbol{x})+\\boldsymbol{\\varepsilon}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "eb2b6edf", + "metadata": { + "editable": true + }, + "source": [ + "We approximate this function with our model from the solution of the linear regression equations, that is our\n", + "function $f$ is approximated by $\\boldsymbol{\\tilde{y}}$ where we want to minimize $(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2$, our MSE, with" + ] + }, + { + "cell_type": "markdown", + "id": "f1a08194", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{\\tilde{y}} = \\boldsymbol{X}\\boldsymbol{\\beta}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "ad40fa0b", + "metadata": { + "editable": true + }, + "source": [ + "## Expectation value and variance\n", + "\n", + "We can calculate the expectation value of $\\boldsymbol{y}$ for a given element $i$" + ] + }, + { + "cell_type": "markdown", + "id": "d3a4907d", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\begin{align*} \n", + "\\mathbb{E}(y_i) & =\n", + "\\mathbb{E}(\\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta}) + \\mathbb{E}(\\varepsilon_i)\n", + "\\, \\, \\, = \\, \\, \\, \\mathbf{X}_{i, \\ast} \\, \\beta, \n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "d7908c9c", + "metadata": { + "editable": true + }, + "source": [ + "while\n", + "its variance is" + ] + }, + { + "cell_type": "markdown", + "id": "2528f74e", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\begin{align*} \\mbox{Var}(y_i) & = \\mathbb{E} \\{ [y_i\n", + "- \\mathbb{E}(y_i)]^2 \\} \\, \\, \\, = \\, \\, \\, \\mathbb{E} ( y_i^2 ) -\n", + "[\\mathbb{E}(y_i)]^2 \\\\ & = \\mathbb{E} [ ( \\mathbf{X}_{i, \\ast} \\,\n", + "\\beta + \\varepsilon_i )^2] - ( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta})^2 \\\\ &\n", + "= \\mathbb{E} [ ( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta})^2 + 2 \\varepsilon_i\n", + "\\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta} + \\varepsilon_i^2 ] - ( \\mathbf{X}_{i,\n", + "\\ast} \\, \\beta)^2 \\\\ & = ( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta})^2 + 2\n", + "\\mathbb{E}(\\varepsilon_i) \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta} +\n", + "\\mathbb{E}(\\varepsilon_i^2 ) - ( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta})^2 \n", + "\\\\ & = \\mathbb{E}(\\varepsilon_i^2 ) \\, \\, \\, = \\, \\, \\,\n", + "\\mbox{Var}(\\varepsilon_i) \\, \\, \\, = \\, \\, \\, \\sigma^2. \n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "525f3a59", + "metadata": { + "editable": true + }, + "source": [ + "Hence, $y_i \\sim \\mathcal{N}( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta}, \\sigma^2)$, that is $\\boldsymbol{y}$ follows a normal distribution with \n", + "mean value $\\boldsymbol{X}\\boldsymbol{\\beta}$ and variance $\\sigma^2$ (not be confused with the singular values of the SVD)." + ] + }, + { + "cell_type": "markdown", + "id": "ead1d419", + "metadata": { + "editable": true + }, + "source": [ + "## Expectation value and variance for $\\boldsymbol{\\beta}$\n", + "\n", + "With the OLS expressions for the optimal parameters $\\boldsymbol{\\hat{\\beta}}$ we can evaluate the expectation value" + ] + }, + { + "cell_type": "markdown", + "id": "e471f7ab", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}(\\boldsymbol{\\hat{\\beta}}) = \\mathbb{E}[ (\\mathbf{X}^{\\top} \\mathbf{X})^{-1}\\mathbf{X}^{T} \\mathbf{Y}]=(\\mathbf{X}^{T} \\mathbf{X})^{-1}\\mathbf{X}^{T} \\mathbb{E}[ \\mathbf{Y}]=(\\mathbf{X}^{T} \\mathbf{X})^{-1} \\mathbf{X}^{T}\\mathbf{X}\\boldsymbol{\\beta}=\\boldsymbol{\\beta}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "7886e97f", + "metadata": { + "editable": true + }, + "source": [ + "This means that the estimator of the regression parameters is unbiased.\n", + "\n", + "We can also calculate the variance\n", + "\n", + "The variance of the optimal value $\\boldsymbol{\\hat{\\beta}}$ is" + ] + }, + { + "cell_type": "markdown", + "id": "49c32ca5", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\mbox{Var}(\\boldsymbol{\\hat{\\beta}}) & = & \\mathbb{E} \\{ [\\boldsymbol{\\beta} - \\mathbb{E}(\\boldsymbol{\\beta})] [\\boldsymbol{\\beta} - \\mathbb{E}(\\boldsymbol{\\beta})]^{T} \\}\n", + "\\\\\n", + "& = & \\mathbb{E} \\{ [(\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\mathbf{y} - \\boldsymbol{\\beta}] \\, [(\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\mathbf{y} - \\boldsymbol{\\beta}]^{T} \\}\n", + "\\\\\n", + "% & = & \\mathbb{E} \\{ [(\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\mathbf{y}] \\, [(\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\mathbf{y}]^{T} \\} - \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T}\n", + "% \\\\\n", + "% & = & \\mathbb{E} \\{ (\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\mathbf{y} \\, \\mathbf{y}^{T} \\, \\mathbf{X} \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1} \\} - \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T}\n", + "% \\\\\n", + "& = & (\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\, \\mathbb{E} \\{ \\mathbf{y} \\, \\mathbf{y}^{T} \\} \\, \\mathbf{X} \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1} - \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T}\n", + "\\\\\n", + "& = & (\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\, \\{ \\mathbf{X} \\, \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T} \\, \\mathbf{X}^{T} + \\sigma^2 \\} \\, \\mathbf{X} \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1} - \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T}\n", + "% \\\\\n", + "% & = & (\\mathbf{X}^T \\mathbf{X})^{-1} \\, \\mathbf{X}^T \\, \\mathbf{X} \\, \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^T \\, \\mathbf{X}^T \\, \\mathbf{X} \\, (\\mathbf{X}^T % \\mathbf{X})^{-1}\n", + "% \\\\\n", + "% & & + \\, \\, \\sigma^2 \\, (\\mathbf{X}^T \\mathbf{X})^{-1} \\, \\mathbf{X}^T \\, \\mathbf{X} \\, (\\mathbf{X}^T \\mathbf{X})^{-1} - \\boldsymbol{\\beta} \\boldsymbol{\\beta}^T\n", + "\\\\\n", + "& = & \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T} + \\sigma^2 \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1} - \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T}\n", + "\\, \\, \\, = \\, \\, \\, \\sigma^2 \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1},\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "9bd27980", + "metadata": { + "editable": true + }, + "source": [ + "where we have used that $\\mathbb{E} (\\mathbf{y} \\mathbf{y}^{T}) =\n", + "\\mathbf{X} \\, \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T} \\, \\mathbf{X}^{T} +\n", + "\\sigma^2 \\, \\mathbf{I}_{nn}$. From $\\mbox{Var}(\\boldsymbol{\\beta}) = \\sigma^2\n", + "\\, (\\mathbf{X}^{T} \\mathbf{X})^{-1}$, one obtains an estimate of the\n", + "variance of the estimate of the $j$-th regression coefficient:\n", + "$\\boldsymbol{\\sigma}^2 (\\boldsymbol{\\beta}_j ) = \\boldsymbol{\\sigma}^2 [(\\mathbf{X}^{T} \\mathbf{X})^{-1}]_{jj} $. This may be used to\n", + "construct a confidence interval for the estimates.\n", + "\n", + "In a similar way, we can obtain analytical expressions for say the\n", + "expectation values of the parameters $\\boldsymbol{\\beta}$ and their variance\n", + "when we employ Ridge regression, allowing us again to define a confidence interval. \n", + "\n", + "It is rather straightforward to show that" + ] + }, + { + "cell_type": "markdown", + "id": "184f9c3b", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E} \\big[ \\hat{\\boldsymbol{\\beta}}^{\\mathrm{Ridge}} \\big]=(\\mathbf{X}^{T} \\mathbf{X} + \\lambda \\mathbf{I}_{pp})^{-1} (\\mathbf{X}^{\\top} \\mathbf{X})\\boldsymbol{\\beta}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "d0f46be1", + "metadata": { + "editable": true + }, + "source": [ + "We see clearly that \n", + "$\\mathbb{E} \\big[ \\hat{\\boldsymbol{\\beta}}^{\\mathrm{Ridge}} \\big] \\not= \\hat{\\boldsymbol{\\beta}}^{\\mathrm{OLS}}$ for any $\\lambda > 0$.\n", + "\n", + "We can also compute the variance as" + ] + }, + { + "cell_type": "markdown", + "id": "03e3ac5f", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mbox{Var}[\\hat{\\boldsymbol{\\beta}}^{\\mathrm{Ridge}}]=\\sigma^2[ \\mathbf{X}^{T} \\mathbf{X} + \\lambda \\mathbf{I} ]^{-1} \\mathbf{X}^{T} \\mathbf{X} \\{ [ \\mathbf{X}^{\\top} \\mathbf{X} + \\lambda \\mathbf{I} ]^{-1}\\}^{T},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "13ec2524", + "metadata": { + "editable": true + }, + "source": [ + "and it is easy to see that if the parameter $\\lambda$ goes to infinity then the variance of Ridge parameters $\\boldsymbol{\\beta}$ goes to zero. \n", + "\n", + "With this, we can compute the difference" + ] + }, + { + "cell_type": "markdown", + "id": "58c3f236", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mbox{Var}[\\hat{\\boldsymbol{\\beta}}^{\\mathrm{OLS}}]-\\mbox{Var}(\\hat{\\boldsymbol{\\beta}}^{\\mathrm{Ridge}})=\\sigma^2 [ \\mathbf{X}^{T} \\mathbf{X} + \\lambda \\mathbf{I} ]^{-1}[ 2\\lambda\\mathbf{I} + \\lambda^2 (\\mathbf{X}^{T} \\mathbf{X})^{-1} ] \\{ [ \\mathbf{X}^{T} \\mathbf{X} + \\lambda \\mathbf{I} ]^{-1}\\}^{T}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "bfcfc2a0", + "metadata": { + "editable": true + }, + "source": [ + "The difference is non-negative definite since each component of the\n", + "matrix product is non-negative definite. \n", + "This means the variance we obtain with the standard OLS will always for $\\lambda > 0$ be larger than the variance of $\\boldsymbol{\\beta}$ obtained with the Ridge estimator. This has interesting consequences when we discuss the so-called bias-variance trade-off below. \n", + "\n", + "For more discussions of Ridge regression and calculation of averages, [Wessel van Wieringen's](https://arxiv.org/abs/1509.09169) article is highly recommended." + ] + }, + { + "cell_type": "markdown", + "id": "f3a9f084", + "metadata": { + "editable": true + }, + "source": [ + "## Material for lecture Thursday September 14" + ] + }, + { + "cell_type": "markdown", + "id": "a4338936", + "metadata": { + "editable": true + }, + "source": [ + "## Deriving OLS from a probability distribution\n", + "\n", + "Our basic assumption when we derived the OLS equations was to assume\n", + "that our output is determined by a given continuous function\n", + "$f(\\boldsymbol{x})$ and a random noise $\\boldsymbol{\\epsilon}$ given by the normal\n", + "distribution with zero mean value and an undetermined variance\n", + "$\\sigma^2$.\n", + "\n", + "We found above that the outputs $\\boldsymbol{y}$ have a mean value given by\n", + "$\\boldsymbol{X}\\hat{\\boldsymbol{\\beta}}$ and variance $\\sigma^2$. Since the entries to\n", + "the design matrix are not stochastic variables, we can assume that the\n", + "probability distribution of our targets is also a normal distribution\n", + "but now with mean value $\\boldsymbol{X}\\hat{\\boldsymbol{\\beta}}$. This means that a\n", + "single output $y_i$ is given by the Gaussian distribution" + ] + }, + { + "cell_type": "markdown", + "id": "d7566301", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "y_i\\sim \\mathcal{N}(\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta}, \\sigma^2)=\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "c8af7fae", + "metadata": { + "editable": true + }, + "source": [ + "## Independent and Identically Distrubuted (iid)\n", + "\n", + "We assume now that the various $y_i$ values are stochastically distributed according to the above Gaussian distribution. \n", + "We define this distribution as" + ] + }, + { + "cell_type": "markdown", + "id": "959e33e8", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(y_i, \\boldsymbol{X}\\vert\\boldsymbol{\\beta})=\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "c847b78b", + "metadata": { + "editable": true + }, + "source": [ + "which reads as finding the likelihood of an event $y_i$ with the input variables $\\boldsymbol{X}$ given the parameters (to be determined) $\\boldsymbol{\\beta}$.\n", + "\n", + "Since these events are assumed to be independent and identicall distributed we can build the probability distribution function (PDF) for all possible event $\\boldsymbol{y}$ as the product of the single events, that is we have" + ] + }, + { + "cell_type": "markdown", + "id": "75c188ba", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{y},\\boldsymbol{X}\\vert\\boldsymbol{\\beta})=\\prod_{i=0}^{n-1}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}=\\prod_{i=0}^{n-1}p(y_i,\\boldsymbol{X}\\vert\\boldsymbol{\\beta}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "60b89ba3", + "metadata": { + "editable": true + }, + "source": [ + "We will write this in a more compact form reserving $\\boldsymbol{D}$ for the domain of events, including the ouputs (targets) and the inputs. That is\n", + "in case we have a simple one-dimensional input and output case" + ] + }, + { + "cell_type": "markdown", + "id": "fd5d5a54", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{D}=[(x_0,y_0), (x_1,y_1),\\dots, (x_{n-1},y_{n-1})].\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "56f25582", + "metadata": { + "editable": true + }, + "source": [ + "In the more general case the various inputs should be replaced by the possible features represented by the input data set $\\boldsymbol{X}$. \n", + "We can now rewrite the above probability as" + ] + }, + { + "cell_type": "markdown", + "id": "9974b303", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{D}\\vert\\boldsymbol{\\beta})=\\prod_{i=0}^{n-1}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "4112e053", + "metadata": { + "editable": true + }, + "source": [ + "It is a conditional probability (see below) and reads as the likelihood of a domain of events $\\boldsymbol{D}$ given a set of parameters $\\boldsymbol{\\beta}$." + ] + }, + { + "cell_type": "markdown", + "id": "7be4a14c", + "metadata": { + "editable": true + }, + "source": [ + "## Maximum Likelihood Estimation (MLE)\n", + "\n", + "In statistics, maximum likelihood estimation (MLE) is a method of\n", + "estimating the parameters of an assumed probability distribution,\n", + "given some observed data. This is achieved by maximizing a likelihood\n", + "function so that, under the assumed statistical model, the observed\n", + "data is the most probable. \n", + "\n", + "We will assume here that our events are given by the above Gaussian\n", + "distribution and we will determine the optimal parameters $\\beta$ by\n", + "maximizing the above PDF. However, computing the derivatives of a\n", + "product function is cumbersome and can easily lead to overflow and/or\n", + "underflowproblems, with potentials for loss of numerical precision.\n", + "\n", + "In practice, it is more convenient to maximize the logarithm of the\n", + "PDF because it is a monotonically increasing function of the argument.\n", + "Alternatively, and this will be our option, we will minimize the\n", + "negative of the logarithm since this is a monotonically decreasing\n", + "function.\n", + "\n", + "Note also that maximization/minimization of the logarithm of the PDF\n", + "is equivalent to the maximization/minimization of the function itself." + ] + }, + { + "cell_type": "markdown", + "id": "35078f48", + "metadata": { + "editable": true + }, + "source": [ + "## A new Cost Function\n", + "\n", + "We could now define a new cost function to minimize, namely the negative logarithm of the above PDF" + ] + }, + { + "cell_type": "markdown", + "id": "cb25ead1", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{\\beta}=-\\log{\\prod_{i=0}^{n-1}p(y_i,\\boldsymbol{X}\\vert\\boldsymbol{\\beta})}=-\\sum_{i=0}^{n-1}\\log{p(y_i,\\boldsymbol{X}\\vert\\boldsymbol{\\beta})},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "5cc80036", + "metadata": { + "editable": true + }, + "source": [ + "which becomes" + ] + }, + { + "cell_type": "markdown", + "id": "8ebc6099", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{\\beta}=\\frac{n}{2}\\log{2\\pi\\sigma^2}+\\frac{\\vert\\vert (\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta})\\vert\\vert_2^2}{2\\sigma^2}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "3160dff4", + "metadata": { + "editable": true + }, + "source": [ + "Taking the derivative of the *new* cost function with respect to the parameters $\\beta$ we recognize our familiar OLS equation, namely" + ] + }, + { + "cell_type": "markdown", + "id": "8a3aaa69", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{X}^T\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right) =0,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "7af6708c", + "metadata": { + "editable": true + }, + "source": [ + "which leads to the well-known OLS equation for the optimal paramters $\\beta$" + ] + }, + { + "cell_type": "markdown", + "id": "c82e095e", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\hat{\\boldsymbol{\\beta}}^{\\mathrm{OLS}}=\\left(\\boldsymbol{X}^T\\boldsymbol{X}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}!\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "9431eca4", + "metadata": { + "editable": true + }, + "source": [ + "Before we make a similar analysis for Ridge and Lasso regression, we need a short reminder on statistics." + ] + }, + { + "cell_type": "markdown", + "id": "1db6c222", + "metadata": { + "editable": true + }, + "source": [ + "## More basic Statistics and Bayes' theorem\n", + "\n", + "A central theorem in statistics is Bayes' theorem. This theorem plays a similar role as the good old Pythagoras' theorem in geometry.\n", + "Bayes' theorem is extremely simple to derive. But to do so we need some basic axioms from statistics.\n", + "\n", + "Assume we have two domains of events $X=[x_0,x_1,\\dots,x_{n-1}]$ and $Y=[y_0,y_1,\\dots,y_{n-1}]$.\n", + "\n", + "We define also the likelihood for $X$ and $Y$ as $p(X)$ and $p(Y)$ respectively.\n", + "The likelihood of a specific event $x_i$ (or $y_i$) is then written as $p(X=x_i)$ or just $p(x_i)=p_i$. \n", + "\n", + "**Union of events is given by.**" + ] + }, + { + "cell_type": "markdown", + "id": "98c457ce", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(X \\cup Y)= p(X)+p(Y)-p(X \\cap Y).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "b6a3893f", + "metadata": { + "editable": true + }, + "source": [ + "**The product rule (aka joint probability) is given by.**" + ] + }, + { + "cell_type": "markdown", + "id": "17f0e52e", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(X \\cup Y)= p(X,Y)= p(X\\vert Y)p(Y)=p(Y\\vert X)p(X),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "c2bfaea6", + "metadata": { + "editable": true + }, + "source": [ + "where we read $p(X\\vert Y)$ as the likelihood of obtaining $X$ given $Y$.\n", + "\n", + "If we have independent events then $p(X,Y)=p(X)p(Y)$." + ] + }, + { + "cell_type": "markdown", + "id": "377eefdf", + "metadata": { + "editable": true + }, + "source": [ + "## Marginal Probability\n", + "\n", + "The marginal probability is defined in terms of only one of the set of variables $X,Y$. For a discrete probability we have" + ] + }, + { + "cell_type": "markdown", + "id": "6da6253e", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(X)=\\sum_{i=0}^{n-1}p(X,Y=y_i)=\\sum_{i=0}^{n-1}p(X\\vert Y=y_i)p(Y=y_i)=\\sum_{i=0}^{n-1}p(X\\vert y_i)p(y_i).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "e5906b3e", + "metadata": { + "editable": true + }, + "source": [ + "## Conditional Probability\n", + "\n", + "The conditional probability, if $p(Y) > 0$, is" + ] + }, + { + "cell_type": "markdown", + "id": "792d292c", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(X\\vert Y)= \\frac{p(X,Y)}{p(Y)}=\\frac{p(X,Y)}{\\sum_{i=0}^{n-1}p(Y\\vert X=x_i)p(x_i)}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "c3bc0674", + "metadata": { + "editable": true + }, + "source": [ + "## Bayes' Theorem\n", + "\n", + "If we combine the conditional probability with the marginal probability and the standard product rule, we have" + ] + }, + { + "cell_type": "markdown", + "id": "0faadf3f", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(X\\vert Y)= \\frac{p(X,Y)}{p(Y)},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "a2d478a7", + "metadata": { + "editable": true + }, + "source": [ + "which we can rewrite as" + ] + }, + { + "cell_type": "markdown", + "id": "d51ac6ce", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(X\\vert Y)= \\frac{p(X,Y)}{\\sum_{i=0}^{n-1}p(Y\\vert X=x_i)p(x_i)}=\\frac{p(Y\\vert X)p(X)}{\\sum_{i=0}^{n-1}p(Y\\vert X=x_i)p(x_i)},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "91d489d9", + "metadata": { + "editable": true + }, + "source": [ + "which is Bayes' theorem. It allows us to evaluate the uncertainty in in $X$ after we have observed $Y$. We can easily interchange $X$ with $Y$." + ] + }, + { + "cell_type": "markdown", + "id": "ebe26b44", + "metadata": { + "editable": true + }, + "source": [ + "## Interpretations of Bayes' Theorem\n", + "\n", + "The quantity $p(Y\\vert X)$ on the right-hand side of the theorem is\n", + "evaluated for the observed data $Y$ and can be viewed as a function of\n", + "the parameter space represented by $X$. This function is not\n", + "necesseraly normalized and is normally called the likelihood function.\n", + "\n", + "The function $p(X)$ on the right hand side is called the prior while the function on the left hand side is the called the posterior probability. The denominator on the right hand side serves as a normalization factor for the posterior distribution.\n", + "\n", + "Let us try to illustrate Bayes' theorem through an example." + ] + }, + { + "cell_type": "markdown", + "id": "a67660e2", + "metadata": { + "editable": true + }, + "source": [ + "## Example of Usage of Bayes' theorem\n", + "\n", + "Let us suppose that you are undergoing a series of mammography scans in\n", + "order to rule out possible breast cancer cases. We define the\n", + "sensitivity for a positive event by the variable $X$. It takes binary\n", + "values with $X=1$ representing a positive event and $X=0$ being a\n", + "negative event. We reserve $Y$ as a classification parameter for\n", + "either a negative or a positive breast cancer confirmation. (Short note on wordings: positive here means having breast cancer, although none of us would consider this being a positive thing).\n", + "\n", + "We let $Y=1$ represent the the case of having breast cancer and $Y=0$ as not.\n", + "\n", + "Let us assume that if you have breast cancer, the test will be positive with a probability of $0.8$, that is we have" + ] + }, + { + "cell_type": "markdown", + "id": "40b7eac0", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(X=1\\vert Y=1) =0.8.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "16a3b6ea", + "metadata": { + "editable": true + }, + "source": [ + "This obviously sounds scary since many would conclude that if the test is positive, there is a likelihood of $80\\%$ for having cancer.\n", + "It is however not correct, as the following Bayesian analysis shows." + ] + }, + { + "cell_type": "markdown", + "id": "f41ccc6d", + "metadata": { + "editable": true + }, + "source": [ + "## Doing it correctly\n", + "\n", + "If we look at various national surveys on breast cancer, the general likelihood of developing breast cancer is a very small number.\n", + "Let us assume that the prior probability in the population as a whole is" + ] + }, + { + "cell_type": "markdown", + "id": "ae81305b", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(Y=1) =0.004.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "f4829b81", + "metadata": { + "editable": true + }, + "source": [ + "We need also to account for the fact that the test may produce a false positive result (false alarm). Let us here assume that we have" + ] + }, + { + "cell_type": "markdown", + "id": "812273af", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(X=1\\vert Y=0) =0.1.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "31ecba0e", + "metadata": { + "editable": true + }, + "source": [ + "Using Bayes' theorem we can then find the posterior probability that the person has breast cancer in case of a positive test, that is we can compute" + ] + }, + { + "cell_type": "markdown", + "id": "ca6682ec", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(Y=1\\vert X=1)=\\frac{p(X=1\\vert Y=1)p(Y=1)}{p(X=1\\vert Y=1)p(Y=1)+p(X=1\\vert Y=0)p(Y=0)}=\\frac{0.8\\times 0.004}{0.8\\times 0.004+0.1\\times 0.996}=0.031.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "662eaffb", + "metadata": { + "editable": true + }, + "source": [ + "That is, in case of a positive test, there is only a $3\\%$ chance of having breast cancer!" + ] + }, + { + "cell_type": "markdown", + "id": "08d5551d", + "metadata": { + "editable": true + }, + "source": [ + "## Bayes' Theorem and Ridge and Lasso Regression\n", + "\n", + "Using Bayes' theorem we can gain a better intuition about Ridge and Lasso regression. \n", + "\n", + "For ordinary least squares we postulated that the maximum likelihood for the doamin of events $\\boldsymbol{D}$ (one-dimensional case)" + ] + }, + { + "cell_type": "markdown", + "id": "03f3de9c", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{D}=[(x_0,y_0), (x_1,y_1),\\dots, (x_{n-1},y_{n-1})],\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "c57ace49", + "metadata": { + "editable": true + }, + "source": [ + "is given by" + ] + }, + { + "cell_type": "markdown", + "id": "cb014b2b", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{D}\\vert\\boldsymbol{\\beta})=\\prod_{i=0}^{n-1}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "1054d47e", + "metadata": { + "editable": true + }, + "source": [ + "In Bayes' theorem this function plays the role of the so-called likelihood. We could now ask the question what is the posterior probability of a parameter set $\\boldsymbol{\\beta}$ given a domain of events $\\boldsymbol{D}$? That is, how can we define the posterior probability" + ] + }, + { + "cell_type": "markdown", + "id": "1485d44c", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{\\beta}\\vert\\boldsymbol{D}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "f457f909", + "metadata": { + "editable": true + }, + "source": [ + "Bayes' theorem comes to our rescue here since (omitting the normalization constant)" + ] + }, + { + "cell_type": "markdown", + "id": "59447b2a", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{\\beta}\\vert\\boldsymbol{D})\\propto p(\\boldsymbol{D}\\vert\\boldsymbol{\\beta})p(\\boldsymbol{\\beta}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "4fe26100", + "metadata": { + "editable": true + }, + "source": [ + "We have a model for $p(\\boldsymbol{D}\\vert\\boldsymbol{\\beta})$ but need one for the **prior** $p(\\boldsymbol{\\beta}$!" + ] + }, + { + "cell_type": "markdown", + "id": "d73c2d9c", + "metadata": { + "editable": true + }, + "source": [ + "## Ridge and Bayes\n", + "\n", + "With the posterior probability defined by a likelihood which we have\n", + "already modeled and an unknown prior, we are now ready to make\n", + "additional models for the prior.\n", + "\n", + "We can, based on our discussions of the variance of $\\boldsymbol{\\beta}$ and the mean value, assume that the prior for the values $\\boldsymbol{\\beta}$ is given by a Gaussian with mean value zero and variance $\\tau^2$, that is" + ] + }, + { + "cell_type": "markdown", + "id": "8cdf2c97", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{\\beta})=\\prod_{j=0}^{p-1}\\exp{\\left(-\\frac{\\beta_j^2}{2\\tau^2}\\right)}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "7272ef9f", + "metadata": { + "editable": true + }, + "source": [ + "Our posterior probability becomes then (omitting the normalization factor which is just a constant)" + ] + }, + { + "cell_type": "markdown", + "id": "0dc5b2b7", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{\\beta\\vert\\boldsymbol{D})}=\\prod_{i=0}^{n-1}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}\\prod_{j=0}^{p-1}\\exp{\\left(-\\frac{\\beta_j^2}{2\\tau^2}\\right)}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "b6c8c684", + "metadata": { + "editable": true + }, + "source": [ + "We can now optimize this quantity with respect to $\\boldsymbol{\\beta}$. As we\n", + "did for OLS, this is most conveniently done by taking the negative\n", + "logarithm of the posterior probability. Doing so and leaving out the\n", + "constants terms that do not depend on $\\beta$, we have" + ] + }, + { + "cell_type": "markdown", + "id": "f681ed50", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{\\beta})=\\frac{\\vert\\vert (\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta})\\vert\\vert_2^2}{2\\sigma^2}+\\frac{1}{2\\tau^2}\\vert\\vert\\boldsymbol{\\beta}\\vert\\vert_2^2,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "5c3bc898", + "metadata": { + "editable": true + }, + "source": [ + "and replacing $1/2\\tau^2$ with $\\lambda$ we have" + ] + }, + { + "cell_type": "markdown", + "id": "a3cea046", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{\\beta})=\\frac{\\vert\\vert (\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta})\\vert\\vert_2^2}{2\\sigma^2}+\\lambda\\vert\\vert\\boldsymbol{\\beta}\\vert\\vert_2^2,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "68276410", + "metadata": { + "editable": true + }, + "source": [ + "which is our Ridge cost function! Nice, isn't it?" + ] + }, + { + "cell_type": "markdown", + "id": "dfd55611", + "metadata": { + "editable": true + }, + "source": [ + "## Lasso and Bayes\n", + "\n", + "To derive the Lasso cost function, we simply replace the Gaussian prior with an exponential distribution ([Laplace in this case](https://en.wikipedia.org/wiki/Laplace_distribution)) with zero mean value, that is" + ] + }, + { + "cell_type": "markdown", + "id": "83656dd8", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{\\beta})=\\prod_{j=0}^{p-1}\\exp{\\left(-\\frac{\\vert\\beta_j\\vert}{\\tau}\\right)}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "b62e29fd", + "metadata": { + "editable": true + }, + "source": [ + "Our posterior probability becomes then (omitting the normalization factor which is just a constant)" + ] + }, + { + "cell_type": "markdown", + "id": "1de8855c", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{\\beta}\\vert\\boldsymbol{D})=\\prod_{i=0}^{n-1}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}\\prod_{j=0}^{p-1}\\exp{\\left(-\\frac{\\vert\\beta_j\\vert}{\\tau}\\right)}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "212152f1", + "metadata": { + "editable": true + }, + "source": [ + "Taking the negative\n", + "logarithm of the posterior probability and leaving out the\n", + "constants terms that do not depend on $\\beta$, we have" + ] + }, + { + "cell_type": "markdown", + "id": "afb042c4", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{\\beta}=\\frac{\\vert\\vert (\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta})\\vert\\vert_2^2}{2\\sigma^2}+\\frac{1}{\\tau}\\vert\\vert\\boldsymbol{\\beta}\\vert\\vert_1,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "ab1fd3c5", + "metadata": { + "editable": true + }, + "source": [ + "and replacing $1/\\tau$ with $\\lambda$ we have" + ] + }, + { + "cell_type": "markdown", + "id": "43979108", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{\\beta}=\\frac{\\vert\\vert (\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta})\\vert\\vert_2^2}{2\\sigma^2}+\\lambda\\vert\\vert\\boldsymbol{\\beta}\\vert\\vert_1,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "96622b66", + "metadata": { + "editable": true + }, + "source": [ + "which is our Lasso cost function!" + ] + }, + { + "cell_type": "markdown", + "id": "e17a5b6d", + "metadata": { + "editable": true + }, + "source": [ + "## Why resampling methods\n", + "\n", + "Before we proceed, we need to rethink what we have been doing. In our\n", + "eager to fit the data, we have omitted several important elements in\n", + "our regression analysis. In what follows we will\n", + "1. look at statistical properties, including a discussion of mean values, variance and the so-called bias-variance tradeoff\n", + "\n", + "2. introduce resampling techniques like cross-validation, bootstrapping and jackknife and more\n", + "\n", + "and discuss how to select a given model (one of the difficult parts in machine learning)." + ] + }, + { + "cell_type": "markdown", + "id": "24e35401", + "metadata": { + "editable": true + }, + "source": [ + "## Resampling methods\n", + "Resampling methods are an indispensable tool in modern\n", + "statistics. They involve repeatedly drawing samples from a training\n", + "set and refitting a model of interest on each sample in order to\n", + "obtain additional information about the fitted model. For example, in\n", + "order to estimate the variability of a linear regression fit, we can\n", + "repeatedly draw different samples from the training data, fit a linear\n", + "regression to each new sample, and then examine the extent to which\n", + "the resulting fits differ. Such an approach may allow us to obtain\n", + "information that would not be available from fitting the model only\n", + "once using the original training sample.\n", + "\n", + "Two resampling methods are often used in Machine Learning analyses,\n", + "1. The **bootstrap method**\n", + "\n", + "2. and **Cross-Validation**\n", + "\n", + "In addition there are several other methods such as the Jackknife and the Blocking methods. We will discuss in particular\n", + "cross-validation and the bootstrap method." + ] + }, + { + "cell_type": "markdown", + "id": "a37f1d06", + "metadata": { + "editable": true + }, + "source": [ + "## Resampling approaches can be computationally expensive\n", + "\n", + "Resampling approaches can be computationally expensive, because they\n", + "involve fitting the same statistical method multiple times using\n", + "different subsets of the training data. However, due to recent\n", + "advances in computing power, the computational requirements of\n", + "resampling methods generally are not prohibitive. In this chapter, we\n", + "discuss two of the most commonly used resampling methods,\n", + "cross-validation and the bootstrap. Both methods are important tools\n", + "in the practical application of many statistical learning\n", + "procedures. For example, cross-validation can be used to estimate the\n", + "test error associated with a given statistical learning method in\n", + "order to evaluate its performance, or to select the appropriate level\n", + "of flexibility. The process of evaluating a model’s performance is\n", + "known as model assessment, whereas the process of selecting the proper\n", + "level of flexibility for a model is known as model selection. The\n", + "bootstrap is widely used." + ] + }, + { + "cell_type": "markdown", + "id": "58f54a23", + "metadata": { + "editable": true + }, + "source": [ + "## Why resampling methods ?\n", + "**Statistical analysis.**\n", + "\n", + "* Our simulations can be treated as *computer experiments*. This is particularly the case for Monte Carlo methods which are widely used in statistical analyses.\n", + "\n", + "* The results can be analysed with the same statistical tools as we would use when analysing experimental data.\n", + "\n", + "* As in all experiments, we are looking for expectation values and an estimate of how accurate they are, i.e., possible sources for errors." + ] + }, + { + "cell_type": "markdown", + "id": "6ed7c809", + "metadata": { + "editable": true + }, + "source": [ + "## Statistical analysis\n", + "\n", + "* As in other experiments, many numerical experiments have two classes of errors:\n", + "\n", + " * Statistical errors\n", + "\n", + " * Systematical errors\n", + "\n", + "* Statistical errors can be estimated using standard tools from statistics\n", + "\n", + "* Systematical errors are method specific and must be treated differently from case to case." + ] + }, + { + "cell_type": "markdown", + "id": "bed9bb2f", + "metadata": { + "editable": true + }, + "source": [ + "## Resampling methods\n", + "\n", + "With all these analytical equations for both the OLS and Ridge\n", + "regression, we will now outline how to assess a given model. This will\n", + "lead to a discussion of the so-called bias-variance tradeoff (see\n", + "below) and so-called resampling methods.\n", + "\n", + "One of the quantities we have discussed as a way to measure errors is\n", + "the mean-squared error (MSE), mainly used for fitting of continuous\n", + "functions. Another choice is the absolute error.\n", + "\n", + "In the discussions below we will focus on the MSE and in particular since we will split the data into test and training data,\n", + "we discuss the\n", + "1. prediction error or simply the **test error** $\\mathrm{Err_{Test}}$, where we have a fixed training set and the test error is the MSE arising from the data reserved for testing. We discuss also the \n", + "\n", + "2. training error $\\mathrm{Err_{Train}}$, which is the average loss over the training data.\n", + "\n", + "As our model becomes more and more complex, more of the training data tends to used. The training may thence adapt to more complicated structures in the data. This may lead to a decrease in the bias (see below for code example) and a slight increase of the variance for the test error.\n", + "For a certain level of complexity the test error will reach minimum, before starting to increase again. The\n", + "training error reaches a saturation." + ] + }, + { + "cell_type": "markdown", + "id": "2cafa0a3", + "metadata": { + "editable": true + }, + "source": [ + "## Resampling methods: Bootstrap\n", + "Bootstrapping is a [non-parametric approach](https://en.wikipedia.org/wiki/Nonparametric_statistics) to statistical inference\n", + "that substitutes computation for more traditional distributional\n", + "assumptions and asymptotic results. Bootstrapping offers a number of\n", + "advantages: \n", + "1. The bootstrap is quite general, although there are some cases in which it fails. \n", + "\n", + "2. Because it does not require distributional assumptions (such as normally distributed errors), the bootstrap can provide more accurate inferences when the data are not well behaved or when the sample size is small. \n", + "\n", + "3. It is possible to apply the bootstrap to statistics with sampling distributions that are difficult to derive, even asymptotically. \n", + "\n", + "4. It is relatively simple to apply the bootstrap to complex data-collection plans (such as stratified and clustered samples).\n", + "\n", + "The textbook by [Davison on the Bootstrap Methods and their Applications](https://www.cambridge.org/core/books/bootstrap-methods-and-their-application/ED2FD043579F27952363566DC09CBD6A) provides many more insights and proofs. In this course we will take a more practical approach and use the results and theorems provided in the literature. For those interested in reading more about the bootstrap methods, we recommend the above text and the one by [Efron and Tibshirani](https://www.routledge.com/An-Introduction-to-the-Bootstrap/Efron-Tibshirani/p/book/9780412042317).\n", + "\n", + "Before we proceed however, we need to remind ourselves about a central theorem in statistics, namely the so-called **central limit theorem**." + ] + }, + { + "cell_type": "markdown", + "id": "fefbb980", + "metadata": { + "editable": true + }, + "source": [ + "## The Central Limit Theorem\n", + "\n", + "Suppose we have a PDF $p(x)$ from which we generate a series $N$\n", + "of averages $\\mathbb{E}[x_i]$. Each mean value $\\mathbb{E}[x_i]$\n", + "is viewed as the average of a specific measurement, e.g., throwing \n", + "dice 100 times and then taking the average value, or producing a certain\n", + "amount of random numbers. \n", + "For notational ease, we set $\\mathbb{E}[x_i]=x_i$ in the discussion\n", + "which follows. We do the same for $\\mathbb{E}[z]=z$.\n", + "\n", + "If we compute the mean $z$ of $m$ such mean values $x_i$" + ] + }, + { + "cell_type": "markdown", + "id": "4560153d", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "z=\\frac{x_1+x_2+\\dots+x_m}{m},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "ffcbdd5a", + "metadata": { + "editable": true + }, + "source": [ + "the question we pose is which is the PDF of the new variable $z$." + ] + }, + { + "cell_type": "markdown", + "id": "d055ea55", + "metadata": { + "editable": true + }, + "source": [ + "## Finding the Limit\n", + "\n", + "The probability of obtaining an average value $z$ is the product of the \n", + "probabilities of obtaining arbitrary individual mean values $x_i$,\n", + "but with the constraint that the average is $z$. We can express this through\n", + "the following expression" + ] + }, + { + "cell_type": "markdown", + "id": "004f0161", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\tilde{p}(z)=\\int dx_1p(x_1)\\int dx_2p(x_2)\\dots\\int dx_mp(x_m)\n", + " \\delta(z-\\frac{x_1+x_2+\\dots+x_m}{m}),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "039f4ad5", + "metadata": { + "editable": true + }, + "source": [ + "where the $\\delta$-function enbodies the constraint that the mean is $z$.\n", + "All measurements that lead to each individual $x_i$ are expected to\n", + "be independent, which in turn means that we can express $\\tilde{p}$ as the \n", + "product of individual $p(x_i)$. The independence assumption is important in the derivation of the central limit theorem." + ] + }, + { + "cell_type": "markdown", + "id": "413459f1", + "metadata": { + "editable": true + }, + "source": [ + "## Rewriting the $\\delta$-function\n", + "\n", + "If we use the integral expression for the $\\delta$-function" + ] + }, + { + "cell_type": "markdown", + "id": "bef022c8", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\delta(z-\\frac{x_1+x_2+\\dots+x_m}{m})=\\frac{1}{2\\pi}\\int_{-\\infty}^{\\infty}\n", + " dq\\exp{\\left(iq(z-\\frac{x_1+x_2+\\dots+x_m}{m})\\right)},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "3d53693d", + "metadata": { + "editable": true + }, + "source": [ + "and inserting $e^{i\\mu q-i\\mu q}$ where $\\mu$ is the mean value\n", + "we arrive at" + ] + }, + { + "cell_type": "markdown", + "id": "e682c32a", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\tilde{p}(z)=\\frac{1}{2\\pi}\\int_{-\\infty}^{\\infty}\n", + " dq\\exp{\\left(iq(z-\\mu)\\right)}\\left[\\int_{-\\infty}^{\\infty}\n", + " dxp(x)\\exp{\\left(iq(\\mu-x)/m\\right)}\\right]^m,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "f44053ea", + "metadata": { + "editable": true + }, + "source": [ + "with the integral over $x$ resulting in" + ] + }, + { + "cell_type": "markdown", + "id": "f10de930", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\int_{-\\infty}^{\\infty}dxp(x)\\exp{\\left(iq(\\mu-x)/m\\right)}=\n", + " \\int_{-\\infty}^{\\infty}dxp(x)\n", + " \\left[1+\\frac{iq(\\mu-x)}{m}-\\frac{q^2(\\mu-x)^2}{2m^2}+\\dots\\right].\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "1f91402a", + "metadata": { + "editable": true + }, + "source": [ + "## Identifying Terms\n", + "\n", + "The second term on the rhs disappears since this is just the mean and \n", + "employing the definition of $\\sigma^2$ we have" + ] + }, + { + "cell_type": "markdown", + "id": "2d7a8e36", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\int_{-\\infty}^{\\infty}dxp(x)e^{\\left(iq(\\mu-x)/m\\right)}=\n", + " 1-\\frac{q^2\\sigma^2}{2m^2}+\\dots,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "4c756ca2", + "metadata": { + "editable": true + }, + "source": [ + "resulting in" + ] + }, + { + "cell_type": "markdown", + "id": "908f782e", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\left[\\int_{-\\infty}^{\\infty}dxp(x)\\exp{\\left(iq(\\mu-x)/m\\right)}\\right]^m\\approx\n", + " \\left[1-\\frac{q^2\\sigma^2}{2m^2}+\\dots \\right]^m,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "f12152da", + "metadata": { + "editable": true + }, + "source": [ + "and in the limit $m\\rightarrow \\infty$ we obtain" + ] + }, + { + "cell_type": "markdown", + "id": "85dd290d", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\tilde{p}(z)=\\frac{1}{\\sqrt{2\\pi}(\\sigma/\\sqrt{m})}\n", + " \\exp{\\left(-\\frac{(z-\\mu)^2}{2(\\sigma/\\sqrt{m})^2}\\right)},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "57631d10", + "metadata": { + "editable": true + }, + "source": [ + "which is the normal distribution with variance\n", + "$\\sigma^2_m=\\sigma^2/m$, where $\\sigma$ is the variance of the PDF $p(x)$\n", + "and $\\mu$ is also the mean of the PDF $p(x)$." + ] + }, + { + "cell_type": "markdown", + "id": "2d4d5ccb", + "metadata": { + "editable": true + }, + "source": [ + "## Wrapping it up\n", + "\n", + "Thus, the central limit theorem states that the PDF $\\tilde{p}(z)$ of\n", + "the average of $m$ random values corresponding to a PDF $p(x)$ \n", + "is a normal distribution whose mean is the \n", + "mean value of the PDF $p(x)$ and whose variance is the variance\n", + "of the PDF $p(x)$ divided by $m$, the number of values used to compute $z$.\n", + "\n", + "The central limit theorem leads to the well-known expression for the\n", + "standard deviation, given by" + ] + }, + { + "cell_type": "markdown", + "id": "a29c8551", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\sigma_m=\n", + "\\frac{\\sigma}{\\sqrt{m}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "6509ba36", + "metadata": { + "editable": true + }, + "source": [ + "The latter is true only if the average value is known exactly. This is obtained in the limit\n", + "$m\\rightarrow \\infty$ only. Because the mean and the variance are measured quantities we obtain \n", + "the familiar expression in statistics (the so-called Bessel correction)" + ] + }, + { + "cell_type": "markdown", + "id": "733307b1", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\sigma_m\\approx \n", + "\\frac{\\sigma}{\\sqrt{m-1}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "a69b7331", + "metadata": { + "editable": true + }, + "source": [ + "In many cases however the above estimate for the standard deviation,\n", + "in particular if correlations are strong, may be too simplistic. Keep\n", + "in mind that we have assumed that the variables $x$ are independent\n", + "and identically distributed. This is obviously not always the\n", + "case. For example, the random numbers (or better pseudorandom numbers)\n", + "we generate in various calculations do always exhibit some\n", + "correlations.\n", + "\n", + "The theorem is satisfied by a large class of PDFs. Note however that for a\n", + "finite $m$, it is not always possible to find a closed form /analytic expression for\n", + "$\\tilde{p}(x)$." + ] + }, + { + "cell_type": "markdown", + "id": "ced659da", + "metadata": { + "editable": true + }, + "source": [ + "## Confidence Intervals\n", + "\n", + "Confidence intervals are used in statistics and represent a type of estimate\n", + "computed from the observed data. This gives a range of values for an\n", + "unknown parameter such as the parameters $\\boldsymbol{\\beta}$ from linear regression.\n", + "\n", + "With the OLS expressions for the parameters $\\boldsymbol{\\beta}$ we found \n", + "$\\mathbb{E}(\\boldsymbol{\\beta}) = \\boldsymbol{\\beta}$, which means that the estimator of the regression parameters is unbiased.\n", + "\n", + "We found also that the variance of the estimate of the $j$-th regression coefficient is\n", + "$\\boldsymbol{\\sigma}^2 (\\boldsymbol{\\beta}_j ) = \\boldsymbol{\\sigma}^2 [(\\mathbf{X}^{T} \\mathbf{X})^{-1}]_{jj} $.\n", + "\n", + "This quantity will be used to\n", + "construct a confidence interval for the estimates." + ] + }, + { + "cell_type": "markdown", + "id": "2c0d0a71", + "metadata": { + "editable": true + }, + "source": [ + "## Standard Approach based on the Normal Distribution\n", + "\n", + "We will assume that the parameters $\\beta$ follow a normal\n", + "distribution. We can then define the confidence interval. Here we will be using as\n", + "shorthands $\\mu_{\\beta}$ for the above mean value and $\\sigma_{\\beta}$\n", + "for the standard deviation. We have then a confidence interval" + ] + }, + { + "cell_type": "markdown", + "id": "d3a4d693", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\left(\\mu_{\\beta}\\pm \\frac{z\\sigma_{\\beta}}{\\sqrt{n}}\\right),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "3ed3d852", + "metadata": { + "editable": true + }, + "source": [ + "where $z$ defines the level of certainty (or confidence). For a normal\n", + "distribution typical parameters are $z=2.576$ which corresponds to a\n", + "confidence of $99\\%$ while $z=1.96$ corresponds to a confidence of\n", + "$95\\%$. A confidence level of $95\\%$ is commonly used and it is\n", + "normally referred to as a *two-sigmas* confidence level, that is we\n", + "approximate $z\\approx 2$.\n", + "\n", + "For more discussions of confidence intervals (and in particular linked with a discussion of the bootstrap method), see chapter 5 of the textbook by [Davison on the Bootstrap Methods and their Applications](https://www.cambridge.org/core/books/bootstrap-methods-and-their-application/ED2FD043579F27952363566DC09CBD6A)\n", + "\n", + "In this text you will also find an in-depth discussion of the\n", + "Bootstrap method, why it works and various theorems related to it." + ] + }, + { + "cell_type": "markdown", + "id": "e826e70b", + "metadata": { + "editable": true + }, + "source": [ + "## Resampling methods: Bootstrap background\n", + "\n", + "Since $\\widehat{\\beta} = \\widehat{\\beta}(\\boldsymbol{X})$ is a function of random variables,\n", + "$\\widehat{\\beta}$ itself must be a random variable. Thus it has\n", + "a pdf, call this function $p(\\boldsymbol{t})$. The aim of the bootstrap is to\n", + "estimate $p(\\boldsymbol{t})$ by the relative frequency of\n", + "$\\widehat{\\beta}$. You can think of this as using a histogram\n", + "in the place of $p(\\boldsymbol{t})$. If the relative frequency closely\n", + "resembles $p(\\vec{t})$, then using numerics, it is straight forward to\n", + "estimate all the interesting parameters of $p(\\boldsymbol{t})$ using point\n", + "estimators." + ] + }, + { + "cell_type": "markdown", + "id": "10b5d4d5", + "metadata": { + "editable": true + }, + "source": [ + "## Resampling methods: More Bootstrap background\n", + "\n", + "In the case that $\\widehat{\\beta}$ has\n", + "more than one component, and the components are independent, we use the\n", + "same estimator on each component separately. If the probability\n", + "density function of $X_i$, $p(x)$, had been known, then it would have\n", + "been straightforward to do this by: \n", + "1. Drawing lots of numbers from $p(x)$, suppose we call one such set of numbers $(X_1^*, X_2^*, \\cdots, X_n^*)$. \n", + "\n", + "2. Then using these numbers, we could compute a replica of $\\widehat{\\beta}$ called $\\widehat{\\beta}^*$. \n", + "\n", + "By repeated use of the above two points, many\n", + "estimates of $\\widehat{\\beta}$ can be obtained. The\n", + "idea is to use the relative frequency of $\\widehat{\\beta}^*$\n", + "(think of a histogram) as an estimate of $p(\\boldsymbol{t})$." + ] + }, + { + "cell_type": "markdown", + "id": "1645ce3c", + "metadata": { + "editable": true + }, + "source": [ + "## Resampling methods: Bootstrap approach\n", + "\n", + "But\n", + "unless there is enough information available about the process that\n", + "generated $X_1,X_2,\\cdots,X_n$, $p(x)$ is in general\n", + "unknown. Therefore, [Efron in 1979](https://projecteuclid.org/euclid.aos/1176344552) asked the\n", + "question: What if we replace $p(x)$ by the relative frequency\n", + "of the observation $X_i$?\n", + "\n", + "If we draw observations in accordance with\n", + "the relative frequency of the observations, will we obtain the same\n", + "result in some asymptotic sense? The answer is yes." + ] + }, + { + "cell_type": "markdown", + "id": "4986483a", + "metadata": { + "editable": true + }, + "source": [ + "## Resampling methods: Bootstrap steps\n", + "\n", + "The independent bootstrap works like this: \n", + "\n", + "1. Draw with replacement $n$ numbers for the observed variables $\\boldsymbol{x} = (x_1,x_2,\\cdots,x_n)$. \n", + "\n", + "2. Define a vector $\\boldsymbol{x}^*$ containing the values which were drawn from $\\boldsymbol{x}$. \n", + "\n", + "3. Using the vector $\\boldsymbol{x}^*$ compute $\\widehat{\\beta}^*$ by evaluating $\\widehat \\beta$ under the observations $\\boldsymbol{x}^*$. \n", + "\n", + "4. Repeat this process $k$ times. \n", + "\n", + "When you are done, you can draw a histogram of the relative frequency\n", + "of $\\widehat \\beta^*$. This is your estimate of the probability\n", + "distribution $p(t)$. Using this probability distribution you can\n", + "estimate any statistics thereof. In principle you never draw the\n", + "histogram of the relative frequency of $\\widehat{\\beta}^*$. Instead\n", + "you use the estimators corresponding to the statistic of interest. For\n", + "example, if you are interested in estimating the variance of $\\widehat\n", + "\\beta$, apply the etsimator $\\widehat \\sigma^2$ to the values\n", + "$\\widehat \\beta^*$." + ] + }, + { + "cell_type": "markdown", + "id": "fe853f3b", + "metadata": { + "editable": true + }, + "source": [ + "## Code example for the Bootstrap method\n", + "\n", + "The following code starts with a Gaussian distribution with mean value\n", + "$\\mu =100$ and variance $\\sigma=15$. We use this to generate the data\n", + "used in the bootstrap analysis. The bootstrap analysis returns a data\n", + "set after a given number of bootstrap operations (as many as we have\n", + "data points). This data set consists of estimated mean values for each\n", + "bootstrap operation. The histogram generated by the bootstrap method\n", + "shows that the distribution for these mean values is also a Gaussian,\n", + "centered around the mean value $\\mu=100$ but with standard deviation\n", + "$\\sigma/\\sqrt{n}$, where $n$ is the number of bootstrap samples (in\n", + "this case the same as the number of original data points). The value\n", + "of the standard deviation is what we expect from the central limit\n", + "theorem." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "81ec18f8", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Bootstrap Statistics :\n", + "original bias std. error\n", + " 99.9841 15.0402 99.9828 0.1512\n" + ] + } + ], + "source": [ + "%matplotlib inline\n", + "\n", + "import numpy as np\n", + "from time import time\n", + "from scipy.stats import norm\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Returns mean of bootstrap samples \n", + "# Bootstrap algorithm\n", + "def bootstrap(data, datapoints):\n", + " t = np.zeros(datapoints)\n", + " n = len(data)\n", + " # non-parametric bootstrap \n", + " for i in range(datapoints):\n", + " t[i] = np.mean(data[np.random.randint(0,n,n)])\n", + " # analysis \n", + " print(\"Bootstrap Statistics :\")\n", + " print(\"original bias std. error\")\n", + " print(\"%8g %8g %14g %15g\" % (np.mean(data), np.std(data),np.mean(t),np.std(t)))\n", + " return t\n", + "\n", + "# We set the mean value to 100 and the standard deviation to 15\n", + "mu, sigma = 100, 15\n", + "datapoints = 10000\n", + "# We generate random numbers according to the normal distribution\n", + "x = mu + sigma*np.random.randn(datapoints)\n", + "# bootstrap returns the data sample \n", + "t = bootstrap(x, datapoints)" + ] + }, + { + "cell_type": "markdown", + "id": "f0b5b588", + "metadata": { + "editable": true + }, + "source": [ + "We see that our new variance and from that the standard deviation, agrees with the central limit theorem." + ] + }, + { + "cell_type": "markdown", + "id": "262a95e8", + "metadata": { + "editable": true + }, + "source": [ + "## Plotting the Histogram" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d235b516", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [ + { + "data": { + "image/png": "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iopK1unZs6c0f/78kvtr166V5HK5tGzZMunixYvShAkTpBo1akg3btww3M7riKg2fPPNNyVnZ2dp//79UmpqasktPz/fcDuvI6La8HGmenabqPY7efKkZGNjI82YMUP6/fffpZ9++klycHCQVq1aVan8FlMkrVu3Tqpfv75ka2sr+fj4SJGRkdK9e/dKHv/666+l2rVrS3K5XKpTp4700UcfSYWFhaVeo3v37tKoUaOeuA1zL5L01YZHjx6VOnbsKCkUCql+/frSjBkzSr35zYU+2k+lUknTpk2TGjRoINnZ2Un+/v7SuHHjpOzsbAPtlf7s27dPAlDm9mj/i4uLpalTp0o+Pj6SQqGQunXrJiUmJpZ6jYcPH0rjx4+X3NzcJHt7eyk8PFy6detWqXUCAgKkqVOnllr2zTffSAEBAZKtra3Utm1bkz11XVQbatsmAOmHH37Q8x7rnsj34T+ZapEksv22bt0qtWzZUlIoFFLTpk2lJUuWVDq/TJLMuE+eiIiIqIosbkwSERERUUWwSCIiIiLSgkUSERERkRYskoiIiIi0YJFEREREpAWLJCIiIiItWCQRERERacEiiYiIiEgLFklEREREWrBIIiIiItKCRRIRERGRFiySiMjk3b17Fz4+Ppg5c2bJshMnTsDW1ha7du0SmIyITBkvcEtEZiE2NhaDBw/G0aNH0bRpUwQGBmLAgAGYO3eu6GhEZKJYJBGR2YiMjMTu3bvRvn17/Pbbbzh16hTs7OxExyIiE8UiiYjMxsOHD9GyZUvcvn0bp0+fRuvWrUVHIiITxjFJRGQ2rl27hpSUFBQXF+PmzZui4xCRiWNPEhGZBaVSiQ4dOuCZZ55B06ZNMWfOHCQmJsLb21t0NCIyUSySiMgsvPfee/j111/x22+/oWbNmggNDYWjoyNiYmJERyMiE8XDbURk8vbv34+5c+di5cqVcHJygpWVFVauXInDhw9j0aJFouMRkYliTxIRERGRFuxJIiIiItKCRRIRERGRFiySiIiIiLRgkURERESkBYskIiIiIi1YJBERERFpwSKJiIiISAsWSURERERasEgiIiIi0oJFEhEREZEWLJKIiIiItPh/48hUlYWQ61sAAAAASUVORK5CYII=", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/week37_144_0.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "# the histogram of the bootstrapped data (normalized data if density = True)\n", + "n, binsboot, patches = plt.hist(t, 50, density=True, facecolor='red', alpha=0.75)\n", + "# add a 'best fit' line \n", + "y = norm.pdf(binsboot, np.mean(t), np.std(t))\n", + "lt = plt.plot(binsboot, y, 'b', linewidth=1)\n", + "plt.xlabel('x')\n", + "plt.ylabel('Probability')\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "c1620bb7", + "metadata": { + "editable": true + }, + "source": [ + "## The bias-variance tradeoff\n", + "\n", + "We will discuss the bias-variance tradeoff in the context of\n", + "continuous predictions such as regression. However, many of the\n", + "intuitions and ideas discussed here also carry over to classification\n", + "tasks. Consider a dataset $\\mathcal{D}$ consisting of the data\n", + "$\\mathbf{X}_\\mathcal{D}=\\{(y_j, \\boldsymbol{x}_j), j=0\\ldots n-1\\}$. \n", + "\n", + "Let us assume that the true data is generated from a noisy model" + ] + }, + { + "cell_type": "markdown", + "id": "fd3bd4b5", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{y}=f(\\boldsymbol{x}) + \\boldsymbol{\\epsilon}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "4a129d86", + "metadata": { + "editable": true + }, + "source": [ + "where $\\epsilon$ is normally distributed with mean zero and standard deviation $\\sigma^2$.\n", + "\n", + "In our derivation of the ordinary least squares method we defined then\n", + "an approximation to the function $f$ in terms of the parameters\n", + "$\\boldsymbol{\\beta}$ and the design matrix $\\boldsymbol{X}$ which embody our model,\n", + "that is $\\boldsymbol{\\tilde{y}}=\\boldsymbol{X}\\boldsymbol{\\beta}$. \n", + "\n", + "Thereafter we found the parameters $\\boldsymbol{\\beta}$ by optimizing the means squared error via the so-called cost function" + ] + }, + { + "cell_type": "markdown", + "id": "ff57b405", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{X},\\boldsymbol{\\beta}) =\\frac{1}{n}\\sum_{i=0}^{n-1}(y_i-\\tilde{y}_i)^2=\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right].\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "5a13919e", + "metadata": { + "editable": true + }, + "source": [ + "We can rewrite this as" + ] + }, + { + "cell_type": "markdown", + "id": "45d4a7b6", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\frac{1}{n}\\sum_i(f_i-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2+\\frac{1}{n}\\sum_i(\\tilde{y}_i-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2+\\sigma^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "c837442b", + "metadata": { + "editable": true + }, + "source": [ + "The three terms represent the square of the bias of the learning\n", + "method, which can be thought of as the error caused by the simplifying\n", + "assumptions built into the method. The second term represents the\n", + "variance of the chosen model and finally the last terms is variance of\n", + "the error $\\boldsymbol{\\epsilon}$.\n", + "\n", + "To derive this equation, we need to recall that the variance of $\\boldsymbol{y}$ and $\\boldsymbol{\\epsilon}$ are both equal to $\\sigma^2$. The mean value of $\\boldsymbol{\\epsilon}$ is by definition equal to zero. Furthermore, the function $f$ is not a stochastics variable, idem for $\\boldsymbol{\\tilde{y}}$.\n", + "We use a more compact notation in terms of the expectation value" + ] + }, + { + "cell_type": "markdown", + "id": "4b3c7b8e", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\mathbb{E}\\left[(\\boldsymbol{f}+\\boldsymbol{\\epsilon}-\\boldsymbol{\\tilde{y}})^2\\right],\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "7e6f977d", + "metadata": { + "editable": true + }, + "source": [ + "and adding and subtracting $\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right]$ we get" + ] + }, + { + "cell_type": "markdown", + "id": "adeab0fd", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\mathbb{E}\\left[(\\boldsymbol{f}+\\boldsymbol{\\epsilon}-\\boldsymbol{\\tilde{y}}+\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right]-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2\\right],\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "63b18db5", + "metadata": { + "editable": true + }, + "source": [ + "which, using the abovementioned expectation values can be rewritten as" + ] + }, + { + "cell_type": "markdown", + "id": "9c7eb00d", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\mathbb{E}\\left[(\\boldsymbol{y}-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2\\right]+\\mathrm{Var}\\left[\\boldsymbol{\\tilde{y}}\\right]+\\sigma^2,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "c3f4530b", + "metadata": { + "editable": true + }, + "source": [ + "that is the rewriting in terms of the so-called bias, the variance of the model $\\boldsymbol{\\tilde{y}}$ and the variance of $\\boldsymbol{\\epsilon}$." + ] + }, + { + "cell_type": "markdown", + "id": "90792236", + "metadata": { + "editable": true + }, + "source": [ + "## A way to Read the Bias-Variance Tradeoff\n", + "\n", + "\n", + "\n", + "\n", + "

    Figure 1:

    \n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "d73c7cd4", + "metadata": { + "editable": true + }, + "source": [ + "## Example code for Bias-Variance tradeoff" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "58124207", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Error: 0.013121574015585152\n", + "Bias^2: 0.012073649446193166\n", + "Var: 0.0010479245693919886\n", + "0.013121574015585152 >= 0.012073649446193166 + 0.0010479245693919886 = 0.013121574015585155\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/week37_160_1.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from sklearn.linear_model import LinearRegression, Ridge, Lasso\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.pipeline import make_pipeline\n", + "from sklearn.utils import resample\n", + "\n", + "np.random.seed(2018)\n", + "\n", + "n = 500\n", + "n_boostraps = 100\n", + "degree = 18 # A quite high value, just to show.\n", + "noise = 0.1\n", + "\n", + "# Make data set.\n", + "x = np.linspace(-1, 3, n).reshape(-1, 1)\n", + "y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2) + np.random.normal(0, 0.1, x.shape)\n", + "\n", + "# Hold out some test data that is never used in training.\n", + "x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)\n", + "\n", + "# Combine x transformation and model into one operation.\n", + "# Not neccesary, but convenient.\n", + "model = make_pipeline(PolynomialFeatures(degree=degree), LinearRegression(fit_intercept=False))\n", + "\n", + "# The following (m x n_bootstraps) matrix holds the column vectors y_pred\n", + "# for each bootstrap iteration.\n", + "y_pred = np.empty((y_test.shape[0], n_boostraps))\n", + "for i in range(n_boostraps):\n", + " x_, y_ = resample(x_train, y_train)\n", + "\n", + " # Evaluate the new model on the same test data each time.\n", + " y_pred[:, i] = model.fit(x_, y_).predict(x_test).ravel()\n", + "\n", + "# Note: Expectations and variances taken w.r.t. different training\n", + "# data sets, hence the axis=1. Subsequent means are taken across the test data\n", + "# set in order to obtain a total value, but before this we have error/bias/variance\n", + "# calculated per data point in the test set.\n", + "# Note 2: The use of keepdims=True is important in the calculation of bias as this \n", + "# maintains the column vector form. Dropping this yields very unexpected results.\n", + "error = np.mean( np.mean((y_test - y_pred)**2, axis=1, keepdims=True) )\n", + "bias = np.mean( (y_test - np.mean(y_pred, axis=1, keepdims=True))**2 )\n", + "variance = np.mean( np.var(y_pred, axis=1, keepdims=True) )\n", + "print('Error:', error)\n", + "print('Bias^2:', bias)\n", + "print('Var:', variance)\n", + "print('{} >= {} + {} = {}'.format(error, bias, variance, bias+variance))\n", + "\n", + "plt.plot(x[::5, :], y[::5, :], label='f(x)')\n", + "plt.scatter(x_test, y_test, label='Data points')\n", + "plt.scatter(x_test, np.mean(y_pred, axis=1), label='Pred')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "4b4e7bf5", + "metadata": { + "editable": true + }, + "source": [ + "## Understanding what happens" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "47b138a9", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Polynomial degree: 0\n", + "Error: 0.32149601703519115\n", + "Bias^2: 0.3123314713548606\n", + "Var: 0.009164545680330616\n", + "0.32149601703519115 >= 0.3123314713548606 + 0.009164545680330616 = 0.3214960170351912\n", + "Polynomial degree: 1\n", + "Error: 0.08426840630693411\n", + "Bias^2: 0.0796891867672603\n", + "Var: 0.004579219539673834\n", + "0.08426840630693411 >= 0.0796891867672603 + 0.004579219539673834 = 0.08426840630693413\n", + "Polynomial degree: 2\n", + "Error: 0.10398646080125035\n", + "Bias^2: 0.1007711427354898\n", + "Var: 0.0032153180657605116\n", + "0.10398646080125035 >= 0.1007711427354898 + 0.0032153180657605116 = 0.10398646080125032\n", + "Polynomial degree: 3\n", + "Error: 0.06547790180152355\n", + "Bias^2: 0.06208238634231949\n", + "Var: 0.0033955154592040936\n", + "0.06547790180152355 >= 0.06208238634231949 + 0.0033955154592040936 = 0.06547790180152359\n", + "Polynomial degree: 4\n", + "Error: 0.06844519414009445\n", + "Bias^2: 0.06453579006728324\n", + "Var: 0.003909404072811226\n", + "0.06844519414009445 >= 0.06453579006728324 + 0.003909404072811226 = 0.06844519414009446\n", + "Polynomial degree: 5\n", + "Error: 0.05227921801205686\n", + "Bias^2: 0.0481872773043029\n", + "Var: 0.004091940707753939\n", + "0.05227921801205686 >= 0.0481872773043029 + 0.004091940707753939 = 0.052279218012056844\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Polynomial degree: 6\n", + "Error: 0.037813671417389005\n", + "Bias^2: 0.033657685071527665\n", + "Var: 0.00415598634586135\n", + "0.037813671417389005 >= 0.033657685071527665 + 0.00415598634586135 = 0.03781367141738902\n", + "Polynomial degree: 7\n", + "Error: 0.02760977349102253\n", + "Bias^2: 0.022999498260366312\n", + "Var: 0.004610275230656212\n", + "0.02760977349102253 >= 0.022999498260366312 + 0.004610275230656212 = 0.027609773491022525\n", + "Polynomial degree: 8\n", + "Error: 0.017355848195593347\n", + "Bias^2: 0.010331721306655127\n", + "Var: 0.007024126888938232\n", + "0.017355848195593347 >= 0.010331721306655127 + 0.007024126888938232 = 0.01735584819559336\n", + "Polynomial degree: 9\n", + "Error: 0.02660572763718093\n", + "Bias^2: 0.010018312644137363\n", + "Var: 0.016587414993043573\n", + "0.02660572763718093 >= 0.010018312644137363 + 0.016587414993043573 = 0.026605727637180936\n", + "Polynomial degree: 10\n", + "Error: 0.021592704588025025\n", + "Bias^2: 0.010516485576645508\n", + "Var: 0.011076219011379514\n", + "0.021592704588025025 >= 0.010516485576645508 + 0.011076219011379514 = 0.021592704588025022\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Polynomial degree: 11\n", + "Error: 0.07160048164233104\n", + "Bias^2: 0.014436800088904942\n", + "Var: 0.05716368155342608\n", + "0.07160048164233104 >= 0.014436800088904942 + 0.05716368155342608 = 0.07160048164233102\n", + "Polynomial degree: 12\n", + "Error: 0.11547777218872497\n", + "Bias^2: 0.01628578269596628\n", + "Var: 0.09919198949275869\n", + "0.11547777218872497 >= 0.01628578269596628 + 0.09919198949275869 = 0.11547777218872497\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Polynomial degree: 13\n", + "Error: 0.22842468702219465\n", + "Bias^2: 0.01975416527185249\n", + "Var: 0.20867052175034223\n", + "0.22842468702219465 >= 0.01975416527185249 + 0.20867052175034223 = 0.2284246870221947\n" + ] + }, + { + "data": { + "image/png": "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AQMG8O6779K5c2dCQ0O54YYbKCwsdJ5jt9t5+umn6datG1arlYSEBJ544gnn8+np6UyePJnw8HAiIyO5+uqrOXjwYOP9wOqhwNJQLr1YbHaDw8dKPVyQiEjbZRgGJZUlHnmc7t7BPj4+3HrrrSxcuNDtNR9++CEVFRXccccdDB48mM8//5yff/6Zu+66iylTprBp0ya367z99tv4+Piwbt06Xn/99Tq/V7t27Vi4cCHbt2/nhRde4I033mDu3Llu5+zbt49PPvmEzz//nM8//5xVq1bx1FNPOZ+fPXs2Tz/9NA8//DDbt29n0aJFxMTEAI6QNWHCBIKDg1m9ejVr164lODiYSy65xDnq01S0W3NDFefCs47Q0rNsIQtuH824HtFN9/1ERMTpxF1/SypLGLZomEdq2XTTJgJ9A0/r3J07d9K7d2+++eYbJkyYAMC4cePo1KkTixYtqnX+5ZdfTu/evfn73/8OOEZY8vPz2bp1q9t5JpOJjz/+mGuuuabO7/vss8+yZMkSvvvuO8AxwvLss8+SmZlJu3btALjvvvtYvXo1GzdupLCwkOjoaF5++WXuuOOOWtd78803eeaZZ9ixYwcmkwlw3J4KCwvjk08+YeLEiXXW0Ri7NfvU+4zULTACrKFQnk+CKZvU3GJAgUVEROrXq1cvRo4cyZtvvsmECRPYt28fa9asYfny5dhsNp566imWLFlCeno65eXllJeXExQU5HaNIUOGnPL7/Pvf/2bevHns3buXoqIiqqqqaoWAzp07O8MKQIcOHcjOzgZgx44dlJeXc8EFF9R5/S1btrB3716314MjkOzbt++0fhZnSoGloUwmiOwCh7fS2ZSpTRBFRDwowCeATTdtOvWJTfS9G2Lq1KncfffdvPLKK7z11lskJiZywQUX8OyzzzJ37lzmzZtH//79CQoKYubMmbVusZwYYE60ceNGbrjhBh577DEuvvhiQkNDef/993nuuefczvP19XX72mQyYbc75mMGBJz8PdntdgYPHsx7771X67no6Kb9x7sCy5mIcASWRO3aLCLiUSaT6bRvy3japEmTuOeee1i0aBFvv/02d955JyaTiTVr1nD11Vdzyy23AI5QsGfPHnr37t2g669bt47ExEQefPBB57G6ViadTPfu3QkICODrr7+u85bQoEGDWLJkCe3bt2/a6Rd10KTbM1Ez8daUSYqax4mIyGkIDg5m8uTJ/PnPf+bw4cPcdtttAHTr1o3k5GTWr1/Pjh07+N3vfkdmZmaDr9+tWzdSU1N5//332bdvHy+++CIff/xxg67h7+/P/fffz3333cc777zDvn372LhxI//85z8BuPnmm4mKiuLqq69mzZo1HDhwgFWrVnHPPfdw6NChBtfcEAosZ8IlsKTmlWC3t4p5yyIi0sSmTp3K0aNHufDCC0lISADg4YcfZtCgQVx88cWMHz+e2NjYeifRnszVV1/Nvffey913382AAQNYv349Dz/8cIOv8/DDD/OnP/2Jv/zlL/Tu3ZvJkyc757gEBgayevVqEhIS+NWvfkXv3r25/fbbKS0tbfIRF60SOhOpG+HNizlkRDG6/EU2zD6fDqENu5cpIiINd7LVJuK9GmOVkEZYzkT1CEtHUy5+VKpFv4iISBNTYDkTQdHgF4wZg3hTtuaxiIiINDEFljNhMrnsKaRNEEVERJqaAsuZck68zSJFmyCKiIg0KQWWM6WlzSIiIs1GgeVMuQWW098ES0REzp5+57YsjfHfS4HlTLnMYSksq+JoSeUpXiAiImfLYrEANPnOwNK4SkocUydO3BagIdSa/0xVB5Y4cw6+VJGSW0xEkJ+HixIRad18fHwIDAzkyJEj+Pr6Yjbr393ezDAMSkpKyM7OJiwszBk4z4QCy5lqFwu+gVgqS+hkOkJKbgkDE8I9XZWISKtmMpno0KEDBw4caPA+OeI5YWFhxMbGntU1FFjOVM3S5qyfHSuFtLRZRKRZ+Pn50b17d90WaiF8fX3PamSlhgLL2YhIqg4sWikkItKczGazWvO3Mbr5dzZcm8epF4uIiEiTUWA5G+rFIiIi0iwUWM6GywhLTlEFReVVHi5IRESkdVJgORvVgSXefAQLNlI18VZERKRJKLCcjXYdwccfX2x0NOXotpCIiEgTUWA5G2YzhCcB2gRRRESkKSmwnC1NvBUREWlyCixnK8JlhEVzWERERJqEAsvZcq4UylRgERERaSIKLGfLeUsoi8P5pZRX2TxckIiISOujwHK2IrsCkGDKxmTYScsr9XBBIiIirc8ZBZb58+eTlJSEv78/gwcPZs2aNfWe+9FHH3HRRRcRHR1NSEgII0aM4Msvv3Q7Z+HChZhMplqPsrKyMymveYV0AosffqYqOpBLap4m3oqIiDS2BgeWJUuWMHPmTB588EG2bt3KmDFjuPTSS0lNTa3z/NWrV3PRRRexbNkytmzZwoQJE7jyyivZunWr23khISFkZGS4PVrExlZmC4R3BqCzOZODOZrHIiIi0tgavFvz888/z9SpU7njjjsAmDdvHl9++SWvvvoqc+bMqXX+vHnz3L5+8skn+fTTT/nPf/7DwIEDncdNJhOxsbENLcc7RHSBnN10NmWRql4sIiIija5BIywVFRVs2bKFiRMnuh2fOHEi69evP61r2O12CgsLiYiIcDteVFREYmIicXFxXHHFFbVGYE5UXl5OQUGB28NjXHdtVi8WERGRRtegwJKTk4PNZiMmJsbteExMDJmZmad1jeeee47i4mImTZrkPNarVy8WLlzIZ599xuLFi/H392fUqFHs2bOn3uvMmTOH0NBQ5yM+Pr4hb6VxuTWP0wiLiIhIYzujSbcmk8nta8Mwah2ry+LFi3n00UdZsmQJ7du3dx4fPnw4t9xyC+eeey5jxozhgw8+oEePHrz00kv1Xmv27Nnk5+c7H2lpaWfyVhqHywhL2tESbHbDc7WIiIi0Qg2awxIVFYXFYqk1mpKdnV1r1OVES5YsYerUqXz44YdceOGFJz3XbDZz3nnnnXSExWq1YrVaT7/4puQSWKpsNg4fKyU+ItDDRYmIiLQeDRph8fPzY/DgwSQnJ7sdT05OZuTIkfW+bvHixdx2220sWrSIyy+//JTfxzAMtm3bRocOHRpSnueExoPZB39TJTEc1cRbERGRRtbgVUKzZs1iypQpDBkyhBEjRrBgwQJSU1OZNm0a4LhVk56ezjvvvAM4wsqtt97KCy+8wPDhw52jMwEBAYSGhgLw2GOPMXz4cLp3705BQQEvvvgi27Zt45VXXmms99m0LD4Qlgh5+0gyZ3Iwt5hR3aI8XZWIiEir0eDAMnnyZHJzc3n88cfJyMigX79+LFu2jMTERAAyMjLcerK8/vrrVFVVMWPGDGbMmOE8/pvf/IaFCxcCcOzYMe666y4yMzMJDQ1l4MCBrF69mqFDh57l22tGEV0gbx+JpixSNfFWRESkUZkMw2gVM0QLCgoIDQ0lPz+fkJCQ5i9g2X3w7eu8VnUlW3vO5PUpQ5q/BhERkRbmdP9+ay+hxqJdm0VERJqMAktjqd4EsabbbSsZuBIREfEKCiyNxWVpc0lFFUeKyj1ckIiISOuhwNJYQuPBZCHQVE57jum2kIiISCNSYGksPn4Q5tgeQC36RUREGpcCS2OquS1kziJVmyCKiIg0GgWWxuSyCeJBjbCIiIg0GgWWxhThWCmUaMoiRe35RUREGo0CS2NyjrBkkaJbQiIiIo1GgaUxudwSOlZSQX5JpYcLEhERaR0UWBpTeCJgIthURhQFpORplEVERKQxKLA0Jh+rox8LatEvIiLSmBRYGltEEqB5LCIiIo1JgaWxOXuxaIRFRESksSiwNDaXTRAVWEREpDVI3p7F2j05VFTZPVaDAktjc9kEUZNuRUSkNZjzxQ5u+ecmvtqR5bEaFFgaW3VgSTJlklVQRmmFzcMFiYiInLmU3GL2HynGx2xidPcoj9WhwNLYwjsDEGIqIZxCUtXxVkREWrAVO7MBGNI5nBB/X4/VocDS2HwDIKQToJVCIiLS8q3YdQSACT3be7QOBZam4DqPRRNvRUSkhSqpqGLD/lwAzu+lwNL61LToN2dq4q2IiLRYG/blUlFlp1NYAN3aB3u0FgWWpqARFhERaQW+qZ6/cn6v9phMJo/WosDSFFxWCimwiIhIS2QYBitr5q/0ivZwNQosTcNlhCX9WCmVNs812hERETkTu7OKSD9WitXHzIgunlvOXEOBpSlU7ycUbioi2F5I+tFSDxckIiLSMCt2OW4HjegaSYCfxcPVKLA0Db8gCI4FHKMsB7W0WUREWhjX+SveQIGlqbjsKaTmcSIi0pLkl1ayJeUo4Pn+KzUUWJpK9W2hRFMmB3MUWEREpOVYs+cINrtBt/bBxEcEerocQIGl6bj0YklVLxYREWlBVuys6W7r+dVBNRRYmkpNYFEvFhERaUHsdoNVux3zVyZ4yfwVUGBpOq7N4/JKsNsNDxckIiJyaj+l55NTVEGw1YchiRGeLsdJgaWphDvmsESZCrBWFZFVWObhgkRERE6tZjnzmO5R+Pl4T0zwnkpaG/8QCHLc+0swZWnirYiItAgrqpcze8vqoBoKLE0pwnVpsybeioiIdztSWM4Ph/IBGO9FE25BgaVpOeexZHJQE29FRMTLrdrtWB3Ur1MI7UP8PVyNOx9PF9CquWyCuFKBRUREvFzN/JUTbwct2bkEk8nEBQkXEBkQ6YnSFFiaVE3zOLPa84uIiHertNlZvbtmd+bjgcUwDN746Q2ySrKIDYplbNxYj9SnW0JNyaUXS2puCYahpc0iIuKdvk85SmFZFRFBfpwbF+Y8vjNvJ1klWQT4BDCswzCP1afA0pSqA0t70zFs5UXkFVd4uCAREZG6fVN9O2hcj2gsZpPz+MpDKwEY3mE4VovVE6UBCixNKyAMAh33+moayImIiHijldXt+E9cHbQ6bbXjePz45i7JjQJLU3PpeJuqibciIuKF0o+VsiurELPJMcJS40jJEX7O/RnAY3NXaiiwNDWXlUKaeCsiIt6oplncoIRwwgL9nMdXH3KMrvSL7EdUQJRHaqtxRoFl/vz5JCUl4e/vz+DBg1mzZk2953700UdcdNFFREdHExISwogRI/jyyy9rnbd06VL69OmD1WqlT58+fPzxx2dSmvdx6cWiERYREfFGzu62J2x2WDN/ZVz8uOYuqZYGB5YlS5Ywc+ZMHnzwQbZu3cqYMWO49NJLSU1NrfP81atXc9FFF7Fs2TK2bNnChAkTuPLKK9m6davznA0bNjB58mSmTJnCDz/8wJQpU5g0aRKbNm0683fmLWpWCmlps4iIeKGyShvr9uUA7v1XyqrK2Hh4I+D5+SsAJqOBa22HDRvGoEGDePXVV53HevfuzTXXXMOcOXNO6xp9+/Zl8uTJ/OUvfwFg8uTJFBQU8MUXXzjPueSSSwgPD2fx4sWndc2CggJCQ0PJz88nJCSkAe+oiR36Dv5xARlGBFf6LuC7hy7ydEUiIiJOK3dlc9tbm4kN8WfD7PMxmRwrhFYfWs2Mr2cQGxTL8uuWO483ttP9+92gEZaKigq2bNnCxIkT3Y5PnDiR9evXn9Y17HY7hYWFREQc37J6w4YNta558cUXn/Sa5eXlFBQUuD28UvUISwdTHkVFhRSVV3m4IBERkeNW7qppFhftFkpWpa0CYFzcuCYLKw3RoMCSk5ODzWYjJibG7XhMTAyZmZmndY3nnnuO4uJiJk2a5DyWmZnZ4GvOmTOH0NBQ5yM+Pr4B76QZBUaAfxgACaZsUnRbSEREvIRhGHxTx+7MhmGw6pAjsHh6dVCNM5p0e2LSMgzjtNLX4sWLefTRR1myZAnt27tP7GnoNWfPnk1+fr7zkZaW1oB30MycHW8zSdHEWxER8RL7c4pJzSvBz2JmVLfjq4C8pbutqwbtJRQVFYXFYqk18pGdnV1rhORES5YsYerUqXz44YdceOGFbs/FxsY2+JpWqxWr1XMd9xokogsc/l6BRUREvErN6qBhXSIIsh6PBN7S3dZVg0ZY/Pz8GDx4MMnJyW7Hk5OTGTlyZL2vW7x4MbfddhuLFi3i8ssvr/X8iBEjal1z+fLlJ71mi+Kyp5BuCYmIiLeo2Z15/Am7M9fMX/GG1UE1Grxb86xZs5gyZQpDhgxhxIgRLFiwgNTUVKZNmwY4btWkp6fzzjvvAI6wcuutt/LCCy8wfPhw50hKQEAAoaGhANxzzz2MHTuWp59+mquvvppPP/2Ur776irVr1zbW+/Qsl263/9EIi4iIeIGi8iq+PZAHwISe7t1tf8n9BfCe+StwBnNYJk+ezLx583j88ccZMGAAq1evZtmyZSQmJgKQkZHh1pPl9ddfp6qqihkzZtChQwfn45577nGeM3LkSN5//33eeustzjnnHBYuXMiSJUsYNsw77pudtZrAYtYIi4iIeIe1e3KotBl0jgykS3Sw83hNd9v+Uf093t3WVYNHWACmT5/O9OnT63xu4cKFbl+vXLnytK55/fXXc/31159JOd4vsisAHcklt6CA8iobVh+Lh4sSEZG2bGU9t4Nq5q940+gKaC+h5hEYiWENwWwyiOMIaXmlnq5IRETaMMMwnPNXzu/lvd1tXSmwNAeTCVNEEuDYBFG3hURExJO2ZxSQVVBOgK+FoUnHG7l+m/ktZbYyYoNi6Rne04MV1qbA0lxcNkHU0mYREfGkmuXMo7pF4e97fIrCyrSVgPd0t3WlwNJctLRZRES8xAqXdvw1XLvbjovz/O7MJ1JgaS4uS5tT8jTCIiIinnG0uIKtqUcB93b8O/N2kl2STYBPAEM7DPVUefVSYGkuEY6VQup2KyIinrR6zxHsBvSKbUfHsADncW/sbutKgaW5VI+wdDLlkHW0gCqb3cMFiYhIW+Tc7LCX93e3daXA0lyC22P4BmExGcTas8jIL/N0RSIi0sbY7AardlfPX3G5HZRdku2V3W1dKbA0F5MJk+s8Ft0WEhGRZrYt7SjHSioJ8fdhUEKY87i3drd1pcDSnKp7sXQ2ZXJQK4VERKSZrdjpGF0Z2yMaH8vxCODNq4NqKLA0J5cRllStFBIRkWZWM3+lpXS3daXA0pzUi0VERDwkM7+M7RkFmEyOEZYart1te4T38GCFJ6fA0pyqN0FUt1sREWluNZsdnhMXRlTw8WXL3tzd1pUCS3OqHmGJM+WQnluAYRgeLkhERNoK52aHLquDvL27rSsFluYUHIvhE4CvyUZEVRZHCss9XZGIiLQB5VU21u7JAdzb8Xt7d1tXCizNyWx27trcWS36RUSkmXx38CjFFTaigq306xjqPF7T3XZEhxFe2d3WlQJLc3PZtflgjibeiohI06vZnXl8z2jM5uPzVLy9u60rBZbm5jLCoqXNIiLSHL7ZVXs5s2t32zFxYzxSV0MosDS3iJqVQlkc1EohERFpYim5xew/UoyP2cTo7se72LaE7rauFFiam7MXSyap6sUiIiJNrOZ20JDO4YT4+zqP19wO8vbVQTUUWJpbdWCJN2WTllPo4WJERKS1W7Gr9maHZVVlbMzw/u62rhRYmltIJwyLFT+TjcDyTPJLKj1dkYiItFIlFVVs2J8LuM9faSndbV0psDQ3sxlTeGegZmmzbguJiEjT2LAvl4oqO53CAujWPth5vKV0t3WlwOIJLvNYNPFWRESaiutmhzXBpCV1t3WlwOIJrrs2a+KtiIg0AcMwWFkzf8Wlu+2OvB0tprutKwUWT4g8vmuzRlhERKQp7M4qIv1YKVYfMyO6HF+2XLM6qCV0t3WlwOIJbkubFVhERKTx1Wx2OKJrJAF+FufxmttBLWV1UA0FFk+oDiwJpixScwo8XIyIiLRGrvNXatR0tzVhahHdbV0psHhCSByG2RerqQpzUSYlFVWerkhERFqR/NJKtqQcBWB8j+OBpaV1t3WlwOIJFh9M4YkAJJq1p5CIiDSuNXuOYLMbdI0OIiEy0Hm8Zv7K2LixnirtjCmweIrLPJYUzWMREZFGtGKnY3WQ6+2gltjd1pUCi6e4bIKYoqXNIiLSSOx2g1W7HfNXXNvxt8Tutq4UWDwl4vjSZo2wiIhIY/kpPZ+cogqCrT4M6RzhPN4Su9u6UmDxFN0SEhGRJlCzOmh0tyj8fBx/5l2727bE20GgwOI5EUlATbdb7dosIiKNY+Wu2suZXbvbnhd7nqdKOysKLJ4SloBhshBgqqDyWAYVVXZPVyQiIi3ckcJyfjiUD8D4nsfb8bfU7rauFFg8xeILYQkAJJBF+rFSDxckIiIt3ardjtVB/TqF0D7E33l85aGVQMu9HQQKLB5lqtkE0ZyplUIiInLWatrxu64Oyi7JZnvu9hbZ3daVAosnRTqWNmulkIiInK1Km53Vu2t2Z24d3W1dKbB4klYKiYhII/k+5SiFZVVEBPlxblyY83jN/JVx8eM8VFnjUGDxJLdeLLolJCIiZ+6b6ttB43pEYzE7+qy4drcdF9cGA8v8+fNJSkrC39+fwYMHs2bNmnrPzcjI4KabbqJnz56YzWZmzpxZ65yFCxdiMplqPcrKys6kvJajZg6LSXNYRETk7KysbsfvujpoU8amFt3d1lWDA8uSJUuYOXMmDz74IFu3bmXMmDFceumlpKam1nl+eXk50dHRPPjgg5x77rn1XjckJISMjAy3h7+/f73ntwphCRgmM0GmckqOZmC3G56uSEREWqD0Y6XsyirEbHKMsNSoWR3UUrvbumpwYHn++eeZOnUqd9xxB71792bevHnEx8fz6quv1nl+586deeGFF7j11lsJDQ2t97omk4nY2Fi3R6vnY4XQOAA62g6TWdDKR5RERKRJrKjubjsoIZywQD/A0d12dZpjwm1LXs5co0GBpaKigi1btjBx4kS34xMnTmT9+vVnVUhRURGJiYnExcVxxRVXsHXr1rO6Xkthqt4EsbM5i4O6LSQiImegJrBMOLG7bWnL7m7rqkGBJScnB5vNRkxMjNvxmJgYMjMzz7iIXr16sXDhQj777DMWL16Mv78/o0aNYs+ePfW+pry8nIKCArdHi+Scx5JFqlYKiYhIA5VV2li3Lwdw779SszpoZMeRLba7raszmnR74n0wwzDO6t7Y8OHDueWWWzj33HMZM2YMH3zwAT169OCll16q9zVz5swhNDTU+YiPjz/j7+9R1YElyZRJSp4Ci4iINMzG/bmUVdqJDfGnd4d2zuOu81dagwYFlqioKCwWS63RlOzs7FqjLmdVlNnMeeedd9IRltmzZ5Ofn+98pKWlNdr3b1ZaKSQiImdh5a6aZnHRzsGD1tLd1lWDAoufnx+DBw8mOTnZ7XhycjIjR45stKIMw2Dbtm106NCh3nOsVishISFujxbJ5ZZQSo4Ci4iInD7DMPimev7KeNfbQYcct4NaendbVz4NfcGsWbOYMmUKQ4YMYcSIESxYsIDU1FSmTZsGOEY+0tPTeeedd5yv2bZtG+CYWHvkyBG2bduGn58fffr0AeCxxx5j+PDhdO/enYKCAl588UW2bdvGK6+80ghv0cuFd8bARIiplIK8rLO+vSYiIm3H/pxiUvNK8LWYGN3teDCpWR3U0rvbumpwYJk8eTK5ubk8/vjjZGRk0K9fP5YtW0ZiYiLgaBR3Yk+WgQMHOj/fsmULixYtIjExkYMHDwJw7Ngx7rrrLjIzMwkNDWXgwIGsXr2aoUOHnsVbayF8/SGkExQcIrriEHnFFUQGt/zJUSIi0vRqVgcNS4okyOr4k96autu6anBgAZg+fTrTp0+v87mFCxfWOmYYJ2+INnfuXObOnXsmpbQKpsguUHCIRFMWB3NLFFhEROS0OHdndlnOXNPdtkNQhxbf3daV9hLyBjV7CpkzSc3TPBYRETm1ovIqvj2QB8CEnrW7246NG9uqphgosHgDl00QD+ZoabOIiJza2j05VNoMOkcG0iU6GGh93W1dKbB4A5elzanqxSIiIqdhRR2rg1pbd1tXCizewHWERb1YRETkFAzDcM5fOb9X6+1u60qBxRuEJwEQZirmWE6Wh4sRERFvtz2jgOzCcgJ8LQxNinAeb23dbV0psHgDv0Ds7RxN8kJK0ygsq/RwQSIi4s1qbgeN6haFv68FaJ3dbV0psHgJc82uzaZMUrQJooiInMQKl3b8NVpjd1tXCizeIsJxW6izKUsTb0VEpF5HiyvYmnoUqHt35tbU3daVAou3qFkpZNbEWxERqd/qPUewG9Arth0dwwIAKK0qbZXdbV0psHgL50qhTFJ1S0hEROpR12aH32Z8S7mtvNV1t3WlwOItXHZt1giLiIjUxWY3WLXbMX/FdTmz6+qg1tTd1pUCi7eoDiyRpkLyco54uBgREfFG29KOcqykkhB/HwYlhAGtu7utKwUWb2ENxh7kSMvWohTKKm0eLkhERLzNip2Of9CO7RGNj8XxJ3x73nZnd9shsUM8WV6TUmDxIqbI6qXNZHLoqOaxiIiIu5r5K3WtDmqN3W1dKbB4EZPrPBZtgigiIi4y88vYnlGAyQTjetbuv9JaVwfVUGDxJjW9WMxZpKgXi4iIuFhZvXfQOXFhRAU7RlJcu9uOjRvryfKanAKLN3HZtTlFK4VERMSFc7ND19tBNd1to/sTGRDpkbqaiwKLN3HZtVnt+UVEpEZ5lY21e3KAE9rxV89fGR833hNlNSsFFm9SHViiTfkcyc3xcDEiIuItvjt4lOIKG1HBVvp1DAXcu9u29ttBoMDiXfxDsVUP6fkcO0CVze7hgkRExBsc724bjdnsaAzXFrrbulJg8TLm6qXNcUYmGfllHq5GRES8gXP+ShvrbutKgcXLmFzmsahFv4iIpOQWs/9IMT5mE6O7RwFtp7utKwUWb+PSi0UTb0VEZEX17aAhncMJ8fcF3Lvbnhd7nifLazYKLN6mZoTFrKXNIiICK3Y52vHX193Wz+LnkbqamwKLt4nUCIuIiDiUVFSxYX8uABNc56+krQRaf3dbVwos3qZ6hCXWdJTMnDwPFyMiIp60YV8uFVV2OoUF0L19MABZxVnsyNvRJrrbulJg8TYB4dis4Y7Pj+7HMAzP1iMiIh7j3OywV7RzJdDqdMdk27bQ3daVAosXMlXfFupgyyC7sNzD1YiIiCcYhsHK6vkrrsuZ21J3W1cKLF7IHKkW/SIibd3urCLSj5Vi9TEzootjObNrd9tx8W1n/goosHgnl00Q1YtFRKRt+nRbOgAjukYS4GcBYFPGJmd32+5h3T1ZXrNTYPFGEY5ut51NWaRqhEVEpM3ZfDCP11fvB+BXg+Kcx11XB7WF7rauFFi8Uc0IizmLlDwFFhGRtiSvuII/LNqKzW5wzYCOXHlOB6C6u+2httXd1pUCizeqDiydTLlkaGmziEibYbcb/OmDbWQWlNElOognru3vHEnZnredI6VHCPQJbDPdbV0psHijwAhsfiEA2HMPerYWERFpNgvW7GfFriNYfcy8ctMggqw+zufaYndbVwos3shkgogkACIrDnGspMLDBYmISFP77mAez365C4BHr+pL7w4hbs8756+0sdVBNRRYvJQl0jHxVi36RURav6PFFfxhsWPeytUDOnLDefFuz7t2tx3TaYyHqvQsBRZvVbMJopY2i4i0ana7wZ8+/IGM/DK6RLnPW6nRVrvbulJg8VYuIyxa2iwi0nq9sWY/3+zMxs/HzMs3DSLYZd5Kjbba3daVAou3qh5hSTJnclCBRUSkVdqSksczNfNWruxLn44htc5py91tXSmweKvqwNKRXA7nHvVwMSIi0tiOuvRbufLcjtw4NL7O82q623YM6tjmutu6UmDxVkHR2HyDMJsMKrW0WUSkVTEMg//78AcO55eRFBXEk9f2q7dzrevqoLbW3daVAou3Mpkg3DHKElKSRklFlYcLcqiy2fnn2gOMe3YF/1iz39PliIi0SP9Yc4CvnfNWBtLO37fO8+yG3dnddlxc270dBGcYWObPn09SUhL+/v4MHjyYNWvW1HtuRkYGN910Ez179sRsNjNz5sw6z1u6dCl9+vTBarXSp08fPv744zMprVWxRB3ftTnVC1r0b9qfy+UvruWvn28nJbeEv/13B59sTfd0WSIiLcqWlKM8/b+dAPzlij707Rha77k78na06e62rhocWJYsWcLMmTN58MEH2bp1K2PGjOHSSy8lNTW1zvPLy8uJjo7mwQcf5Nxzz63znA0bNjB58mSmTJnCDz/8wJQpU5g0aRKbNm1qaHmtS0TNSqFMDuZ4LrBkF5Qx8/2tTF6wkV1ZhYQF+nJh7xgA7vv3j2w+qO0DREROx7GSCv64eCtVdoMrzunAzcMSTnp+W+9u66rBgeX5559n6tSp3HHHHfTu3Zt58+YRHx/Pq6++Wuf5nTt35oUXXuDWW28lNLTuFDlv3jwuuugiZs+eTa9evZg9ezYXXHAB8+bNa2h5rUuE6whL8/diqbn9c/5zq/hk22FMJrhpWAIrf9ebBV3Wcmv3Sipsdu565ztS1CtGROSkauatpB8rpXNkIHN+VbvfyonaendbVw0KLBUVFWzZsoWJEye6HZ84cSLr168/4yI2bNhQ65oXX3zxSa9ZXl5OQUGB26PVcWse17wjLK63f4rKqzg3LpRPp4/kycRthL01CvPXj/BY3n2c36GCoyWV/HbhZvJLKpu1RhGRluSfaw/w1Y7j/Vbqm7dSQ91t3TUosOTk5GCz2YiJiXE7HhMTQ2Zm5hkXkZmZ2eBrzpkzh9DQUOcjPr7u5WAtWnVgiTMdIT0nv1m+ZXZBGfcu2eZ2+2fOr/rz8Q0dOeebW+Gzu6EsH8y+mIqzeN3yDN1CDPYfKWbav7ZQUWVvljpFRFqS71OP8tQXjnkrD1/Rh36d6p+3UuOr1K8AOCf6nDbb3dbVGU26PXEIyzCMs15q1dBrzp49m/z8fOcjLS3trL6/V2oXi83ij8VkUJ5zsEm/levtn4+3pjtv/6y4dzQ3Vn6M+bWRcGA1+ATARX+FuzdDUHt8c7bzceybtPMzsWF/Lg998hOGYTRprSIiLcmxEke/lSq7weXndOCWU8xbAdifv5+Xtr4EwMTEiac4u22o3f/3JKKiorBYLLVGPrKzs2uNkDREbGxsg69ptVqxWq1n/D1bBJMJIzwJcnYQUJRCRZUdP5/GX4m+aX8uf/n0F3ZlFQJwblwof72mH+dYUmDRJZDxg+PEpLFw5QvOkR9uXAwLL6dd6tcs6xXHuJ8u5oPvDtE5Kojp47s1ep0iIi2NY97Kj6QfKyUxMpCnTmPeSkllCfeuuJfiymKGxAzhpt43NVO13q1Bf/38/PwYPHgwycnJbseTk5MZOXLkGRcxYsSIWtdcvnz5WV2ztbBEOVYKJZDFoaONO4+l3ts/dw7inB1zYcEER1jxD4WrXoZbPzseVgDihsC1rwEQv/ttFg34BYBn/reLZT9lNGqtIiItkWPeShZ+FjOvnMa8FcMweHjdw+zP30/7gPY8O+5ZfMwNGltotRr8U5g1axZTpkxhyJAhjBgxggULFpCamsq0adMAx62a9PR03nnnHedrtm3bBkBRURFHjhxh27Zt+Pn50adPHwDuuecexo4dy9NPP83VV1/Np59+yldffcXatWsb4S22bKbqTRA7mzJJySuhS3TwWV+zymbn7Q0pzE3eTVF5FSYT3Dg0gf83sSfh2Zvg9ashr7opXJ9r4NJnoF09o119r4XcffDNXxm+8yn+2u9ZHv45lnuXbKNDqD8DE8LPul4RkZZoq9u8ld6nNW/lne3vsDxlOT5mH54b/xxRAVFNXWaL0eDAMnnyZHJzc3n88cfJyMigX79+LFu2jMTERMDRKO7EniwDBw50fr5lyxYWLVpEYmIiBw8eBGDkyJG8//77PPTQQzz88MN07dqVJUuWMGzYsLN4a62Ey0qhlJxi6Hl2l6v39k8kkPwn+L46aLbrAJc/B70uP/VFx/zJEVp+WMQtaY+yq8vz/Gt/IHe+8x0fTx9FfETg2RUtItLC5JdUcnfNvJX+HbhleOIpX7M5czNzt8wF4L7z7mNA+wFNXGXLYjJayQzJgoICQkNDyc/PJySk9m6XLdaB1fD2ley3x/LueR/xyJV9z+gy2QVlzPliJx9Xd6YNC/Tl/kt6MXlIPOad/4Fl/wdFWY6Th9wOFz7quBV0uqrK4d1rIWUd9tB4buZJNmRZ6BETzL9/P5KQUwyDioi0FoZhcNe7W0jenkVCRCCf/3H0KX8HZhVnMenzSeSV5XFFlyt4cvSTbWbfoNP9+629hLxd9QhLvOkIh3IKG/zyelf//Gk8N/byxfzBLfDBFEdYiewGv/0CrpjbsLAC4GOFyf+CiC6Y89N4O3Ae8cGwO6vI8a8Mm5Y7i0jb8Oa6gyRvPz5v5VRhpdJWyf+t+j/yyvLoEd6Dv4z4S5sJKw2hwOLt2nXEbvbD12SjtIFLmzftz+WKl9ybv30yfRRPXt2X8J2L4JVhsPNzMPvAmP+Daesg8SwmOgdGwE0fgH8ofhlb+E/C+wT4mlm9+wiPfPaLljuLSKu3Le0YT32xA4CHruhN/7hT/+Pv79/9nW1HttHOtx1zx88lwCegqctskTT12NuZzdjCOmPO241v/kFsdgOL+eTJO7uwjDnL6rn9k7cP3r4ZUqonNHccBFe9BLH9GqfeqO6OkZZ3ryVs/2d83j+eC7eO4r1NqSRFBXHHmC6nvoaISAvkmLfyPZU2g8v6xzLlNOatfL7/cxbtXATAnDFzSAg5dY+WtkojLC2AJcrR06STkUlmQVm959Xc/rng73Xc/hncAfO65+HVkY6w4hsIFz8Jd3zVeGGlRtJYuGIeAF23v8JbAx0rjp5YtoPk7VmN+71ERLyAYRj8v3//wKGjpSREBPLUdeec8rbOrrxdPLb+MQB+d87vtF/QKSiwtADmSMeoRJIps95NBr89kOe8/VPoevvn2v6EH/vZ0VPl68fBVg5dz4fpG2DEDDBbmqboQVNg1EwAxu16nNl9j2IY8MfFW/k5vXm2GRARaS4L1x9keQPmrRRUFHDvynsps5UxquMofn/u75up0pZLgaUlqJ54m2jKJOWETRCzCx3N3ya9voGdmS7N36aP4twYX/jyQfjHBZD1EwSEw7Wvwy0fQXjnpq/7gkeg95WYbBXcdfhhrkuqoLTSxtS3N5ORX9r0319EpBn8kHaMJ5c55q08ePmp563YDTsPrnmQtMI0OgZ15KkxT2Fpqn88tiKaw9ISOHuxZPFddWCpaf42L3k3hSc2fwvyg30r4D/3wLEUxzX6XQ+XPAXB0c1Xt9kM1y6A/MswHd7KM4FPsL/9Y2zNLmfqwu/4cNoIgqz6n6CItFz5pZXMqJ63cknfWG4dcep5K//46R+sPLQSP7Mfz094njD/sKYvtBXQCEtL4FzanE1qTsHJb/+YiuCT6fDuNY6wEhLnWLlz/T+bN6zU8AuEG9+HkE5YcvewOPRVYoLMbM8o4J73t2Kza+WQiLRMhmFw/79/5NDRUuIjAnj6+lPPW1mfvp6Xt74MwEPDH6Jv5Jn11mqLFFhagtA47GZfrKYqtu/aWfftn7hQ+HkpvDIUtr0HmGDoXTBjI/S42LP1t4uFm5aAbxD+aWv4b9dPsfqY+GpHNk/8d4dnaxMROUNvrz/I/37JxNdi4pWbBhEacPJ5K+lF6dy35j4MDK7rfh3Xdr+2mSptHRRYWgKzhaoQxzBjR3uG++qfoQmYCw/D4hvh37dD8RGI6gm3fwmXPQvWdh4uvlpsf7j+TTCZidq9mI8HbgXgzXUHeHfDQc/WJiLSQD8eOsYT1fNW/nxZb86JCzvp+eW2cmatnEV+eT59I/sye9jsZqiydVFgaSF8ox2bII6PKjx++yfAB759w9EAbvcXYPaFcQ/AtDWQ4IX7MPW8BCY+AUCfn55l/uDDADzy2S+s3JXtycpERE6b67yVi/vGcNvIzqd8zZxNc9ieu50waxhzx8/FarE2faGtjAJLC1Gza/NdfQ3OjQ+DI7vgrUsdewBVFELceY6gMmG2o02+txr+exgyFTC4dPdfuKdPMXYD7l60lZ2ZBZ6uTkTkpAzD4IGlP5KWV0pceADPXH/uKeetLN29lKV7lmI2mXlm7DN0CO7QTNW2LgosLUX1xFuO7IJVz8BroyFtI/gGwaXPOG4Bte/t2RpPh8nkqLfr+ZgqS5h55C9cmminqLyK29/aTHZh/Y3xREQ87Z0NKXzx8+nPW/k552ee2OQYWf7DwD8wouOI5iizVVJgaSkikhwf9ybDiifAVgHdLoIZm2DY75quAVxTsPjArxdCdC9MhRm8ZDxNn0gzh/PLuPPt7yitsHm6QhGRWn46lO9cKDD70t6O0e6TOFp2lFkrZ1Fpr2RC/ARu73d7M1TZeimwtBQRXY9/HhgJ1/0Tbv4QwuI9V9PZ8A91rBwKjMIn+yf+3f5NIgPM/HAon1kfbMOu5c4i4kUKyhzzVipsdib2ieG3ozqf9Hyb3cb9q+8noziDhHYJPDH6Ccwm/ck9G/rptRThnR3LlM+7A2Zshv7XO26vtGThneHGxWCxEnhgOZ/3/go/i5kvfs7kmS93ebo6ERHg+LyV1LwS4sIDePY05q28su0VNmRsIMAngLkT5tLOz0tWbLZgCiwthcnkWKZ8+XMQFOnpahpP/FC4Zj4AHbb/gyVDdgLw2qp9vP9tqicrExEB4N2NKSz7yTFv5eWbBhEaePJ5KytSV/DGT28A8OiIR+kR3qM5ymz1FFjE8/pfD+P/DMDAn/7Gc4PzAHjok59ZtzfHk5WJSBv3c3o+f/vcMW/lgUt7M+AU81ZSClL481rH77Nbet/CZV0ua+oS2wwFFvEO4+6DcyaDvYpf7f0zd/WupMpuMO1fW9ibXejp6kSkDXKdt3JRnxhuP8W8lZLKEmaumElRZRED2w9k1pBZzVNoG6HAIt7BZIKrXoL44ZjKC3jg6COcH2+isKyK3y7cTG5RuacrFJE2xDAMZi/9iZTcEjqFBfD3U8xbMQyDxzY8xt5je4kKiOK5cc/haz75rSNpGAUW8R4+VrjhPQjvjPnYQV73m0vXcF/S8kq5690tlFVqubOINI9/bUrlvz9l4GM28fJNA085b2XRzkUsO7AMi8nC38f9nehAD2w228opsIh3CYpy7C5tDcU3/Vs+jl9MiL+FLSlHue/fP2IYWu4sIk3r5/R8/vqf7QA8cGkvBiaEn/T8rdlb+fvmvwPwpyF/YnDM4CavsS1SYBHvE90TJr0NJgshuz/i83M24GM28dkPh5n71R5PVycirVhReZVz3sqFvWOYOjrppOfnlObwp5V/osqo4pLOl3BL71uaqdK2R4FFvFPXCXDF8wAk/DiPd4elAfDi13v46PtDnqxMRFqxp7/YeXzeyq/POem8lUp7Jf+36v84UnqEbmHdeGzkY6fszyJnToFFvNfg22DE3QCM+PFh/jq4BID7l/7Ipv25HixMRFqjjftzeXdjCgDPXH8OYYF+Jz1/3pZ5bMnaQpBvEHPHzyXQN7A5ymyzFFjEu130OPS8DGzl3HLgAab0Mqi0GfzuX1s4kFPs0dLKq2ykHyvlh7RjfL0jiyWbU1mz54jm2Yi0QKUVNu5f+iMANw5NYFS3qJOe/7+D/+Od7e8A8MSoJ+gc2rmpS2zzfDxdgMhJmS3wqzfgrUsxZf7IY0WPs7fT39iQXsntCzfz8fSRp/xXUEOUVdrIKSrnSGE5OUUV5BSVk1NY7vhYVMGR6q+PFJVTWFZV5zX6dAjhjxd0Z2KfGMxmDQ+LtAR/X76LlNwSOoT68+fLep303L1H9/KXdX8BYGq/qVyQeEFzlNjmmYxW8s/BgoICQkNDyc/PJyQkxNPlSGMrOAxvnA+FGZQnjueizLtJza9gWFIE704dhp9P/YOFpRXVIcQZPiqqA4nro4KcwnIKy+sOIfXxtZiICrYSFWwlPMiPLQfzKK7ebbpXbDvuPr8bl/brgEXBRcRrbUk5yvWvrccw4K3fnseEnu3rPbeooogb/3sjBwsOMqzDMF678DV8zPq3/9k43b/fCizSchzeBm9dCpUlHO1zK2N+uZyichuXn9OBEV0ij4ePwgq3gFITIE6Xn8VMVLAf0e2szjAS1c7v+OfBVqKrvw4N8HWbZHe0uIK31h3grXUHneGnW/tg/nB+N644p6OCi4iXKau0cfmLa9h3pJjrBsXx3KRz6z3XMAzuXXkvX6d+TUxgDB9c+QER/hHNWG3rpMAirdPO/8L7NwMGewc9xMUb+2Kzn/p/wlYfc3XwsBId7FcdOlwCSbAfUdVfh/j7nN5Mf8OAyhIoyYWSPCg9CqHxENWN/NJKFq47yD/X7qeg+tZRl6ggZkzoxtUDOuJj0fQxEW/wzP92Mn/lPqLbWUm+d+xJbzG/+fObzN0yF1+zL29f8jb9o/s3Y6WtlwKLtF7rX4LlDwEmNgx7mbkpXQkN9HWEkOrgEV0dTmrCSLD1FCHEboeyY9XBI8/9Y0muy7Gj7s/Z6tgyoNcVMO5+6HAOhWWVvLMhhTfW7OdYSSUAiZGBzBjfjWsHdcJXwUXEY346lM8189dhsxu8PmUwF/eNrffcTRmbuCv5LuyGnYeHP8yknpOasdLWTYFFWi/DgP/cA9+/Db5BMPVLiHX5l05VuUuoyD0hhBytO4yUHgPO8P8VzL4QGAH+oZCz5/h1el3h2NSxw7kUlVfxr40pvLF6P7nFFQDEhQcwfXw3rh8cd9I5OCLS+Cqq7Fz18lp2ZhZy5bkdeenGgfWem1mcyeTPJ5NXlsc13a7h8ZGPq99KI1JgkdbNVgn/ug4OrILASAjpdDyMVJ7Fcme/dhAYDgERjhDi9jGy+vNw9+f8gh2bNwJk74TVz8DPH+EMLj0vdwSXjgMoqahi0aZUXlu1n5zqDR07hvrz+/Fd+fWQePx9LWf3cxGR0zLvq93M+2oPEUF+JN87lshga53nVdgq+O3/fsuPOT/SO6I371z6Dv4+/s1cbeumwCKtX+lR+OdEyNld+zmTuZ7QUUcYCYx0fB4QDj6NtET6yC5Y/Sz89G+cwaXHpTD+fug4kLJKG4u/TeW1VfvIKnAEl5gQK9PGdeXGoQkKLiJNaEdGAVe+tJYqu8FLNw7kynM71nvuXzf8lQ92f0CIXwhLrlhCXLu4Zqy0bVBgkbah6IhjlMUa4j76YQ0FsxfcZjmy2xFcfv43GHbHsR6XOOa4dBpEWaWND79LY/7KfWTklwEQFWxl2rgu3DQsgUA/LZcUaUxVNjvXzl/PT+n5TOwTw+tTBtd7e+eTvZ/w8LqHMWHilQteYUzcmGautm1QYBHxJjl7qkdcPjweXLpf7Bhx6TSY8iobS7ek88qKvaQfKwUgMsiPO8d2YcrwRIKsCi4ijWH+yr08879dhAb4knzvWNqH1H17Z0fuDqZ8MYVyWznTB0zn9+f+vpkrbTsUWES8Uc5eWPN3+HGJS3CZCOMegLjBVNrsfLzVEVxSch17J4UH+nLHmC7cOiKRdv6+HixepGXbm13IZS+upaLKznO/PpfrBtd9eye/PJ/Jn08mvSidMZ3G8PIFL2M2ecGIbSulwCLizXL3weqa4FLd2K7bhY7gEn8eVTY7n247zMsr9jr3TArx9+H20Un8dlQSoQEKLiINYbMb/Pq19XyfeozxPaN567bz6rwVZDfs3P313axJX0NccBzvX/E+odZQD1TcdiiwiLQEuftgzXPww/vHg0vXC2D8AxA/FJvd4PMfD/PSN3vZm10EQDurD78d1ZnbRyc16j5KIq3ZP9ce4K+fbyfY6sPye8fSMSygzvPe+vktnt/yPFaLlfcue4+eET2budK2R4FFpCXJ2w+rn4MfFrsEl/MdIy4Jw7DbDb74OZMXv97DrqxCAIL8LNw6sjN3jE6qd0mmiMDBnGIueWE1ZZV2nry2PzcNS6jzvO2527l52c1U2at4dMSjXNfjumautG1SYBFpifIOVI+4LAZ79UaMXSY4RlwShmO3GyzfnsWLX+9he0YBAAG+FqaMSOTOMV2IbqfgIuLKbje48Y2NbDqQx8iukbx3x7A6bwWVVJYw+fPJHCw4yIUJF/L8+OfVHK6ZKLCItGRHDzqCy7ZFx4NL0jhHcEkciWEYfL0jmxe/2cOPh/IB8Pc1c9PQRH43rgsx9ax8EGlr3t2YwsOf/EyAr4Xl944lPiKwzvMe3/A4H+7+kPaB7Vl65VLC/MOat9A27HT/fp/RtOf58+eTlJSEv78/gwcPZs2aNSc9f9WqVQwePBh/f3+6dOnCa6+95vb8woULMZlMtR5lZWVnUp5IyxfeGa56Cf7wPQz6DZh9HP1m3roU3r4SU8p6LuwTw6czRvHWb89jQHwYZZV23lx3gDHPrOCRT392Lo8WaasOHS3hqWU7ALj/kp71hpWvU7/mw90fYsLEk6OfVFjxUg0OLEuWLGHmzJk8+OCDbN26lTFjxnDppZeSmppa5/kHDhzgsssuY8yYMWzdupU///nP/PGPf2Tp0qVu54WEhJCRkeH28PfXvxKljQtPhKtedASXwbc59i06sBoWXgYLr8CUso4JPdvz8fSRvDt1KEMSw6mosvP2hhTGPrOCGe99z5aUo55+FyLNzjAMZn/0E8UVNoYkhnPriM51npddks2j6x8F4La+tzGsw7DmK1IapMG3hIYNG8agQYN49dVXncd69+7NNddcw5w5c2qdf//99/PZZ5+xY8cO57Fp06bxww8/sGHDBsAxwjJz5kyOHTt2hm9Dt4SkjTiWCmvnwvfvgt2x+zOJox23ipLGYBgGG/bn8sqKvazbm+t82YD4MKaOTuKSfrHaIVrahA82p3Hf0h+x+pj54p4xdIkOrnWO3bDzu+TfsTFjI70jevPeZe/ha1HLgObWJLeEKioq2LJlCxMnTnQ7PnHiRNavX1/nazZs2FDr/IsvvpjvvvuOyspK57GioiISExOJi4vjiiuuYOvWrSetpby8nIKCAreHSKsXlgBXzIU/boUhUx0jLilr4e0r4K3LMB1cw8gukbx3x3D+N3MMk4Y4doLelnaMPyzeythnVvDaqn3kl1Se+nuJtFCZ+WX89b/bAZh1UY86wwrAu9vfZWPGRvwt/jw19imFFS/XoMCSk5ODzWYjJibG7XhMTAyZmZl1viYzM7PO86uqqsjJyQGgV69eLFy4kM8++4zFixfj7+/PqFGj2LNnT721zJkzh9DQUOcjPj6+IW9FpGULi4crnod7tsF5d4DFD1LWwdtXwluXwf5V9IppxzPXn8v6B85n5oXdiQr2IyO/jKe+2MnwOV/z8Cc/s/9IkaffiUijMgyDBz/+icKyKs6ND+OOMV3qPG9n3k5e+P4FAO4beh9dQus+T7zHGY0Nn7jUyzCMky7/qut81+PDhw/nlltu4dxzz2XMmDF88MEH9OjRg5deeqnea86ePZv8/HznIy0t7UzeikjLFhoHlz8Hf9wG593pCC6p6+Gdq+AfF8DPS4kKsDDzwh6svf98nr3+HHrFtqO00sa7G1M4/7lVTF24mXV7c2glCwaljfvsh8N8vTMbX4uJZ68/B4u59t+m0qpS7l99P5X2SibET+D67td7oFJpqAbtqBYVFYXFYqk1mpKdnV1rFKVGbGxsnef7+PgQGRlZ52vMZjPnnXfeSUdYrFYrVqt6TogAENoJLv87jJkFa+fBloWQvgX+fTuExMGwu/Af9Bt+PSSe6wfHsWFfLm+uO8DXO7Odj16x7bh9dBJXndsRf1+Lp9+RSIMdKSznkc9+AeCP53enR0y7Os977rvn2J+/n+iAaB4b+Zj6rbQQDRph8fPzY/DgwSQnJ7sdT05OZuTIkXW+ZsSIEbXOX758OUOGDMHXt+77hYZhsG3bNjp06NCQ8kQkpCNc9gzc+7OjS25gFBQcguS/wPN9YNl9mI4eYGS3KP7xm/P45k/juXVEIgG+FnZmFnLfv39k9NPfMDd5N0cKyz39bkQa5JHPfuZYSSV9OoQwbXzXOs9ZmbaSJbuWAPC30X8j3D+8GSuUs9HgVUJLlixhypQpvPbaa4wYMYIFCxbwxhtv8Msvv5CYmMjs2bNJT0/nnXfeARzLmvv168fvfvc77rzzTjZs2MC0adNYvHgx113naHv82GOPMXz4cLp3705BQQEvvvgi7777LuvWrWPo0KGnVZdWCYnUobIMfvoQNs6H7O3VB03Q8zIYMR0SR4HJRH5JJe9vTuXt9Qc5nO/of+RnMXP1gI7cPjqJ3h30/1Pi3Zb9lMH0977Hx2zikxmj6Nep9oaFR0qOcN1n13G0/Ci/6fMb/u+8//NApXKi0/373aBbQgCTJ08mNzeXxx9/nIyMDPr168eyZctITEwEICMjw60nS1JSEsuWLePee+/llVdeoWPHjrz44ovOsAJw7Ngx7rrrLjIzMwkNDWXgwIGsXr36tMOKiNTD1x8GTYGBt8D+lbDhFdibDLv+63jEngMj7ia077X8blxXbh+dxJe/ZPLPtQfYmnqMD7cc4sMthxjZNZKpo5OY0LM95jrmBIh40tHiCv7y6c8A/H581zrDit2w89C6hzhafpReEb3446A/NneZcpbUml+krTmyCza+6tghuqq6G25wLAy9E4bcDoERAHyfepR/rj3A/37OxGZ3/JpIigrit6M6c92gOIKsDf73jkiTuHfJNj7emk739sF8/sfRWH1qz8F6d/u7PLP5GawWKx9c8QFdwrQqyFtoLyERObmSPPjuTfj2DSiqnhjvEwADboTh0yGqOwDpx0p5Z/1BFn2bSmGZY1+jEH8fbhyWwG9GdKZjWICn3oEIX+/IYurb32E2wdLfj2RgQu05KbvydnHjf2+k0l7JQ8MeYnKvyR6oVOqjwCIip6eqAn75yHG7KPPH48e7T3QEly7jwWSiuLyKf285xFvrDnAwtwQAi9nEpf1imTo6qc4/FCJNKb+0kolzV5FVUM5dY7vw58t61zqnrKqMGz6/gX35+xgfN54Xz39Rq4K8jAKLiDSMYTiaz22YD7uWAdW/Gtr3dUzQ7Xc9+Ppjtxt8szObf649wIb9x9v/D0yobv/fNxYftf+XZnD/v39kyXdpJEUF8cU9Y+pcjv/kpidZvHMxUQFRLL1qKRH+ER6oVE5GgUVEzlzuPtj0Gmx9DyqLHceCoh1ddYdMheBoALYfLuDNdQf4bNthKmx2ADqFBfCbkYlMPi+B0AC1OpemsWbPEab881tMJvjgdyM4r3PtILL60GpmfD0DgNcufI1RnUY1d5lyGhRYROTslR6FLW/DtwugIN1xzGKFc34Nw2dATB8AsgvL+NfGVN7bmEJucQUAgX4Wfj04jttGJZEUFeSpdyCtUFF5FRfPXU36sVJuG9mZR6/qW+ucnNIcrvvsOvLK8ril9y3cP/R+D1Qqp0OBRUQaj60Stn/q6OeSvuX48S4TYMQM6HoBmM2UVdr4bNth3lx3gJ2Zhc7TzokLZWKfGC7qE0uPmGDNIZCz8pdPf+adDSnEhQfw5cyxtVasGYbB9K+nszZ9LT3Ce7Do8kVYLeqM7q0UWESk8RkGpH0LG1+BHf8Bw3EbiKieMPz3cO4N4BuAYRis35fLP9ceYMWubFx/yyRGBnJR7xgm9o1lcGJ4nXu9iNRn4/5cbliwEYD37hjGqG5Rtc55b8d7PPXtU1gtVt6//H26hXdr7jKlARRYRKRpHT0ImxbA9+9ARfVoSkCEo5fL0DuhXSzguF309Y5skrdnsXZvDhVVduclIoL8uKBXey7qE8OY7tEE+GkPI6lfaYWNS15YTUpuCTcOjWfOr86pdc7uo7u58fMbqbBX8Odhf+bGXjd6oFJpCAUWEWkeZQWw9V+w6VU4Vt3l2uwL/a93LIvucPyPSnF5Fat3H2H59iy+2ZlNfmml8zl/XzNjukczsU8MF/SOISLIr7nfiXi5v32+nX+sPUCHUH++vHcsIf7uk7rLbeXc8PkN7D22l7FxY3n5/Jd1+7EFUGARkeZlt8HOzx3LotM2Hj+eONoxSbfXFRB0fPi+0mZn84E8lm/PInl7FunHSp3PmU0wpHNE9byXGBIjNWm3rfs+9SjXvboew4C3bjuPCb3a1zrnqW+f4r0d7xHhH8FHV31EZECkByqVhlJgERHPSd/iCC6/fAyGzXHMZHZsttjnakd4CTm+G7thGGzPKCB5exbLf8lie0aB2+V6xrRjYl9HeOnfKVT/am5jyiptXPHSWvZmF/GrQZ14ftKAWuesObSG6V9PB2D+BfMZEzemmauUM6XAIiKel3/IsWfRjs8g4wf35+KHQe+roPeVEJ7o9lRaXglf7XCMvGw6kOfcywigQ6g/F/aOYWLfGIYlReLnoyZ1rd0z/9vJ/JX7iAq28tWssYQFut8uzC3N5Vef/Yq8sjxu7n0zDwx9wEOVyplQYBER73L0oGNl0fbP4NC37s91GAB9roLeV0OU+4qOYyUVrNiVzfJfsli1+wglFTbnc+38fZjQ0zFpd3zPaNr5q1Fda/PToXyumb8Om93gtVsGc0m/WLfnDcNgxtczWJO+hm5h3Xj/ive1hLmFUWAREe9VcBh2fO4YeUlZd3x5NED7Po6Rlz5XOT53uf1TVmlj/b4ckrdnkbw9m5yicudzvhYTI7pGOee9xIT4N+c7kiZQUWXnqpfXsjOzkMvP6cArNw2qdc7inYt5ctOT+Jn9WHzFYnqE9/BApXI2FFhEpGUoOgK7/usYeTmwCuxVx5+L6Fo98nIVdBzoFl7sdoOtacdYvj2T5F+y2J9T7HbZc+PDmNgnhol9YujWXs3qWqIXvtrD3K92ExHkR/K9Y4kMdh852Xt0Lzf89wbKbeU8MPQBbu59s4cqlbOhwCIiLU/pUdj1P8fIy96vwXZ8BIXQBMd8lz5XQdxQMLvPXdmbXeSYtLs9k62px9ye6xwZyMS+sVzUJ4ZBCWpW1xLszCzgypfWUmkzePHGgVx1bke358tt5dz035vYfXQ3ozqN4tULXlUobaEUWESkZSsvhN1fOsLLnmSoLDn+XHAs9L7CMfKSOAos7q3ZswvK+GpHNsnbM1m3N9e5MSNAZJCfc9LuqG5Rde7w21YUlFWyJ6uIjmH+xIb4e80f/CqbnWvnr+en9Hwu6hPDgimDa9X29LdP868d/yLCP4KlVy0lKqB2x1tpGRRYRKT1qCiBfV87bhvt/h+Uuyx7DoyEnpc5lksnjQMf9xUkRTXN6n7J5Jud2RSUHb/lFOhnYVyPaCb2jeH8njGEBrbuSbt2u2P5+KrdR1i1+wjfpxylqnoFVqCfhaSoILpEB9MlKogu0UF0jQ4mKSqo1l49Te3Vlft4+n87CfH3IXnWuFrzkdalr2PaV9MAeOWCVxgbN7ZZ65PGpcAiIq1TVTnsXwU7PoWdy6A07/hz1lDoeYlj5KXbBeAb4PbSSpudbw/ksfyXTJZvzyIjv8z5nMVsYniXCCb2cdw66hjm/tqWKq+4gjV7HAFl9e4ct4nKANHtrOQVV7gtHT9RbIg/XaIdIaZLVLAzzHQMC2j022t7s4u47MU1VFTZefb6c/j1kHj391OWx3WfXUdOaQ439LyBB4c/2KjfX5qfAouItH62KkhZ6xh52fk5FGUdf843CLpf5Jjz0v1isAa7vdQwDH5OL2D59kyW/5LFrqxCt+f7d6reYbpvDD1j2nnN7ZJTsdkNtqUdc46i/HjomNvmk4F+FkZ2jWJcz2jG94gmPiKQSpud1LwS9h8pZv+RIsfHHMfH3OKKer+Xn4+ZpMjjozGOUOP4eGLb/NOt/devref71GOM6xHNwt+e5/ZzNwyDP37zR1YeWknX0K68f8X7+PtoNVhLp8AiIm2L3ebYSXrHZ44AU3Do+HMWq2PEpe+1ji67foG1Xp6SW+zstLs5Jc/tj3xCRKBjxZGX7jCdXVDGyuqAsnZPjtseTQC9Ytsxrmc043pEMyQxokHN9o6VVLCvJsjkHA80KbklbnODThQVbK0OMsdHZbpEBxMfHoCPpe7v/+baAzz++XaCrT58ee9YOp0wyrVk5xL+tulv+Jp9WXz5YnpG9Dzt9yHeS4FFRNouw4DD3zuCy47PIG//8eesodD/Ohg4pdZS6Ro5ReV8syOb5dszWb3HfYfpyCA/Lujdnol9Yhnd3TOTdiuq7GxJOeocRdlxwlYGIf4+jOnhCCjjekQ3SU8am93g0FHHqMy+E8JMdmF5va/ztZhIiAh0jsR0rQ4zVh8Lv359PWWVdp64th83D3Pvfrz/2H4mfT6Jcls59513H1P6TGn09ySeocAiIgKO8JL1C2z/FH58//iO0gAx/WDgLXDOZAiMqPPlxeVVrNlzhOW/ZPH1CTtMB/g6Ju1e1CeGC3q3r9UyvjGl5ZU4A8r6vTkUu3T8NZngnLgwZ0A5Ny603lGM5lBYVsmBnGLnLaZ9OcXsyy7iYG4xZZX1j8oAjOgSyXt3DMPsMopVYavgpv/exK6juxjZcSSvXvgqZpO2ZGgtFFhERE5kt8PB1fD9u45tAmr6vFj8oNfljvDSZQKY6x41qbTZ2Xwwj+W/1N5h2mI2MbRzhHOTxrjw2redGqKs0sbG/bnOkLL/iHtjvKhgP8ZWB5Qx3aOJCGq6sNRY7HaDw/mlx+fKuISaw/llhAX68tmM0SREuv/s/r7577y9/W3CreEsvWop0YHRHnoHbZhhOPokWUNqtRE4WwosIiInU5IHPy+F79+BzB+PHw+Jg4E3w4CbILxzvS83DINfDhewfHsWy3/JZGem+6Tdvh1DmNgnlol9Y+gVe+pJu4ZhsD+nmFW7HAFl4/5cyl1uRVnMJgYnhDvnovTpEOI2CtHSlVRUYTaZat1iW394Pb9L/h0AL054kQkJEzxRXutmq4TCTCjMgIJ0KMiAwsPVHzMcW2kUZkJVKUzfCO17N+q3V2ARETldGT84Rl1++gDK8o8fTxoHg251TNT1Pfk8kNTcEsc2Aduz2HwwD9dVwvERAY7w0ieGwYnhzts1ReVVrN+b4xxFOXS01O2aHUP9nQFlZLeoM1p505IdLTvKdZ9dx5HSI0zuOZmHhj/k6ZJaFsNw/O/ZGToyTggj1R+LjwCnGQVu/RS6jG/UMhVYREQaqrLMsTz6+3cc+xrV8A+DcyY5bhl1OPeUl8krruDrHVks357F6t1H3EZKwgN9Gd+zPRn5pWxJOUql7fivYD+LmWFdIpxzUdryHkiGYXDPintYkbaCLqFdeP+K9wnwaR29cRqFrQqKMusOIK4BxbVD9MmYfaFdBwjpUP2x4wkfq4/7Nv5/AwUWEZGzcTQFtr0HW99zXyIde45j1KX/9RAQfsrLlFRUsWZPTvWk3SyOlbgvOU6KCnIGlGFdIgj0a/qusoZhsD9/P6sPrWZn3k46Bneka1hXuoV1Iyk0CavFeuqLNLEPd3/I4xsex8fsw+LLF9MropenS2palWWO7SjKC6ofhVBWAGXHXEZGXIJIUTanPSriHwrtOjpCR0jH45+7fgyMrLU/V3NRYBERaQx2G+xfCVvfhZ3/BVt1IzWL1bEZ46Ap0Hnsaf2yr7LZ+S7lKGv35BDdzsr4ntEkRgY1bf3VSqtK2Zy5mdWHVrPm0BoOFx+u8zyzyUx8u3i6hnZ1hpiuYV1JCk3Cz9I8E3v35+9n8n8mU2Yr4/+G/B+/6fubZvm+Z8RW6RI0qkOGa/Bwfn3iOQXux2z1N+irl9nHsa9WvaMi1R/r6DvkTRRYREQaW0ke/LjEMd8l+5fjx8MSYMAtjom6YfH1v76ZHSo8xJr0Naw+tJrNmZspd9n92s/sx3mx5zGg/QCySrLYd2wfe4/tpbCisM5rWUwW4tvFOwNMzcfOIZ3xtTTe3JpKWyU3L7uZHXk7GN5hOK9f9HrzLGGuLHNMOD2WCvmHHCti3EJGvvvXNcGjqvTU124Iv3ZgrX74hzhW5bSLdbkt4zIqEhTtsVGRxqTAIiLSVAwDDm91jLr89G+XzRhN0PV8x1yXXpeDT/PeWqm0VbI1e6tjFCV9Dfvz97s9HxsUy9hOYxkTN4ahsUMJ9HX/l7dhGBwpPcLeY3vZd2yfM8TsO7aPosqiOr+nxWQhISTBGWC6hnWlW2g3EkMT8TU3PMg8/93zvPXLW4RZw1h61VLaB7Zv8DVqqVmSm5/mCCPH0qo/T6v+/BAUZ5/d9/ANPB40rCHugaPWsZqvTzjmF1zvkvrWTIFFRKQ5VJQ4erpsfRcOrjl+PCDC0ZBu4C0Q26/Jvv2RkiOsTV/LmvQ1rD+8nuLK4/1aLCYLA9oPYEynMYyNG0u3sG5nNInXMAyyS7KPB5j840HG9fu58jH5kBiS6DYa0y2sG/Eh8fUGmY0ZG7lz+Z0AzJswjwsSLji9Am1Vjnkd+YdOCCLVYST/EFTUHbjc+AY5RshCOjlGL04VMFyDSCOOMrU1CiwiIs0tb79jku62RY4VGzU6DnRsBdD/escEyLNgs9v4Ofdn1hxy3OrZkbfD7fkI/whGdxrNmLgxjOgwglDr2X2/kzEMg6ySLGd4cR2ZKamqe3WKj9mHziGda91aCvELYdJ/JpFdms31Pa7nkRGPHH9RRbHLyEiqy+fVAaXgMBi2Or+fm6BoCI13hJLQmkfc8a8DwuvcqkGalgKLiIin2G2w7xvH8uhdX4C9emWQjz/0udoRXmL6gsnseJgt1Z9bXL4+/oczvzyf9YfXs+bQGtamr+Vo+VG3b9c3si9j48YyptMY+kb1bf629XY72KscocFehWGrJKPoMHvz97E//wB7Cw6yryCVfUVplNrKTnqpzr5hLAkbSmBBpst8krxT12D2hdBOx4NIWHUYcQaTTk2yJFfOngKLiIg3KM6BH9533DI6svO0XmIAu319WRMUyJqAALZZfbG7BJhgu8HIChtjKuyMrjCIoibomOsIPmb3x4nhyGRyBCyXwOH82vk48fgJz5/m8lo7kOFjYZ+vL3v9fJ0fD/j6Umo2Y7XbeScjiz4VlbVfbA09IYTEuY+UBMe0igmobZECSyO5b/V97Dm6h4R2CSSEJBDfLp74dvEkhCQQGxiLpQ1OkBKRM2AYkL7FMeryy8cuE3UdSkwmNgX4szrAnzWBAWT5uPdj6VZRwZiSMsaUljKgrJwWMWPCZHYsvXU+LO5fVz9vN1tIt1iw+gbSPqyz+8hITUg5y1tp4r1O9+9303coauH2HN3D3mN72Xtsb63nfMw+xAXHOQOMM8y0S6BTcKdGXeonIi2cyQRxQxyPK18Au43UghTHip7D69ic/T2V9uMjC/4WK0OjBzA25jxGtx9Mp4AoMOyO4GO3VX9e/dH5tVHHMdfzTvi65mH2cYy41BUqzD6OkYv6gke9r7Oc9nwQM+A9i8HFW2mE5RTSCtJIKUwhtSCVtMI00grTSC1M5VDhIbdfLicym8x0COrgDDAJIQnEtYsjoZ3jo1pMi7RehmFQVFnEsfJj5Jfnk1+ez7HyY86vc0pz+DbzW1IKUtxe1ym4k3NFz3mx5+Hvc/L9i0RaA90SamI2u43skmxSC1NJLawOMwVpzs9LT9FMqH1g+zrDTHy7eNr5tWvy+kXk9JTbyp2B48TgceLXNR8LyguoMqpOeW0fkw+DYgY5J8wmhSa12b2DpO1SYPEgwzDILcsltcARZlILHCMyNeGmvk6SNSL8I5wBpmZEJiHE8XmYNUy/0EQawDAMbIYNm2GjtLLUGTAKKgocn5edEDgq8t3Cx6n+8XEy/hZ/Qq2hhFnDCLOGEWINcX7eO7I3IzqMINgvuBHfrUjLo8DixfLL84+HmerbSzVf55WdfPmexWQhwCcAfx9/AnwC3D+3OL4O8A3A31LH8y6Puo4F+ATga/Ztc4HIbtix2W1UGVXY7I4/bFX2KscfuZMcr/na9Xmb3YZR83+G46PdsGNggIHzc7vh2L3X+bxx/DV2HF/X1OZ2vnH8es7XuDxfcy071bsDGzi/j9tHo+6va7geP/G1ta554rXquGaVvcrxczZsbj8/m2HDbtidz1cZVdjtdZ9X32vczqk+z3ktw+782ZwNi8lCqDWUEL/jgaMmiIRaQ91CievXuqUjcmqadOvFQq2h9I/uT//o/rWeK64sdsyTKXAJM9WjNFklWdgMG0WVRfW2yT5bZpPZEWhqAo+vSxByCTr+Pv6YMNX+Y+n6h/Rkf1wNnH+Y6/rjfuIfcNc/9rXOr/kXdE2IOEXAODGIOP8QS5sQ5BtUO3D4hRLmf0IQ8av+6B9KsG9w8/c2ERE3ZxRY5s+fz7PPPktGRgZ9+/Zl3rx5jBkzpt7zV61axaxZs/jll1/o2LEj9913H9OmTXM7Z+nSpTz88MPs27ePrl278sQTT3DttdeeSXktWpBvEL0ietW5lXpZVRkFFQWUVpVSVlVGaVUpJVUlzs9dj7s+ymxllFa6fF59XklVifPzmgnEdsNOcWVxve222xIfkw8WswWLyYLFbHH72sfs4zzu+rXZZMZkMmHG8dGEyfnRbDK7fW0y1fHcieefcI2TXavWMRwjZSeOmJ14vL6v3V5z4rn1vcb5wf14zc/PbDIf/5m6/Pxcj5lNZnzMjnNrvaau19b1GrO5zvOsFqtW74m0UA0OLEuWLGHmzJnMnz+fUaNG8frrr3PppZeyfft2EhISap1/4MABLrvsMu68807+9a9/sW7dOqZPn050dDTXXXcdABs2bGDy5Mn89a9/5dprr+Xjjz9m0qRJrF27lmHDhp39u2wl/H38m2yIudJeSVlVWd2BxzUQ2Y5/bhiG2x9oTJz2H+qaf63Wer6e1zjPdw0DLn+Yfcw+9YYIZ9ioI3jUF0Rq3peIiHiHBs9hGTZsGIMGDeLVV191HuvduzfXXHMNc+bMqXX+/fffz2effcaOHcf3u5g2bRo//PADGzZsAGDy5MkUFBTwxRdfOM+55JJLCA8PZ/HixadVV0uawyIiIiIOp/v3u0E3ZSsqKtiyZQsTJ050Oz5x4kTWr19f52s2bNhQ6/yLL76Y7777jsrKypOeU981AcrLyykoKHB7iIiISOvUoMCSk5ODzWYjJibG7XhMTAyZmZl1viYzM7PO86uqqsjJyTnpOfVdE2DOnDmEhoY6H/Hx6pMoIiLSWp3RtPcT7+0bhnHS+/11nX/i8YZec/bs2eTn5zsfaWlpp12/iIiItCwNmnQbFRWFxWKpNfKRnZ1da4SkRmxsbJ3n+/j4EBkZedJz6rsmgNVqxWq1NqR8ERERaaEaNMLi5+fH4MGDSU5OdjuenJzMyJEj63zNiBEjap2/fPlyhgwZgq+v70nPqe+aIiIi0rY0eFnzrFmzmDJlCkOGDGHEiBEsWLCA1NRUZ1+V2bNnk56ezjvvvAM4VgS9/PLLzJo1izvvvJMNGzbwz3/+0231zz333MPYsWN5+umnufrqq/n000/56quvWLt2bSO9TREREWnJGhxYJk+eTG5uLo8//jgZGRn069ePZcuWkZiYCEBGRgapqanO85OSkli2bBn33nsvr7zyCh07duTFF1909mABGDlyJO+//z4PPfQQDz/8MF27dmXJkiXqwSIiIiKA9hISERERD2qSPiwiIiIinqDAIiIiIl5PgUVERES8ngKLiIiIeD0FFhEREfF6DV7W7K1qFjtpE0QREZGWo+bv9qkWLbeawFJYWAigTRBFRERaoMLCQkJDQ+t9vtX0YbHb7Rw+fJh27dqddNPEhiooKCA+Pp60tDT1d3Ghn0tt+pnUpp9J3fRzqU0/k9rays/EMAwKCwvp2LEjZnP9M1VazQiL2WwmLi6uya4fEhLSqv8Hc6b0c6lNP5Pa9DOpm34utelnUltb+JmcbGSlhibdioiIiNdTYBERERGvp8ByClarlUceeQSr1erpUryKfi616WdSm34mddPPpTb9TGrTz8Rdq5l0KyIiIq2XRlhERETE6ymwiIiIiNdTYBERERGvp8AiIiIiXk+B5RTmz59PUlIS/v7+DB48mDVr1ni6JI+ZM2cO5513Hu3ataN9+/Zcc8017Nq1y9NleZU5c+ZgMpmYOXOmp0vxuPT0dG655RYiIyMJDAxkwIABbNmyxdNleUxVVRUPPfQQSUlJBAQE0KVLFx5//HHsdrunS2tWq1ev5sorr6Rjx46YTCY++eQTt+cNw+DRRx+lY8eOBAQEMH78eH755RfPFNtMTvYzqays5P7776d///4EBQXRsWNHbr31Vg4fPuy5gj1EgeUklixZwsyZM3nwwQfZunUrY8aM4dJLLyU1NdXTpXnEqlWrmDFjBhs3biQ5OZmqqiomTpxIcXGxp0vzCps3b2bBggWcc845ni7F444ePcqoUaPw9fXliy++YPv27Tz33HOEhYV5ujSPefrpp3nttdd4+eWX2bFjB8888wzPPvssL730kqdLa1bFxcWce+65vPzyy3U+/8wzz/D888/z8ssvs3nzZmJjY7nooouc+8W1Rif7mZSUlPD999/z8MMP8/333/PRRx+xe/durrrqKg9U6mGG1Gvo0KHGtGnT3I716tXLeOCBBzxUkXfJzs42AGPVqlWeLsXjCgsLje7duxvJycnGuHHjjHvuucfTJXnU/fffb4wePdrTZXiVyy+/3Lj99tvdjv3qV78ybrnlFg9V5HmA8fHHHzu/ttvtRmxsrPHUU085j5WVlRmhoaHGa6+95oEKm9+JP5O6fPvttwZgpKSkNE9RXkIjLPWoqKhgy5YtTJw40e34xIkTWb9+vYeq8i75+fkAREREeLgSz5sxYwaXX345F154oadL8QqfffYZQ4YM4de//jXt27dn4MCBvPHGG54uy6NGjx7N119/ze7duwH44YcfWLt2LZdddpmHK/MeBw4cIDMz0+33rtVqZdy4cfq96yI/Px+TydTmRixbzeaHjS0nJwebzUZMTIzb8ZiYGDIzMz1UlfcwDINZs2YxevRo+vXr5+lyPOr999/n+++/Z/PmzZ4uxWvs37+fV199lVmzZvHnP/+Zb7/9lj/+8Y9YrVZuvfVWT5fnEffffz/5+fn06tULi8WCzWbjiSee4MYbb/R0aV6j5ndrXb93U1JSPFGS1ykrK+OBBx7gpptuavUbIp5IgeUUTCaT29eGYdQ61hbdfffd/Pjjj6xdu9bTpXhUWloa99xzD8uXL8ff39/T5XgNu93OkCFDePLJJwEYOHAgv/zyC6+++mqbDSxLlizhX//6F4sWLaJv375s27aNmTNn0rFjR37zm994ujyvot+7dausrOSGG27Abrczf/58T5fT7BRY6hEVFYXFYqk1mpKdnV0r/bc1f/jDH/jss89YvXo1cXFxni7Ho7Zs2UJ2djaDBw92HrPZbKxevZqXX36Z8vJyLBaLByv0jA4dOtCnTx+3Y71792bp0qUeqsjz/t//+3888MAD3HDDDQD079+flJQU5syZo8BSLTY2FnCMtHTo0MF5XL93HWFl0qRJHDhwgG+++abNja6AVgnVy8/Pj8GDB5OcnOx2PDk5mZEjR3qoKs8yDIO7776bjz76iG+++YakpCRPl+RxF1xwAT/99BPbtm1zPoYMGcLNN9/Mtm3b2mRYARg1alStJe+7d+8mMTHRQxV5XklJCWaz+69ci8XS5pY1n0xSUhKxsbFuv3crKipYtWpVm/29C8fDyp49e/jqq6+IjIz0dEkeoRGWk5g1axZTpkxhyJAhjBgxggULFpCamsq0adM8XZpHzJgxg0WLFvHpp5/Srl075+hTaGgoAQEBHq7OM9q1a1drDk9QUBCRkZFtem7Pvffey8iRI3nyySeZNGkS3377LQsWLGDBggWeLs1jrrzySp544gkSEhLo27cvW7du5fnnn+f222/3dGnNqqioiL179zq/PnDgANu2bSMiIoKEhARmzpzJk08+Sffu3enevTtPPvkkgYGB3HTTTR6summd7GfSsWNHrr/+er7//ns+//xzbDab83dvREQEfn5+niq7+Xl2kZL3e+WVV4zExETDz8/PGDRoUJtewgvU+Xjrrbc8XZpX0bJmh//85z9Gv379DKvVavTq1ctYsGCBp0vyqIKCAuOee+4xEhISDH9/f6NLly7Ggw8+aJSXl3u6tGa1YsWKOn+P/OY3vzEMw7G0+ZFHHjFiY2MNq9VqjB071vjpp588W3QTO9nP5MCBA/X+7l2xYoWnS29WJsMwjOYMSCIiIiINpTksIiIi4vUUWERERMTrKbCIiIiI11NgEREREa+nwCIiIiJeT4FFREREvJ4Ci4iIiHg9BRYRERHxegosIiIi4vUUWERERMTrKbCIiIiI11NgEREREa/3/wFeGur1AV/LvQAAAABJRU5ErkJggg==", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/week37_162_4.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from sklearn.linear_model import LinearRegression, Ridge, Lasso\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.pipeline import make_pipeline\n", + "from sklearn.utils import resample\n", + "\n", + "np.random.seed(2018)\n", + "\n", + "n = 40\n", + "n_boostraps = 100\n", + "maxdegree = 14\n", + "\n", + "\n", + "# Make data set.\n", + "x = np.linspace(-3, 3, n).reshape(-1, 1)\n", + "y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2)+ np.random.normal(0, 0.1, x.shape)\n", + "error = np.zeros(maxdegree)\n", + "bias = np.zeros(maxdegree)\n", + "variance = np.zeros(maxdegree)\n", + "polydegree = np.zeros(maxdegree)\n", + "x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)\n", + "\n", + "for degree in range(maxdegree):\n", + " model = make_pipeline(PolynomialFeatures(degree=degree), LinearRegression(fit_intercept=False))\n", + " y_pred = np.empty((y_test.shape[0], n_boostraps))\n", + " for i in range(n_boostraps):\n", + " x_, y_ = resample(x_train, y_train)\n", + " y_pred[:, i] = model.fit(x_, y_).predict(x_test).ravel()\n", + "\n", + " polydegree[degree] = degree\n", + " error[degree] = np.mean( np.mean((y_test - y_pred)**2, axis=1, keepdims=True) )\n", + " bias[degree] = np.mean( (y_test - np.mean(y_pred, axis=1, keepdims=True))**2 )\n", + " variance[degree] = np.mean( np.var(y_pred, axis=1, keepdims=True) )\n", + " print('Polynomial degree:', degree)\n", + " print('Error:', error[degree])\n", + " print('Bias^2:', bias[degree])\n", + " print('Var:', variance[degree])\n", + " print('{} >= {} + {} = {}'.format(error[degree], bias[degree], variance[degree], bias[degree]+variance[degree]))\n", + "\n", + "plt.plot(polydegree, error, label='Error')\n", + "plt.plot(polydegree, bias, label='bias')\n", + "plt.plot(polydegree, variance, label='Variance')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "37b66761", + "metadata": { + "editable": true + }, + "source": [ + "## Summing up\n", + "\n", + "The bias-variance tradeoff summarizes the fundamental tension in\n", + "machine learning, particularly supervised learning, between the\n", + "complexity of a model and the amount of training data needed to train\n", + "it. Since data is often limited, in practice it is often useful to\n", + "use a less-complex model with higher bias, that is a model whose asymptotic\n", + "performance is worse than another model because it is easier to\n", + "train and less sensitive to sampling noise arising from having a\n", + "finite-sized training dataset (smaller variance). \n", + "\n", + "The above equations tell us that in\n", + "order to minimize the expected test error, we need to select a\n", + "statistical learning method that simultaneously achieves low variance\n", + "and low bias. Note that variance is inherently a nonnegative quantity,\n", + "and squared bias is also nonnegative. Hence, we see that the expected\n", + "test MSE can never lie below $Var(\\epsilon)$, the irreducible error.\n", + "\n", + "What do we mean by the variance and bias of a statistical learning\n", + "method? The variance refers to the amount by which our model would change if we\n", + "estimated it using a different training data set. Since the training\n", + "data are used to fit the statistical learning method, different\n", + "training data sets will result in a different estimate. But ideally the\n", + "estimate for our model should not vary too much between training\n", + "sets. However, if a method has high variance then small changes in\n", + "the training data can result in large changes in the model. In general, more\n", + "flexible statistical methods have higher variance.\n", + "\n", + "You may also find this recent [article](https://www.pnas.org/content/116/32/15849) of interest." + ] + }, + { + "cell_type": "markdown", + "id": "5b5c601e", + "metadata": { + "editable": true + }, + "source": [ + "## Another Example from Scikit-Learn's Repository" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "9bc32416", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "============================\n", + "Underfitting vs. Overfitting\n", + "============================\n", + "\n", + "This example demonstrates the problems of underfitting and overfitting and\n", + "how we can use linear regression with polynomial features to approximate\n", + "nonlinear functions. The plot shows the function that we want to approximate,\n", + "which is a part of the cosine function. In addition, the samples from the\n", + "real function and the approximations of different models are displayed. The\n", + "models have polynomial features of different degrees. We can see that a\n", + "linear function (polynomial with degree 1) is not sufficient to fit the\n", + "training samples. This is called **underfitting**. A polynomial of degree 4\n", + "approximates the true function almost perfectly. However, for higher degrees\n", + "the model will **overfit** the training data, i.e. it learns the noise of the\n", + "training data.\n", + "We evaluate quantitatively **overfitting** / **underfitting** by using\n", + "cross-validation. We calculate the mean squared error (MSE) on the validation\n", + "set, the higher, the less likely the model generalizes correctly from the\n", + "training data.\n", + "\n" + ] + }, + { + "data": { + "image/png": "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mzYtyzF069aN2bNnU7VqVUJDQ6+433fffUdqaipNmzbN8vlFRCS94pL7GzZsyKJFizJsf/TRR4mJiWHChAlUqFDBpXOKiBR0xSXH54ZJkyYBaCnsYk4FGckXGzdudM7LPHbsGH/++ScTJkzAZrPx008/UapUKee+n376KZ07d6Zjx44MHDiQ8PBwoqOj2bJlC2vWrHEm5Oeee45ff/2V9u3b89xzz+Hr68v48eOJi4sDslZtfuWVV/j9999p3rw5I0aMoGbNmiQkJLBnzx5mz57N+PHjqVChAnfddRfffvstXbp04ZFHHuH666/H09OTAwcOsGjRIrp3737VoYbTp08H7H81BfvSf44VN3r37u36N1VEpIArzrk/JCTE+dfhS7enpKRk+piISGFSnHO8Q1Y+3//555+8/vrr9OzZkypVqpCQkMCcOXP47LPPaNeuHbfccouL33kpUtzcVFiKOEcXdsfNy8vLlC5d2rRu3dq88cYb5tixY5ket379enPHHXeY0qVLG09PT1O2bFnTrl07M378+HT7/fnnn6Zp06bG29vblC1b1jz11FPmzTffNIA5ffq0c7/IyEjTtWvXTK91/PhxM2LECFO5cmXj6elpwsLCTOPGjc1zzz1nYmNjnfslJyebd955xzRo0MD4+PiYgIAAU6tWLTN06FATFRV11e/Fxd+HS28iIkWJcv/laZUlESnslOMvyMrn+6ioKNOlSxcTHh5uvL29jY+Pj7nmmmvM66+/bhISEq56DSnaLMZc1AJbpAi4+eab2bNnD9u3b3d3KCIikk+U+0VEii7leCmqNGVJCrXHH3+cRo0aERERQXR0NN9++y2///47X375pbtDExGRPKLcLyJSdCnHS3GigowUaqmpqbz44oscOXIEi8VCnTp1mDx5Mn379nV3aCIikkeU+0VEii7leClONGVJRERERERERCSfadFzEREREREREZF8poKMiIiIiIiIiEg+K/YFmYkTJ2KxWLBYLCxevDjD48YYqlWrhsVioU2bNukeO3nyJCNHjqROnTr4+/sTHBxMrVq16NevHxs2bMj0GpndMrtufnn++eexWCzUq1cvy8fs2rWLXr16ERISQkBAAB06dGDNmjUZ9jtz5gzPPfccNWrUwM/Pj/DwcG6//XY2bdqUm0/B6bvvvqNhw4b4+PhQvnx5Hn30UWJjY9Ptc/bsWZ5++mluvvlmSpUqhcViYdSoUZc9Z3JyMrVq1WL06NG5Fmd0dDSenp789NNPOT6Xq6/fF198QY8ePahUqRK+vr5Uq1aNYcOGcfjw4Qz7VqpUKdOf1wceeCDHcWcmt1+/Vq1a8eijj+ZJrFK4Ke+7ljemTp1Kq1atKFOmDN7e3pQvX55bbrmF5cuXp9vv8OHDPP/88zRr1oySJUsSFBRE48aN+eyzz0hNTc2Lp5KlvLFw4UIGDRpErVq18Pf3Jzw8nO7du7N69epMz1nQ8n6bNm2u+LN05MiRq56jML9vu/L6Ke9LccvvBw4c4NFHH6V169aEhIRgsViYOHGiS+eYMWMGLVq0ICwsjJCQEK6//nomT56cYb/BgwdTr149QkJC8PX1pUaNGjz11FOcOHEil55N1iUnJ/Pyyy9TqVIlvL29qVWrFuPGjct036w+P4CdO3fi7e3NihUrci3WX375BQ8PD44fP+7ysQMHDsz0Z6xWrVoun+vcuXPUqFEDi8XCO++8k+HxHTt20K9fPypWrIivry9Vq1bl8ccf5+TJky5fK6eOHTvGwIEDKVmyJH5+fjRr1owFCxZk2C8xMZG3336bevXq4e/vT5kyZejcuXOGzycLFiwgICCAgwcP5tdTcI0bl9wuECZMmGAAExgYaPr27Zvh8UWLFjkfb926tXP72bNnTbVq1UzZsmXNmDFjzB9//GF+/fVXM2bMGNOiRQszadKkDNeYMGGCWbFiRYZbTExMfjzVDNauXWu8vb1NmTJlTN26dbN0zLFjx0z58uVN3bp1zYwZM8xvv/1mWrZsaQIDA83WrVvT7duqVSvj5+dn3nrrLbNw4ULz9ddfm2rVqpnAwECzZ8+eXH0u33zzjQHM4MGDzcKFC8348eNNcHCw6dChQ7r9du/ebYKDg02rVq3M4MGDDWBeeumly5537NixpnTp0iY2NjbXYv3qq6+Mn5+fiY+Pz9F5svP6lS9f3txzzz3m22+/NYsXLzaffvqpqVChgilXrpw5cuRIun0jIyNNixYtMvy87tq1K0dxZyYvXr/FixcbT0/PDD+XIsr7ruWNcePGmWeffdZMnz7dLF682EydOtU0adLE2Gw2s3jxYud+v/76q4mIiDDPPfec+e2338z8+fPNY489ZqxWq7n33ntz/blkNW/07t3btG3b1nz88cdm8eLFZtq0aeaGG24wHh4eZsGCBRnOW9Dy/qZNmzL8/CxYsMB4enqaG2644arHF/b3bVdeP+V9KW75fdGiRaZkyZLmpptuMnfffbczrqz68ssvDWBuu+02M3v2bDNnzhxz1113GcC8++676fa96667zPvvv29+++03s2DBAvPmm2+aoKAgU6dOHZOYmJjLz+zKBg8ebLy9vc1bb71lFi1aZJ599lljsVjM66+/nm4/V56fMcb06NHDdO3aNVdj7d+/v2nbtm22jh0wYIDx9fXN8DO2bt06l8/1xBNPmPLlyxvAvP322+keO3bsmClRooSpXLmymThxolm4cKEZM2aMCQgIMA0bNjSpqanZij87EhISTL169UyFChXMN998Y+bPn2+6d+9uPDw80n3mMMaYfv36GavVap577jmzYMECM23aNNO4cWPj4eFh/v7773T7tm3b1vTv3z/fnocrVJA5n1QHDx5sfH19MyTRvn37mmbNmpm6deumS9xfffWVAczChQszPe/FP7iOa/z777958hyyIzk52TRs2NCMGDHCtG7dOssfzJ966inj6emZ7oNZTEyMKVmypLnjjjuc26Kiogxgnn/++XTHL1++/LJJMLtSUlJMuXLlzM0335xu+7fffmsAM3v2bOe2tLQ0k5aWZowx5vjx41f8hT45OdmEh4ebZ5999qoxtG7d2gwYMCBL8Xbp0sX07t07S/teTnZfv6NHj2bY9u+//xrAvPrqq+m2R0ZG5vqbUmby6vUzxph69eqZIUOG5EncUngp77uWNzJz+vRp4+npafr16+fcFh0dbZKSkjLs+9BDDxnA7Nu3L9vXu5QreSOzvHf27FlTpkwZ0759+3TbC3Lev9jEiRMNYL744our7lvY37ddef2MUd4v7opbfr84LsfnOVcKMi1atDCRkZHpzpOWlmZq1apl6tevf9XjP/74YwNkWtzOjpdeeslERkZecZ+NGzcai8Vi3njjjXTbhwwZYnx9fc3Jkyed21x5fps3bzaAmTt37lXjzOr3OSkpyYSEhJgPP/zwqvtmZsCAAcbf3z9bx17s77//Nl5eXmbatGmZFmQ+//xzA5g//vgj3fY33njDAGbNmjU5jsGYrL1vfvTRRwYwy5cvd25LTk42derUMddff71zW0JCgrHZbBkKr4cOHTKAGTFiRLrt06dPNzabLVc/i+SWYj9lyeHu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C77++mvncEmHr7/+Ol2FEcjS9Iv777+fbt26XXU/b2/vq+7z7rvvEhUVxS+//HLVfS/nSjFf/NiwYcP46aefeO+997j22ms5cuQIb7/9Nu3atWPRokVERkaSkJDAggULGDZsGH5+fs6h0wBdunThww8/ZOXKlXTu3JnU1FSMMc7HHUPVrhaXK1NcLnbo0CGaNGmSYfuSJUto27Zthu1Lly7l66+/Trdt9+7dVKpUCYC4uDjmzZvHJ5984nw8LS2NtLS0dLHabLbLxpQbr59DQkICvXr1Yu/evSxcuDDDX1ovHVravXt3QkND+fDDD3n88cdp1KhRgX79wF49DwkJKbhd1cXtlPezbsaMGcTFxbFv3z7Gjx9P586d+eWXXzKsVOKwZs0a7rjjDm644Qb+97//Obe7O2+88MILfPvtt4wbN47GjRune6wg5v2LpaSkMGnSJOrWrcsNN9yQpWMc18jKY4XhfftKrx8o78sFxSG/59TcuXPp27cvt99+O3fccQceHh788ssvDBw4kKSkpAzTgq655hr+/fdf4uPjWbduHaNHj6ZDhw4sXLgQPz8/l/IDkOk018y2T5gwgYEDBzq/zmpOy+rzO3ToEJD5FMlXXnkl05E99913H/fdd5/z68jISPbs2eP8esmSJZw4cYJevXo5t10tJ17qscceS/d1hw4daNSoEb179+bzzz/P8PjFUlJSGDRoEHfeeScdO3a87H4Ap06donv37sTHx/Ptt98SERHBxo0befXVV7n11lv57bff8PDwYPny5URHRzNgwIB0ry1Ap06deOutt4iLi8Pf3z/b75uQ9df39ddf55133mHUqFHceOONnDlzhg8//JAOHTowf/58GjVqlO7Y0qVLk5aWxpEjR6hateoVvyf5yq3loALg0sZcr732mildurR58MEH0/2FJrNKemaWLFli/Pz8TKlSpS57DVdlVpnN7HZpZfZSe/fuNb6+vub99983p06dct5atGhhateubU6dOnXFFSDi4+ONxWIxTz31VIbHPvzwQwOYbdu2GWOMmTNnjgHMtGnT0u136tQpExwc7PwLxYEDB676F4Kvv/7aGGNvMnvxdsfIiPHjxxvAbNq0KUNc1113nWnWrFmmz+dqIywyq7IbYx9V8u+//6a7XXvttaZbt24Ztl/cdf777783Hh4e6f4yMGDAgHTP6Uo/Yzl9/S6WkJBgOnXqZHx8fDI08LqSlStXGsB8/PHHxpiC/fo5lCtXztx2221Zfo5S9CnvZy9vXCw5OdnUq1fvsk0f16xZY8LCwsx1111nTp8+ne4xd+aNUaNGGSDDShwOBS3vX+rnn382gHnvvfeytH9Re9++2uvnoLxffBWn/H4pV0fIpKWlmXLlypkuXbpkeKx///7G39//qiMJHJ8LHU2/XckPjpgvvg0ZMsSUK1cuw/YTJ044j7nrrrvSvR4OsbGxBjAjR450+fllNvrC4eDBgxniceSzi7dt2LAh3XHDhg0zjRs3TrftcjnRFampqcbf3z9dU/bMvP322yY4ONhERUU53/vXr19vwL6Qx6lTp5w/Y88884zx9PQ0hw4dSneOhQsXGsBMnDjRGHNhdbwr3RxNc7P7vlm2bFlz++23Z3g+s2bNMoCZN2+eMcbehNlisWQY7ZOUlGSqVatm2rRpk+Ecn376qQHMf//9d7Vvc77SCJlLDBw4kBdffJHx48dnq/Fhq1atuPnmm5k5cybHjh3LtNLqqstVZi91aWX2Urt27eLcuXM88sgjPPLIIxkeDw0N5ZFHHmHs2LGZHu/r60u1atX477//Mjz233//4evrS5UqVQBYt24dQIa/NIaEhFCtWjXn/M7Q0FBsNhv9+vW7bC+CypUrA/Z5+ImJic7tjvmY11xzjTOGi+f9p6SksHXr1gx/0ciqkiVLZjpHMzAwMENTrMDAQEqUKHHZZllg/+tyu3btCA0NdW4bNWoUw4cPT3eey8np6+eQmJhIjx49WLRoET///DPt27e/4v4XM+er+o5qfkF+/RxOnTpFyZIlc3QOKdqU96+eNy7l4eHBtddeyw8//JDhsbVr13LTTTcRGRnJ/PnzMzTcc1feePnllxk1ahSjRo3i//7v/zK9bkHL+5f68ssv8fLyynLT4aL0vp2V189BeV8cinJ+z6mjR49y+PBhhg4dmuGxJk2a8PXXX7Nnz55MezU5XHfddVitVrZv3w64lh8cx19s1qxZeHl5XTGvXnPNNXz33XccOXIkXR8ZR56rV6+ey8/PkS8yy//ly5fPtAdMpUqVLhtnWloaP/30EyNGjEi3/XI50VXGmKv2utm4cSMxMTFUr149w2MvvPACL7zwAmvXrqVhw4asW7eO8PDwDE2tHe8Hjvzv+D6NGzfusqM0y5QpA2T/ffOaa6657HsWXHh9169fjzEmw3uWp6cnDRo0YMmSJRnO4Xh9C9r7gwoylwgPD+epp55i69atDBgw4LL7HT16lFKlSmX4z5CamkpUVBR+fn7OztQ5lVtDGxs2bMiiRYsybH/00UeJiYlhwoQJVKhQ4Yrn6NmzJ2PHjmX//v1EREQAcPbsWX788UduvfVWZ5d1R4JZuXJlupUdTp48yfbt251FAD8/P9q2bcvatWupX78+Xl5el7224wPcpZo2bUq5cuWYOHFiukZt06dPJzY2Nt1QQVfUqlWLnTt3ZuvYSyUkJDB79uwMQ2UrVaqUbojeleTG65eYmEjPnj1ZuHAhP/7441WHMF7KMcTQkYQL8usH9iGoCQkJudqgU4oe5f0r543MJCQksHLlSqpVq5Zu+7p167jpppuoUKECv//+e7pChIM78sarr77KqFGjeP7553nppZcue72ClvcvduTIEWbPnk2vXr0oUaJElo8rCu/bWX39QHlf0ivK+T2nQkND8fHxYeXKlRkeW7FiBVar9bKrTjksWbKEtLQ053uBK/khu7p3787zzz/PpEmTeOaZZ5zbJ06ciK+vL506dQJce36RkZH4+vrmWv5fvnw5R44cybC63uVyoiumT59OfHz8VaetPvvss+mmeYH9feTuu+/mgQce4M4773S+buXLl2fBggUcPHiQ8PBw5/4rVqwAcH5OaNGiBSEhIWzevDndHxZyU8+ePXnwwQf5+++/adq0KWAv1n/zzTc0bdrU+V518XtW69atnccnJiayZs2aTD/b7Nq1ixIlSjiLRgWFCjKZGD169FX3mTx5Mp9++il9+vShSZMmBAcHc+DAAb744gs2bdrEiy++mCEJbdy4McN8O4CqVas6l43LzOUqs64KCQnJdK5/SEgIKSkpGR5r3749S5YsSRfzk08+yeTJk+natSuvvPIK3t7ejB49moSEBEaNGuXcr1evXrz44osMGzaMAwcOcO2113L48GHefvtt4uPj0/2l9v3336dly5bceOONDBs2jEqVKnH27Fl27NjBr7/+ysKFC6/4vGw2G2+99Rb9+vVj6NCh3H333URFRfH000/ToUMHZ2J2mDNnDnFxcc4lMTdv3sz06dMB+/xWPz8/wL5SwyuvvEJ8fLxzW3bNnTuX+Ph4evToke1z5Mbr17t3b+bMmcNzzz1HiRIl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kBEREREREaew5LvLkhIyIuIalJARERERERGnsORbIWO0LHloqK+IVHCKciIiIiIi4hQ5Q33z22VJFTIiUsEpISMiIiIiIk6Rs+21Pb+hvkrIiEjFpoSMiIiIiIg4heWiFTI6VRGRik1RTkREREREnCKnZcl+/ra07ISMVRUyIlKxKSEjIiIiIiJOkW/LUoZalkTENSghIyIiIiIiTmHOOhvJ07JkU8uSiLgGRTkREREREXGK/CtktMuSiLgGJWRERERERMQp8h/qm92ypFMVEanYFOVERERERMQpzg/1vbBCxkNDfUWkglNCRkREREREnOLfLUsOh4M0m4b6iohrUEJGRERERESc4t8tS9nJGFDLkohUfIpyIiIiIiLiFDkJmaw8THa7EqhCRkQqPiVkRERERETEKbITMvasCpnsgb4Wswk3i05VRKRiU5QTERERERGnMJvyDvXN2fLaqtMUEan4FOlERERERMQpcipkshMytqyEjNqVRMQFKCEjIiIiIiJOkb3Lks2et2VJCRkRcQVKyIiIiIiIiFOYs85GMh15W5Y8tMOSiLgARToREREREXGKC1qWcmbIqEJGRCo+JWRERERERMQpsluWMh3/blnSaYqIVHyKdCIiIiIi4hTmrAoZhwMcDgdpGuorIi5ECRkREREREXGK7AoZMLa+zmlZUkJGRFyAEjIiIiIiIuIU2RUyYLQtqWVJRFyJIp2IiIiIiDiFJVdCxm7XUF8RcS1KyIiIiIiIiFPkaVnKVSHjoZYlEXEBSsiIiIiIiIhTmHOdjWTaHaTmDPXVaYqIVHyKdCIiIiIi4hS5K2TsGuorIi5GCRkREREREXEKS0FDfTVDRkRcgBIyIiIiIiLiFCaTiewiGbvdQVqGWpZExHUo0omIiIiIiNNYs6pkMh25Z8ioQkZEKj4lZERERERExGnMWSUy6w/FsvFwHKAKGRFxDVZnL0BERERERFxX9hyZMVM3AhDk407HukHOXJKISKlQQkZERERERJwm905LN7cN4eWBTans4+7EFYmIlA4lZERERERExGkGtKjB5qNxvDigCT0aVnX2ckRESo0SMiIiIiIi4jTv3NLS2UsQEXEKTcsSERERERERESllSsiIiIiIiIiIiJQyJWREREREREREREqZEjIiIiIiIiIiIqVMCRkRERERERERkVKmhIyIiIiIiIiISClTQkZEREREREREpJQpISMiIiIiIiIiUsqUkBERERERERERKWVKyIiIiIiIiIiIlDIlZERERERERERESpkSMiIiIiIiIiIipUwJGRERERERERGRUqaEjIiIiIiIiIhIKVNCRkRERERERESklCkhIyIiIiIiIiJSypSQEREREREREREpZUrIiIiIiIiIiIiUMiVkRERERERERERKmRIyIiIiIiIiIiKlTAkZEREREREREZFSpoSMiIiIiIiIiEgpU0JGRERERERERKSUKSEjIiIiIiIiIlLKrM54U4fDAUB8fLwz3l5ExCmyY152DHQlivsi4qoU+xX7RcT1FDX2OyUhk5CQAEBoaKgz3l5ExKkSEhIICAhw9jJKleK+iLg6xX4REddTWOw3OZyQrrfb7Rw/fhw/Pz9MJlNpv72IiFM4HA4SEhKoWbMmZrNrdYwq7ouIq1LsV+wXEddT1NjvlISMiIiIiIiIiIgrc600vYiIiIiIiIhIGaCEjIiIiIiIiIhIKVNCRkRERERERESklCkhIyIiIiIiIiJSypSQEREREREREREpZUrIiIiIiIiIiIiUMiVkpMI7ffo01atX580338y5bfXq1bi7uzNv3jwnrkxEREqKYr+IiOtR7JfyxuRwOBzOXoRISZs1axY33ngjK1asoHHjxrRp04aBAwfy0UcfOXtpIiJSQhT7RURcj2K/lCdKyIjLGD16NP/88w9XXXUVmzdvZu3atXh6ejp7WSIiUoIU+0VEXI9iv5QXSsiIy0hJSaF58+YcOXKEdevW0bJlS2cvSURESphiv4iI61Hsl/JCM2TEZezfv5/jx49jt9s5dOiQs5cjIiKlQLFfRMT1KPZLeaEKGXEJ6enpdOjQgdatW9O4cWPGjh3L1q1bqVatmrOXJiIiJUSxX0TE9Sj2S3mihIy4hGeeeYZffvmFzZs34+vrS+/evfHz82PmzJnOXpqIiJQQxX4REdej2C/liVqWpMJbtGgRH330EZMnT8bf3x+z2czkyZNZtmwZ48aNc/byRESkBCj2i4i4HsV+KW9UISMiIiIiIiIiUspUISMiIiIiIiIiUsqUkBERERERERERKWVKyIiIiIiIiIiIlDIlZERERERERERESpkSMiIiIiIiIiIipUwJGRERERERERGRUqaEjIiIiIiIiIhIKVNCRkRERERERESklCkhIyIiIiIiIiJSypSQEREREREREREpZUrIiIiIiIiIiIiUMiVkRERERERERERK2f8D3w/V/vYt1v8AAAAASUVORK5CYII=", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/week37_165_1.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "\"\"\"\n", + "============================\n", + "Underfitting vs. Overfitting\n", + "============================\n", + "\n", + "This example demonstrates the problems of underfitting and overfitting and\n", + "how we can use linear regression with polynomial features to approximate\n", + "nonlinear functions. The plot shows the function that we want to approximate,\n", + "which is a part of the cosine function. In addition, the samples from the\n", + "real function and the approximations of different models are displayed. The\n", + "models have polynomial features of different degrees. We can see that a\n", + "linear function (polynomial with degree 1) is not sufficient to fit the\n", + "training samples. This is called **underfitting**. A polynomial of degree 4\n", + "approximates the true function almost perfectly. However, for higher degrees\n", + "the model will **overfit** the training data, i.e. it learns the noise of the\n", + "training data.\n", + "We evaluate quantitatively **overfitting** / **underfitting** by using\n", + "cross-validation. We calculate the mean squared error (MSE) on the validation\n", + "set, the higher, the less likely the model generalizes correctly from the\n", + "training data.\n", + "\"\"\"\n", + "\n", + "print(__doc__)\n", + "\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.model_selection import cross_val_score\n", + "\n", + "\n", + "def true_fun(X):\n", + " return np.cos(1.5 * np.pi * X)\n", + "\n", + "np.random.seed(0)\n", + "\n", + "n_samples = 30\n", + "degrees = [1, 4, 15]\n", + "\n", + "X = np.sort(np.random.rand(n_samples))\n", + "y = true_fun(X) + np.random.randn(n_samples) * 0.1\n", + "\n", + "plt.figure(figsize=(14, 5))\n", + "for i in range(len(degrees)):\n", + " ax = plt.subplot(1, len(degrees), i + 1)\n", + " plt.setp(ax, xticks=(), yticks=())\n", + "\n", + " polynomial_features = PolynomialFeatures(degree=degrees[i],\n", + " include_bias=False)\n", + " linear_regression = LinearRegression()\n", + " pipeline = Pipeline([(\"polynomial_features\", polynomial_features),\n", + " (\"linear_regression\", linear_regression)])\n", + " pipeline.fit(X[:, np.newaxis], y)\n", + "\n", + " # Evaluate the models using crossvalidation\n", + " scores = cross_val_score(pipeline, X[:, np.newaxis], y,\n", + " scoring=\"neg_mean_squared_error\", cv=10)\n", + "\n", + " X_test = np.linspace(0, 1, 100)\n", + " plt.plot(X_test, pipeline.predict(X_test[:, np.newaxis]), label=\"Model\")\n", + " plt.plot(X_test, true_fun(X_test), label=\"True function\")\n", + " plt.scatter(X, y, edgecolor='b', s=20, label=\"Samples\")\n", + " plt.xlabel(\"x\")\n", + " plt.ylabel(\"y\")\n", + " plt.xlim((0, 1))\n", + " plt.ylim((-2, 2))\n", + " plt.legend(loc=\"best\")\n", + " plt.title(\"Degree {}\\nMSE = {:.2e}(+/- {:.2e})\".format(\n", + " degrees[i], -scores.mean(), scores.std()))\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "eb934dbe", + "metadata": { + "editable": true + }, + "source": [ + "## Various steps in cross-validation\n", + "\n", + "When the repetitive splitting of the data set is done randomly,\n", + "samples may accidently end up in a fast majority of the splits in\n", + "either training or test set. Such samples may have an unbalanced\n", + "influence on either model building or prediction evaluation. To avoid\n", + "this $k$-fold cross-validation structures the data splitting. The\n", + "samples are divided into $k$ more or less equally sized exhaustive and\n", + "mutually exclusive subsets. In turn (at each split) one of these\n", + "subsets plays the role of the test set while the union of the\n", + "remaining subsets constitutes the training set. Such a splitting\n", + "warrants a balanced representation of each sample in both training and\n", + "test set over the splits. Still the division into the $k$ subsets\n", + "involves a degree of randomness. This may be fully excluded when\n", + "choosing $k=n$. This particular case is referred to as leave-one-out\n", + "cross-validation (LOOCV)." + ] + }, + { + "cell_type": "markdown", + "id": "c65f802b", + "metadata": { + "editable": true + }, + "source": [ + "## Cross-validation in brief\n", + "\n", + "For the various values of $k$\n", + "\n", + "1. shuffle the dataset randomly.\n", + "\n", + "2. Split the dataset into $k$ groups.\n", + "\n", + "3. For each unique group:\n", + "\n", + "a. Decide which group to use as set for test data\n", + "\n", + "b. Take the remaining groups as a training data set\n", + "\n", + "c. Fit a model on the training set and evaluate it on the test set\n", + "\n", + "d. Retain the evaluation score and discard the model\n", + "\n", + "5. Summarize the model using the sample of model evaluation scores" + ] + }, + { + "cell_type": "markdown", + "id": "9accabd4", + "metadata": { + "editable": true + }, + "source": [ + "## Code Example for Cross-validation and $k$-fold Cross-validation\n", + "\n", + "The code here uses Ridge regression with cross-validation (CV) resampling and $k$-fold CV in order to fit a specific polynomial." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "d5ed3f5c", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/week37_169_0.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.model_selection import KFold\n", + "from sklearn.linear_model import Ridge\n", + "from sklearn.model_selection import cross_val_score\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "\n", + "# A seed just to ensure that the random numbers are the same for every run.\n", + "# Useful for eventual debugging.\n", + "np.random.seed(3155)\n", + "\n", + "# Generate the data.\n", + "nsamples = 100\n", + "x = np.random.randn(nsamples)\n", + "y = 3*x**2 + np.random.randn(nsamples)\n", + "\n", + "## Cross-validation on Ridge regression using KFold only\n", + "\n", + "# Decide degree on polynomial to fit\n", + "poly = PolynomialFeatures(degree = 6)\n", + "\n", + "# Decide which values of lambda to use\n", + "nlambdas = 500\n", + "lambdas = np.logspace(-3, 5, nlambdas)\n", + "\n", + "# Initialize a KFold instance\n", + "k = 5\n", + "kfold = KFold(n_splits = k)\n", + "\n", + "# Perform the cross-validation to estimate MSE\n", + "scores_KFold = np.zeros((nlambdas, k))\n", + "\n", + "i = 0\n", + "for lmb in lambdas:\n", + " ridge = Ridge(alpha = lmb)\n", + " j = 0\n", + " for train_inds, test_inds in kfold.split(x):\n", + " xtrain = x[train_inds]\n", + " ytrain = y[train_inds]\n", + "\n", + " xtest = x[test_inds]\n", + " ytest = y[test_inds]\n", + "\n", + " Xtrain = poly.fit_transform(xtrain[:, np.newaxis])\n", + " ridge.fit(Xtrain, ytrain[:, np.newaxis])\n", + "\n", + " Xtest = poly.fit_transform(xtest[:, np.newaxis])\n", + " ypred = ridge.predict(Xtest)\n", + "\n", + " scores_KFold[i,j] = np.sum((ypred - ytest[:, np.newaxis])**2)/np.size(ypred)\n", + "\n", + " j += 1\n", + " i += 1\n", + "\n", + "\n", + "estimated_mse_KFold = np.mean(scores_KFold, axis = 1)\n", + "\n", + "## Cross-validation using cross_val_score from sklearn along with KFold\n", + "\n", + "# kfold is an instance initialized above as:\n", + "# kfold = KFold(n_splits = k)\n", + "\n", + "estimated_mse_sklearn = np.zeros(nlambdas)\n", + "i = 0\n", + "for lmb in lambdas:\n", + " ridge = Ridge(alpha = lmb)\n", + "\n", + " X = poly.fit_transform(x[:, np.newaxis])\n", + " estimated_mse_folds = cross_val_score(ridge, X, y[:, np.newaxis], scoring='neg_mean_squared_error', cv=kfold)\n", + "\n", + " # cross_val_score return an array containing the estimated negative mse for every fold.\n", + " # we have to the the mean of every array in order to get an estimate of the mse of the model\n", + " estimated_mse_sklearn[i] = np.mean(-estimated_mse_folds)\n", + "\n", + " i += 1\n", + "\n", + "## Plot and compare the slightly different ways to perform cross-validation\n", + "\n", + "plt.figure()\n", + "\n", + "plt.plot(np.log10(lambdas), estimated_mse_sklearn, label = 'cross_val_score')\n", + "plt.plot(np.log10(lambdas), estimated_mse_KFold, 'r--', label = 'KFold')\n", + "\n", + "plt.xlabel('log10(lambda)')\n", + "plt.ylabel('mse')\n", + "\n", + "plt.legend()\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "db1976f4", + "metadata": { + "editable": true + }, + "source": [ + "## More examples on bootstrap and cross-validation and errors" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "3c35540c", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Degree of polynomial: 1\n", + "Mean squared error on training data: 446033.51374050\n", + "Mean squared error on test data: 455173.80460179\n", + "Degree of polynomial: 2\n", + "Mean squared error on training data: 114550.54637219\n", + "Mean squared error on test data: 129963.83146596\n", + "Degree of polynomial: 3\n", + "Mean squared error on training data: 9054.61775176\n", + "Mean squared error on test data: 10572.87627342\n", + "Degree of polynomial: 4\n", + "Mean squared error on training data: 302.15313054\n", + "Mean squared error on test data: 433.26292364\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Degree of polynomial: 5\n", + "Mean squared error on training data: 3.64316192\n", + "Mean squared error on test data: 7.23528337\n", + "Degree of polynomial: 6\n", + "Mean squared error on training data: 3.56589683\n", + "Mean squared error on test data: 10.50427787\n", + "Degree of polynomial: 7\n", + "Mean squared error on training data: 0.47313680\n", + "Mean squared error on test data: 1.53738247\n", + "Degree of polynomial: 8\n", + "Mean squared error on training data: 0.04926746\n", + "Mean squared error on test data: 0.14629156\n", + "Degree of polynomial: 9\n", + "Mean squared error on training data: 0.02546675\n", + "Mean squared error on test data: 0.11202337\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Degree of polynomial: 10\n", + "Mean squared error on training data: 0.02424794\n", + "Mean squared error on test data: 0.22467274\n", + "Degree of polynomial: 11\n", + "Mean squared error on training data: 0.01594452\n", + "Mean squared error on test data: 1.07641937\n", + "Degree of polynomial: 12\n", + "Mean squared error on training data: 0.00805074\n", + "Mean squared error on test data: 0.04295757\n", + "Degree of polynomial: 13\n", + "Mean squared error on training data: 0.00781918\n", + "Mean squared error on test data: 0.56965674\n", + "Degree of polynomial: 14\n", + "Mean squared error on training data: 0.00465099\n", + "Mean squared error on test data: 0.28443039\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Degree of polynomial: 15\n", + "Mean squared error on training data: 0.00420072\n", + "Mean squared error on test data: 568.47051432\n", + "Degree of polynomial: 16\n", + "Mean squared error on training data: 0.00325450\n", + "Mean squared error on test data: 48.97630233\n", + "Degree of polynomial: 17\n", + "Mean squared error on training data: 0.00242954\n", + "Mean squared error on test data: 2.52780600\n", + "Degree of polynomial: 18\n", + "Mean squared error on training data: 0.00219195\n", + "Mean squared error on test data: 429.25695398\n", + "Degree of polynomial: 19\n", + "Mean squared error on training data: 0.00154853\n", + "Mean squared error on test data: 239.97065359\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Degree of polynomial: 20\n", + "Mean squared error on training data: 0.00140846\n", + "Mean squared error on test data: 1350.24493666\n", + "Degree of polynomial: 21\n", + "Mean squared error on training data: 0.00119688\n", + "Mean squared error on test data: 1840.50530832\n", + "Degree of polynomial: 22\n", + "Mean squared error on training data: 0.00092898\n", + "Mean squared error on test data: 1184.60929685\n", + "Degree of polynomial: 23\n", + "Mean squared error on training data: 0.00089193\n", + "Mean squared error on test data: 3892.17483760\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Degree of polynomial: 24\n", + "Mean squared error on training data: 0.00083355\n", + "Mean squared error on test data: 1332.46736215\n", + "Degree of polynomial: 25\n", + "Mean squared error on training data: 0.00079904\n", + "Mean squared error on test data: 7577.76690383\n", + "Degree of polynomial: 26\n", + "Mean squared error on training data: 0.00075590\n", + "Mean squared error on test data: 1079.36895644\n", + "Degree of polynomial: 27\n", + "Mean squared error on training data: 0.00068091\n", + "Mean squared error on test data: 3207.25343155\n", + "Degree of polynomial: 28\n", + "Mean squared error on training data: 0.00063362\n", + "Mean squared error on test data: 674.79633065\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Degree of polynomial: 29\n", + "Mean squared error on training data: 0.00063866\n", + "Mean squared error on test data: 3099.60342978\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_85796/626635268.py:73: RuntimeWarning: divide by zero encountered in log10\n", + " plt.plot(polynomial, np.log10(trainingerror), label='Training Error')\n", + "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_85796/626635268.py:74: RuntimeWarning: divide by zero encountered in log10\n", + " plt.plot(polynomial, np.log10(testerror), label='Test Error')\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAGyCAYAAADptr7VAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB0J0lEQVR4nO3dd3xUVfrH8c/MpHdaChB67x0BaYKAFdauoGDvir2t5WdZLGtZdUVXXeyCK9gbIJ2AFGnSew+hppI2c39/3EwgQPokd2byfb9e85o7d255Mo7kyTnPOcdmGIaBiIiIiB+xWx2AiIiIiKcpwRERERG/owRHRERE/I4SHBEREfE7SnBERETE7yjBEREREb+jBEdERET8jhIcERER8TtKcERERMTvBFgdQHVyuVzs27ePyMhIbDab1eGIiIhIGRiGQXp6OvXr18duL1vbjE8lOHv37uWRRx7hl19+4fjx47Rq1YoPP/yQ7t27l+n8ffv2kZiYWMVRioiISFXYvXs3DRs2LNOxPpPgHD16lH79+jF48GB++eUXYmNj2bp1KzExMWW+RmRkJGB+QFFRUVUUqYiIiHhSWloaiYmJhb/Hy8JnEpyXXnqJxMREJk2aVLivSZMm5bqGu1sqKipKCY6IiIiPKU95ic8UGX///ff06NGDyy+/nNjYWLp27cr7779f4jk5OTmkpaUVeYiIiIj/85kEZ9u2bUycOJGWLVvy22+/cdttt3HPPffwySefFHvOhAkTiI6OLnyo/kZERKRmsBmGYVgdRFkEBQXRo0cPkpKSCvfdc889LF26lEWLFp3xnJycHHJycgpfu/vwUlNT1UUlIiLiI9LS0oiOji7X72+fqcFJSEigXbt2Rfa1bduWqVOnFntOcHAwwcHBVR2aiIicwul0kpeXZ3UY4iMCAwNxOBwevabPJDj9+vVj48aNRfZt2rSJxo0bWxSRiIicyjAMkpOTOXbsmNWhiI+JiYkhPj7eY/PU+UyCc99999G3b1/+8Y9/cMUVV7BkyRL+85//8J///Mfq0EREpIA7uYmNjSUsLEyTqkqpDMMgKyuLlJQUwOyx8QSfSXB69uzJN998w2OPPcazzz5L06ZNeeONNxg9erTVoYmICGa3lDu5qVOnjtXhiA8JDQ0FICUlhdjYWI90V/lMggNw4YUXcuGFF1odhoiInIG75iYsLMziSMQXub83eXl5HklwfGaYuIiI+AZ1S0lFePp7owRHRERE/I4SHBERkSowaNAgxo8fX+bjd+zYgc1mY+XKlVUWU02iBEdERGo0m81W4mPcuHEVuu60adN47rnnynx8YmIi+/fvp0OHDhW6X1m5E6kzPRYvXlyl965OPlVk7LWc+WRvnEFIu/OsjkRERMpp//79hdtTpkzhqaeeKjLvmnuEj1teXh6BgYGlXrd27drlisPhcBAfH1+ucypj5syZtG/fvsi+4ka/Ffczl/Wz8NR55aEWnEpy5eWw7+3hhHx1FYeW/M/qcEREpJzi4+MLH9HR0dhstsLX2dnZxMTE8NVXXzFo0CBCQkL47LPPOHz4MFdffTUNGzYkLCyMjh078uWXXxa57qldVE2aNOEf//gHN9xwA5GRkTRq1KjIXG6ndlHNmTMHm83G77//To8ePQgLC6Nv376nTXr7/PPPExsbS2RkJDfddBOPPvooXbp0KfXnrlOnTpGfPT4+vjDpeOaZZ+jSpQv//e9/adasGcHBwRiGgc1m491332XkyJGEh4fz/PPPAzBx4kSaN29OUFAQrVu35tNPPy1yr+LOq0pKcCrJZQ9kWba5iGfYL3eTf2BjKWeIiNQchmGQlZtvycOTSy0+8sgj3HPPPaxfv57hw4eTnZ1N9+7d+fHHH/nrr7+45ZZbuPbaa/njjz9KvM6rr75Kjx49WLFiBXfccQe33347GzZsKPGcJ554gldffZVly5YREBDADTfcUPje559/zgsvvMBLL73E8uXLadSoERMnTvTIz7xlyxa++uorpk6dWqQu6Omnn2bkyJGsWbOGG264gW+++YZ7772XBx54gL/++otbb72V66+/ntmzZxe53qnnVTV1UVVSgMNO1xv+xfK3N9Cd9Rz6+Crq3jsfgiOsDk1ExHLH85y0e+o3S+697tnhhAV55tfc+PHjueSSS4rse/DBBwu37777bn799Vf+97//0bt372Kvc/7553PHHXcAZtL0+uuvM2fOHNq0aVPsOS+88AIDBw4E4NFHH+WCCy4gOzubkJAQ3nrrLW688Uauv/56AJ566immT59ORkZGqT9T3759sduLtnOkpqYWzkGTm5vLp59+Sr169Yocc8011xRJUK655hrGjRtX+HPdf//9LF68mH/+858MHjy42POqmlpwPCCxXjQHz3uXA0YMdbO2cfjLW8E3FmkXEZEy6NGjR5HXTqeTF154gU6dOlGnTh0iIiKYPn06u3btKvE6nTp1Ktx2d4W5lygoyznuZQzc52zcuJFevXoVOf7U18WZMmUKK1euLPI4eYK9xo0bn5bcwOmfxfr16+nXr1+Rff369WP9+vUlnlfV1ILjISPO6sJbG57jtu3jqbPjR44v+Deh/e+yOiwREUuFBjpY9+xwy+7tKeHh4UVev/rqq7z++uu88cYbdOzYkfDwcMaPH09ubm6J1zm1sNZms+Fyucp8jnsyvJPPOXWCvLJ2zSUmJtKiRYti3z/1Zy5p/5liOHVfcderKmrB8aDrr76GiUHjAAj6/SmMnUnWBiQiYjGbzUZYUIAlj6qcUXn+/PmMHDmSMWPG0LlzZ5o1a8bmzZur7H7Fad26NUuWLCmyb9myZdUaQ9u2bVmwYEGRfUlJSbRt27Za4ziVWnA8KCI4gAHXPskP76/jIscijn9xLaF3LYTI6hv2JyIiVa9FixZMnTqVpKQkatWqxWuvvUZycnK1/1K/++67ufnmm+nRowd9+/ZlypQprF69mmbNmpV67uHDh0lOTi6yLyYmhpCQkHLF8NBDD3HFFVfQrVs3hgwZwg8//MC0adOYOXNmua7jaWrB8bAujWqxf+DLbHQ1JDTnENlfXgfOPKvDEhERD3ryySfp1q0bw4cPZ9CgQcTHxzNq1Khqj2P06NE89thjPPjgg3Tr1o3t27czbty4MiUpQ4cOJSEhocjj22+/LXcMo0aN4l//+hevvPIK7du357333mPSpEkMGjSo/D+QB9kMT46j83JpaWlER0eTmppKVFRUld3H6TJ48N2vefbA3UTajuPsfSeO8/5RZfcTEfEG2dnZbN++naZNm5a7FUA859xzzyU+Pv60uWi8XUnfn4r8/lYLThVw2G08PPpCnrLfab7+49/w1zSLoxIREX+TlZXFa6+9xtq1a9mwYQNPP/00M2fOZOzYsVaHZjklOFUkITqU4ZfezMT8iwBwfnsnpJQ8mZOIiEh52Gw2fv75Z/r370/37t354YcfmDp1KkOHDrU6NMupyLgKjegQz9+7PUDSiq30ZR3OyaNx3DIbQqque0xERGqO0NBQy4t5vZVacKrYExd24tWoR9hv1MZxZAvGd3dqEkAREZEqpgSnioUGOXh29GDucd5HruHAtv57SHrL6rBERET8mhKcatC+fjQjRlzEs/nXAWDMfAa2z7c2KBERET+mBKeaXN+3CbubXc1U59nYDCfG19dD2j6rwxIREfFLSnCqid1u459XdOG1oNtZ72qELfMgfDUW8ktet0RERETKTwlONaoXGczzl/fitrzxpBlhsGcJTP+71WGJiIj4HSU41Wxwm1jO6XsW9+Xdbu5Y8h6s/sraoERERPyMEhwLPDKiDXtjB/FW/igAjB/uhQNrrQ1KRKSGstlsJT7GjRtX4Ws3adKEN954o0zHneneL774YoXvXdNpoj8LhAQ6eOvqrlz81hV0dm5lAGtgyhi4ZQ6ERFsdnohIjbJ///7C7SlTpvDUU0+xcePGwn2hoaHVEsezzz7LzTffXGRfZGTkGY81DAOn00lAQNFf47m5uQQFBZX73hU9z5upBcciLeMieeLCDtybdyd7jbpwZBssfNPqsEREapz4+PjCR3R0NDabrci+efPm0b17d0JCQmjWrBn/93//R35+fuH5zzzzDI0aNSI4OJj69etzzz33ADBo0CB27tzJfffdV9giU5LIyMgi942Pjyc8PByAOXPmYLPZ+O233+jRowfBwcHMnz+fQYMGcdddd3H//fdTt25dzj33XADmzp1Lr169CA4OJiEhgUcffbRIzMWd50/UgmOh0b0bMXfTQf6x4Rr+HfQmrhWfYR/0GDj0n0VE/IRhQF6WNfcODINSkorS/Pbbb4wZM4Y333yT/v37s3XrVm655RYAnn76ab7++mtef/11Jk+eTPv27UlOTmbVqlUATJs2jc6dO3PLLbec1jJTUQ8//DD//Oc/adasGTExMQB8/PHH3H777SxcuBDDMNi7dy/nn38+48aN45NPPmHDhg3cfPPNhISE8MwzzxRe69Tz/I1+k1rIZrPx0qWduPiNgxzOnUSdjGTY+ju0Gm51aCIinpGXBf+ob829H98HQeGVusQLL7zAo48+Wrg6d7NmzXjuued4+OGHefrpp9m1axfx8fEMHTqUwMBAGjVqRK9evQCoXbs2DoejsGWmNI888gh//3vRkbU//vgjgwYNKnz97LPPntba0qJFC15++eXC10888QSJiYm8/fbb2Gw22rRpw759+3jkkUd46qmnsNvtZzzP36iLymK1w4MYP6Ij3zjPBsBY/rHFEYmIiNvy5ct59tlniYiIKHzcfPPN7N+/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FvEzgwcPZuLEiQQGBlK/fn0CAwMB2L9/PwA2m63I8YZhnLbvZDfddBNvv/02jz76KJMmTeL6668/7Xj3PU6+vsvlKvb6xhm6mc50jZKue6qHHnqI3377jX/+85+0aNGC0NBQLrvsMnJzc4v92crLfe+ffvqJBg0aFHkvODgYKPvPGxoaWuQ4l8uFw+Fg+fLlOByOIsdGREQUHnPrrbdyzz33nHa9Ro0aVeAnEvFfSnBE/Ex4eDgtWrQ4bX+LFi0ICgpiwYIFXHPNNQDk5eWxbNkyxo8fX+z1xowZw8MPP8ybb77J2rVrGTt2bLniadeuHQsWLCiyLykpiVatWp32i7wy5s+fz7hx4/jb3/4GmDU5O3bsKPP50dHRJCQksHjx4sIWqvz8fJYvX063bt0ACguCd+3axcCBA894nTZt2vDzzz8X2XdycXRxunbtitPpJCUlhf79+5/xmG7durF27doz/vcVkaKU4IjUEOHh4dx+++089NBD1K5dm0aNGvHyyy+TlZXFjTfeWOx5tWrV4pJLLuGhhx5i2LBhNGzYsFz3feCBB+jZsyfPPfccV155JYsWLeLtt9/mnXfeqeyPVESLFi2YNm0aF110ETabjSeffLLY1p7i3Hvvvbz44ou0bNmStm3b8tprrxWZ9DAyMpIHH3yQ++67D5fLxdlnn01aWhpJSUlEREQwduxYbr31Vl577TUeeeQRbrzxRlauXFlYUF1SS1mrVq0YPXo01113Ha+++ipdu3bl0KFDzJo1i44dO3L++efzyCOPcNZZZ3HnnXdy8803Ex4ezvr165kxYwZvvfVWRT42Eb+lGhyRGuTFF1/k0ksv5dprr6Vbt25s2bKF3377jVq1apV43o033khubi433HBDue/ZrVs3vvrqKyZPnkyHDh146qmnePbZZxk3blwFf4oze/3116lVqxZ9+/bloosuYvjw4YUtL2X1wAMPcN111zFu3Dj69OlDZGRkYYuQ23PPPcdTTz3FhAkTaNu2LcOHD+eHH36gadOmADRt2pSvv/6aadOm0alTJyZOnFg4isrdjVWcSZMmcd111/HAAw/QunVrLr74Yv744w8SExMBs05p7ty5bN68mf79+9O1a1eefPLJwronETnBZpypc1hE5CSff/459957L/v27SMoKMjqcHzOCy+8wLvvvsvu3butDkWkxlAXlYgUKysri+3btzNhwgRuvfVWJTdl9M4779CzZ0/q1KnDwoULeeWVVzRXjUg1UxeViBTr5ZdfpkuXLsTFxfHYY49ZHY7P2Lx5MyNHjqRdu3Y899xzPPDAAzzzzDNWhyVSo6iLSkRERPyOWnBERETE7yjBEREREb+jBEdERET8jhIcERER8TtKcERERMTvKMERERERv6MER0RERPyOEhwRERHxO/8PtbEWwDtWn+UAAAAASUVORK5CYII=", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/week37_171_8.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "# Common imports\n", + "import os\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.linear_model import LinearRegression, Ridge, Lasso\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.utils import resample\n", + "from sklearn.metrics import mean_squared_error\n", + "# Where to save the figures and data files\n", + "PROJECT_ROOT_DIR = \"Results\"\n", + "FIGURE_ID = \"Results/FigureFiles\"\n", + "DATA_ID = \"DataFiles/\"\n", + "\n", + "if not os.path.exists(PROJECT_ROOT_DIR):\n", + " os.mkdir(PROJECT_ROOT_DIR)\n", + "\n", + "if not os.path.exists(FIGURE_ID):\n", + " os.makedirs(FIGURE_ID)\n", + "\n", + "if not os.path.exists(DATA_ID):\n", + " os.makedirs(DATA_ID)\n", + "\n", + "def image_path(fig_id):\n", + " return os.path.join(FIGURE_ID, fig_id)\n", + "\n", + "def data_path(dat_id):\n", + " return os.path.join(DATA_ID, dat_id)\n", + "\n", + "def save_fig(fig_id):\n", + " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", + "\n", + "infile = open(data_path(\"EoS.csv\"),'r')\n", + "\n", + "# Read the EoS data as csv file and organize the data into two arrays with density and energies\n", + "EoS = pd.read_csv(infile, names=('Density', 'Energy'))\n", + "EoS['Energy'] = pd.to_numeric(EoS['Energy'], errors='coerce')\n", + "EoS = EoS.dropna()\n", + "Energies = EoS['Energy']\n", + "Density = EoS['Density']\n", + "# The design matrix now as function of various polytrops\n", + "\n", + "Maxpolydegree = 30\n", + "X = np.zeros((len(Density),Maxpolydegree))\n", + "X[:,0] = 1.0\n", + "testerror = np.zeros(Maxpolydegree)\n", + "trainingerror = np.zeros(Maxpolydegree)\n", + "polynomial = np.zeros(Maxpolydegree)\n", + "\n", + "trials = 100\n", + "for polydegree in range(1, Maxpolydegree):\n", + " polynomial[polydegree] = polydegree\n", + " for degree in range(polydegree):\n", + " X[:,degree] = Density**(degree/3.0)\n", + "\n", + "# loop over trials in order to estimate the expectation value of the MSE\n", + " testerror[polydegree] = 0.0\n", + " trainingerror[polydegree] = 0.0\n", + " for samples in range(trials):\n", + " x_train, x_test, y_train, y_test = train_test_split(X, Energies, test_size=0.2)\n", + " model = LinearRegression(fit_intercept=False).fit(x_train, y_train)\n", + " ypred = model.predict(x_train)\n", + " ytilde = model.predict(x_test)\n", + " testerror[polydegree] += mean_squared_error(y_test, ytilde)\n", + " trainingerror[polydegree] += mean_squared_error(y_train, ypred) \n", + "\n", + " testerror[polydegree] /= trials\n", + " trainingerror[polydegree] /= trials\n", + " print(\"Degree of polynomial: %3d\"% polynomial[polydegree])\n", + " print(\"Mean squared error on training data: %.8f\" % trainingerror[polydegree])\n", + " print(\"Mean squared error on test data: %.8f\" % testerror[polydegree])\n", + "\n", + "plt.plot(polynomial, np.log10(trainingerror), label='Training Error')\n", + "plt.plot(polynomial, np.log10(testerror), label='Test Error')\n", + "plt.xlabel('Polynomial degree')\n", + "plt.ylabel('log10[MSE]')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "e60fabdf", + "metadata": { + "editable": true + }, + "source": [ + "Note that we kept the intercept column in the fitting here. This means that we need to set the **intercept** in the call to the **Scikit-Learn** function as **False**. Alternatively, we could have set up the design matrix $X$ without the first column of ones." + ] + }, + { + "cell_type": "markdown", + "id": "9b6750d6", + "metadata": { + "editable": true + }, + "source": [ + "## The same example but now with cross-validation\n", + "\n", + "In this example we keep the intercept column again but add cross-validation in order to estimate the best possible value of the means squared error." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "5e6b91e1", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_85796/3817475779.py:63: RuntimeWarning: divide by zero encountered in log10\n", + " plt.plot(polynomial, np.log10(estimated_mse_sklearn), label='Test Error')\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/week37_174_1.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "# Common imports\n", + "import os\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.linear_model import LinearRegression, Ridge, Lasso\n", + "from sklearn.metrics import mean_squared_error\n", + "from sklearn.model_selection import KFold\n", + "from sklearn.model_selection import cross_val_score\n", + "\n", + "\n", + "# Where to save the figures and data files\n", + "PROJECT_ROOT_DIR = \"Results\"\n", + "FIGURE_ID = \"Results/FigureFiles\"\n", + "DATA_ID = \"DataFiles/\"\n", + "\n", + "if not os.path.exists(PROJECT_ROOT_DIR):\n", + " os.mkdir(PROJECT_ROOT_DIR)\n", + "\n", + "if not os.path.exists(FIGURE_ID):\n", + " os.makedirs(FIGURE_ID)\n", + "\n", + "if not os.path.exists(DATA_ID):\n", + " os.makedirs(DATA_ID)\n", + "\n", + "def image_path(fig_id):\n", + " return os.path.join(FIGURE_ID, fig_id)\n", + "\n", + "def data_path(dat_id):\n", + " return os.path.join(DATA_ID, dat_id)\n", + "\n", + "def save_fig(fig_id):\n", + " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", + "\n", + "infile = open(data_path(\"EoS.csv\"),'r')\n", + "\n", + "# Read the EoS data as csv file and organize the data into two arrays with density and energies\n", + "EoS = pd.read_csv(infile, names=('Density', 'Energy'))\n", + "EoS['Energy'] = pd.to_numeric(EoS['Energy'], errors='coerce')\n", + "EoS = EoS.dropna()\n", + "Energies = EoS['Energy']\n", + "Density = EoS['Density']\n", + "# The design matrix now as function of various polytrops\n", + "\n", + "Maxpolydegree = 30\n", + "X = np.zeros((len(Density),Maxpolydegree))\n", + "X[:,0] = 1.0\n", + "estimated_mse_sklearn = np.zeros(Maxpolydegree)\n", + "polynomial = np.zeros(Maxpolydegree)\n", + "k =5\n", + "kfold = KFold(n_splits = k)\n", + "\n", + "for polydegree in range(1, Maxpolydegree):\n", + " polynomial[polydegree] = polydegree\n", + " for degree in range(polydegree):\n", + " X[:,degree] = Density**(degree/3.0)\n", + " OLS = LinearRegression(fit_intercept=False)\n", + "# loop over trials in order to estimate the expectation value of the MSE\n", + " estimated_mse_folds = cross_val_score(OLS, X, Energies, scoring='neg_mean_squared_error', cv=kfold)\n", + "#[:, np.newaxis]\n", + " estimated_mse_sklearn[polydegree] = np.mean(-estimated_mse_folds)\n", + "\n", + "plt.plot(polynomial, np.log10(estimated_mse_sklearn), label='Test Error')\n", + "plt.xlabel('Polynomial degree')\n", + "plt.ylabel('log10[MSE]')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "e83d7b10", + "metadata": { + "editable": true + }, + "source": [ + "## Notes on scaling with examples\n", + "\n", + "The programs here use both ordinrary least squares (OLS) and Ridge\n", + "regression with one value only for the hyperparameter $\\lambda$. The\n", + "first example has no scaling and includes the intercept as well and we\n", + "are trying to fit a second-order polynomial. The second code takes out\n", + "the intercept and subtracts the mean values of each column of the\n", + "design matrix and the mean value of the outputs.\n", + "\n", + "The third and final code uses **Scikit-Learn** as library in order to\n", + "calculate the optimal parameters for OLS and Ridge regression. Note\n", + "that it is highly recommended to not include the intercept in Ridge\n", + "and Lasso regression, in order to avoid penalizing the optimization by\n", + "the intercept. The second and third codes do thus not include the\n", + "intercept. In the second code we do the scaling ourselves while the\n", + "last code uses the standard scaler option included in **Scikit-Learn**, known as centering (where\n", + "we subtract the mean values)." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "73807393", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1.79934087 0.47179152 5.01549939]\n", + "[1.79909592 0.47176716 5.01550546]\n", + " \n", + "test MSE of OLS:\n", + "1.139431112903922\n", + " \n", + "test MSE of Ridge\n", + "1.1395235273363669\n" + ] + }, + { + "data": { + "image/png": "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3qF9+/Z4eXlRuXJld1enVJk2bRqhoaF4eHhwww038Oeff7q7SqXSunXr6N27NzVq1EBRFBYsWODuKpVKEyZM4MYbb8THx4dq1arRr18/9u/f7+5qlVrTp0/nuuuucyUXa9euHUuWLHFLXSps8NGlSxd++OEH9u/fz88//8yhQ4e455573F2tUmffvn3ous7nn3/Onj17+Oijj/jss8949dVX3V21UisjI4N7772XYcOGubsqpcq8efMYNWoUY8aMYceOHdx000307NmTY8eOubtqpU5KSgrXX389U6dOdXdVSrW1a9cyYsQINm3axIoVK7Db7XTv3p2UlBR3V61UqlmzJu+++y5bt25l69at3HLLLfTt25c9e/aUfGUMYRiGYSxcuNBQFMXIyMhwd1VKvUmTJhmhoaHurkapN2PGDMPPz8/d1Sg1WrdubTz55JNZjjVu3Nh4+eWX3VSjsgEw5s+f7+5qlAknT540AGPt2rXurkqZUaVKFeOrr74q8detsD0fl4qPj+f777+nffv2shVzASQmJuLv7+/uaogyJCMjg23bttG9e/csx7t3786GDRvcVCtR3iQmJgLI51MBOBwO5s6dS0pKCu3atSvx16/QwcdLL71EpUqVCAgI4NixYyxcuNDdVSr1Dh06xJQpU3jyySfdXRVRhpw+fRqHw0H16tWzHK9evTpxcXFuqpUoTwzD4LnnnqNjx46EhYW5uzql1u7du/H29sZqtfLkk08yf/58mjRpUuL1KFfBR3h4OIqi5Ptn69atrvIvvvgiO3bsYPny5WiaxoMPPohRQRK+FratAE6cOEGPHj249957eeyxx9xUc/e4kvYSOSmKkuWxYRg5jglxJUaOHMmuXbuYM2eOu6tSql1zzTVERESwadMmhg0bxpAhQ9i7d2+J18NU4q9YjEaOHMn999+fb5m6deu6/h0YGEhgYCCNGjXi2muvpVatWmzatMktXVAlrbBtdeLECbp06UK7du344osvirl2pU9h20tkFRgYiKZpOXo5Tp48maM3RIjCeuqpp1i0aBHr1q2jZs2a7q5OqWaxWGjQoAEArVq1YsuWLXz88cd8/vnnJVqPchV8OIOJK+Hs8UhPTy/KKpVahWmrmJgYunTpwg033MCMGTNQ1XLVYVYgV/PeEpkfeDfccAMrVqzgzjvvdB1fsWIFffv2dWPNRFlmGAZPPfUU8+fPZ82aNYSGhrq7SmWOYRhu+d4rV8FHQW3evJnNmzfTsWNHqlSpwuHDh3njjTeoX79+hej1KIwTJ07QuXNnateuzfvvv8+pU6dc54KCgtxYs9Lr2LFjxMfHc+zYMRwOBxEREQA0aNAAb29v91bOjZ577jkGDx5Mq1atXD1ox44dk/lDuTh37hwHDx50PY6KiiIiIgJ/f39q167txpqVLiNGjGD27NksXLgQHx8fV8+an58fnp6ebq5d6fPqq6/Ss2dPatWqRXJyMnPnzmXNmjUsXbq05CtT4utrSoFdu3YZXbp0Mfz9/Q2r1WrUrVvXePLJJ43o6Gh3V63UmTFjhgHk+kfkbsiQIbm21+rVq91dNbf79NNPjTp16hgWi8Vo2bKlLInMw+rVq3N9Dw0ZMsTdVStV8vpsmjFjhrurVio98sgjrv9/VatWNbp27WosX77cLXVRDKOCzLAUQgghRKlQ8QbvhRBCCOFWEnwIIYQQokRJ8CGEEEKIEiXBhxBCCCFKlAQfQgghhChREnwIIYQQokRJ8CGEEEKIEiXBhxBCCCFKlAQfQgghhChREnwIIYQQokRJ8CGEEEKIEiXBhxBCCCFK1P8BtqD5pxfNaEwAAAAASUVORK5CYII=", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/week37_176_1.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "def MSE(y_data,y_model):\n", + " n = np.size(y_model)\n", + " return np.sum((y_data-y_model)**2)/n\n", + "\n", + "def OLS_fit_beta(X, y):\n", + " return np.linalg.pinv(X.T @ X) @ X.T @ y\n", + "\n", + "def Ridge_fit_beta(X, y,L,d):\n", + " I = np.eye(d,d)\n", + " return np.linalg.pinv(X.T @ X + L*I) @ X.T @ y\n", + "\n", + "# Same random numbers for each test.\n", + "np.random.seed(2018)\n", + "n = 100\n", + "d = 3\n", + "# hyperparameter lambda\n", + "Lambda = 0.01\n", + "\n", + "# Make data set, simple second-order polynomial\n", + "x = np.linspace(-3, 3, n)\n", + "y = 2.0 + 0.5*x + 5.0*(x**2)+ np.random.randn(n)\n", + "\n", + "# The design matrix X includes the intercept and no scaling is made\n", + "X = np.zeros((len(x), d))\n", + "for p in range(d): \n", + " X[:, p] = x ** (p) \n", + "\n", + "\n", + "#Split data, no scaling is used and we include the intercept\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n", + "\n", + "\n", + "#Calculate beta, own code\n", + "beta_OLS = OLS_fit_beta(X_train, y_train)\n", + "beta_Ridge = Ridge_fit_beta(X_train, y_train,Lambda,d)\n", + "print(beta_OLS)\n", + "print(beta_Ridge)\n", + "#predict value\n", + "ytilde_test_OLS = X_test @ beta_OLS\n", + "ytilde_test_Ridge = X_test @ beta_Ridge\n", + "\n", + "#Calculate MSE\n", + "print(\" \")\n", + "print(\"test MSE of OLS:\")\n", + "print(MSE(y_test,ytilde_test_OLS))\n", + "print(\" \")\n", + "print(\"test MSE of Ridge\")\n", + "print(MSE(y_test,ytilde_test_Ridge))\n", + "\n", + "plt.scatter(x,y,label='Data')\n", + "plt.plot(x, X @ beta_OLS,'*', label=\"OLS_Fit\")\n", + "plt.plot(x, X @ beta_Ridge, label=\"Ridge_Fit\")\n", + "plt.grid()\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "b09d20a2", + "metadata": { + "editable": true + }, + "source": [ + "In this example we do not include the intercept and we scale the data by subtracting the mean values. This follows the discussion in the [lecture material](https://compphysics.github.io/MachineLearning/doc/LectureNotes/_build/html/chapter3.html#more-on-rescaling-data).\n", + "see also the weekly slides [for week 36](https://compphysics.github.io/MachineLearning/doc/pub/week36/html/._week36-bs029.html).\n", + "It is recommended whrn we use Ridge and Lasso regression to not include the intercept in the optimization process.\n", + "\n", + "Before we discuss the code, we repeat some of the basic math from the slides of week 36.\n", + "\n", + "Let us try to understand what this may imply mathematically when we\n", + "subtract the mean values, also known as *zero centering* or simply *centering*. For\n", + "simplicity, we will focus on ordinary regression, as done in the above example.\n", + "\n", + "The cost/loss function for regression is" + ] + }, + { + "cell_type": "markdown", + "id": "ef1cec97", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\beta_0, \\beta_1, ... , \\beta_{p-1}) = \\frac{1}{n}\\sum_{i=0}^{n} \\left(y_i - \\beta_0 - \\sum_{j=1}^{p-1} X_{ij}\\beta_j\\right)^2,.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "e43c422b", + "metadata": { + "editable": true + }, + "source": [ + "Recall also that we use the squared value. This expression can lead to an\n", + "increased penalty for higher differences between predicted and\n", + "output/target values.\n", + "\n", + "What we have done is to single out the $\\beta_0$ term in the\n", + "definition of the mean squared error (MSE). The design matrix $X$\n", + "does in this case not contain any intercept column. When we take the\n", + "derivative with respect to $\\beta_0$, we want the derivative to obey" + ] + }, + { + "cell_type": "markdown", + "id": "852577bc", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\frac{\\partial C}{\\partial \\beta_j} = 0,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "4edd229a", + "metadata": { + "editable": true + }, + "source": [ + "for all $j$. For $\\beta_0$ we have" + ] + }, + { + "cell_type": "markdown", + "id": "bb93d608", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\frac{\\partial C}{\\partial \\beta_0} = -\\frac{2}{n}\\sum_{i=0}^{n-1} \\left(y_i - \\beta_0 - \\sum_{j=1}^{p-1} X_{ij} \\beta_j\\right).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "5ef162e3", + "metadata": { + "editable": true + }, + "source": [ + "Multiplying away the constant $2/n$, we obtain" + ] + }, + { + "cell_type": "markdown", + "id": "b7c5467d", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\sum_{i=0}^{n-1} \\beta_0 = \\sum_{i=0}^{n-1}y_i - \\sum_{i=0}^{n-1} \\sum_{j=1}^{p-1} X_{ij} \\beta_j.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "493c75d6", + "metadata": { + "editable": true + }, + "source": [ + "Let us specialize first to the case where we have only two parameters $\\beta_0$ and $\\beta_1$.\n", + "Our result for $\\beta_0$ simplifies then to" + ] + }, + { + "cell_type": "markdown", + "id": "862f2222", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "n\\beta_0 = \\sum_{i=0}^{n-1}y_i - \\sum_{i=0}^{n-1} X_{i1} \\beta_1.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "e0d0a4e0", + "metadata": { + "editable": true + }, + "source": [ + "We obtain then" + ] + }, + { + "cell_type": "markdown", + "id": "73d327de", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\beta_0 = \\frac{1}{n}\\sum_{i=0}^{n-1}y_i - \\beta_1\\frac{1}{n}\\sum_{i=0}^{n-1} X_{i1}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "8be27cbd", + "metadata": { + "editable": true + }, + "source": [ + "If we define" + ] + }, + { + "cell_type": "markdown", + "id": "d49a9bac", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mu_{\\boldsymbol{x}_1}=\\frac{1}{n}\\sum_{i=0}^{n-1} X_{i1},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "dd964823", + "metadata": { + "editable": true + }, + "source": [ + "and the mean value of the outputs as" + ] + }, + { + "cell_type": "markdown", + "id": "09a87e67", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mu_y=\\frac{1}{n}\\sum_{i=0}^{n-1}y_i,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "9b8797a0", + "metadata": { + "editable": true + }, + "source": [ + "we have" + ] + }, + { + "cell_type": "markdown", + "id": "30aeafdb", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\beta_0 = \\mu_y - \\beta_1\\mu_{\\boldsymbol{x}_1}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "dc867cbb", + "metadata": { + "editable": true + }, + "source": [ + "In the general case with more parameters than $\\beta_0$ and $\\beta_1$, we have" + ] + }, + { + "cell_type": "markdown", + "id": "f154321e", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\beta_0 = \\frac{1}{n}\\sum_{i=0}^{n-1}y_i - \\frac{1}{n}\\sum_{i=0}^{n-1}\\sum_{j=1}^{p-1} X_{ij}\\beta_j.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "6015f267", + "metadata": { + "editable": true + }, + "source": [ + "We can rewrite the latter equation as" + ] + }, + { + "cell_type": "markdown", + "id": "f181e88f", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\beta_0 = \\frac{1}{n}\\sum_{i=0}^{n-1}y_i - \\sum_{j=1}^{p-1} \\mu_{\\boldsymbol{x}_j}\\beta_j,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "a6e6c0e7", + "metadata": { + "editable": true + }, + "source": [ + "where we have defined" + ] + }, + { + "cell_type": "markdown", + "id": "708652ea", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mu_{\\boldsymbol{x}_j}=\\frac{1}{n}\\sum_{i=0}^{n-1} X_{ij},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "b360788c", + "metadata": { + "editable": true + }, + "source": [ + "the mean value for all elements of the column vector $\\boldsymbol{x}_j$.\n", + "\n", + "Replacing $y_i$ with $y_i - y_i - \\overline{\\boldsymbol{y}}$ and centering also our design matrix results in a cost function (in vector-matrix disguise)" + ] + }, + { + "cell_type": "markdown", + "id": "8f473602", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{\\beta}) = (\\boldsymbol{\\tilde{y}} - \\tilde{X}\\boldsymbol{\\beta})^T(\\boldsymbol{\\tilde{y}} - \\tilde{X}\\boldsymbol{\\beta}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "70f518a7", + "metadata": { + "editable": true + }, + "source": [ + "If we minimize with respect to $\\boldsymbol{\\beta}$ we have then" + ] + }, + { + "cell_type": "markdown", + "id": "674d02d9", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\hat{\\boldsymbol{\\beta}} = (\\tilde{X}^T\\tilde{X})^{-1}\\tilde{X}^T\\boldsymbol{\\tilde{y}},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "6715261c", + "metadata": { + "editable": true + }, + "source": [ + "where $\\boldsymbol{\\tilde{y}} = \\boldsymbol{y} - \\overline{\\boldsymbol{y}}$\n", + "and $\\tilde{X}_{ij} = X_{ij} - \\frac{1}{n}\\sum_{k=0}^{n-1}X_{kj}$.\n", + "\n", + "For Ridge regression we need to add $\\lambda \\boldsymbol{\\beta}^T\\boldsymbol{\\beta}$ to the cost function and get then" + ] + }, + { + "cell_type": "markdown", + "id": "17600ee3", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\hat{\\boldsymbol{\\beta}} = (\\tilde{X}^T\\tilde{X} + \\lambda I)^{-1}\\tilde{X}^T\\boldsymbol{\\tilde{y}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "a8c6f068", + "metadata": { + "editable": true + }, + "source": [ + "Now we try to implement this." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "1d89f80d", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.47179152 5.01549939]\n", + "[0.47176783 5.01542292]\n", + "1.7993408651198877\n", + "1.7995707762668065\n", + " \n", + "test MSE of OLS:\n", + "1.1394311129039245\n", + " \n", + "test MSE of Ridge\n", + "1.1395084586525954\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/week37_208_1.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "np.random.seed(2018)\n", + "n = 100\n", + "# we do not include the intercept\n", + "d = 2\n", + "Lambda = 0.01\n", + "\n", + "# Make data set.\n", + "x = np.linspace(-3, 3, n)\n", + "y = 2.0 + 0.5*x + 5.0*(x**2)+ np.random.randn(n)\n", + "\n", + "#Design matrix X does not include the intercept. \n", + "X = np.zeros((len(x), d))\n", + "for p in range(d): \n", + " X[:, p] = x ** (p+1)\n", + "\n", + "\n", + "#Split data in train and test\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n", + "\n", + "# Scale data by subtracting mean value,own implementation\n", + "#For our own implementation, we will need to deal with the intercept by centering the design matrix and the target variable\n", + "X_train_mean = np.mean(X_train,axis=0)\n", + "#Center by removing mean from each feature\n", + "X_train_scaled = X_train - X_train_mean\n", + "X_test_scaled = X_test - X_train_mean\n", + "#The model intercept (called y_scaler) is given by the mean of the target variable (IF X is centered, note)\n", + "y_scaler = np.mean(y_train)\n", + "y_train_scaled = y_train - y_scaler\n", + "\n", + "\n", + "#Calculate beta\n", + "beta_OLS = OLS_fit_beta(X_train_scaled, y_train_scaled)\n", + "beta_Ridge = Ridge_fit_beta(X_train_scaled, y_train_scaled,Lambda,d)\n", + "print(beta_OLS)\n", + "print(beta_Ridge)\n", + "# calculate intercepts and print them\n", + "interceptOLS = y_scaler - X_train_mean @ beta_OLS\n", + "interceptRidge = y_scaler - X_train_mean @ beta_Ridge\n", + "print(interceptOLS)\n", + "print(interceptRidge)\n", + "\n", + "#predict value with intercept\n", + "ytilde_test_OLS = X_test_scaled @ beta_OLS+y_scaler\n", + "ytilde_test_Ridge = X_test_scaled @ beta_Ridge+y_scaler\n", + "\n", + "\n", + "#Calculate MSE\n", + "\n", + "print(\" \")\n", + "print(\"test MSE of OLS:\")\n", + "print(MSE(y_test,ytilde_test_OLS))\n", + "print(\" \")\n", + "print(\"test MSE of Ridge\")\n", + "print(MSE(y_test,ytilde_test_Ridge))\n", + "\n", + "plt.scatter(x,y,label='Data')\n", + "plt.plot(x, X @ beta_OLS+interceptOLS,'*', label=\"OLS_Fit\")\n", + "plt.plot(x, X @ beta_Ridge+interceptRidge, label=\"Ridge_Fit\")\n", + "plt.grid()\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "522668c3", + "metadata": { + "editable": true + }, + "source": [ + "Finally, instead of using our own function we repeat the same example\n", + "using the **standardscaler** functionality of the library\n", + "**Scikit-Learn**. Here we limit ourselves to Ridge regression only." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "9954bcc1", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'RegRidge' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[11], line 34\u001b[0m\n\u001b[1;32m 32\u001b[0m ypredictOLS \u001b[38;5;241m=\u001b[39m OLS\u001b[38;5;241m.\u001b[39mpredict(X_test_scaled)\n\u001b[1;32m 33\u001b[0m linear_model\u001b[38;5;241m.\u001b[39mRidge(Lambda)\n\u001b[0;32m---> 34\u001b[0m \u001b[43mRegRidge\u001b[49m\u001b[38;5;241m.\u001b[39mfit(X_train_scaled,y_train_scaled)\n\u001b[1;32m 35\u001b[0m ypredictRidge \u001b[38;5;241m=\u001b[39m RegRidge\u001b[38;5;241m.\u001b[39mpredict(X_test_scaled)\n\u001b[1;32m 36\u001b[0m betaOLS \u001b[38;5;241m=\u001b[39m OLS\u001b[38;5;241m.\u001b[39mcoef_\n", + "\u001b[0;31mNameError\u001b[0m: name 'RegRidge' is not defined" + ] + } + ], + "source": [ + "from sklearn import linear_model\n", + "np.random.seed(2018)\n", + "n = 10\n", + "d = 2\n", + "Lambda = 0.01\n", + "\n", + "# Make data set.\n", + "x = np.linspace(-3, 3, n)\n", + "y = 2.0 + 0.5*x + 5.0*(x**2)+ np.random.randn(n)\n", + "\n", + "# Design matrix X does not include the intercept. \n", + "X = np.zeros((n, d))\n", + "for p in range(d): \n", + " X[:, p] = x ** (p+1)\n", + "\n", + "#Split data in train and test\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n", + "# Scale data by subtracting mean value of the input using scikit-learn\n", + "scaler = StandardScaler(with_std=False)\n", + "scaler.fit(X_train)\n", + "X_train_mean = np.mean(X_train,axis=0)\n", + "X_train_scaled = scaler.transform(X_train)\n", + "X_test_scaled = scaler.transform(X_test)\n", + "# We scale also the output, here by our own code\n", + "y_scaler = np.mean(y_train)\n", + "y_train_scaled = y_train - y_scaler\n", + "y_test_scaled = y_test- y_scaler\n", + "\n", + "#Calculate beta\n", + "OLS = LinearRegression()\n", + "betaOLS=OLS.fit(X_train_scaled,y_train_scaled)\n", + "ypredictOLS = OLS.predict(X_test_scaled)\n", + "linear_model.Ridge(Lambda)\n", + "RegRidge.fit(X_train_scaled,y_train_scaled)\n", + "ypredictRidge = RegRidge.predict(X_test_scaled)\n", + "betaOLS = OLS.coef_\n", + "betaRidge = RegRidge.coef_\n", + "print(betaOLS)\n", + "print(betaRidge)\n", + "interceptOLS = np.mean(y_train) - X_train_mean @ betaOLS\n", + "interceptRidge = y_scaler - X_train_mean @ betaRidge\n", + "print(interceptOLS)\n", + "print(interceptRidge)\n", + "#predict value \n", + "ytilde_test_Ridge = X_test_scaled @ betaRidge+y_scaler\n", + "ytilde_test_OLS = X_test_scaled @ betaOLS+y_scaler\n", + "\n", + "#Calculate MSE\n", + "print(\" \")\n", + "print(\"test MSE of OLS\")\n", + "print(MSE(y_test,ytilde_test_OLS))\n", + "print(\" \")\n", + "print(\"test MSE of Ridge\")\n", + "print(MSE(y_test,ytilde_test_Ridge))\n", + "plt.scatter(x,y,label='Data')\n", + "plt.plot(x, X @ RegRidge.coef_ + RegRidge.intercept_ , label=\"Ridge_Fit\")\n", + "plt.grid()\n", + "plt.legend()\n", + "plt.show()" + ] + } + ], + "metadata": { + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/doc/LectureNotes/_build/jupyter_execute/week37.py b/doc/LectureNotes/_build/jupyter_execute/week37.py new file mode 100644 index 000000000..8be12b1d5 --- /dev/null +++ b/doc/LectureNotes/_build/jupyter_execute/week37.py @@ -0,0 +1,1850 @@ +#!/usr/bin/env python +# coding: utf-8 + +# +# + +# # Week 37: Statistical interpretations and Resampling Methods +# **Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and Facility for Rare Isotope Beams, Michigan State University +# +# Date: **September 9, 2024** +# +# + +# ## Plans for week 37 +# +# **Material for the lecture on Monday September 9.** +# +# +# +# * Resampling techniques, Bootstrap and cross validation and bias-variance tradeoff +# +# * Statistical interpretation of Ridge and Lasso regression +# +# * Readings and Videos: +# +# * Hastie et al Chapter 7, here we recommend 7.1-7.5 and 7.10 (cross-validation) and 7.11 (bootstrap). +# +# * [Video on cross validation](https://www.youtube.com/watch?v=fSytzGwwBVw) +# +# * [Video on Bootstrapping](https://www.youtube.com/watch?v=Xz0x-8-cgaQ) +# +# * [Video on bias-variance tradeoff](https://www.youtube.com/watch?v=EuBBz3bI-aA) +# +# **Material for the active learning sessions on Tuesday and Wednesday.** +# +# * Calculations of expectation values +# +# * Exercise set for week 37 +# +# * Work on project 1 +# +# * See also additional note on scaling (jupyter-notebook) sent separately. This will be discussed during the first hour of each session. This note is added at the end of these slides. +# +# * For more discussions of Ridge regression and calculation of averages, [Wessel van Wieringen's](https://arxiv.org/abs/1509.09169) article is highly recommended. + +# ## Material from last week and relevant for the weekly exercises + +# ## Linking the regression analysis with a statistical interpretation +# +# We will now couple the discussions of ordinary least squares, Ridge +# and Lasso regression with a statistical interpretation, that is we +# move from a linear algebra analysis to a statistical analysis. In +# particular, we will focus on what the regularization terms can result +# in. We will amongst other things show that the regularization +# parameter can reduce considerably the variance of the parameters +# $\beta$. +# +# The +# advantage of doing linear regression is that we actually end up with +# analytical expressions for several statistical quantities. +# Standard least squares and Ridge regression allow us to +# derive quantities like the variance and other expectation values in a +# rather straightforward way. +# +# It is assumed that $\varepsilon_i +# \sim \mathcal{N}(0, \sigma^2)$ and the $\varepsilon_{i}$ are +# independent, i.e.: + +# $$ +# \begin{align*} +# \mbox{Cov}(\varepsilon_{i_1}, +# \varepsilon_{i_2}) & = \left\{ \begin{array}{lcc} \sigma^2 & \mbox{if} +# & i_1 = i_2, \\ 0 & \mbox{if} & i_1 \not= i_2. \end{array} \right. +# \end{align*} +# $$ + +# The randomness of $\varepsilon_i$ implies that +# $\mathbf{y}_i$ is also a random variable. In particular, +# $\mathbf{y}_i$ is normally distributed, because $\varepsilon_i \sim +# \mathcal{N}(0, \sigma^2)$ and $\mathbf{X}_{i,\ast} \, \boldsymbol{\beta}$ is a +# non-random scalar. To specify the parameters of the distribution of +# $\mathbf{y}_i$ we need to calculate its first two moments. +# +# Recall that $\boldsymbol{X}$ is a matrix of dimensionality $n\times p$. The +# notation above $\mathbf{X}_{i,\ast}$ means that we are looking at the +# row number $i$ and perform a sum over all values $p$. + +# ## Assumptions made +# +# The assumption we have made here can be summarized as (and this is going to be useful when we discuss the bias-variance trade off) +# that there exists a function $f(\boldsymbol{x})$ and a normal distributed error $\boldsymbol{\varepsilon}\sim \mathcal{N}(0, \sigma^2)$ +# which describe our data + +# $$ +# \boldsymbol{y} = f(\boldsymbol{x})+\boldsymbol{\varepsilon} +# $$ + +# We approximate this function with our model from the solution of the linear regression equations, that is our +# function $f$ is approximated by $\boldsymbol{\tilde{y}}$ where we want to minimize $(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2$, our MSE, with + +# $$ +# \boldsymbol{\tilde{y}} = \boldsymbol{X}\boldsymbol{\beta}. +# $$ + +# ## Expectation value and variance +# +# We can calculate the expectation value of $\boldsymbol{y}$ for a given element $i$ + +# $$ +# \begin{align*} +# \mathbb{E}(y_i) & = +# \mathbb{E}(\mathbf{X}_{i, \ast} \, \boldsymbol{\beta}) + \mathbb{E}(\varepsilon_i) +# \, \, \, = \, \, \, \mathbf{X}_{i, \ast} \, \beta, +# \end{align*} +# $$ + +# while +# its variance is + +# $$ +# \begin{align*} \mbox{Var}(y_i) & = \mathbb{E} \{ [y_i +# - \mathbb{E}(y_i)]^2 \} \, \, \, = \, \, \, \mathbb{E} ( y_i^2 ) - +# [\mathbb{E}(y_i)]^2 \\ & = \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, +# \beta + \varepsilon_i )^2] - ( \mathbf{X}_{i, \ast} \, \boldsymbol{\beta})^2 \\ & +# = \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, \boldsymbol{\beta})^2 + 2 \varepsilon_i +# \mathbf{X}_{i, \ast} \, \boldsymbol{\beta} + \varepsilon_i^2 ] - ( \mathbf{X}_{i, +# \ast} \, \beta)^2 \\ & = ( \mathbf{X}_{i, \ast} \, \boldsymbol{\beta})^2 + 2 +# \mathbb{E}(\varepsilon_i) \mathbf{X}_{i, \ast} \, \boldsymbol{\beta} + +# \mathbb{E}(\varepsilon_i^2 ) - ( \mathbf{X}_{i, \ast} \, \boldsymbol{\beta})^2 +# \\ & = \mathbb{E}(\varepsilon_i^2 ) \, \, \, = \, \, \, +# \mbox{Var}(\varepsilon_i) \, \, \, = \, \, \, \sigma^2. +# \end{align*} +# $$ + +# Hence, $y_i \sim \mathcal{N}( \mathbf{X}_{i, \ast} \, \boldsymbol{\beta}, \sigma^2)$, that is $\boldsymbol{y}$ follows a normal distribution with +# mean value $\boldsymbol{X}\boldsymbol{\beta}$ and variance $\sigma^2$ (not be confused with the singular values of the SVD). + +# ## Expectation value and variance for $\boldsymbol{\beta}$ +# +# With the OLS expressions for the optimal parameters $\boldsymbol{\hat{\beta}}$ we can evaluate the expectation value + +# $$ +# \mathbb{E}(\boldsymbol{\hat{\beta}}) = \mathbb{E}[ (\mathbf{X}^{\top} \mathbf{X})^{-1}\mathbf{X}^{T} \mathbf{Y}]=(\mathbf{X}^{T} \mathbf{X})^{-1}\mathbf{X}^{T} \mathbb{E}[ \mathbf{Y}]=(\mathbf{X}^{T} \mathbf{X})^{-1} \mathbf{X}^{T}\mathbf{X}\boldsymbol{\beta}=\boldsymbol{\beta}. +# $$ + +# This means that the estimator of the regression parameters is unbiased. +# +# We can also calculate the variance +# +# The variance of the optimal value $\boldsymbol{\hat{\beta}}$ is + +# $$ +# \begin{eqnarray*} +# \mbox{Var}(\boldsymbol{\hat{\beta}}) & = & \mathbb{E} \{ [\boldsymbol{\beta} - \mathbb{E}(\boldsymbol{\beta})] [\boldsymbol{\beta} - \mathbb{E}(\boldsymbol{\beta})]^{T} \} +# \\ +# & = & \mathbb{E} \{ [(\mathbf{X}^{T} \mathbf{X})^{-1} \, \mathbf{X}^{T} \mathbf{y} - \boldsymbol{\beta}] \, [(\mathbf{X}^{T} \mathbf{X})^{-1} \, \mathbf{X}^{T} \mathbf{y} - \boldsymbol{\beta}]^{T} \} +# \\ +# % & = & \mathbb{E} \{ [(\mathbf{X}^{T} \mathbf{X})^{-1} \, \mathbf{X}^{T} \mathbf{y}] \, [(\mathbf{X}^{T} \mathbf{X})^{-1} \, \mathbf{X}^{T} \mathbf{y}]^{T} \} - \boldsymbol{\beta} \, \boldsymbol{\beta}^{T} +# % \\ +# % & = & \mathbb{E} \{ (\mathbf{X}^{T} \mathbf{X})^{-1} \, \mathbf{X}^{T} \mathbf{y} \, \mathbf{y}^{T} \, \mathbf{X} \, (\mathbf{X}^{T} \mathbf{X})^{-1} \} - \boldsymbol{\beta} \, \boldsymbol{\beta}^{T} +# % \\ +# & = & (\mathbf{X}^{T} \mathbf{X})^{-1} \, \mathbf{X}^{T} \, \mathbb{E} \{ \mathbf{y} \, \mathbf{y}^{T} \} \, \mathbf{X} \, (\mathbf{X}^{T} \mathbf{X})^{-1} - \boldsymbol{\beta} \, \boldsymbol{\beta}^{T} +# \\ +# & = & (\mathbf{X}^{T} \mathbf{X})^{-1} \, \mathbf{X}^{T} \, \{ \mathbf{X} \, \boldsymbol{\beta} \, \boldsymbol{\beta}^{T} \, \mathbf{X}^{T} + \sigma^2 \} \, \mathbf{X} \, (\mathbf{X}^{T} \mathbf{X})^{-1} - \boldsymbol{\beta} \, \boldsymbol{\beta}^{T} +# % \\ +# % & = & (\mathbf{X}^T \mathbf{X})^{-1} \, \mathbf{X}^T \, \mathbf{X} \, \boldsymbol{\beta} \, \boldsymbol{\beta}^T \, \mathbf{X}^T \, \mathbf{X} \, (\mathbf{X}^T % \mathbf{X})^{-1} +# % \\ +# % & & + \, \, \sigma^2 \, (\mathbf{X}^T \mathbf{X})^{-1} \, \mathbf{X}^T \, \mathbf{X} \, (\mathbf{X}^T \mathbf{X})^{-1} - \boldsymbol{\beta} \boldsymbol{\beta}^T +# \\ +# & = & \boldsymbol{\beta} \, \boldsymbol{\beta}^{T} + \sigma^2 \, (\mathbf{X}^{T} \mathbf{X})^{-1} - \boldsymbol{\beta} \, \boldsymbol{\beta}^{T} +# \, \, \, = \, \, \, \sigma^2 \, (\mathbf{X}^{T} \mathbf{X})^{-1}, +# \end{eqnarray*} +# $$ + +# where we have used that $\mathbb{E} (\mathbf{y} \mathbf{y}^{T}) = +# \mathbf{X} \, \boldsymbol{\beta} \, \boldsymbol{\beta}^{T} \, \mathbf{X}^{T} + +# \sigma^2 \, \mathbf{I}_{nn}$. From $\mbox{Var}(\boldsymbol{\beta}) = \sigma^2 +# \, (\mathbf{X}^{T} \mathbf{X})^{-1}$, one obtains an estimate of the +# variance of the estimate of the $j$-th regression coefficient: +# $\boldsymbol{\sigma}^2 (\boldsymbol{\beta}_j ) = \boldsymbol{\sigma}^2 [(\mathbf{X}^{T} \mathbf{X})^{-1}]_{jj} $. This may be used to +# construct a confidence interval for the estimates. +# +# In a similar way, we can obtain analytical expressions for say the +# expectation values of the parameters $\boldsymbol{\beta}$ and their variance +# when we employ Ridge regression, allowing us again to define a confidence interval. +# +# It is rather straightforward to show that + +# $$ +# \mathbb{E} \big[ \hat{\boldsymbol{\beta}}^{\mathrm{Ridge}} \big]=(\mathbf{X}^{T} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X})\boldsymbol{\beta}. +# $$ + +# We see clearly that +# $\mathbb{E} \big[ \hat{\boldsymbol{\beta}}^{\mathrm{Ridge}} \big] \not= \hat{\boldsymbol{\beta}}^{\mathrm{OLS}}$ for any $\lambda > 0$. +# +# We can also compute the variance as + +# $$ +# \mbox{Var}[\hat{\boldsymbol{\beta}}^{\mathrm{Ridge}}]=\sigma^2[ \mathbf{X}^{T} \mathbf{X} + \lambda \mathbf{I} ]^{-1} \mathbf{X}^{T} \mathbf{X} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I} ]^{-1}\}^{T}, +# $$ + +# and it is easy to see that if the parameter $\lambda$ goes to infinity then the variance of Ridge parameters $\boldsymbol{\beta}$ goes to zero. +# +# With this, we can compute the difference + +# $$ +# \mbox{Var}[\hat{\boldsymbol{\beta}}^{\mathrm{OLS}}]-\mbox{Var}(\hat{\boldsymbol{\beta}}^{\mathrm{Ridge}})=\sigma^2 [ \mathbf{X}^{T} \mathbf{X} + \lambda \mathbf{I} ]^{-1}[ 2\lambda\mathbf{I} + \lambda^2 (\mathbf{X}^{T} \mathbf{X})^{-1} ] \{ [ \mathbf{X}^{T} \mathbf{X} + \lambda \mathbf{I} ]^{-1}\}^{T}. +# $$ + +# The difference is non-negative definite since each component of the +# matrix product is non-negative definite. +# This means the variance we obtain with the standard OLS will always for $\lambda > 0$ be larger than the variance of $\boldsymbol{\beta}$ obtained with the Ridge estimator. This has interesting consequences when we discuss the so-called bias-variance trade-off below. +# +# For more discussions of Ridge regression and calculation of averages, [Wessel van Wieringen's](https://arxiv.org/abs/1509.09169) article is highly recommended. + +# ## Material for lecture Thursday September 14 + +# ## Deriving OLS from a probability distribution +# +# Our basic assumption when we derived the OLS equations was to assume +# that our output is determined by a given continuous function +# $f(\boldsymbol{x})$ and a random noise $\boldsymbol{\epsilon}$ given by the normal +# distribution with zero mean value and an undetermined variance +# $\sigma^2$. +# +# We found above that the outputs $\boldsymbol{y}$ have a mean value given by +# $\boldsymbol{X}\hat{\boldsymbol{\beta}}$ and variance $\sigma^2$. Since the entries to +# the design matrix are not stochastic variables, we can assume that the +# probability distribution of our targets is also a normal distribution +# but now with mean value $\boldsymbol{X}\hat{\boldsymbol{\beta}}$. This means that a +# single output $y_i$ is given by the Gaussian distribution + +# $$ +# y_i\sim \mathcal{N}(\boldsymbol{X}_{i,*}\boldsymbol{\beta}, \sigma^2)=\frac{1}{\sqrt{2\pi\sigma^2}}\exp{\left[-\frac{(y_i-\boldsymbol{X}_{i,*}\boldsymbol{\beta})^2}{2\sigma^2}\right]}. +# $$ + +# ## Independent and Identically Distrubuted (iid) +# +# We assume now that the various $y_i$ values are stochastically distributed according to the above Gaussian distribution. +# We define this distribution as + +# $$ +# p(y_i, \boldsymbol{X}\vert\boldsymbol{\beta})=\frac{1}{\sqrt{2\pi\sigma^2}}\exp{\left[-\frac{(y_i-\boldsymbol{X}_{i,*}\boldsymbol{\beta})^2}{2\sigma^2}\right]}, +# $$ + +# which reads as finding the likelihood of an event $y_i$ with the input variables $\boldsymbol{X}$ given the parameters (to be determined) $\boldsymbol{\beta}$. +# +# Since these events are assumed to be independent and identicall distributed we can build the probability distribution function (PDF) for all possible event $\boldsymbol{y}$ as the product of the single events, that is we have + +# $$ +# p(\boldsymbol{y},\boldsymbol{X}\vert\boldsymbol{\beta})=\prod_{i=0}^{n-1}\frac{1}{\sqrt{2\pi\sigma^2}}\exp{\left[-\frac{(y_i-\boldsymbol{X}_{i,*}\boldsymbol{\beta})^2}{2\sigma^2}\right]}=\prod_{i=0}^{n-1}p(y_i,\boldsymbol{X}\vert\boldsymbol{\beta}). +# $$ + +# We will write this in a more compact form reserving $\boldsymbol{D}$ for the domain of events, including the ouputs (targets) and the inputs. That is +# in case we have a simple one-dimensional input and output case + +# $$ +# \boldsymbol{D}=[(x_0,y_0), (x_1,y_1),\dots, (x_{n-1},y_{n-1})]. +# $$ + +# In the more general case the various inputs should be replaced by the possible features represented by the input data set $\boldsymbol{X}$. +# We can now rewrite the above probability as + +# $$ +# p(\boldsymbol{D}\vert\boldsymbol{\beta})=\prod_{i=0}^{n-1}\frac{1}{\sqrt{2\pi\sigma^2}}\exp{\left[-\frac{(y_i-\boldsymbol{X}_{i,*}\boldsymbol{\beta})^2}{2\sigma^2}\right]}. +# $$ + +# It is a conditional probability (see below) and reads as the likelihood of a domain of events $\boldsymbol{D}$ given a set of parameters $\boldsymbol{\beta}$. + +# ## Maximum Likelihood Estimation (MLE) +# +# In statistics, maximum likelihood estimation (MLE) is a method of +# estimating the parameters of an assumed probability distribution, +# given some observed data. This is achieved by maximizing a likelihood +# function so that, under the assumed statistical model, the observed +# data is the most probable. +# +# We will assume here that our events are given by the above Gaussian +# distribution and we will determine the optimal parameters $\beta$ by +# maximizing the above PDF. However, computing the derivatives of a +# product function is cumbersome and can easily lead to overflow and/or +# underflowproblems, with potentials for loss of numerical precision. +# +# In practice, it is more convenient to maximize the logarithm of the +# PDF because it is a monotonically increasing function of the argument. +# Alternatively, and this will be our option, we will minimize the +# negative of the logarithm since this is a monotonically decreasing +# function. +# +# Note also that maximization/minimization of the logarithm of the PDF +# is equivalent to the maximization/minimization of the function itself. + +# ## A new Cost Function +# +# We could now define a new cost function to minimize, namely the negative logarithm of the above PDF + +# $$ +# C(\boldsymbol{\beta}=-\log{\prod_{i=0}^{n-1}p(y_i,\boldsymbol{X}\vert\boldsymbol{\beta})}=-\sum_{i=0}^{n-1}\log{p(y_i,\boldsymbol{X}\vert\boldsymbol{\beta})}, +# $$ + +# which becomes + +# $$ +# C(\boldsymbol{\beta}=\frac{n}{2}\log{2\pi\sigma^2}+\frac{\vert\vert (\boldsymbol{y}-\boldsymbol{X}\boldsymbol{\beta})\vert\vert_2^2}{2\sigma^2}. +# $$ + +# Taking the derivative of the *new* cost function with respect to the parameters $\beta$ we recognize our familiar OLS equation, namely + +# $$ +# \boldsymbol{X}^T\left(\boldsymbol{y}-\boldsymbol{X}\boldsymbol{\beta}\right) =0, +# $$ + +# which leads to the well-known OLS equation for the optimal paramters $\beta$ + +# $$ +# \hat{\boldsymbol{\beta}}^{\mathrm{OLS}}=\left(\boldsymbol{X}^T\boldsymbol{X}\right)^{-1}\boldsymbol{X}^T\boldsymbol{y}! +# $$ + +# Before we make a similar analysis for Ridge and Lasso regression, we need a short reminder on statistics. + +# ## More basic Statistics and Bayes' theorem +# +# A central theorem in statistics is Bayes' theorem. This theorem plays a similar role as the good old Pythagoras' theorem in geometry. +# Bayes' theorem is extremely simple to derive. But to do so we need some basic axioms from statistics. +# +# Assume we have two domains of events $X=[x_0,x_1,\dots,x_{n-1}]$ and $Y=[y_0,y_1,\dots,y_{n-1}]$. +# +# We define also the likelihood for $X$ and $Y$ as $p(X)$ and $p(Y)$ respectively. +# The likelihood of a specific event $x_i$ (or $y_i$) is then written as $p(X=x_i)$ or just $p(x_i)=p_i$. +# +# **Union of events is given by.** + +# $$ +# p(X \cup Y)= p(X)+p(Y)-p(X \cap Y). +# $$ + +# **The product rule (aka joint probability) is given by.** + +# $$ +# p(X \cup Y)= p(X,Y)= p(X\vert Y)p(Y)=p(Y\vert X)p(X), +# $$ + +# where we read $p(X\vert Y)$ as the likelihood of obtaining $X$ given $Y$. +# +# If we have independent events then $p(X,Y)=p(X)p(Y)$. + +# ## Marginal Probability +# +# The marginal probability is defined in terms of only one of the set of variables $X,Y$. For a discrete probability we have + +# $$ +# p(X)=\sum_{i=0}^{n-1}p(X,Y=y_i)=\sum_{i=0}^{n-1}p(X\vert Y=y_i)p(Y=y_i)=\sum_{i=0}^{n-1}p(X\vert y_i)p(y_i). +# $$ + +# ## Conditional Probability +# +# The conditional probability, if $p(Y) > 0$, is + +# $$ +# p(X\vert Y)= \frac{p(X,Y)}{p(Y)}=\frac{p(X,Y)}{\sum_{i=0}^{n-1}p(Y\vert X=x_i)p(x_i)}. +# $$ + +# ## Bayes' Theorem +# +# If we combine the conditional probability with the marginal probability and the standard product rule, we have + +# $$ +# p(X\vert Y)= \frac{p(X,Y)}{p(Y)}, +# $$ + +# which we can rewrite as + +# $$ +# p(X\vert Y)= \frac{p(X,Y)}{\sum_{i=0}^{n-1}p(Y\vert X=x_i)p(x_i)}=\frac{p(Y\vert X)p(X)}{\sum_{i=0}^{n-1}p(Y\vert X=x_i)p(x_i)}, +# $$ + +# which is Bayes' theorem. It allows us to evaluate the uncertainty in in $X$ after we have observed $Y$. We can easily interchange $X$ with $Y$. + +# ## Interpretations of Bayes' Theorem +# +# The quantity $p(Y\vert X)$ on the right-hand side of the theorem is +# evaluated for the observed data $Y$ and can be viewed as a function of +# the parameter space represented by $X$. This function is not +# necesseraly normalized and is normally called the likelihood function. +# +# The function $p(X)$ on the right hand side is called the prior while the function on the left hand side is the called the posterior probability. The denominator on the right hand side serves as a normalization factor for the posterior distribution. +# +# Let us try to illustrate Bayes' theorem through an example. + +# ## Example of Usage of Bayes' theorem +# +# Let us suppose that you are undergoing a series of mammography scans in +# order to rule out possible breast cancer cases. We define the +# sensitivity for a positive event by the variable $X$. It takes binary +# values with $X=1$ representing a positive event and $X=0$ being a +# negative event. We reserve $Y$ as a classification parameter for +# either a negative or a positive breast cancer confirmation. (Short note on wordings: positive here means having breast cancer, although none of us would consider this being a positive thing). +# +# We let $Y=1$ represent the the case of having breast cancer and $Y=0$ as not. +# +# Let us assume that if you have breast cancer, the test will be positive with a probability of $0.8$, that is we have + +# $$ +# p(X=1\vert Y=1) =0.8. +# $$ + +# This obviously sounds scary since many would conclude that if the test is positive, there is a likelihood of $80\%$ for having cancer. +# It is however not correct, as the following Bayesian analysis shows. + +# ## Doing it correctly +# +# If we look at various national surveys on breast cancer, the general likelihood of developing breast cancer is a very small number. +# Let us assume that the prior probability in the population as a whole is + +# $$ +# p(Y=1) =0.004. +# $$ + +# We need also to account for the fact that the test may produce a false positive result (false alarm). Let us here assume that we have + +# $$ +# p(X=1\vert Y=0) =0.1. +# $$ + +# Using Bayes' theorem we can then find the posterior probability that the person has breast cancer in case of a positive test, that is we can compute + +# $$ +# p(Y=1\vert X=1)=\frac{p(X=1\vert Y=1)p(Y=1)}{p(X=1\vert Y=1)p(Y=1)+p(X=1\vert Y=0)p(Y=0)}=\frac{0.8\times 0.004}{0.8\times 0.004+0.1\times 0.996}=0.031. +# $$ + +# That is, in case of a positive test, there is only a $3\%$ chance of having breast cancer! + +# ## Bayes' Theorem and Ridge and Lasso Regression +# +# Using Bayes' theorem we can gain a better intuition about Ridge and Lasso regression. +# +# For ordinary least squares we postulated that the maximum likelihood for the doamin of events $\boldsymbol{D}$ (one-dimensional case) + +# $$ +# \boldsymbol{D}=[(x_0,y_0), (x_1,y_1),\dots, (x_{n-1},y_{n-1})], +# $$ + +# is given by + +# $$ +# p(\boldsymbol{D}\vert\boldsymbol{\beta})=\prod_{i=0}^{n-1}\frac{1}{\sqrt{2\pi\sigma^2}}\exp{\left[-\frac{(y_i-\boldsymbol{X}_{i,*}\boldsymbol{\beta})^2}{2\sigma^2}\right]}. +# $$ + +# In Bayes' theorem this function plays the role of the so-called likelihood. We could now ask the question what is the posterior probability of a parameter set $\boldsymbol{\beta}$ given a domain of events $\boldsymbol{D}$? That is, how can we define the posterior probability + +# $$ +# p(\boldsymbol{\beta}\vert\boldsymbol{D}). +# $$ + +# Bayes' theorem comes to our rescue here since (omitting the normalization constant) + +# $$ +# p(\boldsymbol{\beta}\vert\boldsymbol{D})\propto p(\boldsymbol{D}\vert\boldsymbol{\beta})p(\boldsymbol{\beta}). +# $$ + +# We have a model for $p(\boldsymbol{D}\vert\boldsymbol{\beta})$ but need one for the **prior** $p(\boldsymbol{\beta}$! + +# ## Ridge and Bayes +# +# With the posterior probability defined by a likelihood which we have +# already modeled and an unknown prior, we are now ready to make +# additional models for the prior. +# +# We can, based on our discussions of the variance of $\boldsymbol{\beta}$ and the mean value, assume that the prior for the values $\boldsymbol{\beta}$ is given by a Gaussian with mean value zero and variance $\tau^2$, that is + +# $$ +# p(\boldsymbol{\beta})=\prod_{j=0}^{p-1}\exp{\left(-\frac{\beta_j^2}{2\tau^2}\right)}. +# $$ + +# Our posterior probability becomes then (omitting the normalization factor which is just a constant) + +# $$ +# p(\boldsymbol{\beta\vert\boldsymbol{D})}=\prod_{i=0}^{n-1}\frac{1}{\sqrt{2\pi\sigma^2}}\exp{\left[-\frac{(y_i-\boldsymbol{X}_{i,*}\boldsymbol{\beta})^2}{2\sigma^2}\right]}\prod_{j=0}^{p-1}\exp{\left(-\frac{\beta_j^2}{2\tau^2}\right)}. +# $$ + +# We can now optimize this quantity with respect to $\boldsymbol{\beta}$. As we +# did for OLS, this is most conveniently done by taking the negative +# logarithm of the posterior probability. Doing so and leaving out the +# constants terms that do not depend on $\beta$, we have + +# $$ +# C(\boldsymbol{\beta})=\frac{\vert\vert (\boldsymbol{y}-\boldsymbol{X}\boldsymbol{\beta})\vert\vert_2^2}{2\sigma^2}+\frac{1}{2\tau^2}\vert\vert\boldsymbol{\beta}\vert\vert_2^2, +# $$ + +# and replacing $1/2\tau^2$ with $\lambda$ we have + +# $$ +# C(\boldsymbol{\beta})=\frac{\vert\vert (\boldsymbol{y}-\boldsymbol{X}\boldsymbol{\beta})\vert\vert_2^2}{2\sigma^2}+\lambda\vert\vert\boldsymbol{\beta}\vert\vert_2^2, +# $$ + +# which is our Ridge cost function! Nice, isn't it? + +# ## Lasso and Bayes +# +# To derive the Lasso cost function, we simply replace the Gaussian prior with an exponential distribution ([Laplace in this case](https://en.wikipedia.org/wiki/Laplace_distribution)) with zero mean value, that is + +# $$ +# p(\boldsymbol{\beta})=\prod_{j=0}^{p-1}\exp{\left(-\frac{\vert\beta_j\vert}{\tau}\right)}. +# $$ + +# Our posterior probability becomes then (omitting the normalization factor which is just a constant) + +# $$ +# p(\boldsymbol{\beta}\vert\boldsymbol{D})=\prod_{i=0}^{n-1}\frac{1}{\sqrt{2\pi\sigma^2}}\exp{\left[-\frac{(y_i-\boldsymbol{X}_{i,*}\boldsymbol{\beta})^2}{2\sigma^2}\right]}\prod_{j=0}^{p-1}\exp{\left(-\frac{\vert\beta_j\vert}{\tau}\right)}. +# $$ + +# Taking the negative +# logarithm of the posterior probability and leaving out the +# constants terms that do not depend on $\beta$, we have + +# $$ +# C(\boldsymbol{\beta}=\frac{\vert\vert (\boldsymbol{y}-\boldsymbol{X}\boldsymbol{\beta})\vert\vert_2^2}{2\sigma^2}+\frac{1}{\tau}\vert\vert\boldsymbol{\beta}\vert\vert_1, +# $$ + +# and replacing $1/\tau$ with $\lambda$ we have + +# $$ +# C(\boldsymbol{\beta}=\frac{\vert\vert (\boldsymbol{y}-\boldsymbol{X}\boldsymbol{\beta})\vert\vert_2^2}{2\sigma^2}+\lambda\vert\vert\boldsymbol{\beta}\vert\vert_1, +# $$ + +# which is our Lasso cost function! + +# ## Why resampling methods +# +# Before we proceed, we need to rethink what we have been doing. In our +# eager to fit the data, we have omitted several important elements in +# our regression analysis. In what follows we will +# 1. look at statistical properties, including a discussion of mean values, variance and the so-called bias-variance tradeoff +# +# 2. introduce resampling techniques like cross-validation, bootstrapping and jackknife and more +# +# and discuss how to select a given model (one of the difficult parts in machine learning). + +# ## Resampling methods +# Resampling methods are an indispensable tool in modern +# statistics. They involve repeatedly drawing samples from a training +# set and refitting a model of interest on each sample in order to +# obtain additional information about the fitted model. For example, in +# order to estimate the variability of a linear regression fit, we can +# repeatedly draw different samples from the training data, fit a linear +# regression to each new sample, and then examine the extent to which +# the resulting fits differ. Such an approach may allow us to obtain +# information that would not be available from fitting the model only +# once using the original training sample. +# +# Two resampling methods are often used in Machine Learning analyses, +# 1. The **bootstrap method** +# +# 2. and **Cross-Validation** +# +# In addition there are several other methods such as the Jackknife and the Blocking methods. We will discuss in particular +# cross-validation and the bootstrap method. + +# ## Resampling approaches can be computationally expensive +# +# Resampling approaches can be computationally expensive, because they +# involve fitting the same statistical method multiple times using +# different subsets of the training data. However, due to recent +# advances in computing power, the computational requirements of +# resampling methods generally are not prohibitive. In this chapter, we +# discuss two of the most commonly used resampling methods, +# cross-validation and the bootstrap. Both methods are important tools +# in the practical application of many statistical learning +# procedures. For example, cross-validation can be used to estimate the +# test error associated with a given statistical learning method in +# order to evaluate its performance, or to select the appropriate level +# of flexibility. The process of evaluating a model’s performance is +# known as model assessment, whereas the process of selecting the proper +# level of flexibility for a model is known as model selection. The +# bootstrap is widely used. + +# ## Why resampling methods ? +# **Statistical analysis.** +# +# * Our simulations can be treated as *computer experiments*. This is particularly the case for Monte Carlo methods which are widely used in statistical analyses. +# +# * The results can be analysed with the same statistical tools as we would use when analysing experimental data. +# +# * As in all experiments, we are looking for expectation values and an estimate of how accurate they are, i.e., possible sources for errors. + +# ## Statistical analysis +# +# * As in other experiments, many numerical experiments have two classes of errors: +# +# * Statistical errors +# +# * Systematical errors +# +# * Statistical errors can be estimated using standard tools from statistics +# +# * Systematical errors are method specific and must be treated differently from case to case. + +# ## Resampling methods +# +# With all these analytical equations for both the OLS and Ridge +# regression, we will now outline how to assess a given model. This will +# lead to a discussion of the so-called bias-variance tradeoff (see +# below) and so-called resampling methods. +# +# One of the quantities we have discussed as a way to measure errors is +# the mean-squared error (MSE), mainly used for fitting of continuous +# functions. Another choice is the absolute error. +# +# In the discussions below we will focus on the MSE and in particular since we will split the data into test and training data, +# we discuss the +# 1. prediction error or simply the **test error** $\mathrm{Err_{Test}}$, where we have a fixed training set and the test error is the MSE arising from the data reserved for testing. We discuss also the +# +# 2. training error $\mathrm{Err_{Train}}$, which is the average loss over the training data. +# +# As our model becomes more and more complex, more of the training data tends to used. The training may thence adapt to more complicated structures in the data. This may lead to a decrease in the bias (see below for code example) and a slight increase of the variance for the test error. +# For a certain level of complexity the test error will reach minimum, before starting to increase again. The +# training error reaches a saturation. + +# ## Resampling methods: Bootstrap +# Bootstrapping is a [non-parametric approach](https://en.wikipedia.org/wiki/Nonparametric_statistics) to statistical inference +# that substitutes computation for more traditional distributional +# assumptions and asymptotic results. Bootstrapping offers a number of +# advantages: +# 1. The bootstrap is quite general, although there are some cases in which it fails. +# +# 2. Because it does not require distributional assumptions (such as normally distributed errors), the bootstrap can provide more accurate inferences when the data are not well behaved or when the sample size is small. +# +# 3. It is possible to apply the bootstrap to statistics with sampling distributions that are difficult to derive, even asymptotically. +# +# 4. It is relatively simple to apply the bootstrap to complex data-collection plans (such as stratified and clustered samples). +# +# The textbook by [Davison on the Bootstrap Methods and their Applications](https://www.cambridge.org/core/books/bootstrap-methods-and-their-application/ED2FD043579F27952363566DC09CBD6A) provides many more insights and proofs. In this course we will take a more practical approach and use the results and theorems provided in the literature. For those interested in reading more about the bootstrap methods, we recommend the above text and the one by [Efron and Tibshirani](https://www.routledge.com/An-Introduction-to-the-Bootstrap/Efron-Tibshirani/p/book/9780412042317). +# +# Before we proceed however, we need to remind ourselves about a central theorem in statistics, namely the so-called **central limit theorem**. + +# ## The Central Limit Theorem +# +# Suppose we have a PDF $p(x)$ from which we generate a series $N$ +# of averages $\mathbb{E}[x_i]$. Each mean value $\mathbb{E}[x_i]$ +# is viewed as the average of a specific measurement, e.g., throwing +# dice 100 times and then taking the average value, or producing a certain +# amount of random numbers. +# For notational ease, we set $\mathbb{E}[x_i]=x_i$ in the discussion +# which follows. We do the same for $\mathbb{E}[z]=z$. +# +# If we compute the mean $z$ of $m$ such mean values $x_i$ + +# $$ +# z=\frac{x_1+x_2+\dots+x_m}{m}, +# $$ + +# the question we pose is which is the PDF of the new variable $z$. + +# ## Finding the Limit +# +# The probability of obtaining an average value $z$ is the product of the +# probabilities of obtaining arbitrary individual mean values $x_i$, +# but with the constraint that the average is $z$. We can express this through +# the following expression + +# $$ +# \tilde{p}(z)=\int dx_1p(x_1)\int dx_2p(x_2)\dots\int dx_mp(x_m) +# \delta(z-\frac{x_1+x_2+\dots+x_m}{m}), +# $$ + +# where the $\delta$-function enbodies the constraint that the mean is $z$. +# All measurements that lead to each individual $x_i$ are expected to +# be independent, which in turn means that we can express $\tilde{p}$ as the +# product of individual $p(x_i)$. The independence assumption is important in the derivation of the central limit theorem. + +# ## Rewriting the $\delta$-function +# +# If we use the integral expression for the $\delta$-function + +# $$ +# \delta(z-\frac{x_1+x_2+\dots+x_m}{m})=\frac{1}{2\pi}\int_{-\infty}^{\infty} +# dq\exp{\left(iq(z-\frac{x_1+x_2+\dots+x_m}{m})\right)}, +# $$ + +# and inserting $e^{i\mu q-i\mu q}$ where $\mu$ is the mean value +# we arrive at + +# $$ +# \tilde{p}(z)=\frac{1}{2\pi}\int_{-\infty}^{\infty} +# dq\exp{\left(iq(z-\mu)\right)}\left[\int_{-\infty}^{\infty} +# dxp(x)\exp{\left(iq(\mu-x)/m\right)}\right]^m, +# $$ + +# with the integral over $x$ resulting in + +# $$ +# \int_{-\infty}^{\infty}dxp(x)\exp{\left(iq(\mu-x)/m\right)}= +# \int_{-\infty}^{\infty}dxp(x) +# \left[1+\frac{iq(\mu-x)}{m}-\frac{q^2(\mu-x)^2}{2m^2}+\dots\right]. +# $$ + +# ## Identifying Terms +# +# The second term on the rhs disappears since this is just the mean and +# employing the definition of $\sigma^2$ we have + +# $$ +# \int_{-\infty}^{\infty}dxp(x)e^{\left(iq(\mu-x)/m\right)}= +# 1-\frac{q^2\sigma^2}{2m^2}+\dots, +# $$ + +# resulting in + +# $$ +# \left[\int_{-\infty}^{\infty}dxp(x)\exp{\left(iq(\mu-x)/m\right)}\right]^m\approx +# \left[1-\frac{q^2\sigma^2}{2m^2}+\dots \right]^m, +# $$ + +# and in the limit $m\rightarrow \infty$ we obtain + +# $$ +# \tilde{p}(z)=\frac{1}{\sqrt{2\pi}(\sigma/\sqrt{m})} +# \exp{\left(-\frac{(z-\mu)^2}{2(\sigma/\sqrt{m})^2}\right)}, +# $$ + +# which is the normal distribution with variance +# $\sigma^2_m=\sigma^2/m$, where $\sigma$ is the variance of the PDF $p(x)$ +# and $\mu$ is also the mean of the PDF $p(x)$. + +# ## Wrapping it up +# +# Thus, the central limit theorem states that the PDF $\tilde{p}(z)$ of +# the average of $m$ random values corresponding to a PDF $p(x)$ +# is a normal distribution whose mean is the +# mean value of the PDF $p(x)$ and whose variance is the variance +# of the PDF $p(x)$ divided by $m$, the number of values used to compute $z$. +# +# The central limit theorem leads to the well-known expression for the +# standard deviation, given by + +# $$ +# \sigma_m= +# \frac{\sigma}{\sqrt{m}}. +# $$ + +# The latter is true only if the average value is known exactly. This is obtained in the limit +# $m\rightarrow \infty$ only. Because the mean and the variance are measured quantities we obtain +# the familiar expression in statistics (the so-called Bessel correction) + +# $$ +# \sigma_m\approx +# \frac{\sigma}{\sqrt{m-1}}. +# $$ + +# In many cases however the above estimate for the standard deviation, +# in particular if correlations are strong, may be too simplistic. Keep +# in mind that we have assumed that the variables $x$ are independent +# and identically distributed. This is obviously not always the +# case. For example, the random numbers (or better pseudorandom numbers) +# we generate in various calculations do always exhibit some +# correlations. +# +# The theorem is satisfied by a large class of PDFs. Note however that for a +# finite $m$, it is not always possible to find a closed form /analytic expression for +# $\tilde{p}(x)$. + +# ## Confidence Intervals +# +# Confidence intervals are used in statistics and represent a type of estimate +# computed from the observed data. This gives a range of values for an +# unknown parameter such as the parameters $\boldsymbol{\beta}$ from linear regression. +# +# With the OLS expressions for the parameters $\boldsymbol{\beta}$ we found +# $\mathbb{E}(\boldsymbol{\beta}) = \boldsymbol{\beta}$, which means that the estimator of the regression parameters is unbiased. +# +# We found also that the variance of the estimate of the $j$-th regression coefficient is +# $\boldsymbol{\sigma}^2 (\boldsymbol{\beta}_j ) = \boldsymbol{\sigma}^2 [(\mathbf{X}^{T} \mathbf{X})^{-1}]_{jj} $. +# +# This quantity will be used to +# construct a confidence interval for the estimates. + +# ## Standard Approach based on the Normal Distribution +# +# We will assume that the parameters $\beta$ follow a normal +# distribution. We can then define the confidence interval. Here we will be using as +# shorthands $\mu_{\beta}$ for the above mean value and $\sigma_{\beta}$ +# for the standard deviation. We have then a confidence interval + +# $$ +# \left(\mu_{\beta}\pm \frac{z\sigma_{\beta}}{\sqrt{n}}\right), +# $$ + +# where $z$ defines the level of certainty (or confidence). For a normal +# distribution typical parameters are $z=2.576$ which corresponds to a +# confidence of $99\%$ while $z=1.96$ corresponds to a confidence of +# $95\%$. A confidence level of $95\%$ is commonly used and it is +# normally referred to as a *two-sigmas* confidence level, that is we +# approximate $z\approx 2$. +# +# For more discussions of confidence intervals (and in particular linked with a discussion of the bootstrap method), see chapter 5 of the textbook by [Davison on the Bootstrap Methods and their Applications](https://www.cambridge.org/core/books/bootstrap-methods-and-their-application/ED2FD043579F27952363566DC09CBD6A) +# +# In this text you will also find an in-depth discussion of the +# Bootstrap method, why it works and various theorems related to it. + +# ## Resampling methods: Bootstrap background +# +# Since $\widehat{\beta} = \widehat{\beta}(\boldsymbol{X})$ is a function of random variables, +# $\widehat{\beta}$ itself must be a random variable. Thus it has +# a pdf, call this function $p(\boldsymbol{t})$. The aim of the bootstrap is to +# estimate $p(\boldsymbol{t})$ by the relative frequency of +# $\widehat{\beta}$. You can think of this as using a histogram +# in the place of $p(\boldsymbol{t})$. If the relative frequency closely +# resembles $p(\vec{t})$, then using numerics, it is straight forward to +# estimate all the interesting parameters of $p(\boldsymbol{t})$ using point +# estimators. + +# ## Resampling methods: More Bootstrap background +# +# In the case that $\widehat{\beta}$ has +# more than one component, and the components are independent, we use the +# same estimator on each component separately. If the probability +# density function of $X_i$, $p(x)$, had been known, then it would have +# been straightforward to do this by: +# 1. Drawing lots of numbers from $p(x)$, suppose we call one such set of numbers $(X_1^*, X_2^*, \cdots, X_n^*)$. +# +# 2. Then using these numbers, we could compute a replica of $\widehat{\beta}$ called $\widehat{\beta}^*$. +# +# By repeated use of the above two points, many +# estimates of $\widehat{\beta}$ can be obtained. The +# idea is to use the relative frequency of $\widehat{\beta}^*$ +# (think of a histogram) as an estimate of $p(\boldsymbol{t})$. + +# ## Resampling methods: Bootstrap approach +# +# But +# unless there is enough information available about the process that +# generated $X_1,X_2,\cdots,X_n$, $p(x)$ is in general +# unknown. Therefore, [Efron in 1979](https://projecteuclid.org/euclid.aos/1176344552) asked the +# question: What if we replace $p(x)$ by the relative frequency +# of the observation $X_i$? +# +# If we draw observations in accordance with +# the relative frequency of the observations, will we obtain the same +# result in some asymptotic sense? The answer is yes. + +# ## Resampling methods: Bootstrap steps +# +# The independent bootstrap works like this: +# +# 1. Draw with replacement $n$ numbers for the observed variables $\boldsymbol{x} = (x_1,x_2,\cdots,x_n)$. +# +# 2. Define a vector $\boldsymbol{x}^*$ containing the values which were drawn from $\boldsymbol{x}$. +# +# 3. Using the vector $\boldsymbol{x}^*$ compute $\widehat{\beta}^*$ by evaluating $\widehat \beta$ under the observations $\boldsymbol{x}^*$. +# +# 4. Repeat this process $k$ times. +# +# When you are done, you can draw a histogram of the relative frequency +# of $\widehat \beta^*$. This is your estimate of the probability +# distribution $p(t)$. Using this probability distribution you can +# estimate any statistics thereof. In principle you never draw the +# histogram of the relative frequency of $\widehat{\beta}^*$. Instead +# you use the estimators corresponding to the statistic of interest. For +# example, if you are interested in estimating the variance of $\widehat +# \beta$, apply the etsimator $\widehat \sigma^2$ to the values +# $\widehat \beta^*$. + +# ## Code example for the Bootstrap method +# +# The following code starts with a Gaussian distribution with mean value +# $\mu =100$ and variance $\sigma=15$. We use this to generate the data +# used in the bootstrap analysis. The bootstrap analysis returns a data +# set after a given number of bootstrap operations (as many as we have +# data points). This data set consists of estimated mean values for each +# bootstrap operation. The histogram generated by the bootstrap method +# shows that the distribution for these mean values is also a Gaussian, +# centered around the mean value $\mu=100$ but with standard deviation +# $\sigma/\sqrt{n}$, where $n$ is the number of bootstrap samples (in +# this case the same as the number of original data points). The value +# of the standard deviation is what we expect from the central limit +# theorem. + +# In[1]: + + +get_ipython().run_line_magic('matplotlib', 'inline') + +import numpy as np +from time import time +from scipy.stats import norm +import matplotlib.pyplot as plt + +# Returns mean of bootstrap samples +# Bootstrap algorithm +def bootstrap(data, datapoints): + t = np.zeros(datapoints) + n = len(data) + # non-parametric bootstrap + for i in range(datapoints): + t[i] = np.mean(data[np.random.randint(0,n,n)]) + # analysis + print("Bootstrap Statistics :") + print("original bias std. error") + print("%8g %8g %14g %15g" % (np.mean(data), np.std(data),np.mean(t),np.std(t))) + return t + +# We set the mean value to 100 and the standard deviation to 15 +mu, sigma = 100, 15 +datapoints = 10000 +# We generate random numbers according to the normal distribution +x = mu + sigma*np.random.randn(datapoints) +# bootstrap returns the data sample +t = bootstrap(x, datapoints) + + +# We see that our new variance and from that the standard deviation, agrees with the central limit theorem. + +# ## Plotting the Histogram + +# In[2]: + + +# the histogram of the bootstrapped data (normalized data if density = True) +n, binsboot, patches = plt.hist(t, 50, density=True, facecolor='red', alpha=0.75) +# add a 'best fit' line +y = norm.pdf(binsboot, np.mean(t), np.std(t)) +lt = plt.plot(binsboot, y, 'b', linewidth=1) +plt.xlabel('x') +plt.ylabel('Probability') +plt.grid(True) +plt.show() + + +# ## The bias-variance tradeoff +# +# We will discuss the bias-variance tradeoff in the context of +# continuous predictions such as regression. However, many of the +# intuitions and ideas discussed here also carry over to classification +# tasks. Consider a dataset $\mathcal{D}$ consisting of the data +# $\mathbf{X}_\mathcal{D}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\}$. +# +# Let us assume that the true data is generated from a noisy model + +# $$ +# \boldsymbol{y}=f(\boldsymbol{x}) + \boldsymbol{\epsilon} +# $$ + +# where $\epsilon$ is normally distributed with mean zero and standard deviation $\sigma^2$. +# +# In our derivation of the ordinary least squares method we defined then +# an approximation to the function $f$ in terms of the parameters +# $\boldsymbol{\beta}$ and the design matrix $\boldsymbol{X}$ which embody our model, +# that is $\boldsymbol{\tilde{y}}=\boldsymbol{X}\boldsymbol{\beta}$. +# +# Thereafter we found the parameters $\boldsymbol{\beta}$ by optimizing the means squared error via the so-called cost function + +# $$ +# C(\boldsymbol{X},\boldsymbol{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]. +# $$ + +# We can rewrite this as + +# $$ +# \mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\sigma^2. +# $$ + +# The three terms represent the square of the bias of the learning +# method, which can be thought of as the error caused by the simplifying +# assumptions built into the method. The second term represents the +# variance of the chosen model and finally the last terms is variance of +# the error $\boldsymbol{\epsilon}$. +# +# To derive this equation, we need to recall that the variance of $\boldsymbol{y}$ and $\boldsymbol{\epsilon}$ are both equal to $\sigma^2$. The mean value of $\boldsymbol{\epsilon}$ is by definition equal to zero. Furthermore, the function $f$ is not a stochastics variable, idem for $\boldsymbol{\tilde{y}}$. +# We use a more compact notation in terms of the expectation value + +# $$ +# \mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\mathbb{E}\left[(\boldsymbol{f}+\boldsymbol{\epsilon}-\boldsymbol{\tilde{y}})^2\right], +# $$ + +# and adding and subtracting $\mathbb{E}\left[\boldsymbol{\tilde{y}}\right]$ we get + +# $$ +# \mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\mathbb{E}\left[(\boldsymbol{f}+\boldsymbol{\epsilon}-\boldsymbol{\tilde{y}}+\mathbb{E}\left[\boldsymbol{\tilde{y}}\right]-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2\right], +# $$ + +# which, using the abovementioned expectation values can be rewritten as + +# $$ +# \mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\mathbb{E}\left[(\boldsymbol{y}-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2\right]+\mathrm{Var}\left[\boldsymbol{\tilde{y}}\right]+\sigma^2, +# $$ + +# that is the rewriting in terms of the so-called bias, the variance of the model $\boldsymbol{\tilde{y}}$ and the variance of $\boldsymbol{\epsilon}$. + +# ## A way to Read the Bias-Variance Tradeoff +# +# +# +# +#

    Figure 1:

    +# + +# ## Example code for Bias-Variance tradeoff + +# In[3]: + + +import matplotlib.pyplot as plt +import numpy as np +from sklearn.linear_model import LinearRegression, Ridge, Lasso +from sklearn.preprocessing import PolynomialFeatures +from sklearn.model_selection import train_test_split +from sklearn.pipeline import make_pipeline +from sklearn.utils import resample + +np.random.seed(2018) + +n = 500 +n_boostraps = 100 +degree = 18 # A quite high value, just to show. +noise = 0.1 + +# Make data set. +x = np.linspace(-1, 3, n).reshape(-1, 1) +y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2) + np.random.normal(0, 0.1, x.shape) + +# Hold out some test data that is never used in training. +x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2) + +# Combine x transformation and model into one operation. +# Not neccesary, but convenient. +model = make_pipeline(PolynomialFeatures(degree=degree), LinearRegression(fit_intercept=False)) + +# The following (m x n_bootstraps) matrix holds the column vectors y_pred +# for each bootstrap iteration. +y_pred = np.empty((y_test.shape[0], n_boostraps)) +for i in range(n_boostraps): + x_, y_ = resample(x_train, y_train) + + # Evaluate the new model on the same test data each time. + y_pred[:, i] = model.fit(x_, y_).predict(x_test).ravel() + +# Note: Expectations and variances taken w.r.t. different training +# data sets, hence the axis=1. Subsequent means are taken across the test data +# set in order to obtain a total value, but before this we have error/bias/variance +# calculated per data point in the test set. +# Note 2: The use of keepdims=True is important in the calculation of bias as this +# maintains the column vector form. Dropping this yields very unexpected results. +error = np.mean( np.mean((y_test - y_pred)**2, axis=1, keepdims=True) ) +bias = np.mean( (y_test - np.mean(y_pred, axis=1, keepdims=True))**2 ) +variance = np.mean( np.var(y_pred, axis=1, keepdims=True) ) +print('Error:', error) +print('Bias^2:', bias) +print('Var:', variance) +print('{} >= {} + {} = {}'.format(error, bias, variance, bias+variance)) + +plt.plot(x[::5, :], y[::5, :], label='f(x)') +plt.scatter(x_test, y_test, label='Data points') +plt.scatter(x_test, np.mean(y_pred, axis=1), label='Pred') +plt.legend() +plt.show() + + +# ## Understanding what happens + +# In[4]: + + +import matplotlib.pyplot as plt +import numpy as np +from sklearn.linear_model import LinearRegression, Ridge, Lasso +from sklearn.preprocessing import PolynomialFeatures +from sklearn.model_selection import train_test_split +from sklearn.pipeline import make_pipeline +from sklearn.utils import resample + +np.random.seed(2018) + +n = 40 +n_boostraps = 100 +maxdegree = 14 + + +# Make data set. +x = np.linspace(-3, 3, n).reshape(-1, 1) +y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2)+ np.random.normal(0, 0.1, x.shape) +error = np.zeros(maxdegree) +bias = np.zeros(maxdegree) +variance = np.zeros(maxdegree) +polydegree = np.zeros(maxdegree) +x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2) + +for degree in range(maxdegree): + model = make_pipeline(PolynomialFeatures(degree=degree), LinearRegression(fit_intercept=False)) + y_pred = np.empty((y_test.shape[0], n_boostraps)) + for i in range(n_boostraps): + x_, y_ = resample(x_train, y_train) + y_pred[:, i] = model.fit(x_, y_).predict(x_test).ravel() + + polydegree[degree] = degree + error[degree] = np.mean( np.mean((y_test - y_pred)**2, axis=1, keepdims=True) ) + bias[degree] = np.mean( (y_test - np.mean(y_pred, axis=1, keepdims=True))**2 ) + variance[degree] = np.mean( np.var(y_pred, axis=1, keepdims=True) ) + print('Polynomial degree:', degree) + print('Error:', error[degree]) + print('Bias^2:', bias[degree]) + print('Var:', variance[degree]) + print('{} >= {} + {} = {}'.format(error[degree], bias[degree], variance[degree], bias[degree]+variance[degree])) + +plt.plot(polydegree, error, label='Error') +plt.plot(polydegree, bias, label='bias') +plt.plot(polydegree, variance, label='Variance') +plt.legend() +plt.show() + + +# ## Summing up +# +# The bias-variance tradeoff summarizes the fundamental tension in +# machine learning, particularly supervised learning, between the +# complexity of a model and the amount of training data needed to train +# it. Since data is often limited, in practice it is often useful to +# use a less-complex model with higher bias, that is a model whose asymptotic +# performance is worse than another model because it is easier to +# train and less sensitive to sampling noise arising from having a +# finite-sized training dataset (smaller variance). +# +# The above equations tell us that in +# order to minimize the expected test error, we need to select a +# statistical learning method that simultaneously achieves low variance +# and low bias. Note that variance is inherently a nonnegative quantity, +# and squared bias is also nonnegative. Hence, we see that the expected +# test MSE can never lie below $Var(\epsilon)$, the irreducible error. +# +# What do we mean by the variance and bias of a statistical learning +# method? The variance refers to the amount by which our model would change if we +# estimated it using a different training data set. Since the training +# data are used to fit the statistical learning method, different +# training data sets will result in a different estimate. But ideally the +# estimate for our model should not vary too much between training +# sets. However, if a method has high variance then small changes in +# the training data can result in large changes in the model. In general, more +# flexible statistical methods have higher variance. +# +# You may also find this recent [article](https://www.pnas.org/content/116/32/15849) of interest. + +# ## Another Example from Scikit-Learn's Repository + +# In[5]: + + +""" +============================ +Underfitting vs. Overfitting +============================ + +This example demonstrates the problems of underfitting and overfitting and +how we can use linear regression with polynomial features to approximate +nonlinear functions. The plot shows the function that we want to approximate, +which is a part of the cosine function. In addition, the samples from the +real function and the approximations of different models are displayed. The +models have polynomial features of different degrees. We can see that a +linear function (polynomial with degree 1) is not sufficient to fit the +training samples. This is called **underfitting**. A polynomial of degree 4 +approximates the true function almost perfectly. However, for higher degrees +the model will **overfit** the training data, i.e. it learns the noise of the +training data. +We evaluate quantitatively **overfitting** / **underfitting** by using +cross-validation. We calculate the mean squared error (MSE) on the validation +set, the higher, the less likely the model generalizes correctly from the +training data. +""" + +print(__doc__) + +import numpy as np +import matplotlib.pyplot as plt +from sklearn.pipeline import Pipeline +from sklearn.preprocessing import PolynomialFeatures +from sklearn.linear_model import LinearRegression +from sklearn.model_selection import cross_val_score + + +def true_fun(X): + return np.cos(1.5 * np.pi * X) + +np.random.seed(0) + +n_samples = 30 +degrees = [1, 4, 15] + +X = np.sort(np.random.rand(n_samples)) +y = true_fun(X) + np.random.randn(n_samples) * 0.1 + +plt.figure(figsize=(14, 5)) +for i in range(len(degrees)): + ax = plt.subplot(1, len(degrees), i + 1) + plt.setp(ax, xticks=(), yticks=()) + + polynomial_features = PolynomialFeatures(degree=degrees[i], + include_bias=False) + linear_regression = LinearRegression() + pipeline = Pipeline([("polynomial_features", polynomial_features), + ("linear_regression", linear_regression)]) + pipeline.fit(X[:, np.newaxis], y) + + # Evaluate the models using crossvalidation + scores = cross_val_score(pipeline, X[:, np.newaxis], y, + scoring="neg_mean_squared_error", cv=10) + + X_test = np.linspace(0, 1, 100) + plt.plot(X_test, pipeline.predict(X_test[:, np.newaxis]), label="Model") + plt.plot(X_test, true_fun(X_test), label="True function") + plt.scatter(X, y, edgecolor='b', s=20, label="Samples") + plt.xlabel("x") + plt.ylabel("y") + plt.xlim((0, 1)) + plt.ylim((-2, 2)) + plt.legend(loc="best") + plt.title("Degree {}\nMSE = {:.2e}(+/- {:.2e})".format( + degrees[i], -scores.mean(), scores.std())) +plt.show() + + +# ## Various steps in cross-validation +# +# When the repetitive splitting of the data set is done randomly, +# samples may accidently end up in a fast majority of the splits in +# either training or test set. Such samples may have an unbalanced +# influence on either model building or prediction evaluation. To avoid +# this $k$-fold cross-validation structures the data splitting. The +# samples are divided into $k$ more or less equally sized exhaustive and +# mutually exclusive subsets. In turn (at each split) one of these +# subsets plays the role of the test set while the union of the +# remaining subsets constitutes the training set. Such a splitting +# warrants a balanced representation of each sample in both training and +# test set over the splits. Still the division into the $k$ subsets +# involves a degree of randomness. This may be fully excluded when +# choosing $k=n$. This particular case is referred to as leave-one-out +# cross-validation (LOOCV). + +# ## Cross-validation in brief +# +# For the various values of $k$ +# +# 1. shuffle the dataset randomly. +# +# 2. Split the dataset into $k$ groups. +# +# 3. For each unique group: +# +# a. Decide which group to use as set for test data +# +# b. Take the remaining groups as a training data set +# +# c. Fit a model on the training set and evaluate it on the test set +# +# d. Retain the evaluation score and discard the model +# +# 5. Summarize the model using the sample of model evaluation scores + +# ## Code Example for Cross-validation and $k$-fold Cross-validation +# +# The code here uses Ridge regression with cross-validation (CV) resampling and $k$-fold CV in order to fit a specific polynomial. + +# In[6]: + + +import numpy as np +import matplotlib.pyplot as plt +from sklearn.model_selection import KFold +from sklearn.linear_model import Ridge +from sklearn.model_selection import cross_val_score +from sklearn.preprocessing import PolynomialFeatures + +# A seed just to ensure that the random numbers are the same for every run. +# Useful for eventual debugging. +np.random.seed(3155) + +# Generate the data. +nsamples = 100 +x = np.random.randn(nsamples) +y = 3*x**2 + np.random.randn(nsamples) + +## Cross-validation on Ridge regression using KFold only + +# Decide degree on polynomial to fit +poly = PolynomialFeatures(degree = 6) + +# Decide which values of lambda to use +nlambdas = 500 +lambdas = np.logspace(-3, 5, nlambdas) + +# Initialize a KFold instance +k = 5 +kfold = KFold(n_splits = k) + +# Perform the cross-validation to estimate MSE +scores_KFold = np.zeros((nlambdas, k)) + +i = 0 +for lmb in lambdas: + ridge = Ridge(alpha = lmb) + j = 0 + for train_inds, test_inds in kfold.split(x): + xtrain = x[train_inds] + ytrain = y[train_inds] + + xtest = x[test_inds] + ytest = y[test_inds] + + Xtrain = poly.fit_transform(xtrain[:, np.newaxis]) + ridge.fit(Xtrain, ytrain[:, np.newaxis]) + + Xtest = poly.fit_transform(xtest[:, np.newaxis]) + ypred = ridge.predict(Xtest) + + scores_KFold[i,j] = np.sum((ypred - ytest[:, np.newaxis])**2)/np.size(ypred) + + j += 1 + i += 1 + + +estimated_mse_KFold = np.mean(scores_KFold, axis = 1) + +## Cross-validation using cross_val_score from sklearn along with KFold + +# kfold is an instance initialized above as: +# kfold = KFold(n_splits = k) + +estimated_mse_sklearn = np.zeros(nlambdas) +i = 0 +for lmb in lambdas: + ridge = Ridge(alpha = lmb) + + X = poly.fit_transform(x[:, np.newaxis]) + estimated_mse_folds = cross_val_score(ridge, X, y[:, np.newaxis], scoring='neg_mean_squared_error', cv=kfold) + + # cross_val_score return an array containing the estimated negative mse for every fold. + # we have to the the mean of every array in order to get an estimate of the mse of the model + estimated_mse_sklearn[i] = np.mean(-estimated_mse_folds) + + i += 1 + +## Plot and compare the slightly different ways to perform cross-validation + +plt.figure() + +plt.plot(np.log10(lambdas), estimated_mse_sklearn, label = 'cross_val_score') +plt.plot(np.log10(lambdas), estimated_mse_KFold, 'r--', label = 'KFold') + +plt.xlabel('log10(lambda)') +plt.ylabel('mse') + +plt.legend() + +plt.show() + + +# ## More examples on bootstrap and cross-validation and errors + +# In[7]: + + +# Common imports +import os +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +from sklearn.linear_model import LinearRegression, Ridge, Lasso +from sklearn.model_selection import train_test_split +from sklearn.utils import resample +from sklearn.metrics import mean_squared_error +# Where to save the figures and data files +PROJECT_ROOT_DIR = "Results" +FIGURE_ID = "Results/FigureFiles" +DATA_ID = "DataFiles/" + +if not os.path.exists(PROJECT_ROOT_DIR): + os.mkdir(PROJECT_ROOT_DIR) + +if not os.path.exists(FIGURE_ID): + os.makedirs(FIGURE_ID) + +if not os.path.exists(DATA_ID): + os.makedirs(DATA_ID) + +def image_path(fig_id): + return os.path.join(FIGURE_ID, fig_id) + +def data_path(dat_id): + return os.path.join(DATA_ID, dat_id) + +def save_fig(fig_id): + plt.savefig(image_path(fig_id) + ".png", format='png') + +infile = open(data_path("EoS.csv"),'r') + +# Read the EoS data as csv file and organize the data into two arrays with density and energies +EoS = pd.read_csv(infile, names=('Density', 'Energy')) +EoS['Energy'] = pd.to_numeric(EoS['Energy'], errors='coerce') +EoS = EoS.dropna() +Energies = EoS['Energy'] +Density = EoS['Density'] +# The design matrix now as function of various polytrops + +Maxpolydegree = 30 +X = np.zeros((len(Density),Maxpolydegree)) +X[:,0] = 1.0 +testerror = np.zeros(Maxpolydegree) +trainingerror = np.zeros(Maxpolydegree) +polynomial = np.zeros(Maxpolydegree) + +trials = 100 +for polydegree in range(1, Maxpolydegree): + polynomial[polydegree] = polydegree + for degree in range(polydegree): + X[:,degree] = Density**(degree/3.0) + +# loop over trials in order to estimate the expectation value of the MSE + testerror[polydegree] = 0.0 + trainingerror[polydegree] = 0.0 + for samples in range(trials): + x_train, x_test, y_train, y_test = train_test_split(X, Energies, test_size=0.2) + model = LinearRegression(fit_intercept=False).fit(x_train, y_train) + ypred = model.predict(x_train) + ytilde = model.predict(x_test) + testerror[polydegree] += mean_squared_error(y_test, ytilde) + trainingerror[polydegree] += mean_squared_error(y_train, ypred) + + testerror[polydegree] /= trials + trainingerror[polydegree] /= trials + print("Degree of polynomial: %3d"% polynomial[polydegree]) + print("Mean squared error on training data: %.8f" % trainingerror[polydegree]) + print("Mean squared error on test data: %.8f" % testerror[polydegree]) + +plt.plot(polynomial, np.log10(trainingerror), label='Training Error') +plt.plot(polynomial, np.log10(testerror), label='Test Error') +plt.xlabel('Polynomial degree') +plt.ylabel('log10[MSE]') +plt.legend() +plt.show() + + +# Note that we kept the intercept column in the fitting here. This means that we need to set the **intercept** in the call to the **Scikit-Learn** function as **False**. Alternatively, we could have set up the design matrix $X$ without the first column of ones. + +# ## The same example but now with cross-validation +# +# In this example we keep the intercept column again but add cross-validation in order to estimate the best possible value of the means squared error. + +# In[8]: + + +# Common imports +import os +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +from sklearn.linear_model import LinearRegression, Ridge, Lasso +from sklearn.metrics import mean_squared_error +from sklearn.model_selection import KFold +from sklearn.model_selection import cross_val_score + + +# Where to save the figures and data files +PROJECT_ROOT_DIR = "Results" +FIGURE_ID = "Results/FigureFiles" +DATA_ID = "DataFiles/" + +if not os.path.exists(PROJECT_ROOT_DIR): + os.mkdir(PROJECT_ROOT_DIR) + +if not os.path.exists(FIGURE_ID): + os.makedirs(FIGURE_ID) + +if not os.path.exists(DATA_ID): + os.makedirs(DATA_ID) + +def image_path(fig_id): + return os.path.join(FIGURE_ID, fig_id) + +def data_path(dat_id): + return os.path.join(DATA_ID, dat_id) + +def save_fig(fig_id): + plt.savefig(image_path(fig_id) + ".png", format='png') + +infile = open(data_path("EoS.csv"),'r') + +# Read the EoS data as csv file and organize the data into two arrays with density and energies +EoS = pd.read_csv(infile, names=('Density', 'Energy')) +EoS['Energy'] = pd.to_numeric(EoS['Energy'], errors='coerce') +EoS = EoS.dropna() +Energies = EoS['Energy'] +Density = EoS['Density'] +# The design matrix now as function of various polytrops + +Maxpolydegree = 30 +X = np.zeros((len(Density),Maxpolydegree)) +X[:,0] = 1.0 +estimated_mse_sklearn = np.zeros(Maxpolydegree) +polynomial = np.zeros(Maxpolydegree) +k =5 +kfold = KFold(n_splits = k) + +for polydegree in range(1, Maxpolydegree): + polynomial[polydegree] = polydegree + for degree in range(polydegree): + X[:,degree] = Density**(degree/3.0) + OLS = LinearRegression(fit_intercept=False) +# loop over trials in order to estimate the expectation value of the MSE + estimated_mse_folds = cross_val_score(OLS, X, Energies, scoring='neg_mean_squared_error', cv=kfold) +#[:, np.newaxis] + estimated_mse_sklearn[polydegree] = np.mean(-estimated_mse_folds) + +plt.plot(polynomial, np.log10(estimated_mse_sklearn), label='Test Error') +plt.xlabel('Polynomial degree') +plt.ylabel('log10[MSE]') +plt.legend() +plt.show() + + +# ## Notes on scaling with examples +# +# The programs here use both ordinrary least squares (OLS) and Ridge +# regression with one value only for the hyperparameter $\lambda$. The +# first example has no scaling and includes the intercept as well and we +# are trying to fit a second-order polynomial. The second code takes out +# the intercept and subtracts the mean values of each column of the +# design matrix and the mean value of the outputs. +# +# The third and final code uses **Scikit-Learn** as library in order to +# calculate the optimal parameters for OLS and Ridge regression. Note +# that it is highly recommended to not include the intercept in Ridge +# and Lasso regression, in order to avoid penalizing the optimization by +# the intercept. The second and third codes do thus not include the +# intercept. In the second code we do the scaling ourselves while the +# last code uses the standard scaler option included in **Scikit-Learn**, known as centering (where +# we subtract the mean values). + +# In[9]: + + +import matplotlib.pyplot as plt +import numpy as np +from sklearn.linear_model import LinearRegression +from sklearn.preprocessing import PolynomialFeatures +from sklearn.model_selection import train_test_split +from sklearn.preprocessing import StandardScaler + +def MSE(y_data,y_model): + n = np.size(y_model) + return np.sum((y_data-y_model)**2)/n + +def OLS_fit_beta(X, y): + return np.linalg.pinv(X.T @ X) @ X.T @ y + +def Ridge_fit_beta(X, y,L,d): + I = np.eye(d,d) + return np.linalg.pinv(X.T @ X + L*I) @ X.T @ y + +# Same random numbers for each test. +np.random.seed(2018) +n = 100 +d = 3 +# hyperparameter lambda +Lambda = 0.01 + +# Make data set, simple second-order polynomial +x = np.linspace(-3, 3, n) +y = 2.0 + 0.5*x + 5.0*(x**2)+ np.random.randn(n) + +# The design matrix X includes the intercept and no scaling is made +X = np.zeros((len(x), d)) +for p in range(d): + X[:, p] = x ** (p) + + +#Split data, no scaling is used and we include the intercept +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) + + +#Calculate beta, own code +beta_OLS = OLS_fit_beta(X_train, y_train) +beta_Ridge = Ridge_fit_beta(X_train, y_train,Lambda,d) +print(beta_OLS) +print(beta_Ridge) +#predict value +ytilde_test_OLS = X_test @ beta_OLS +ytilde_test_Ridge = X_test @ beta_Ridge + +#Calculate MSE +print(" ") +print("test MSE of OLS:") +print(MSE(y_test,ytilde_test_OLS)) +print(" ") +print("test MSE of Ridge") +print(MSE(y_test,ytilde_test_Ridge)) + +plt.scatter(x,y,label='Data') +plt.plot(x, X @ beta_OLS,'*', label="OLS_Fit") +plt.plot(x, X @ beta_Ridge, label="Ridge_Fit") +plt.grid() +plt.legend() +plt.show() + + +# In this example we do not include the intercept and we scale the data by subtracting the mean values. This follows the discussion in the [lecture material](https://compphysics.github.io/MachineLearning/doc/LectureNotes/_build/html/chapter3.html#more-on-rescaling-data). +# see also the weekly slides [for week 36](https://compphysics.github.io/MachineLearning/doc/pub/week36/html/._week36-bs029.html). +# It is recommended whrn we use Ridge and Lasso regression to not include the intercept in the optimization process. +# +# Before we discuss the code, we repeat some of the basic math from the slides of week 36. +# +# Let us try to understand what this may imply mathematically when we +# subtract the mean values, also known as *zero centering* or simply *centering*. For +# simplicity, we will focus on ordinary regression, as done in the above example. +# +# The cost/loss function for regression is + +# $$ +# C(\beta_0, \beta_1, ... , \beta_{p-1}) = \frac{1}{n}\sum_{i=0}^{n} \left(y_i - \beta_0 - \sum_{j=1}^{p-1} X_{ij}\beta_j\right)^2,. +# $$ + +# Recall also that we use the squared value. This expression can lead to an +# increased penalty for higher differences between predicted and +# output/target values. +# +# What we have done is to single out the $\beta_0$ term in the +# definition of the mean squared error (MSE). The design matrix $X$ +# does in this case not contain any intercept column. When we take the +# derivative with respect to $\beta_0$, we want the derivative to obey + +# $$ +# \frac{\partial C}{\partial \beta_j} = 0, +# $$ + +# for all $j$. For $\beta_0$ we have + +# $$ +# \frac{\partial C}{\partial \beta_0} = -\frac{2}{n}\sum_{i=0}^{n-1} \left(y_i - \beta_0 - \sum_{j=1}^{p-1} X_{ij} \beta_j\right). +# $$ + +# Multiplying away the constant $2/n$, we obtain + +# $$ +# \sum_{i=0}^{n-1} \beta_0 = \sum_{i=0}^{n-1}y_i - \sum_{i=0}^{n-1} \sum_{j=1}^{p-1} X_{ij} \beta_j. +# $$ + +# Let us specialize first to the case where we have only two parameters $\beta_0$ and $\beta_1$. +# Our result for $\beta_0$ simplifies then to + +# $$ +# n\beta_0 = \sum_{i=0}^{n-1}y_i - \sum_{i=0}^{n-1} X_{i1} \beta_1. +# $$ + +# We obtain then + +# $$ +# \beta_0 = \frac{1}{n}\sum_{i=0}^{n-1}y_i - \beta_1\frac{1}{n}\sum_{i=0}^{n-1} X_{i1}. +# $$ + +# If we define + +# $$ +# \mu_{\boldsymbol{x}_1}=\frac{1}{n}\sum_{i=0}^{n-1} X_{i1}, +# $$ + +# and the mean value of the outputs as + +# $$ +# \mu_y=\frac{1}{n}\sum_{i=0}^{n-1}y_i, +# $$ + +# we have + +# $$ +# \beta_0 = \mu_y - \beta_1\mu_{\boldsymbol{x}_1}. +# $$ + +# In the general case with more parameters than $\beta_0$ and $\beta_1$, we have + +# $$ +# \beta_0 = \frac{1}{n}\sum_{i=0}^{n-1}y_i - \frac{1}{n}\sum_{i=0}^{n-1}\sum_{j=1}^{p-1} X_{ij}\beta_j. +# $$ + +# We can rewrite the latter equation as + +# $$ +# \beta_0 = \frac{1}{n}\sum_{i=0}^{n-1}y_i - \sum_{j=1}^{p-1} \mu_{\boldsymbol{x}_j}\beta_j, +# $$ + +# where we have defined + +# $$ +# \mu_{\boldsymbol{x}_j}=\frac{1}{n}\sum_{i=0}^{n-1} X_{ij}, +# $$ + +# the mean value for all elements of the column vector $\boldsymbol{x}_j$. +# +# Replacing $y_i$ with $y_i - y_i - \overline{\boldsymbol{y}}$ and centering also our design matrix results in a cost function (in vector-matrix disguise) + +# $$ +# C(\boldsymbol{\beta}) = (\boldsymbol{\tilde{y}} - \tilde{X}\boldsymbol{\beta})^T(\boldsymbol{\tilde{y}} - \tilde{X}\boldsymbol{\beta}). +# $$ + +# If we minimize with respect to $\boldsymbol{\beta}$ we have then + +# $$ +# \hat{\boldsymbol{\beta}} = (\tilde{X}^T\tilde{X})^{-1}\tilde{X}^T\boldsymbol{\tilde{y}}, +# $$ + +# where $\boldsymbol{\tilde{y}} = \boldsymbol{y} - \overline{\boldsymbol{y}}$ +# and $\tilde{X}_{ij} = X_{ij} - \frac{1}{n}\sum_{k=0}^{n-1}X_{kj}$. +# +# For Ridge regression we need to add $\lambda \boldsymbol{\beta}^T\boldsymbol{\beta}$ to the cost function and get then + +# $$ +# \hat{\boldsymbol{\beta}} = (\tilde{X}^T\tilde{X} + \lambda I)^{-1}\tilde{X}^T\boldsymbol{\tilde{y}}. +# $$ + +# Now we try to implement this. + +# In[10]: + + +np.random.seed(2018) +n = 100 +# we do not include the intercept +d = 2 +Lambda = 0.01 + +# Make data set. +x = np.linspace(-3, 3, n) +y = 2.0 + 0.5*x + 5.0*(x**2)+ np.random.randn(n) + +#Design matrix X does not include the intercept. +X = np.zeros((len(x), d)) +for p in range(d): + X[:, p] = x ** (p+1) + + +#Split data in train and test +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) + +# Scale data by subtracting mean value,own implementation +#For our own implementation, we will need to deal with the intercept by centering the design matrix and the target variable +X_train_mean = np.mean(X_train,axis=0) +#Center by removing mean from each feature +X_train_scaled = X_train - X_train_mean +X_test_scaled = X_test - X_train_mean +#The model intercept (called y_scaler) is given by the mean of the target variable (IF X is centered, note) +y_scaler = np.mean(y_train) +y_train_scaled = y_train - y_scaler + + +#Calculate beta +beta_OLS = OLS_fit_beta(X_train_scaled, y_train_scaled) +beta_Ridge = Ridge_fit_beta(X_train_scaled, y_train_scaled,Lambda,d) +print(beta_OLS) +print(beta_Ridge) +# calculate intercepts and print them +interceptOLS = y_scaler - X_train_mean @ beta_OLS +interceptRidge = y_scaler - X_train_mean @ beta_Ridge +print(interceptOLS) +print(interceptRidge) + +#predict value with intercept +ytilde_test_OLS = X_test_scaled @ beta_OLS+y_scaler +ytilde_test_Ridge = X_test_scaled @ beta_Ridge+y_scaler + + +#Calculate MSE + +print(" ") +print("test MSE of OLS:") +print(MSE(y_test,ytilde_test_OLS)) +print(" ") +print("test MSE of Ridge") +print(MSE(y_test,ytilde_test_Ridge)) + +plt.scatter(x,y,label='Data') +plt.plot(x, X @ beta_OLS+interceptOLS,'*', label="OLS_Fit") +plt.plot(x, X @ beta_Ridge+interceptRidge, label="Ridge_Fit") +plt.grid() +plt.legend() +plt.show() + + +# Finally, instead of using our own function we repeat the same example +# using the **standardscaler** functionality of the library +# **Scikit-Learn**. Here we limit ourselves to Ridge regression only. + +# In[11]: + + +from sklearn import linear_model +np.random.seed(2018) +n = 10 +d = 2 +Lambda = 0.01 + +# Make data set. +x = np.linspace(-3, 3, n) +y = 2.0 + 0.5*x + 5.0*(x**2)+ np.random.randn(n) + +# Design matrix X does not include the intercept. +X = np.zeros((n, d)) +for p in range(d): + X[:, p] = x ** (p+1) + +#Split data in train and test +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) +# Scale data by subtracting mean value of the input using scikit-learn +scaler = StandardScaler(with_std=False) +scaler.fit(X_train) +X_train_mean = np.mean(X_train,axis=0) +X_train_scaled = scaler.transform(X_train) +X_test_scaled = scaler.transform(X_test) +# We scale also the output, here by our own code +y_scaler = np.mean(y_train) +y_train_scaled = y_train - y_scaler +y_test_scaled = y_test- y_scaler + +#Calculate beta +OLS = LinearRegression() +betaOLS=OLS.fit(X_train_scaled,y_train_scaled) +ypredictOLS = OLS.predict(X_test_scaled) +linear_model.Ridge(Lambda) +RegRidge.fit(X_train_scaled,y_train_scaled) +ypredictRidge = RegRidge.predict(X_test_scaled) +betaOLS = OLS.coef_ +betaRidge = RegRidge.coef_ +print(betaOLS) +print(betaRidge) +interceptOLS = np.mean(y_train) - X_train_mean @ betaOLS +interceptRidge = y_scaler - X_train_mean @ betaRidge +print(interceptOLS) +print(interceptRidge) +#predict value +ytilde_test_Ridge = X_test_scaled @ betaRidge+y_scaler +ytilde_test_OLS = X_test_scaled @ betaOLS+y_scaler + +#Calculate MSE +print(" ") +print("test MSE of OLS") +print(MSE(y_test,ytilde_test_OLS)) +print(" ") +print("test MSE of Ridge") +print(MSE(y_test,ytilde_test_Ridge)) +plt.scatter(x,y,label='Data') +plt.plot(x, X @ RegRidge.coef_ + RegRidge.intercept_ , label="Ridge_Fit") +plt.grid() +plt.legend() +plt.show() + diff --git a/doc/LectureNotes/_build/jupyter_execute/week37_144_0.png b/doc/LectureNotes/_build/jupyter_execute/week37_144_0.png new file mode 100644 index 0000000000000000000000000000000000000000..f10c48c813cff7a4e8618d1fc7191f4e12135307 GIT binary patch literal 22451 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� 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�YExqHrtCzY%qoIkHO>WY5{=jkI{(LYmG%=SN$}H0b8#=Si+op z|9Z}o%E|=e^!UOq&*4^UpqU`o#h4Khfe{gl#*vCz&dA^0V8X% z8!do9yWRy_k&?rtwnh=LCCb;=H(B}7WTLH^w)TZLBO@D>j+dH3=vwSGdK-)@8#5Di z|N5<48=w@SKuvwFFMr3GfmLBEHS$|>fQnEJ@9H-;b~CJN)P0Zn_!J`&f^GifMP9YH zpciw@2E0Xq{Sgg7C)=yrTPJ18#v$0b{Buu$<=OxNrNp%aedd_A8~_?Ss0vL&w#Lq*==0$C>oI<;lWs;f)PU*Ubk%d>A+3(eYYfnc)tnB;^p3dRcdPDST2>< z-ICo&LKa&7D$Xu0qpa$trY4Bkg-lG^)@F_shK35Kz8p$TIVcy^U~GMBM> zA;~!N*g^`(OJgOZo7$UO#pL#f1_Hf)#*%a&EXcp;=0wL$yPp+&)BGS|S5ErO4b>g(H*!I~W| zC<%k*;Fs8VjIr6i-l{TKgmL8x!Ccr?>{_a$a6PhEnL>*_8J=FV6X0KSMj9O7xVln|h1-Z&%jFZdO6u#zaXuwh7lG=8=B)C3tS-FUCV$ z?p$mxq#i8yHZd_VQ*(2zPo8y`keT8M{?@rYXa3X#Z!fPS&+`W7+(5brm&;{>>%DX5 z4r^AK7-OmT7%tXEy>jvR7wPd&pY}l;q^AUE#*BTiB0FaFAQM{wO@?Ld?d`9MJl10O zAz#_s+n@9C>BGHWJ=mP`V&{x5x<1U97zT*0C=QXR8X67}(m9we2ESS@se!Gx z>{yvkUW?W^u}Sce`T6-iodV1=?fy7bX6O9!O$EORmZwD2PUeIX`7JzL3_+P1g`?{V z#A$3u{yU00-nx6Ic@k3indvVqPicE6rx1*XxV3ST`Rmr6Q&%wkfm>~Z4fCqRYt&H4 z&+u-R`pC<4lh|2hOh=`ja#;{ARx{75{l>u9u2;xCs?7$+irnYpI1njh#!Ki?I8l9V zWfM+zY}_=IlCwNkNA4*(&w+-7H}~&BdurBE;1WMxEfb&%0U3*rk1ttvZ}1JDuxLyF zFKPCLF=Op?R&u<0spoK%(L=ifr?4-97qi5dE|r7Yf`U&d(*9hxXuQ!MX(kfJTm@;bx>cIyydA($ea2)yR@V zhIG5@bM|KHgogLWWLp~>xw;sYyYNI{jJ#j${msG|pehfLivY?viH5K{gHLy93vkt2wN~Mx|ieHK9Y4JTl@umlruR(phkj z@6ewU4znR4A#8B-R2-aHdlDkhu~b;2pb+H~hTKGj>LeO-Cy$nt;?AAN@JHh`Phws1 zj;Ny(kZ9;)bFeZpGFtNK=GS+5S{O+=b}EntVN235COv$+=5w!BtRquC=Ue{iu3z$; z+iA3Q;xt?s8#*|n9p(D0+QNgkarjHUy5Y1wVR3qRA1aV|{cnz^|2V_`=UZ#ubd{Z7 zhQY;b_pp1OgLG7Zyo;^7Bqo%hFRARRN46spC?Z=`W0Fo|?kU50{QN}Hi_!4P#FL6` zB5)FBI}Wu^p*Hj0uhl*Nl9{$kC1ib@a?cXv;9a2K8rm1PrUs-5}o2-A-Y6X yxtt4bn)7qI7qIbR(^FcO%{1oEzWoeAjh; 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 z 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 OM@dfY4o=qC|Gxk)5vh>? literal 0 HcmV?d00001 diff --git a/doc/LectureNotes/_build/jupyter_execute/week37_162_4.png b/doc/LectureNotes/_build/jupyter_execute/week37_162_4.png new file mode 100644 index 0000000000000000000000000000000000000000..9ebeeb751d98423d9b258e19159cb5a21b7ea196 GIT binary patch literal 29329 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

    )#OL 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 literal 0 HcmV?d00001 diff --git a/doc/LectureNotes/_build/jupyter_execute/week37_165_1.png b/doc/LectureNotes/_build/jupyter_execute/week37_165_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a8501ad62df2b439edf840a3bc50b93c36adbf2c GIT binary patch literal 62168 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 Q+0O& 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 literal 0 HcmV?d00001 diff --git a/doc/LectureNotes/_build/jupyter_execute/week37_208_1.png b/doc/LectureNotes/_build/jupyter_execute/week37_208_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa3530a3cf7db499afbc957cc9c3b593c75873e GIT binary patch literal 33784 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 literal 0 HcmV?d00001 diff --git a/doc/LectureNotes/_toc.yml b/doc/LectureNotes/_toc.yml index fda6acb21..534e64c31 100644 --- a/doc/LectureNotes/_toc.yml +++ b/doc/LectureNotes/_toc.yml @@ -47,6 +47,8 @@ parts: - file: week35.ipynb - file: exercisesweek36.ipynb - file: week36.ipynb + - file: exercisesweek37.ipynb + - file: week37.ipynb - caption: Projects numbered: false chapters: diff --git a/doc/LectureNotes/week37.ipynb b/doc/LectureNotes/week37.ipynb new file mode 100644 index 000000000..94e3e70ef --- /dev/null +++ b/doc/LectureNotes/week37.ipynb @@ -0,0 +1,3533 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "672fea2a", + "metadata": { + "editable": true + }, + "source": [ + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "479a6913", + "metadata": { + "editable": true + }, + "source": [ + "# Week 37: Statistical interpretations and Resampling Methods\n", + "**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and Facility for Rare Isotope Beams, Michigan State University\n", + "\n", + "Date: **September 9, 2024**\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "10b8f456", + "metadata": { + "editable": true + }, + "source": [ + "## Plans for week 37\n", + "\n", + "**Material for the lecture on Monday September 9.**\n", + "\n", + "\n", + "\n", + " * Resampling techniques, Bootstrap and cross validation and bias-variance tradeoff\n", + "\n", + " * Statistical interpretation of Ridge and Lasso regression\n", + "\n", + " * Readings and Videos:\n", + "\n", + " * Hastie et al Chapter 7, here we recommend 7.1-7.5 and 7.10 (cross-validation) and 7.11 (bootstrap). \n", + "\n", + " * [Video on cross validation](https://www.youtube.com/watch?v=fSytzGwwBVw)\n", + "\n", + " * [Video on Bootstrapping](https://www.youtube.com/watch?v=Xz0x-8-cgaQ)\n", + "\n", + " * [Video on bias-variance tradeoff](https://www.youtube.com/watch?v=EuBBz3bI-aA)\n", + "\n", + "**Material for the active learning sessions on Tuesday and Wednesday.**\n", + "\n", + " * Calculations of expectation values\n", + "\n", + " * Exercise set for week 37\n", + "\n", + " * Work on project 1\n", + "\n", + " * See also additional note on scaling (jupyter-notebook) sent separately. This will be discussed during the first hour of each session. This note is added at the end of these slides.\n", + "\n", + " * For more discussions of Ridge regression and calculation of averages, [Wessel van Wieringen's](https://arxiv.org/abs/1509.09169) article is highly recommended." + ] + }, + { + "cell_type": "markdown", + "id": "f7e43b1b", + "metadata": { + "editable": true + }, + "source": [ + "## Material from last week and relevant for the weekly exercises" + ] + }, + { + "cell_type": "markdown", + "id": "af6a447a", + "metadata": { + "editable": true + }, + "source": [ + "## Linking the regression analysis with a statistical interpretation\n", + "\n", + "We will now couple the discussions of ordinary least squares, Ridge\n", + "and Lasso regression with a statistical interpretation, that is we\n", + "move from a linear algebra analysis to a statistical analysis. In\n", + "particular, we will focus on what the regularization terms can result\n", + "in. We will amongst other things show that the regularization\n", + "parameter can reduce considerably the variance of the parameters\n", + "$\\beta$.\n", + "\n", + "The\n", + "advantage of doing linear regression is that we actually end up with\n", + "analytical expressions for several statistical quantities. \n", + "Standard least squares and Ridge regression allow us to\n", + "derive quantities like the variance and other expectation values in a\n", + "rather straightforward way.\n", + "\n", + "It is assumed that $\\varepsilon_i\n", + "\\sim \\mathcal{N}(0, \\sigma^2)$ and the $\\varepsilon_{i}$ are\n", + "independent, i.e.:" + ] + }, + { + "cell_type": "markdown", + "id": "b6b7ea38", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\begin{align*} \n", + "\\mbox{Cov}(\\varepsilon_{i_1},\n", + "\\varepsilon_{i_2}) & = \\left\\{ \\begin{array}{lcc} \\sigma^2 & \\mbox{if}\n", + "& i_1 = i_2, \\\\ 0 & \\mbox{if} & i_1 \\not= i_2. \\end{array} \\right.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "e53d8d41", + "metadata": { + "editable": true + }, + "source": [ + "The randomness of $\\varepsilon_i$ implies that\n", + "$\\mathbf{y}_i$ is also a random variable. In particular,\n", + "$\\mathbf{y}_i$ is normally distributed, because $\\varepsilon_i \\sim\n", + "\\mathcal{N}(0, \\sigma^2)$ and $\\mathbf{X}_{i,\\ast} \\, \\boldsymbol{\\beta}$ is a\n", + "non-random scalar. To specify the parameters of the distribution of\n", + "$\\mathbf{y}_i$ we need to calculate its first two moments. \n", + "\n", + "Recall that $\\boldsymbol{X}$ is a matrix of dimensionality $n\\times p$. The\n", + "notation above $\\mathbf{X}_{i,\\ast}$ means that we are looking at the\n", + "row number $i$ and perform a sum over all values $p$." + ] + }, + { + "cell_type": "markdown", + "id": "401644e7", + "metadata": { + "editable": true + }, + "source": [ + "## Assumptions made\n", + "\n", + "The assumption we have made here can be summarized as (and this is going to be useful when we discuss the bias-variance trade off)\n", + "that there exists a function $f(\\boldsymbol{x})$ and a normal distributed error $\\boldsymbol{\\varepsilon}\\sim \\mathcal{N}(0, \\sigma^2)$\n", + "which describe our data" + ] + }, + { + "cell_type": "markdown", + "id": "0603387c", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{y} = f(\\boldsymbol{x})+\\boldsymbol{\\varepsilon}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "eb2b6edf", + "metadata": { + "editable": true + }, + "source": [ + "We approximate this function with our model from the solution of the linear regression equations, that is our\n", + "function $f$ is approximated by $\\boldsymbol{\\tilde{y}}$ where we want to minimize $(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2$, our MSE, with" + ] + }, + { + "cell_type": "markdown", + "id": "f1a08194", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{\\tilde{y}} = \\boldsymbol{X}\\boldsymbol{\\beta}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "ad40fa0b", + "metadata": { + "editable": true + }, + "source": [ + "## Expectation value and variance\n", + "\n", + "We can calculate the expectation value of $\\boldsymbol{y}$ for a given element $i$" + ] + }, + { + "cell_type": "markdown", + "id": "d3a4907d", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\begin{align*} \n", + "\\mathbb{E}(y_i) & =\n", + "\\mathbb{E}(\\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta}) + \\mathbb{E}(\\varepsilon_i)\n", + "\\, \\, \\, = \\, \\, \\, \\mathbf{X}_{i, \\ast} \\, \\beta, \n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "d7908c9c", + "metadata": { + "editable": true + }, + "source": [ + "while\n", + "its variance is" + ] + }, + { + "cell_type": "markdown", + "id": "2528f74e", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\begin{align*} \\mbox{Var}(y_i) & = \\mathbb{E} \\{ [y_i\n", + "- \\mathbb{E}(y_i)]^2 \\} \\, \\, \\, = \\, \\, \\, \\mathbb{E} ( y_i^2 ) -\n", + "[\\mathbb{E}(y_i)]^2 \\\\ & = \\mathbb{E} [ ( \\mathbf{X}_{i, \\ast} \\,\n", + "\\beta + \\varepsilon_i )^2] - ( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta})^2 \\\\ &\n", + "= \\mathbb{E} [ ( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta})^2 + 2 \\varepsilon_i\n", + "\\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta} + \\varepsilon_i^2 ] - ( \\mathbf{X}_{i,\n", + "\\ast} \\, \\beta)^2 \\\\ & = ( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta})^2 + 2\n", + "\\mathbb{E}(\\varepsilon_i) \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta} +\n", + "\\mathbb{E}(\\varepsilon_i^2 ) - ( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta})^2 \n", + "\\\\ & = \\mathbb{E}(\\varepsilon_i^2 ) \\, \\, \\, = \\, \\, \\,\n", + "\\mbox{Var}(\\varepsilon_i) \\, \\, \\, = \\, \\, \\, \\sigma^2. \n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "525f3a59", + "metadata": { + "editable": true + }, + "source": [ + "Hence, $y_i \\sim \\mathcal{N}( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta}, \\sigma^2)$, that is $\\boldsymbol{y}$ follows a normal distribution with \n", + "mean value $\\boldsymbol{X}\\boldsymbol{\\beta}$ and variance $\\sigma^2$ (not be confused with the singular values of the SVD)." + ] + }, + { + "cell_type": "markdown", + "id": "ead1d419", + "metadata": { + "editable": true + }, + "source": [ + "## Expectation value and variance for $\\boldsymbol{\\beta}$\n", + "\n", + "With the OLS expressions for the optimal parameters $\\boldsymbol{\\hat{\\beta}}$ we can evaluate the expectation value" + ] + }, + { + "cell_type": "markdown", + "id": "e471f7ab", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}(\\boldsymbol{\\hat{\\beta}}) = \\mathbb{E}[ (\\mathbf{X}^{\\top} \\mathbf{X})^{-1}\\mathbf{X}^{T} \\mathbf{Y}]=(\\mathbf{X}^{T} \\mathbf{X})^{-1}\\mathbf{X}^{T} \\mathbb{E}[ \\mathbf{Y}]=(\\mathbf{X}^{T} \\mathbf{X})^{-1} \\mathbf{X}^{T}\\mathbf{X}\\boldsymbol{\\beta}=\\boldsymbol{\\beta}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "7886e97f", + "metadata": { + "editable": true + }, + "source": [ + "This means that the estimator of the regression parameters is unbiased.\n", + "\n", + "We can also calculate the variance\n", + "\n", + "The variance of the optimal value $\\boldsymbol{\\hat{\\beta}}$ is" + ] + }, + { + "cell_type": "markdown", + "id": "49c32ca5", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\mbox{Var}(\\boldsymbol{\\hat{\\beta}}) & = & \\mathbb{E} \\{ [\\boldsymbol{\\beta} - \\mathbb{E}(\\boldsymbol{\\beta})] [\\boldsymbol{\\beta} - \\mathbb{E}(\\boldsymbol{\\beta})]^{T} \\}\n", + "\\\\\n", + "& = & \\mathbb{E} \\{ [(\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\mathbf{y} - \\boldsymbol{\\beta}] \\, [(\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\mathbf{y} - \\boldsymbol{\\beta}]^{T} \\}\n", + "\\\\\n", + "% & = & \\mathbb{E} \\{ [(\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\mathbf{y}] \\, [(\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\mathbf{y}]^{T} \\} - \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T}\n", + "% \\\\\n", + "% & = & \\mathbb{E} \\{ (\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\mathbf{y} \\, \\mathbf{y}^{T} \\, \\mathbf{X} \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1} \\} - \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T}\n", + "% \\\\\n", + "& = & (\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\, \\mathbb{E} \\{ \\mathbf{y} \\, \\mathbf{y}^{T} \\} \\, \\mathbf{X} \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1} - \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T}\n", + "\\\\\n", + "& = & (\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\, \\{ \\mathbf{X} \\, \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T} \\, \\mathbf{X}^{T} + \\sigma^2 \\} \\, \\mathbf{X} \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1} - \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T}\n", + "% \\\\\n", + "% & = & (\\mathbf{X}^T \\mathbf{X})^{-1} \\, \\mathbf{X}^T \\, \\mathbf{X} \\, \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^T \\, \\mathbf{X}^T \\, \\mathbf{X} \\, (\\mathbf{X}^T % \\mathbf{X})^{-1}\n", + "% \\\\\n", + "% & & + \\, \\, \\sigma^2 \\, (\\mathbf{X}^T \\mathbf{X})^{-1} \\, \\mathbf{X}^T \\, \\mathbf{X} \\, (\\mathbf{X}^T \\mathbf{X})^{-1} - \\boldsymbol{\\beta} \\boldsymbol{\\beta}^T\n", + "\\\\\n", + "& = & \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T} + \\sigma^2 \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1} - \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T}\n", + "\\, \\, \\, = \\, \\, \\, \\sigma^2 \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1},\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "9bd27980", + "metadata": { + "editable": true + }, + "source": [ + "where we have used that $\\mathbb{E} (\\mathbf{y} \\mathbf{y}^{T}) =\n", + "\\mathbf{X} \\, \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T} \\, \\mathbf{X}^{T} +\n", + "\\sigma^2 \\, \\mathbf{I}_{nn}$. From $\\mbox{Var}(\\boldsymbol{\\beta}) = \\sigma^2\n", + "\\, (\\mathbf{X}^{T} \\mathbf{X})^{-1}$, one obtains an estimate of the\n", + "variance of the estimate of the $j$-th regression coefficient:\n", + "$\\boldsymbol{\\sigma}^2 (\\boldsymbol{\\beta}_j ) = \\boldsymbol{\\sigma}^2 [(\\mathbf{X}^{T} \\mathbf{X})^{-1}]_{jj} $. This may be used to\n", + "construct a confidence interval for the estimates.\n", + "\n", + "In a similar way, we can obtain analytical expressions for say the\n", + "expectation values of the parameters $\\boldsymbol{\\beta}$ and their variance\n", + "when we employ Ridge regression, allowing us again to define a confidence interval. \n", + "\n", + "It is rather straightforward to show that" + ] + }, + { + "cell_type": "markdown", + "id": "184f9c3b", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E} \\big[ \\hat{\\boldsymbol{\\beta}}^{\\mathrm{Ridge}} \\big]=(\\mathbf{X}^{T} \\mathbf{X} + \\lambda \\mathbf{I}_{pp})^{-1} (\\mathbf{X}^{\\top} \\mathbf{X})\\boldsymbol{\\beta}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "d0f46be1", + "metadata": { + "editable": true + }, + "source": [ + "We see clearly that \n", + "$\\mathbb{E} \\big[ \\hat{\\boldsymbol{\\beta}}^{\\mathrm{Ridge}} \\big] \\not= \\hat{\\boldsymbol{\\beta}}^{\\mathrm{OLS}}$ for any $\\lambda > 0$.\n", + "\n", + "We can also compute the variance as" + ] + }, + { + "cell_type": "markdown", + "id": "03e3ac5f", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mbox{Var}[\\hat{\\boldsymbol{\\beta}}^{\\mathrm{Ridge}}]=\\sigma^2[ \\mathbf{X}^{T} \\mathbf{X} + \\lambda \\mathbf{I} ]^{-1} \\mathbf{X}^{T} \\mathbf{X} \\{ [ \\mathbf{X}^{\\top} \\mathbf{X} + \\lambda \\mathbf{I} ]^{-1}\\}^{T},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "13ec2524", + "metadata": { + "editable": true + }, + "source": [ + "and it is easy to see that if the parameter $\\lambda$ goes to infinity then the variance of Ridge parameters $\\boldsymbol{\\beta}$ goes to zero. \n", + "\n", + "With this, we can compute the difference" + ] + }, + { + "cell_type": "markdown", + "id": "58c3f236", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mbox{Var}[\\hat{\\boldsymbol{\\beta}}^{\\mathrm{OLS}}]-\\mbox{Var}(\\hat{\\boldsymbol{\\beta}}^{\\mathrm{Ridge}})=\\sigma^2 [ \\mathbf{X}^{T} \\mathbf{X} + \\lambda \\mathbf{I} ]^{-1}[ 2\\lambda\\mathbf{I} + \\lambda^2 (\\mathbf{X}^{T} \\mathbf{X})^{-1} ] \\{ [ \\mathbf{X}^{T} \\mathbf{X} + \\lambda \\mathbf{I} ]^{-1}\\}^{T}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "bfcfc2a0", + "metadata": { + "editable": true + }, + "source": [ + "The difference is non-negative definite since each component of the\n", + "matrix product is non-negative definite. \n", + "This means the variance we obtain with the standard OLS will always for $\\lambda > 0$ be larger than the variance of $\\boldsymbol{\\beta}$ obtained with the Ridge estimator. This has interesting consequences when we discuss the so-called bias-variance trade-off below. \n", + "\n", + "For more discussions of Ridge regression and calculation of averages, [Wessel van Wieringen's](https://arxiv.org/abs/1509.09169) article is highly recommended." + ] + }, + { + "cell_type": "markdown", + "id": "f3a9f084", + "metadata": { + "editable": true + }, + "source": [ + "## Material for lecture Thursday September 14" + ] + }, + { + "cell_type": "markdown", + "id": "a4338936", + "metadata": { + "editable": true + }, + "source": [ + "## Deriving OLS from a probability distribution\n", + "\n", + "Our basic assumption when we derived the OLS equations was to assume\n", + "that our output is determined by a given continuous function\n", + "$f(\\boldsymbol{x})$ and a random noise $\\boldsymbol{\\epsilon}$ given by the normal\n", + "distribution with zero mean value and an undetermined variance\n", + "$\\sigma^2$.\n", + "\n", + "We found above that the outputs $\\boldsymbol{y}$ have a mean value given by\n", + "$\\boldsymbol{X}\\hat{\\boldsymbol{\\beta}}$ and variance $\\sigma^2$. Since the entries to\n", + "the design matrix are not stochastic variables, we can assume that the\n", + "probability distribution of our targets is also a normal distribution\n", + "but now with mean value $\\boldsymbol{X}\\hat{\\boldsymbol{\\beta}}$. This means that a\n", + "single output $y_i$ is given by the Gaussian distribution" + ] + }, + { + "cell_type": "markdown", + "id": "d7566301", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "y_i\\sim \\mathcal{N}(\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta}, \\sigma^2)=\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "c8af7fae", + "metadata": { + "editable": true + }, + "source": [ + "## Independent and Identically Distrubuted (iid)\n", + "\n", + "We assume now that the various $y_i$ values are stochastically distributed according to the above Gaussian distribution. \n", + "We define this distribution as" + ] + }, + { + "cell_type": "markdown", + "id": "959e33e8", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(y_i, \\boldsymbol{X}\\vert\\boldsymbol{\\beta})=\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "c847b78b", + "metadata": { + "editable": true + }, + "source": [ + "which reads as finding the likelihood of an event $y_i$ with the input variables $\\boldsymbol{X}$ given the parameters (to be determined) $\\boldsymbol{\\beta}$.\n", + "\n", + "Since these events are assumed to be independent and identicall distributed we can build the probability distribution function (PDF) for all possible event $\\boldsymbol{y}$ as the product of the single events, that is we have" + ] + }, + { + "cell_type": "markdown", + "id": "75c188ba", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{y},\\boldsymbol{X}\\vert\\boldsymbol{\\beta})=\\prod_{i=0}^{n-1}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}=\\prod_{i=0}^{n-1}p(y_i,\\boldsymbol{X}\\vert\\boldsymbol{\\beta}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "60b89ba3", + "metadata": { + "editable": true + }, + "source": [ + "We will write this in a more compact form reserving $\\boldsymbol{D}$ for the domain of events, including the ouputs (targets) and the inputs. That is\n", + "in case we have a simple one-dimensional input and output case" + ] + }, + { + "cell_type": "markdown", + "id": "fd5d5a54", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{D}=[(x_0,y_0), (x_1,y_1),\\dots, (x_{n-1},y_{n-1})].\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "56f25582", + "metadata": { + "editable": true + }, + "source": [ + "In the more general case the various inputs should be replaced by the possible features represented by the input data set $\\boldsymbol{X}$. \n", + "We can now rewrite the above probability as" + ] + }, + { + "cell_type": "markdown", + "id": "9974b303", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{D}\\vert\\boldsymbol{\\beta})=\\prod_{i=0}^{n-1}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "4112e053", + "metadata": { + "editable": true + }, + "source": [ + "It is a conditional probability (see below) and reads as the likelihood of a domain of events $\\boldsymbol{D}$ given a set of parameters $\\boldsymbol{\\beta}$." + ] + }, + { + "cell_type": "markdown", + "id": "7be4a14c", + "metadata": { + "editable": true + }, + "source": [ + "## Maximum Likelihood Estimation (MLE)\n", + "\n", + "In statistics, maximum likelihood estimation (MLE) is a method of\n", + "estimating the parameters of an assumed probability distribution,\n", + "given some observed data. This is achieved by maximizing a likelihood\n", + "function so that, under the assumed statistical model, the observed\n", + "data is the most probable. \n", + "\n", + "We will assume here that our events are given by the above Gaussian\n", + "distribution and we will determine the optimal parameters $\\beta$ by\n", + "maximizing the above PDF. However, computing the derivatives of a\n", + "product function is cumbersome and can easily lead to overflow and/or\n", + "underflowproblems, with potentials for loss of numerical precision.\n", + "\n", + "In practice, it is more convenient to maximize the logarithm of the\n", + "PDF because it is a monotonically increasing function of the argument.\n", + "Alternatively, and this will be our option, we will minimize the\n", + "negative of the logarithm since this is a monotonically decreasing\n", + "function.\n", + "\n", + "Note also that maximization/minimization of the logarithm of the PDF\n", + "is equivalent to the maximization/minimization of the function itself." + ] + }, + { + "cell_type": "markdown", + "id": "35078f48", + "metadata": { + "editable": true + }, + "source": [ + "## A new Cost Function\n", + "\n", + "We could now define a new cost function to minimize, namely the negative logarithm of the above PDF" + ] + }, + { + "cell_type": "markdown", + "id": "cb25ead1", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{\\beta}=-\\log{\\prod_{i=0}^{n-1}p(y_i,\\boldsymbol{X}\\vert\\boldsymbol{\\beta})}=-\\sum_{i=0}^{n-1}\\log{p(y_i,\\boldsymbol{X}\\vert\\boldsymbol{\\beta})},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "5cc80036", + "metadata": { + "editable": true + }, + "source": [ + "which becomes" + ] + }, + { + "cell_type": "markdown", + "id": "8ebc6099", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{\\beta}=\\frac{n}{2}\\log{2\\pi\\sigma^2}+\\frac{\\vert\\vert (\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta})\\vert\\vert_2^2}{2\\sigma^2}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "3160dff4", + "metadata": { + "editable": true + }, + "source": [ + "Taking the derivative of the *new* cost function with respect to the parameters $\\beta$ we recognize our familiar OLS equation, namely" + ] + }, + { + "cell_type": "markdown", + "id": "8a3aaa69", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{X}^T\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right) =0,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "7af6708c", + "metadata": { + "editable": true + }, + "source": [ + "which leads to the well-known OLS equation for the optimal paramters $\\beta$" + ] + }, + { + "cell_type": "markdown", + "id": "c82e095e", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\hat{\\boldsymbol{\\beta}}^{\\mathrm{OLS}}=\\left(\\boldsymbol{X}^T\\boldsymbol{X}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}!\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "9431eca4", + "metadata": { + "editable": true + }, + "source": [ + "Before we make a similar analysis for Ridge and Lasso regression, we need a short reminder on statistics." + ] + }, + { + "cell_type": "markdown", + "id": "1db6c222", + "metadata": { + "editable": true + }, + "source": [ + "## More basic Statistics and Bayes' theorem\n", + "\n", + "A central theorem in statistics is Bayes' theorem. This theorem plays a similar role as the good old Pythagoras' theorem in geometry.\n", + "Bayes' theorem is extremely simple to derive. But to do so we need some basic axioms from statistics.\n", + "\n", + "Assume we have two domains of events $X=[x_0,x_1,\\dots,x_{n-1}]$ and $Y=[y_0,y_1,\\dots,y_{n-1}]$.\n", + "\n", + "We define also the likelihood for $X$ and $Y$ as $p(X)$ and $p(Y)$ respectively.\n", + "The likelihood of a specific event $x_i$ (or $y_i$) is then written as $p(X=x_i)$ or just $p(x_i)=p_i$. \n", + "\n", + "**Union of events is given by.**" + ] + }, + { + "cell_type": "markdown", + "id": "98c457ce", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(X \\cup Y)= p(X)+p(Y)-p(X \\cap Y).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "b6a3893f", + "metadata": { + "editable": true + }, + "source": [ + "**The product rule (aka joint probability) is given by.**" + ] + }, + { + "cell_type": "markdown", + "id": "17f0e52e", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(X \\cup Y)= p(X,Y)= p(X\\vert Y)p(Y)=p(Y\\vert X)p(X),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "c2bfaea6", + "metadata": { + "editable": true + }, + "source": [ + "where we read $p(X\\vert Y)$ as the likelihood of obtaining $X$ given $Y$.\n", + "\n", + "If we have independent events then $p(X,Y)=p(X)p(Y)$." + ] + }, + { + "cell_type": "markdown", + "id": "377eefdf", + "metadata": { + "editable": true + }, + "source": [ + "## Marginal Probability\n", + "\n", + "The marginal probability is defined in terms of only one of the set of variables $X,Y$. For a discrete probability we have" + ] + }, + { + "cell_type": "markdown", + "id": "6da6253e", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(X)=\\sum_{i=0}^{n-1}p(X,Y=y_i)=\\sum_{i=0}^{n-1}p(X\\vert Y=y_i)p(Y=y_i)=\\sum_{i=0}^{n-1}p(X\\vert y_i)p(y_i).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "e5906b3e", + "metadata": { + "editable": true + }, + "source": [ + "## Conditional Probability\n", + "\n", + "The conditional probability, if $p(Y) > 0$, is" + ] + }, + { + "cell_type": "markdown", + "id": "792d292c", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(X\\vert Y)= \\frac{p(X,Y)}{p(Y)}=\\frac{p(X,Y)}{\\sum_{i=0}^{n-1}p(Y\\vert X=x_i)p(x_i)}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "c3bc0674", + "metadata": { + "editable": true + }, + "source": [ + "## Bayes' Theorem\n", + "\n", + "If we combine the conditional probability with the marginal probability and the standard product rule, we have" + ] + }, + { + "cell_type": "markdown", + "id": "0faadf3f", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(X\\vert Y)= \\frac{p(X,Y)}{p(Y)},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "a2d478a7", + "metadata": { + "editable": true + }, + "source": [ + "which we can rewrite as" + ] + }, + { + "cell_type": "markdown", + "id": "d51ac6ce", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(X\\vert Y)= \\frac{p(X,Y)}{\\sum_{i=0}^{n-1}p(Y\\vert X=x_i)p(x_i)}=\\frac{p(Y\\vert X)p(X)}{\\sum_{i=0}^{n-1}p(Y\\vert X=x_i)p(x_i)},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "91d489d9", + "metadata": { + "editable": true + }, + "source": [ + "which is Bayes' theorem. It allows us to evaluate the uncertainty in in $X$ after we have observed $Y$. We can easily interchange $X$ with $Y$." + ] + }, + { + "cell_type": "markdown", + "id": "ebe26b44", + "metadata": { + "editable": true + }, + "source": [ + "## Interpretations of Bayes' Theorem\n", + "\n", + "The quantity $p(Y\\vert X)$ on the right-hand side of the theorem is\n", + "evaluated for the observed data $Y$ and can be viewed as a function of\n", + "the parameter space represented by $X$. This function is not\n", + "necesseraly normalized and is normally called the likelihood function.\n", + "\n", + "The function $p(X)$ on the right hand side is called the prior while the function on the left hand side is the called the posterior probability. The denominator on the right hand side serves as a normalization factor for the posterior distribution.\n", + "\n", + "Let us try to illustrate Bayes' theorem through an example." + ] + }, + { + "cell_type": "markdown", + "id": "a67660e2", + "metadata": { + "editable": true + }, + "source": [ + "## Example of Usage of Bayes' theorem\n", + "\n", + "Let us suppose that you are undergoing a series of mammography scans in\n", + "order to rule out possible breast cancer cases. We define the\n", + "sensitivity for a positive event by the variable $X$. It takes binary\n", + "values with $X=1$ representing a positive event and $X=0$ being a\n", + "negative event. We reserve $Y$ as a classification parameter for\n", + "either a negative or a positive breast cancer confirmation. (Short note on wordings: positive here means having breast cancer, although none of us would consider this being a positive thing).\n", + "\n", + "We let $Y=1$ represent the the case of having breast cancer and $Y=0$ as not.\n", + "\n", + "Let us assume that if you have breast cancer, the test will be positive with a probability of $0.8$, that is we have" + ] + }, + { + "cell_type": "markdown", + "id": "40b7eac0", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(X=1\\vert Y=1) =0.8.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "16a3b6ea", + "metadata": { + "editable": true + }, + "source": [ + "This obviously sounds scary since many would conclude that if the test is positive, there is a likelihood of $80\\%$ for having cancer.\n", + "It is however not correct, as the following Bayesian analysis shows." + ] + }, + { + "cell_type": "markdown", + "id": "f41ccc6d", + "metadata": { + "editable": true + }, + "source": [ + "## Doing it correctly\n", + "\n", + "If we look at various national surveys on breast cancer, the general likelihood of developing breast cancer is a very small number.\n", + "Let us assume that the prior probability in the population as a whole is" + ] + }, + { + "cell_type": "markdown", + "id": "ae81305b", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(Y=1) =0.004.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "f4829b81", + "metadata": { + "editable": true + }, + "source": [ + "We need also to account for the fact that the test may produce a false positive result (false alarm). Let us here assume that we have" + ] + }, + { + "cell_type": "markdown", + "id": "812273af", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(X=1\\vert Y=0) =0.1.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "31ecba0e", + "metadata": { + "editable": true + }, + "source": [ + "Using Bayes' theorem we can then find the posterior probability that the person has breast cancer in case of a positive test, that is we can compute" + ] + }, + { + "cell_type": "markdown", + "id": "ca6682ec", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(Y=1\\vert X=1)=\\frac{p(X=1\\vert Y=1)p(Y=1)}{p(X=1\\vert Y=1)p(Y=1)+p(X=1\\vert Y=0)p(Y=0)}=\\frac{0.8\\times 0.004}{0.8\\times 0.004+0.1\\times 0.996}=0.031.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "662eaffb", + "metadata": { + "editable": true + }, + "source": [ + "That is, in case of a positive test, there is only a $3\\%$ chance of having breast cancer!" + ] + }, + { + "cell_type": "markdown", + "id": "08d5551d", + "metadata": { + "editable": true + }, + "source": [ + "## Bayes' Theorem and Ridge and Lasso Regression\n", + "\n", + "Using Bayes' theorem we can gain a better intuition about Ridge and Lasso regression. \n", + "\n", + "For ordinary least squares we postulated that the maximum likelihood for the doamin of events $\\boldsymbol{D}$ (one-dimensional case)" + ] + }, + { + "cell_type": "markdown", + "id": "03f3de9c", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{D}=[(x_0,y_0), (x_1,y_1),\\dots, (x_{n-1},y_{n-1})],\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "c57ace49", + "metadata": { + "editable": true + }, + "source": [ + "is given by" + ] + }, + { + "cell_type": "markdown", + "id": "cb014b2b", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{D}\\vert\\boldsymbol{\\beta})=\\prod_{i=0}^{n-1}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "1054d47e", + "metadata": { + "editable": true + }, + "source": [ + "In Bayes' theorem this function plays the role of the so-called likelihood. We could now ask the question what is the posterior probability of a parameter set $\\boldsymbol{\\beta}$ given a domain of events $\\boldsymbol{D}$? That is, how can we define the posterior probability" + ] + }, + { + "cell_type": "markdown", + "id": "1485d44c", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{\\beta}\\vert\\boldsymbol{D}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "f457f909", + "metadata": { + "editable": true + }, + "source": [ + "Bayes' theorem comes to our rescue here since (omitting the normalization constant)" + ] + }, + { + "cell_type": "markdown", + "id": "59447b2a", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{\\beta}\\vert\\boldsymbol{D})\\propto p(\\boldsymbol{D}\\vert\\boldsymbol{\\beta})p(\\boldsymbol{\\beta}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "4fe26100", + "metadata": { + "editable": true + }, + "source": [ + "We have a model for $p(\\boldsymbol{D}\\vert\\boldsymbol{\\beta})$ but need one for the **prior** $p(\\boldsymbol{\\beta}$!" + ] + }, + { + "cell_type": "markdown", + "id": "d73c2d9c", + "metadata": { + "editable": true + }, + "source": [ + "## Ridge and Bayes\n", + "\n", + "With the posterior probability defined by a likelihood which we have\n", + "already modeled and an unknown prior, we are now ready to make\n", + "additional models for the prior.\n", + "\n", + "We can, based on our discussions of the variance of $\\boldsymbol{\\beta}$ and the mean value, assume that the prior for the values $\\boldsymbol{\\beta}$ is given by a Gaussian with mean value zero and variance $\\tau^2$, that is" + ] + }, + { + "cell_type": "markdown", + "id": "8cdf2c97", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{\\beta})=\\prod_{j=0}^{p-1}\\exp{\\left(-\\frac{\\beta_j^2}{2\\tau^2}\\right)}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "7272ef9f", + "metadata": { + "editable": true + }, + "source": [ + "Our posterior probability becomes then (omitting the normalization factor which is just a constant)" + ] + }, + { + "cell_type": "markdown", + "id": "0dc5b2b7", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{\\beta\\vert\\boldsymbol{D})}=\\prod_{i=0}^{n-1}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}\\prod_{j=0}^{p-1}\\exp{\\left(-\\frac{\\beta_j^2}{2\\tau^2}\\right)}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "b6c8c684", + "metadata": { + "editable": true + }, + "source": [ + "We can now optimize this quantity with respect to $\\boldsymbol{\\beta}$. As we\n", + "did for OLS, this is most conveniently done by taking the negative\n", + "logarithm of the posterior probability. Doing so and leaving out the\n", + "constants terms that do not depend on $\\beta$, we have" + ] + }, + { + "cell_type": "markdown", + "id": "f681ed50", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{\\beta})=\\frac{\\vert\\vert (\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta})\\vert\\vert_2^2}{2\\sigma^2}+\\frac{1}{2\\tau^2}\\vert\\vert\\boldsymbol{\\beta}\\vert\\vert_2^2,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "5c3bc898", + "metadata": { + "editable": true + }, + "source": [ + "and replacing $1/2\\tau^2$ with $\\lambda$ we have" + ] + }, + { + "cell_type": "markdown", + "id": "a3cea046", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{\\beta})=\\frac{\\vert\\vert (\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta})\\vert\\vert_2^2}{2\\sigma^2}+\\lambda\\vert\\vert\\boldsymbol{\\beta}\\vert\\vert_2^2,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "68276410", + "metadata": { + "editable": true + }, + "source": [ + "which is our Ridge cost function! Nice, isn't it?" + ] + }, + { + "cell_type": "markdown", + "id": "dfd55611", + "metadata": { + "editable": true + }, + "source": [ + "## Lasso and Bayes\n", + "\n", + "To derive the Lasso cost function, we simply replace the Gaussian prior with an exponential distribution ([Laplace in this case](https://en.wikipedia.org/wiki/Laplace_distribution)) with zero mean value, that is" + ] + }, + { + "cell_type": "markdown", + "id": "83656dd8", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{\\beta})=\\prod_{j=0}^{p-1}\\exp{\\left(-\\frac{\\vert\\beta_j\\vert}{\\tau}\\right)}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "b62e29fd", + "metadata": { + "editable": true + }, + "source": [ + "Our posterior probability becomes then (omitting the normalization factor which is just a constant)" + ] + }, + { + "cell_type": "markdown", + "id": "1de8855c", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "p(\\boldsymbol{\\beta}\\vert\\boldsymbol{D})=\\prod_{i=0}^{n-1}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}\\prod_{j=0}^{p-1}\\exp{\\left(-\\frac{\\vert\\beta_j\\vert}{\\tau}\\right)}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "212152f1", + "metadata": { + "editable": true + }, + "source": [ + "Taking the negative\n", + "logarithm of the posterior probability and leaving out the\n", + "constants terms that do not depend on $\\beta$, we have" + ] + }, + { + "cell_type": "markdown", + "id": "afb042c4", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{\\beta}=\\frac{\\vert\\vert (\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta})\\vert\\vert_2^2}{2\\sigma^2}+\\frac{1}{\\tau}\\vert\\vert\\boldsymbol{\\beta}\\vert\\vert_1,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "ab1fd3c5", + "metadata": { + "editable": true + }, + "source": [ + "and replacing $1/\\tau$ with $\\lambda$ we have" + ] + }, + { + "cell_type": "markdown", + "id": "43979108", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{\\beta}=\\frac{\\vert\\vert (\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta})\\vert\\vert_2^2}{2\\sigma^2}+\\lambda\\vert\\vert\\boldsymbol{\\beta}\\vert\\vert_1,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "96622b66", + "metadata": { + "editable": true + }, + "source": [ + "which is our Lasso cost function!" + ] + }, + { + "cell_type": "markdown", + "id": "e17a5b6d", + "metadata": { + "editable": true + }, + "source": [ + "## Why resampling methods\n", + "\n", + "Before we proceed, we need to rethink what we have been doing. In our\n", + "eager to fit the data, we have omitted several important elements in\n", + "our regression analysis. In what follows we will\n", + "1. look at statistical properties, including a discussion of mean values, variance and the so-called bias-variance tradeoff\n", + "\n", + "2. introduce resampling techniques like cross-validation, bootstrapping and jackknife and more\n", + "\n", + "and discuss how to select a given model (one of the difficult parts in machine learning)." + ] + }, + { + "cell_type": "markdown", + "id": "24e35401", + "metadata": { + "editable": true + }, + "source": [ + "## Resampling methods\n", + "Resampling methods are an indispensable tool in modern\n", + "statistics. They involve repeatedly drawing samples from a training\n", + "set and refitting a model of interest on each sample in order to\n", + "obtain additional information about the fitted model. For example, in\n", + "order to estimate the variability of a linear regression fit, we can\n", + "repeatedly draw different samples from the training data, fit a linear\n", + "regression to each new sample, and then examine the extent to which\n", + "the resulting fits differ. Such an approach may allow us to obtain\n", + "information that would not be available from fitting the model only\n", + "once using the original training sample.\n", + "\n", + "Two resampling methods are often used in Machine Learning analyses,\n", + "1. The **bootstrap method**\n", + "\n", + "2. and **Cross-Validation**\n", + "\n", + "In addition there are several other methods such as the Jackknife and the Blocking methods. We will discuss in particular\n", + "cross-validation and the bootstrap method." + ] + }, + { + "cell_type": "markdown", + "id": "a37f1d06", + "metadata": { + "editable": true + }, + "source": [ + "## Resampling approaches can be computationally expensive\n", + "\n", + "Resampling approaches can be computationally expensive, because they\n", + "involve fitting the same statistical method multiple times using\n", + "different subsets of the training data. However, due to recent\n", + "advances in computing power, the computational requirements of\n", + "resampling methods generally are not prohibitive. In this chapter, we\n", + "discuss two of the most commonly used resampling methods,\n", + "cross-validation and the bootstrap. Both methods are important tools\n", + "in the practical application of many statistical learning\n", + "procedures. For example, cross-validation can be used to estimate the\n", + "test error associated with a given statistical learning method in\n", + "order to evaluate its performance, or to select the appropriate level\n", + "of flexibility. The process of evaluating a model’s performance is\n", + "known as model assessment, whereas the process of selecting the proper\n", + "level of flexibility for a model is known as model selection. The\n", + "bootstrap is widely used." + ] + }, + { + "cell_type": "markdown", + "id": "58f54a23", + "metadata": { + "editable": true + }, + "source": [ + "## Why resampling methods ?\n", + "**Statistical analysis.**\n", + "\n", + "* Our simulations can be treated as *computer experiments*. This is particularly the case for Monte Carlo methods which are widely used in statistical analyses.\n", + "\n", + "* The results can be analysed with the same statistical tools as we would use when analysing experimental data.\n", + "\n", + "* As in all experiments, we are looking for expectation values and an estimate of how accurate they are, i.e., possible sources for errors." + ] + }, + { + "cell_type": "markdown", + "id": "6ed7c809", + "metadata": { + "editable": true + }, + "source": [ + "## Statistical analysis\n", + "\n", + "* As in other experiments, many numerical experiments have two classes of errors:\n", + "\n", + " * Statistical errors\n", + "\n", + " * Systematical errors\n", + "\n", + "* Statistical errors can be estimated using standard tools from statistics\n", + "\n", + "* Systematical errors are method specific and must be treated differently from case to case." + ] + }, + { + "cell_type": "markdown", + "id": "bed9bb2f", + "metadata": { + "editable": true + }, + "source": [ + "## Resampling methods\n", + "\n", + "With all these analytical equations for both the OLS and Ridge\n", + "regression, we will now outline how to assess a given model. This will\n", + "lead to a discussion of the so-called bias-variance tradeoff (see\n", + "below) and so-called resampling methods.\n", + "\n", + "One of the quantities we have discussed as a way to measure errors is\n", + "the mean-squared error (MSE), mainly used for fitting of continuous\n", + "functions. Another choice is the absolute error.\n", + "\n", + "In the discussions below we will focus on the MSE and in particular since we will split the data into test and training data,\n", + "we discuss the\n", + "1. prediction error or simply the **test error** $\\mathrm{Err_{Test}}$, where we have a fixed training set and the test error is the MSE arising from the data reserved for testing. We discuss also the \n", + "\n", + "2. training error $\\mathrm{Err_{Train}}$, which is the average loss over the training data.\n", + "\n", + "As our model becomes more and more complex, more of the training data tends to used. The training may thence adapt to more complicated structures in the data. This may lead to a decrease in the bias (see below for code example) and a slight increase of the variance for the test error.\n", + "For a certain level of complexity the test error will reach minimum, before starting to increase again. The\n", + "training error reaches a saturation." + ] + }, + { + "cell_type": "markdown", + "id": "2cafa0a3", + "metadata": { + "editable": true + }, + "source": [ + "## Resampling methods: Bootstrap\n", + "Bootstrapping is a [non-parametric approach](https://en.wikipedia.org/wiki/Nonparametric_statistics) to statistical inference\n", + "that substitutes computation for more traditional distributional\n", + "assumptions and asymptotic results. Bootstrapping offers a number of\n", + "advantages: \n", + "1. The bootstrap is quite general, although there are some cases in which it fails. \n", + "\n", + "2. Because it does not require distributional assumptions (such as normally distributed errors), the bootstrap can provide more accurate inferences when the data are not well behaved or when the sample size is small. \n", + "\n", + "3. It is possible to apply the bootstrap to statistics with sampling distributions that are difficult to derive, even asymptotically. \n", + "\n", + "4. It is relatively simple to apply the bootstrap to complex data-collection plans (such as stratified and clustered samples).\n", + "\n", + "The textbook by [Davison on the Bootstrap Methods and their Applications](https://www.cambridge.org/core/books/bootstrap-methods-and-their-application/ED2FD043579F27952363566DC09CBD6A) provides many more insights and proofs. In this course we will take a more practical approach and use the results and theorems provided in the literature. For those interested in reading more about the bootstrap methods, we recommend the above text and the one by [Efron and Tibshirani](https://www.routledge.com/An-Introduction-to-the-Bootstrap/Efron-Tibshirani/p/book/9780412042317).\n", + "\n", + "Before we proceed however, we need to remind ourselves about a central theorem in statistics, namely the so-called **central limit theorem**." + ] + }, + { + "cell_type": "markdown", + "id": "fefbb980", + "metadata": { + "editable": true + }, + "source": [ + "## The Central Limit Theorem\n", + "\n", + "Suppose we have a PDF $p(x)$ from which we generate a series $N$\n", + "of averages $\\mathbb{E}[x_i]$. Each mean value $\\mathbb{E}[x_i]$\n", + "is viewed as the average of a specific measurement, e.g., throwing \n", + "dice 100 times and then taking the average value, or producing a certain\n", + "amount of random numbers. \n", + "For notational ease, we set $\\mathbb{E}[x_i]=x_i$ in the discussion\n", + "which follows. We do the same for $\\mathbb{E}[z]=z$.\n", + "\n", + "If we compute the mean $z$ of $m$ such mean values $x_i$" + ] + }, + { + "cell_type": "markdown", + "id": "4560153d", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "z=\\frac{x_1+x_2+\\dots+x_m}{m},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "ffcbdd5a", + "metadata": { + "editable": true + }, + "source": [ + "the question we pose is which is the PDF of the new variable $z$." + ] + }, + { + "cell_type": "markdown", + "id": "d055ea55", + "metadata": { + "editable": true + }, + "source": [ + "## Finding the Limit\n", + "\n", + "The probability of obtaining an average value $z$ is the product of the \n", + "probabilities of obtaining arbitrary individual mean values $x_i$,\n", + "but with the constraint that the average is $z$. We can express this through\n", + "the following expression" + ] + }, + { + "cell_type": "markdown", + "id": "004f0161", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\tilde{p}(z)=\\int dx_1p(x_1)\\int dx_2p(x_2)\\dots\\int dx_mp(x_m)\n", + " \\delta(z-\\frac{x_1+x_2+\\dots+x_m}{m}),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "039f4ad5", + "metadata": { + "editable": true + }, + "source": [ + "where the $\\delta$-function enbodies the constraint that the mean is $z$.\n", + "All measurements that lead to each individual $x_i$ are expected to\n", + "be independent, which in turn means that we can express $\\tilde{p}$ as the \n", + "product of individual $p(x_i)$. The independence assumption is important in the derivation of the central limit theorem." + ] + }, + { + "cell_type": "markdown", + "id": "413459f1", + "metadata": { + "editable": true + }, + "source": [ + "## Rewriting the $\\delta$-function\n", + "\n", + "If we use the integral expression for the $\\delta$-function" + ] + }, + { + "cell_type": "markdown", + "id": "bef022c8", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\delta(z-\\frac{x_1+x_2+\\dots+x_m}{m})=\\frac{1}{2\\pi}\\int_{-\\infty}^{\\infty}\n", + " dq\\exp{\\left(iq(z-\\frac{x_1+x_2+\\dots+x_m}{m})\\right)},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "3d53693d", + "metadata": { + "editable": true + }, + "source": [ + "and inserting $e^{i\\mu q-i\\mu q}$ where $\\mu$ is the mean value\n", + "we arrive at" + ] + }, + { + "cell_type": "markdown", + "id": "e682c32a", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\tilde{p}(z)=\\frac{1}{2\\pi}\\int_{-\\infty}^{\\infty}\n", + " dq\\exp{\\left(iq(z-\\mu)\\right)}\\left[\\int_{-\\infty}^{\\infty}\n", + " dxp(x)\\exp{\\left(iq(\\mu-x)/m\\right)}\\right]^m,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "f44053ea", + "metadata": { + "editable": true + }, + "source": [ + "with the integral over $x$ resulting in" + ] + }, + { + "cell_type": "markdown", + "id": "f10de930", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\int_{-\\infty}^{\\infty}dxp(x)\\exp{\\left(iq(\\mu-x)/m\\right)}=\n", + " \\int_{-\\infty}^{\\infty}dxp(x)\n", + " \\left[1+\\frac{iq(\\mu-x)}{m}-\\frac{q^2(\\mu-x)^2}{2m^2}+\\dots\\right].\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "1f91402a", + "metadata": { + "editable": true + }, + "source": [ + "## Identifying Terms\n", + "\n", + "The second term on the rhs disappears since this is just the mean and \n", + "employing the definition of $\\sigma^2$ we have" + ] + }, + { + "cell_type": "markdown", + "id": "2d7a8e36", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\int_{-\\infty}^{\\infty}dxp(x)e^{\\left(iq(\\mu-x)/m\\right)}=\n", + " 1-\\frac{q^2\\sigma^2}{2m^2}+\\dots,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "4c756ca2", + "metadata": { + "editable": true + }, + "source": [ + "resulting in" + ] + }, + { + "cell_type": "markdown", + "id": "908f782e", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\left[\\int_{-\\infty}^{\\infty}dxp(x)\\exp{\\left(iq(\\mu-x)/m\\right)}\\right]^m\\approx\n", + " \\left[1-\\frac{q^2\\sigma^2}{2m^2}+\\dots \\right]^m,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "f12152da", + "metadata": { + "editable": true + }, + "source": [ + "and in the limit $m\\rightarrow \\infty$ we obtain" + ] + }, + { + "cell_type": "markdown", + "id": "85dd290d", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\tilde{p}(z)=\\frac{1}{\\sqrt{2\\pi}(\\sigma/\\sqrt{m})}\n", + " \\exp{\\left(-\\frac{(z-\\mu)^2}{2(\\sigma/\\sqrt{m})^2}\\right)},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "57631d10", + "metadata": { + "editable": true + }, + "source": [ + "which is the normal distribution with variance\n", + "$\\sigma^2_m=\\sigma^2/m$, where $\\sigma$ is the variance of the PDF $p(x)$\n", + "and $\\mu$ is also the mean of the PDF $p(x)$." + ] + }, + { + "cell_type": "markdown", + "id": "2d4d5ccb", + "metadata": { + "editable": true + }, + "source": [ + "## Wrapping it up\n", + "\n", + "Thus, the central limit theorem states that the PDF $\\tilde{p}(z)$ of\n", + "the average of $m$ random values corresponding to a PDF $p(x)$ \n", + "is a normal distribution whose mean is the \n", + "mean value of the PDF $p(x)$ and whose variance is the variance\n", + "of the PDF $p(x)$ divided by $m$, the number of values used to compute $z$.\n", + "\n", + "The central limit theorem leads to the well-known expression for the\n", + "standard deviation, given by" + ] + }, + { + "cell_type": "markdown", + "id": "a29c8551", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\sigma_m=\n", + "\\frac{\\sigma}{\\sqrt{m}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "6509ba36", + "metadata": { + "editable": true + }, + "source": [ + "The latter is true only if the average value is known exactly. This is obtained in the limit\n", + "$m\\rightarrow \\infty$ only. Because the mean and the variance are measured quantities we obtain \n", + "the familiar expression in statistics (the so-called Bessel correction)" + ] + }, + { + "cell_type": "markdown", + "id": "733307b1", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\sigma_m\\approx \n", + "\\frac{\\sigma}{\\sqrt{m-1}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "a69b7331", + "metadata": { + "editable": true + }, + "source": [ + "In many cases however the above estimate for the standard deviation,\n", + "in particular if correlations are strong, may be too simplistic. Keep\n", + "in mind that we have assumed that the variables $x$ are independent\n", + "and identically distributed. This is obviously not always the\n", + "case. For example, the random numbers (or better pseudorandom numbers)\n", + "we generate in various calculations do always exhibit some\n", + "correlations.\n", + "\n", + "The theorem is satisfied by a large class of PDFs. Note however that for a\n", + "finite $m$, it is not always possible to find a closed form /analytic expression for\n", + "$\\tilde{p}(x)$." + ] + }, + { + "cell_type": "markdown", + "id": "ced659da", + "metadata": { + "editable": true + }, + "source": [ + "## Confidence Intervals\n", + "\n", + "Confidence intervals are used in statistics and represent a type of estimate\n", + "computed from the observed data. This gives a range of values for an\n", + "unknown parameter such as the parameters $\\boldsymbol{\\beta}$ from linear regression.\n", + "\n", + "With the OLS expressions for the parameters $\\boldsymbol{\\beta}$ we found \n", + "$\\mathbb{E}(\\boldsymbol{\\beta}) = \\boldsymbol{\\beta}$, which means that the estimator of the regression parameters is unbiased.\n", + "\n", + "We found also that the variance of the estimate of the $j$-th regression coefficient is\n", + "$\\boldsymbol{\\sigma}^2 (\\boldsymbol{\\beta}_j ) = \\boldsymbol{\\sigma}^2 [(\\mathbf{X}^{T} \\mathbf{X})^{-1}]_{jj} $.\n", + "\n", + "This quantity will be used to\n", + "construct a confidence interval for the estimates." + ] + }, + { + "cell_type": "markdown", + "id": "2c0d0a71", + "metadata": { + "editable": true + }, + "source": [ + "## Standard Approach based on the Normal Distribution\n", + "\n", + "We will assume that the parameters $\\beta$ follow a normal\n", + "distribution. We can then define the confidence interval. Here we will be using as\n", + "shorthands $\\mu_{\\beta}$ for the above mean value and $\\sigma_{\\beta}$\n", + "for the standard deviation. We have then a confidence interval" + ] + }, + { + "cell_type": "markdown", + "id": "d3a4d693", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\left(\\mu_{\\beta}\\pm \\frac{z\\sigma_{\\beta}}{\\sqrt{n}}\\right),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "3ed3d852", + "metadata": { + "editable": true + }, + "source": [ + "where $z$ defines the level of certainty (or confidence). For a normal\n", + "distribution typical parameters are $z=2.576$ which corresponds to a\n", + "confidence of $99\\%$ while $z=1.96$ corresponds to a confidence of\n", + "$95\\%$. A confidence level of $95\\%$ is commonly used and it is\n", + "normally referred to as a *two-sigmas* confidence level, that is we\n", + "approximate $z\\approx 2$.\n", + "\n", + "For more discussions of confidence intervals (and in particular linked with a discussion of the bootstrap method), see chapter 5 of the textbook by [Davison on the Bootstrap Methods and their Applications](https://www.cambridge.org/core/books/bootstrap-methods-and-their-application/ED2FD043579F27952363566DC09CBD6A)\n", + "\n", + "In this text you will also find an in-depth discussion of the\n", + "Bootstrap method, why it works and various theorems related to it." + ] + }, + { + "cell_type": "markdown", + "id": "e826e70b", + "metadata": { + "editable": true + }, + "source": [ + "## Resampling methods: Bootstrap background\n", + "\n", + "Since $\\widehat{\\beta} = \\widehat{\\beta}(\\boldsymbol{X})$ is a function of random variables,\n", + "$\\widehat{\\beta}$ itself must be a random variable. Thus it has\n", + "a pdf, call this function $p(\\boldsymbol{t})$. The aim of the bootstrap is to\n", + "estimate $p(\\boldsymbol{t})$ by the relative frequency of\n", + "$\\widehat{\\beta}$. You can think of this as using a histogram\n", + "in the place of $p(\\boldsymbol{t})$. If the relative frequency closely\n", + "resembles $p(\\vec{t})$, then using numerics, it is straight forward to\n", + "estimate all the interesting parameters of $p(\\boldsymbol{t})$ using point\n", + "estimators." + ] + }, + { + "cell_type": "markdown", + "id": "10b5d4d5", + "metadata": { + "editable": true + }, + "source": [ + "## Resampling methods: More Bootstrap background\n", + "\n", + "In the case that $\\widehat{\\beta}$ has\n", + "more than one component, and the components are independent, we use the\n", + "same estimator on each component separately. If the probability\n", + "density function of $X_i$, $p(x)$, had been known, then it would have\n", + "been straightforward to do this by: \n", + "1. Drawing lots of numbers from $p(x)$, suppose we call one such set of numbers $(X_1^*, X_2^*, \\cdots, X_n^*)$. \n", + "\n", + "2. Then using these numbers, we could compute a replica of $\\widehat{\\beta}$ called $\\widehat{\\beta}^*$. \n", + "\n", + "By repeated use of the above two points, many\n", + "estimates of $\\widehat{\\beta}$ can be obtained. The\n", + "idea is to use the relative frequency of $\\widehat{\\beta}^*$\n", + "(think of a histogram) as an estimate of $p(\\boldsymbol{t})$." + ] + }, + { + "cell_type": "markdown", + "id": "1645ce3c", + "metadata": { + "editable": true + }, + "source": [ + "## Resampling methods: Bootstrap approach\n", + "\n", + "But\n", + "unless there is enough information available about the process that\n", + "generated $X_1,X_2,\\cdots,X_n$, $p(x)$ is in general\n", + "unknown. Therefore, [Efron in 1979](https://projecteuclid.org/euclid.aos/1176344552) asked the\n", + "question: What if we replace $p(x)$ by the relative frequency\n", + "of the observation $X_i$?\n", + "\n", + "If we draw observations in accordance with\n", + "the relative frequency of the observations, will we obtain the same\n", + "result in some asymptotic sense? The answer is yes." + ] + }, + { + "cell_type": "markdown", + "id": "4986483a", + "metadata": { + "editable": true + }, + "source": [ + "## Resampling methods: Bootstrap steps\n", + "\n", + "The independent bootstrap works like this: \n", + "\n", + "1. Draw with replacement $n$ numbers for the observed variables $\\boldsymbol{x} = (x_1,x_2,\\cdots,x_n)$. \n", + "\n", + "2. Define a vector $\\boldsymbol{x}^*$ containing the values which were drawn from $\\boldsymbol{x}$. \n", + "\n", + "3. Using the vector $\\boldsymbol{x}^*$ compute $\\widehat{\\beta}^*$ by evaluating $\\widehat \\beta$ under the observations $\\boldsymbol{x}^*$. \n", + "\n", + "4. Repeat this process $k$ times. \n", + "\n", + "When you are done, you can draw a histogram of the relative frequency\n", + "of $\\widehat \\beta^*$. This is your estimate of the probability\n", + "distribution $p(t)$. Using this probability distribution you can\n", + "estimate any statistics thereof. In principle you never draw the\n", + "histogram of the relative frequency of $\\widehat{\\beta}^*$. Instead\n", + "you use the estimators corresponding to the statistic of interest. For\n", + "example, if you are interested in estimating the variance of $\\widehat\n", + "\\beta$, apply the etsimator $\\widehat \\sigma^2$ to the values\n", + "$\\widehat \\beta^*$." + ] + }, + { + "cell_type": "markdown", + "id": "fe853f3b", + "metadata": { + "editable": true + }, + "source": [ + "## Code example for the Bootstrap method\n", + "\n", + "The following code starts with a Gaussian distribution with mean value\n", + "$\\mu =100$ and variance $\\sigma=15$. We use this to generate the data\n", + "used in the bootstrap analysis. The bootstrap analysis returns a data\n", + "set after a given number of bootstrap operations (as many as we have\n", + "data points). This data set consists of estimated mean values for each\n", + "bootstrap operation. The histogram generated by the bootstrap method\n", + "shows that the distribution for these mean values is also a Gaussian,\n", + "centered around the mean value $\\mu=100$ but with standard deviation\n", + "$\\sigma/\\sqrt{n}$, where $n$ is the number of bootstrap samples (in\n", + "this case the same as the number of original data points). The value\n", + "of the standard deviation is what we expect from the central limit\n", + "theorem." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "81ec18f8", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "import numpy as np\n", + "from time import time\n", + "from scipy.stats import norm\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Returns mean of bootstrap samples \n", + "# Bootstrap algorithm\n", + "def bootstrap(data, datapoints):\n", + " t = np.zeros(datapoints)\n", + " n = len(data)\n", + " # non-parametric bootstrap \n", + " for i in range(datapoints):\n", + " t[i] = np.mean(data[np.random.randint(0,n,n)])\n", + " # analysis \n", + " print(\"Bootstrap Statistics :\")\n", + " print(\"original bias std. error\")\n", + " print(\"%8g %8g %14g %15g\" % (np.mean(data), np.std(data),np.mean(t),np.std(t)))\n", + " return t\n", + "\n", + "# We set the mean value to 100 and the standard deviation to 15\n", + "mu, sigma = 100, 15\n", + "datapoints = 10000\n", + "# We generate random numbers according to the normal distribution\n", + "x = mu + sigma*np.random.randn(datapoints)\n", + "# bootstrap returns the data sample \n", + "t = bootstrap(x, datapoints)" + ] + }, + { + "cell_type": "markdown", + "id": "f0b5b588", + "metadata": { + "editable": true + }, + "source": [ + "We see that our new variance and from that the standard deviation, agrees with the central limit theorem." + ] + }, + { + "cell_type": "markdown", + "id": "262a95e8", + "metadata": { + "editable": true + }, + "source": [ + "## Plotting the Histogram" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d235b516", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "# the histogram of the bootstrapped data (normalized data if density = True)\n", + "n, binsboot, patches = plt.hist(t, 50, density=True, facecolor='red', alpha=0.75)\n", + "# add a 'best fit' line \n", + "y = norm.pdf(binsboot, np.mean(t), np.std(t))\n", + "lt = plt.plot(binsboot, y, 'b', linewidth=1)\n", + "plt.xlabel('x')\n", + "plt.ylabel('Probability')\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "c1620bb7", + "metadata": { + "editable": true + }, + "source": [ + "## The bias-variance tradeoff\n", + "\n", + "We will discuss the bias-variance tradeoff in the context of\n", + "continuous predictions such as regression. However, many of the\n", + "intuitions and ideas discussed here also carry over to classification\n", + "tasks. Consider a dataset $\\mathcal{D}$ consisting of the data\n", + "$\\mathbf{X}_\\mathcal{D}=\\{(y_j, \\boldsymbol{x}_j), j=0\\ldots n-1\\}$. \n", + "\n", + "Let us assume that the true data is generated from a noisy model" + ] + }, + { + "cell_type": "markdown", + "id": "fd3bd4b5", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{y}=f(\\boldsymbol{x}) + \\boldsymbol{\\epsilon}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "4a129d86", + "metadata": { + "editable": true + }, + "source": [ + "where $\\epsilon$ is normally distributed with mean zero and standard deviation $\\sigma^2$.\n", + "\n", + "In our derivation of the ordinary least squares method we defined then\n", + "an approximation to the function $f$ in terms of the parameters\n", + "$\\boldsymbol{\\beta}$ and the design matrix $\\boldsymbol{X}$ which embody our model,\n", + "that is $\\boldsymbol{\\tilde{y}}=\\boldsymbol{X}\\boldsymbol{\\beta}$. \n", + "\n", + "Thereafter we found the parameters $\\boldsymbol{\\beta}$ by optimizing the means squared error via the so-called cost function" + ] + }, + { + "cell_type": "markdown", + "id": "ff57b405", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{X},\\boldsymbol{\\beta}) =\\frac{1}{n}\\sum_{i=0}^{n-1}(y_i-\\tilde{y}_i)^2=\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right].\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "5a13919e", + "metadata": { + "editable": true + }, + "source": [ + "We can rewrite this as" + ] + }, + { + "cell_type": "markdown", + "id": "45d4a7b6", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\frac{1}{n}\\sum_i(f_i-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2+\\frac{1}{n}\\sum_i(\\tilde{y}_i-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2+\\sigma^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "c837442b", + "metadata": { + "editable": true + }, + "source": [ + "The three terms represent the square of the bias of the learning\n", + "method, which can be thought of as the error caused by the simplifying\n", + "assumptions built into the method. The second term represents the\n", + "variance of the chosen model and finally the last terms is variance of\n", + "the error $\\boldsymbol{\\epsilon}$.\n", + "\n", + "To derive this equation, we need to recall that the variance of $\\boldsymbol{y}$ and $\\boldsymbol{\\epsilon}$ are both equal to $\\sigma^2$. The mean value of $\\boldsymbol{\\epsilon}$ is by definition equal to zero. Furthermore, the function $f$ is not a stochastics variable, idem for $\\boldsymbol{\\tilde{y}}$.\n", + "We use a more compact notation in terms of the expectation value" + ] + }, + { + "cell_type": "markdown", + "id": "4b3c7b8e", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\mathbb{E}\\left[(\\boldsymbol{f}+\\boldsymbol{\\epsilon}-\\boldsymbol{\\tilde{y}})^2\\right],\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "7e6f977d", + "metadata": { + "editable": true + }, + "source": [ + "and adding and subtracting $\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right]$ we get" + ] + }, + { + "cell_type": "markdown", + "id": "adeab0fd", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\mathbb{E}\\left[(\\boldsymbol{f}+\\boldsymbol{\\epsilon}-\\boldsymbol{\\tilde{y}}+\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right]-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2\\right],\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "63b18db5", + "metadata": { + "editable": true + }, + "source": [ + "which, using the abovementioned expectation values can be rewritten as" + ] + }, + { + "cell_type": "markdown", + "id": "9c7eb00d", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\mathbb{E}\\left[(\\boldsymbol{y}-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2\\right]+\\mathrm{Var}\\left[\\boldsymbol{\\tilde{y}}\\right]+\\sigma^2,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "c3f4530b", + "metadata": { + "editable": true + }, + "source": [ + "that is the rewriting in terms of the so-called bias, the variance of the model $\\boldsymbol{\\tilde{y}}$ and the variance of $\\boldsymbol{\\epsilon}$." + ] + }, + { + "cell_type": "markdown", + "id": "90792236", + "metadata": { + "editable": true + }, + "source": [ + "## A way to Read the Bias-Variance Tradeoff\n", + "\n", + "\n", + "\n", + "\n", + "

    Figure 1:

    \n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "d73c7cd4", + "metadata": { + "editable": true + }, + "source": [ + "## Example code for Bias-Variance tradeoff" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "58124207", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from sklearn.linear_model import LinearRegression, Ridge, Lasso\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.pipeline import make_pipeline\n", + "from sklearn.utils import resample\n", + "\n", + "np.random.seed(2018)\n", + "\n", + "n = 500\n", + "n_boostraps = 100\n", + "degree = 18 # A quite high value, just to show.\n", + "noise = 0.1\n", + "\n", + "# Make data set.\n", + "x = np.linspace(-1, 3, n).reshape(-1, 1)\n", + "y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2) + np.random.normal(0, 0.1, x.shape)\n", + "\n", + "# Hold out some test data that is never used in training.\n", + "x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)\n", + "\n", + "# Combine x transformation and model into one operation.\n", + "# Not neccesary, but convenient.\n", + "model = make_pipeline(PolynomialFeatures(degree=degree), LinearRegression(fit_intercept=False))\n", + "\n", + "# The following (m x n_bootstraps) matrix holds the column vectors y_pred\n", + "# for each bootstrap iteration.\n", + "y_pred = np.empty((y_test.shape[0], n_boostraps))\n", + "for i in range(n_boostraps):\n", + " x_, y_ = resample(x_train, y_train)\n", + "\n", + " # Evaluate the new model on the same test data each time.\n", + " y_pred[:, i] = model.fit(x_, y_).predict(x_test).ravel()\n", + "\n", + "# Note: Expectations and variances taken w.r.t. different training\n", + "# data sets, hence the axis=1. Subsequent means are taken across the test data\n", + "# set in order to obtain a total value, but before this we have error/bias/variance\n", + "# calculated per data point in the test set.\n", + "# Note 2: The use of keepdims=True is important in the calculation of bias as this \n", + "# maintains the column vector form. Dropping this yields very unexpected results.\n", + "error = np.mean( np.mean((y_test - y_pred)**2, axis=1, keepdims=True) )\n", + "bias = np.mean( (y_test - np.mean(y_pred, axis=1, keepdims=True))**2 )\n", + "variance = np.mean( np.var(y_pred, axis=1, keepdims=True) )\n", + "print('Error:', error)\n", + "print('Bias^2:', bias)\n", + "print('Var:', variance)\n", + "print('{} >= {} + {} = {}'.format(error, bias, variance, bias+variance))\n", + "\n", + "plt.plot(x[::5, :], y[::5, :], label='f(x)')\n", + "plt.scatter(x_test, y_test, label='Data points')\n", + "plt.scatter(x_test, np.mean(y_pred, axis=1), label='Pred')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "4b4e7bf5", + "metadata": { + "editable": true + }, + "source": [ + "## Understanding what happens" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "47b138a9", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from sklearn.linear_model import LinearRegression, Ridge, Lasso\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.pipeline import make_pipeline\n", + "from sklearn.utils import resample\n", + "\n", + "np.random.seed(2018)\n", + "\n", + "n = 40\n", + "n_boostraps = 100\n", + "maxdegree = 14\n", + "\n", + "\n", + "# Make data set.\n", + "x = np.linspace(-3, 3, n).reshape(-1, 1)\n", + "y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2)+ np.random.normal(0, 0.1, x.shape)\n", + "error = np.zeros(maxdegree)\n", + "bias = np.zeros(maxdegree)\n", + "variance = np.zeros(maxdegree)\n", + "polydegree = np.zeros(maxdegree)\n", + "x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)\n", + "\n", + "for degree in range(maxdegree):\n", + " model = make_pipeline(PolynomialFeatures(degree=degree), LinearRegression(fit_intercept=False))\n", + " y_pred = np.empty((y_test.shape[0], n_boostraps))\n", + " for i in range(n_boostraps):\n", + " x_, y_ = resample(x_train, y_train)\n", + " y_pred[:, i] = model.fit(x_, y_).predict(x_test).ravel()\n", + "\n", + " polydegree[degree] = degree\n", + " error[degree] = np.mean( np.mean((y_test - y_pred)**2, axis=1, keepdims=True) )\n", + " bias[degree] = np.mean( (y_test - np.mean(y_pred, axis=1, keepdims=True))**2 )\n", + " variance[degree] = np.mean( np.var(y_pred, axis=1, keepdims=True) )\n", + " print('Polynomial degree:', degree)\n", + " print('Error:', error[degree])\n", + " print('Bias^2:', bias[degree])\n", + " print('Var:', variance[degree])\n", + " print('{} >= {} + {} = {}'.format(error[degree], bias[degree], variance[degree], bias[degree]+variance[degree]))\n", + "\n", + "plt.plot(polydegree, error, label='Error')\n", + "plt.plot(polydegree, bias, label='bias')\n", + "plt.plot(polydegree, variance, label='Variance')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "37b66761", + "metadata": { + "editable": true + }, + "source": [ + "## Summing up\n", + "\n", + "The bias-variance tradeoff summarizes the fundamental tension in\n", + "machine learning, particularly supervised learning, between the\n", + "complexity of a model and the amount of training data needed to train\n", + "it. Since data is often limited, in practice it is often useful to\n", + "use a less-complex model with higher bias, that is a model whose asymptotic\n", + "performance is worse than another model because it is easier to\n", + "train and less sensitive to sampling noise arising from having a\n", + "finite-sized training dataset (smaller variance). \n", + "\n", + "The above equations tell us that in\n", + "order to minimize the expected test error, we need to select a\n", + "statistical learning method that simultaneously achieves low variance\n", + "and low bias. Note that variance is inherently a nonnegative quantity,\n", + "and squared bias is also nonnegative. Hence, we see that the expected\n", + "test MSE can never lie below $Var(\\epsilon)$, the irreducible error.\n", + "\n", + "What do we mean by the variance and bias of a statistical learning\n", + "method? The variance refers to the amount by which our model would change if we\n", + "estimated it using a different training data set. Since the training\n", + "data are used to fit the statistical learning method, different\n", + "training data sets will result in a different estimate. But ideally the\n", + "estimate for our model should not vary too much between training\n", + "sets. However, if a method has high variance then small changes in\n", + "the training data can result in large changes in the model. In general, more\n", + "flexible statistical methods have higher variance.\n", + "\n", + "You may also find this recent [article](https://www.pnas.org/content/116/32/15849) of interest." + ] + }, + { + "cell_type": "markdown", + "id": "5b5c601e", + "metadata": { + "editable": true + }, + "source": [ + "## Another Example from Scikit-Learn's Repository" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "9bc32416", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "\"\"\"\n", + "============================\n", + "Underfitting vs. Overfitting\n", + "============================\n", + "\n", + "This example demonstrates the problems of underfitting and overfitting and\n", + "how we can use linear regression with polynomial features to approximate\n", + "nonlinear functions. The plot shows the function that we want to approximate,\n", + "which is a part of the cosine function. In addition, the samples from the\n", + "real function and the approximations of different models are displayed. The\n", + "models have polynomial features of different degrees. We can see that a\n", + "linear function (polynomial with degree 1) is not sufficient to fit the\n", + "training samples. This is called **underfitting**. A polynomial of degree 4\n", + "approximates the true function almost perfectly. However, for higher degrees\n", + "the model will **overfit** the training data, i.e. it learns the noise of the\n", + "training data.\n", + "We evaluate quantitatively **overfitting** / **underfitting** by using\n", + "cross-validation. We calculate the mean squared error (MSE) on the validation\n", + "set, the higher, the less likely the model generalizes correctly from the\n", + "training data.\n", + "\"\"\"\n", + "\n", + "print(__doc__)\n", + "\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.model_selection import cross_val_score\n", + "\n", + "\n", + "def true_fun(X):\n", + " return np.cos(1.5 * np.pi * X)\n", + "\n", + "np.random.seed(0)\n", + "\n", + "n_samples = 30\n", + "degrees = [1, 4, 15]\n", + "\n", + "X = np.sort(np.random.rand(n_samples))\n", + "y = true_fun(X) + np.random.randn(n_samples) * 0.1\n", + "\n", + "plt.figure(figsize=(14, 5))\n", + "for i in range(len(degrees)):\n", + " ax = plt.subplot(1, len(degrees), i + 1)\n", + " plt.setp(ax, xticks=(), yticks=())\n", + "\n", + " polynomial_features = PolynomialFeatures(degree=degrees[i],\n", + " include_bias=False)\n", + " linear_regression = LinearRegression()\n", + " pipeline = Pipeline([(\"polynomial_features\", polynomial_features),\n", + " (\"linear_regression\", linear_regression)])\n", + " pipeline.fit(X[:, np.newaxis], y)\n", + "\n", + " # Evaluate the models using crossvalidation\n", + " scores = cross_val_score(pipeline, X[:, np.newaxis], y,\n", + " scoring=\"neg_mean_squared_error\", cv=10)\n", + "\n", + " X_test = np.linspace(0, 1, 100)\n", + " plt.plot(X_test, pipeline.predict(X_test[:, np.newaxis]), label=\"Model\")\n", + " plt.plot(X_test, true_fun(X_test), label=\"True function\")\n", + " plt.scatter(X, y, edgecolor='b', s=20, label=\"Samples\")\n", + " plt.xlabel(\"x\")\n", + " plt.ylabel(\"y\")\n", + " plt.xlim((0, 1))\n", + " plt.ylim((-2, 2))\n", + " plt.legend(loc=\"best\")\n", + " plt.title(\"Degree {}\\nMSE = {:.2e}(+/- {:.2e})\".format(\n", + " degrees[i], -scores.mean(), scores.std()))\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "eb934dbe", + "metadata": { + "editable": true + }, + "source": [ + "## Various steps in cross-validation\n", + "\n", + "When the repetitive splitting of the data set is done randomly,\n", + "samples may accidently end up in a fast majority of the splits in\n", + "either training or test set. Such samples may have an unbalanced\n", + "influence on either model building or prediction evaluation. To avoid\n", + "this $k$-fold cross-validation structures the data splitting. The\n", + "samples are divided into $k$ more or less equally sized exhaustive and\n", + "mutually exclusive subsets. In turn (at each split) one of these\n", + "subsets plays the role of the test set while the union of the\n", + "remaining subsets constitutes the training set. Such a splitting\n", + "warrants a balanced representation of each sample in both training and\n", + "test set over the splits. Still the division into the $k$ subsets\n", + "involves a degree of randomness. This may be fully excluded when\n", + "choosing $k=n$. This particular case is referred to as leave-one-out\n", + "cross-validation (LOOCV)." + ] + }, + { + "cell_type": "markdown", + "id": "c65f802b", + "metadata": { + "editable": true + }, + "source": [ + "## Cross-validation in brief\n", + "\n", + "For the various values of $k$\n", + "\n", + "1. shuffle the dataset randomly.\n", + "\n", + "2. Split the dataset into $k$ groups.\n", + "\n", + "3. For each unique group:\n", + "\n", + "a. Decide which group to use as set for test data\n", + "\n", + "b. Take the remaining groups as a training data set\n", + "\n", + "c. Fit a model on the training set and evaluate it on the test set\n", + "\n", + "d. Retain the evaluation score and discard the model\n", + "\n", + "5. Summarize the model using the sample of model evaluation scores" + ] + }, + { + "cell_type": "markdown", + "id": "9accabd4", + "metadata": { + "editable": true + }, + "source": [ + "## Code Example for Cross-validation and $k$-fold Cross-validation\n", + "\n", + "The code here uses Ridge regression with cross-validation (CV) resampling and $k$-fold CV in order to fit a specific polynomial." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "d5ed3f5c", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.model_selection import KFold\n", + "from sklearn.linear_model import Ridge\n", + "from sklearn.model_selection import cross_val_score\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "\n", + "# A seed just to ensure that the random numbers are the same for every run.\n", + "# Useful for eventual debugging.\n", + "np.random.seed(3155)\n", + "\n", + "# Generate the data.\n", + "nsamples = 100\n", + "x = np.random.randn(nsamples)\n", + "y = 3*x**2 + np.random.randn(nsamples)\n", + "\n", + "## Cross-validation on Ridge regression using KFold only\n", + "\n", + "# Decide degree on polynomial to fit\n", + "poly = PolynomialFeatures(degree = 6)\n", + "\n", + "# Decide which values of lambda to use\n", + "nlambdas = 500\n", + "lambdas = np.logspace(-3, 5, nlambdas)\n", + "\n", + "# Initialize a KFold instance\n", + "k = 5\n", + "kfold = KFold(n_splits = k)\n", + "\n", + "# Perform the cross-validation to estimate MSE\n", + "scores_KFold = np.zeros((nlambdas, k))\n", + "\n", + "i = 0\n", + "for lmb in lambdas:\n", + " ridge = Ridge(alpha = lmb)\n", + " j = 0\n", + " for train_inds, test_inds in kfold.split(x):\n", + " xtrain = x[train_inds]\n", + " ytrain = y[train_inds]\n", + "\n", + " xtest = x[test_inds]\n", + " ytest = y[test_inds]\n", + "\n", + " Xtrain = poly.fit_transform(xtrain[:, np.newaxis])\n", + " ridge.fit(Xtrain, ytrain[:, np.newaxis])\n", + "\n", + " Xtest = poly.fit_transform(xtest[:, np.newaxis])\n", + " ypred = ridge.predict(Xtest)\n", + "\n", + " scores_KFold[i,j] = np.sum((ypred - ytest[:, np.newaxis])**2)/np.size(ypred)\n", + "\n", + " j += 1\n", + " i += 1\n", + "\n", + "\n", + "estimated_mse_KFold = np.mean(scores_KFold, axis = 1)\n", + "\n", + "## Cross-validation using cross_val_score from sklearn along with KFold\n", + "\n", + "# kfold is an instance initialized above as:\n", + "# kfold = KFold(n_splits = k)\n", + "\n", + "estimated_mse_sklearn = np.zeros(nlambdas)\n", + "i = 0\n", + "for lmb in lambdas:\n", + " ridge = Ridge(alpha = lmb)\n", + "\n", + " X = poly.fit_transform(x[:, np.newaxis])\n", + " estimated_mse_folds = cross_val_score(ridge, X, y[:, np.newaxis], scoring='neg_mean_squared_error', cv=kfold)\n", + "\n", + " # cross_val_score return an array containing the estimated negative mse for every fold.\n", + " # we have to the the mean of every array in order to get an estimate of the mse of the model\n", + " estimated_mse_sklearn[i] = np.mean(-estimated_mse_folds)\n", + "\n", + " i += 1\n", + "\n", + "## Plot and compare the slightly different ways to perform cross-validation\n", + "\n", + "plt.figure()\n", + "\n", + "plt.plot(np.log10(lambdas), estimated_mse_sklearn, label = 'cross_val_score')\n", + "plt.plot(np.log10(lambdas), estimated_mse_KFold, 'r--', label = 'KFold')\n", + "\n", + "plt.xlabel('log10(lambda)')\n", + "plt.ylabel('mse')\n", + "\n", + "plt.legend()\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "db1976f4", + "metadata": { + "editable": true + }, + "source": [ + "## More examples on bootstrap and cross-validation and errors" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "3c35540c", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "# Common imports\n", + "import os\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.linear_model import LinearRegression, Ridge, Lasso\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.utils import resample\n", + "from sklearn.metrics import mean_squared_error\n", + "# Where to save the figures and data files\n", + "PROJECT_ROOT_DIR = \"Results\"\n", + "FIGURE_ID = \"Results/FigureFiles\"\n", + "DATA_ID = \"DataFiles/\"\n", + "\n", + "if not os.path.exists(PROJECT_ROOT_DIR):\n", + " os.mkdir(PROJECT_ROOT_DIR)\n", + "\n", + "if not os.path.exists(FIGURE_ID):\n", + " os.makedirs(FIGURE_ID)\n", + "\n", + "if not os.path.exists(DATA_ID):\n", + " os.makedirs(DATA_ID)\n", + "\n", + "def image_path(fig_id):\n", + " return os.path.join(FIGURE_ID, fig_id)\n", + "\n", + "def data_path(dat_id):\n", + " return os.path.join(DATA_ID, dat_id)\n", + "\n", + "def save_fig(fig_id):\n", + " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", + "\n", + "infile = open(data_path(\"EoS.csv\"),'r')\n", + "\n", + "# Read the EoS data as csv file and organize the data into two arrays with density and energies\n", + "EoS = pd.read_csv(infile, names=('Density', 'Energy'))\n", + "EoS['Energy'] = pd.to_numeric(EoS['Energy'], errors='coerce')\n", + "EoS = EoS.dropna()\n", + "Energies = EoS['Energy']\n", + "Density = EoS['Density']\n", + "# The design matrix now as function of various polytrops\n", + "\n", + "Maxpolydegree = 30\n", + "X = np.zeros((len(Density),Maxpolydegree))\n", + "X[:,0] = 1.0\n", + "testerror = np.zeros(Maxpolydegree)\n", + "trainingerror = np.zeros(Maxpolydegree)\n", + "polynomial = np.zeros(Maxpolydegree)\n", + "\n", + "trials = 100\n", + "for polydegree in range(1, Maxpolydegree):\n", + " polynomial[polydegree] = polydegree\n", + " for degree in range(polydegree):\n", + " X[:,degree] = Density**(degree/3.0)\n", + "\n", + "# loop over trials in order to estimate the expectation value of the MSE\n", + " testerror[polydegree] = 0.0\n", + " trainingerror[polydegree] = 0.0\n", + " for samples in range(trials):\n", + " x_train, x_test, y_train, y_test = train_test_split(X, Energies, test_size=0.2)\n", + " model = LinearRegression(fit_intercept=False).fit(x_train, y_train)\n", + " ypred = model.predict(x_train)\n", + " ytilde = model.predict(x_test)\n", + " testerror[polydegree] += mean_squared_error(y_test, ytilde)\n", + " trainingerror[polydegree] += mean_squared_error(y_train, ypred) \n", + "\n", + " testerror[polydegree] /= trials\n", + " trainingerror[polydegree] /= trials\n", + " print(\"Degree of polynomial: %3d\"% polynomial[polydegree])\n", + " print(\"Mean squared error on training data: %.8f\" % trainingerror[polydegree])\n", + " print(\"Mean squared error on test data: %.8f\" % testerror[polydegree])\n", + "\n", + "plt.plot(polynomial, np.log10(trainingerror), label='Training Error')\n", + "plt.plot(polynomial, np.log10(testerror), label='Test Error')\n", + "plt.xlabel('Polynomial degree')\n", + "plt.ylabel('log10[MSE]')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "e60fabdf", + "metadata": { + "editable": true + }, + "source": [ + "Note that we kept the intercept column in the fitting here. This means that we need to set the **intercept** in the call to the **Scikit-Learn** function as **False**. Alternatively, we could have set up the design matrix $X$ without the first column of ones." + ] + }, + { + "cell_type": "markdown", + "id": "9b6750d6", + "metadata": { + "editable": true + }, + "source": [ + "## The same example but now with cross-validation\n", + "\n", + "In this example we keep the intercept column again but add cross-validation in order to estimate the best possible value of the means squared error." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "5e6b91e1", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "# Common imports\n", + "import os\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.linear_model import LinearRegression, Ridge, Lasso\n", + "from sklearn.metrics import mean_squared_error\n", + "from sklearn.model_selection import KFold\n", + "from sklearn.model_selection import cross_val_score\n", + "\n", + "\n", + "# Where to save the figures and data files\n", + "PROJECT_ROOT_DIR = \"Results\"\n", + "FIGURE_ID = \"Results/FigureFiles\"\n", + "DATA_ID = \"DataFiles/\"\n", + "\n", + "if not os.path.exists(PROJECT_ROOT_DIR):\n", + " os.mkdir(PROJECT_ROOT_DIR)\n", + "\n", + "if not os.path.exists(FIGURE_ID):\n", + " os.makedirs(FIGURE_ID)\n", + "\n", + "if not os.path.exists(DATA_ID):\n", + " os.makedirs(DATA_ID)\n", + "\n", + "def image_path(fig_id):\n", + " return os.path.join(FIGURE_ID, fig_id)\n", + "\n", + "def data_path(dat_id):\n", + " return os.path.join(DATA_ID, dat_id)\n", + "\n", + "def save_fig(fig_id):\n", + " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", + "\n", + "infile = open(data_path(\"EoS.csv\"),'r')\n", + "\n", + "# Read the EoS data as csv file and organize the data into two arrays with density and energies\n", + "EoS = pd.read_csv(infile, names=('Density', 'Energy'))\n", + "EoS['Energy'] = pd.to_numeric(EoS['Energy'], errors='coerce')\n", + "EoS = EoS.dropna()\n", + "Energies = EoS['Energy']\n", + "Density = EoS['Density']\n", + "# The design matrix now as function of various polytrops\n", + "\n", + "Maxpolydegree = 30\n", + "X = np.zeros((len(Density),Maxpolydegree))\n", + "X[:,0] = 1.0\n", + "estimated_mse_sklearn = np.zeros(Maxpolydegree)\n", + "polynomial = np.zeros(Maxpolydegree)\n", + "k =5\n", + "kfold = KFold(n_splits = k)\n", + "\n", + "for polydegree in range(1, Maxpolydegree):\n", + " polynomial[polydegree] = polydegree\n", + " for degree in range(polydegree):\n", + " X[:,degree] = Density**(degree/3.0)\n", + " OLS = LinearRegression(fit_intercept=False)\n", + "# loop over trials in order to estimate the expectation value of the MSE\n", + " estimated_mse_folds = cross_val_score(OLS, X, Energies, scoring='neg_mean_squared_error', cv=kfold)\n", + "#[:, np.newaxis]\n", + " estimated_mse_sklearn[polydegree] = np.mean(-estimated_mse_folds)\n", + "\n", + "plt.plot(polynomial, np.log10(estimated_mse_sklearn), label='Test Error')\n", + "plt.xlabel('Polynomial degree')\n", + "plt.ylabel('log10[MSE]')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "e83d7b10", + "metadata": { + "editable": true + }, + "source": [ + "## Notes on scaling with examples\n", + "\n", + "The programs here use both ordinrary least squares (OLS) and Ridge\n", + "regression with one value only for the hyperparameter $\\lambda$. The\n", + "first example has no scaling and includes the intercept as well and we\n", + "are trying to fit a second-order polynomial. The second code takes out\n", + "the intercept and subtracts the mean values of each column of the\n", + "design matrix and the mean value of the outputs.\n", + "\n", + "The third and final code uses **Scikit-Learn** as library in order to\n", + "calculate the optimal parameters for OLS and Ridge regression. Note\n", + "that it is highly recommended to not include the intercept in Ridge\n", + "and Lasso regression, in order to avoid penalizing the optimization by\n", + "the intercept. The second and third codes do thus not include the\n", + "intercept. In the second code we do the scaling ourselves while the\n", + "last code uses the standard scaler option included in **Scikit-Learn**, known as centering (where\n", + "we subtract the mean values)." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "73807393", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "def MSE(y_data,y_model):\n", + " n = np.size(y_model)\n", + " return np.sum((y_data-y_model)**2)/n\n", + "\n", + "def OLS_fit_beta(X, y):\n", + " return np.linalg.pinv(X.T @ X) @ X.T @ y\n", + "\n", + "def Ridge_fit_beta(X, y,L,d):\n", + " I = np.eye(d,d)\n", + " return np.linalg.pinv(X.T @ X + L*I) @ X.T @ y\n", + "\n", + "# Same random numbers for each test.\n", + "np.random.seed(2018)\n", + "n = 100\n", + "d = 3\n", + "# hyperparameter lambda\n", + "Lambda = 0.01\n", + "\n", + "# Make data set, simple second-order polynomial\n", + "x = np.linspace(-3, 3, n)\n", + "y = 2.0 + 0.5*x + 5.0*(x**2)+ np.random.randn(n)\n", + "\n", + "# The design matrix X includes the intercept and no scaling is made\n", + "X = np.zeros((len(x), d))\n", + "for p in range(d): \n", + " X[:, p] = x ** (p) \n", + "\n", + "\n", + "#Split data, no scaling is used and we include the intercept\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n", + "\n", + "\n", + "#Calculate beta, own code\n", + "beta_OLS = OLS_fit_beta(X_train, y_train)\n", + "beta_Ridge = Ridge_fit_beta(X_train, y_train,Lambda,d)\n", + "print(beta_OLS)\n", + "print(beta_Ridge)\n", + "#predict value\n", + "ytilde_test_OLS = X_test @ beta_OLS\n", + "ytilde_test_Ridge = X_test @ beta_Ridge\n", + "\n", + "#Calculate MSE\n", + "print(\" \")\n", + "print(\"test MSE of OLS:\")\n", + "print(MSE(y_test,ytilde_test_OLS))\n", + "print(\" \")\n", + "print(\"test MSE of Ridge\")\n", + "print(MSE(y_test,ytilde_test_Ridge))\n", + "\n", + "plt.scatter(x,y,label='Data')\n", + "plt.plot(x, X @ beta_OLS,'*', label=\"OLS_Fit\")\n", + "plt.plot(x, X @ beta_Ridge, label=\"Ridge_Fit\")\n", + "plt.grid()\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "b09d20a2", + "metadata": { + "editable": true + }, + "source": [ + "In this example we do not include the intercept and we scale the data by subtracting the mean values. This follows the discussion in the [lecture material](https://compphysics.github.io/MachineLearning/doc/LectureNotes/_build/html/chapter3.html#more-on-rescaling-data).\n", + "see also the weekly slides [for week 36](https://compphysics.github.io/MachineLearning/doc/pub/week36/html/._week36-bs029.html).\n", + "It is recommended whrn we use Ridge and Lasso regression to not include the intercept in the optimization process.\n", + "\n", + "Before we discuss the code, we repeat some of the basic math from the slides of week 36.\n", + "\n", + "Let us try to understand what this may imply mathematically when we\n", + "subtract the mean values, also known as *zero centering* or simply *centering*. For\n", + "simplicity, we will focus on ordinary regression, as done in the above example.\n", + "\n", + "The cost/loss function for regression is" + ] + }, + { + "cell_type": "markdown", + "id": "ef1cec97", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\beta_0, \\beta_1, ... , \\beta_{p-1}) = \\frac{1}{n}\\sum_{i=0}^{n} \\left(y_i - \\beta_0 - \\sum_{j=1}^{p-1} X_{ij}\\beta_j\\right)^2,.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "e43c422b", + "metadata": { + "editable": true + }, + "source": [ + "Recall also that we use the squared value. This expression can lead to an\n", + "increased penalty for higher differences between predicted and\n", + "output/target values.\n", + "\n", + "What we have done is to single out the $\\beta_0$ term in the\n", + "definition of the mean squared error (MSE). The design matrix $X$\n", + "does in this case not contain any intercept column. When we take the\n", + "derivative with respect to $\\beta_0$, we want the derivative to obey" + ] + }, + { + "cell_type": "markdown", + "id": "852577bc", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\frac{\\partial C}{\\partial \\beta_j} = 0,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "4edd229a", + "metadata": { + "editable": true + }, + "source": [ + "for all $j$. For $\\beta_0$ we have" + ] + }, + { + "cell_type": "markdown", + "id": "bb93d608", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\frac{\\partial C}{\\partial \\beta_0} = -\\frac{2}{n}\\sum_{i=0}^{n-1} \\left(y_i - \\beta_0 - \\sum_{j=1}^{p-1} X_{ij} \\beta_j\\right).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "5ef162e3", + "metadata": { + "editable": true + }, + "source": [ + "Multiplying away the constant $2/n$, we obtain" + ] + }, + { + "cell_type": "markdown", + "id": "b7c5467d", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\sum_{i=0}^{n-1} \\beta_0 = \\sum_{i=0}^{n-1}y_i - \\sum_{i=0}^{n-1} \\sum_{j=1}^{p-1} X_{ij} \\beta_j.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "493c75d6", + "metadata": { + "editable": true + }, + "source": [ + "Let us specialize first to the case where we have only two parameters $\\beta_0$ and $\\beta_1$.\n", + "Our result for $\\beta_0$ simplifies then to" + ] + }, + { + "cell_type": "markdown", + "id": "862f2222", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "n\\beta_0 = \\sum_{i=0}^{n-1}y_i - \\sum_{i=0}^{n-1} X_{i1} \\beta_1.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "e0d0a4e0", + "metadata": { + "editable": true + }, + "source": [ + "We obtain then" + ] + }, + { + "cell_type": "markdown", + "id": "73d327de", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\beta_0 = \\frac{1}{n}\\sum_{i=0}^{n-1}y_i - \\beta_1\\frac{1}{n}\\sum_{i=0}^{n-1} X_{i1}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "8be27cbd", + "metadata": { + "editable": true + }, + "source": [ + "If we define" + ] + }, + { + "cell_type": "markdown", + "id": "d49a9bac", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mu_{\\boldsymbol{x}_1}=\\frac{1}{n}\\sum_{i=0}^{n-1} X_{i1},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "dd964823", + "metadata": { + "editable": true + }, + "source": [ + "and the mean value of the outputs as" + ] + }, + { + "cell_type": "markdown", + "id": "09a87e67", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mu_y=\\frac{1}{n}\\sum_{i=0}^{n-1}y_i,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "9b8797a0", + "metadata": { + "editable": true + }, + "source": [ + "we have" + ] + }, + { + "cell_type": "markdown", + "id": "30aeafdb", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\beta_0 = \\mu_y - \\beta_1\\mu_{\\boldsymbol{x}_1}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "dc867cbb", + "metadata": { + "editable": true + }, + "source": [ + "In the general case with more parameters than $\\beta_0$ and $\\beta_1$, we have" + ] + }, + { + "cell_type": "markdown", + "id": "f154321e", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\beta_0 = \\frac{1}{n}\\sum_{i=0}^{n-1}y_i - \\frac{1}{n}\\sum_{i=0}^{n-1}\\sum_{j=1}^{p-1} X_{ij}\\beta_j.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "6015f267", + "metadata": { + "editable": true + }, + "source": [ + "We can rewrite the latter equation as" + ] + }, + { + "cell_type": "markdown", + "id": "f181e88f", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\beta_0 = \\frac{1}{n}\\sum_{i=0}^{n-1}y_i - \\sum_{j=1}^{p-1} \\mu_{\\boldsymbol{x}_j}\\beta_j,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "a6e6c0e7", + "metadata": { + "editable": true + }, + "source": [ + "where we have defined" + ] + }, + { + "cell_type": "markdown", + "id": "708652ea", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mu_{\\boldsymbol{x}_j}=\\frac{1}{n}\\sum_{i=0}^{n-1} X_{ij},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "b360788c", + "metadata": { + "editable": true + }, + "source": [ + "the mean value for all elements of the column vector $\\boldsymbol{x}_j$.\n", + "\n", + "Replacing $y_i$ with $y_i - y_i - \\overline{\\boldsymbol{y}}$ and centering also our design matrix results in a cost function (in vector-matrix disguise)" + ] + }, + { + "cell_type": "markdown", + "id": "8f473602", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{\\beta}) = (\\boldsymbol{\\tilde{y}} - \\tilde{X}\\boldsymbol{\\beta})^T(\\boldsymbol{\\tilde{y}} - \\tilde{X}\\boldsymbol{\\beta}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "70f518a7", + "metadata": { + "editable": true + }, + "source": [ + "If we minimize with respect to $\\boldsymbol{\\beta}$ we have then" + ] + }, + { + "cell_type": "markdown", + "id": "674d02d9", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\hat{\\boldsymbol{\\beta}} = (\\tilde{X}^T\\tilde{X})^{-1}\\tilde{X}^T\\boldsymbol{\\tilde{y}},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "6715261c", + "metadata": { + "editable": true + }, + "source": [ + "where $\\boldsymbol{\\tilde{y}} = \\boldsymbol{y} - \\overline{\\boldsymbol{y}}$\n", + "and $\\tilde{X}_{ij} = X_{ij} - \\frac{1}{n}\\sum_{k=0}^{n-1}X_{kj}$.\n", + "\n", + "For Ridge regression we need to add $\\lambda \\boldsymbol{\\beta}^T\\boldsymbol{\\beta}$ to the cost function and get then" + ] + }, + { + "cell_type": "markdown", + "id": "17600ee3", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\hat{\\boldsymbol{\\beta}} = (\\tilde{X}^T\\tilde{X} + \\lambda I)^{-1}\\tilde{X}^T\\boldsymbol{\\tilde{y}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "a8c6f068", + "metadata": { + "editable": true + }, + "source": [ + "Now we try to implement this." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "1d89f80d", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "\n", + "np.random.seed(2018)\n", + "n = 100\n", + "# we do not include the intercept\n", + "d = 2\n", + "Lambda = 0.01\n", + "\n", + "# Make data set.\n", + "x = np.linspace(-3, 3, n)\n", + "y = 2.0 + 0.5*x + 5.0*(x**2)+ np.random.randn(n)\n", + "\n", + "#Design matrix X does not include the intercept. \n", + "X = np.zeros((len(x), d))\n", + "for p in range(d): \n", + " X[:, p] = x ** (p+1)\n", + "\n", + "\n", + "#Split data in train and test\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n", + "\n", + "# Scale data by subtracting mean value,own implementation\n", + "#For our own implementation, we will need to deal with the intercept by centering the design matrix and the target variable\n", + "X_train_mean = np.mean(X_train,axis=0)\n", + "#Center by removing mean from each feature\n", + "X_train_scaled = X_train - X_train_mean\n", + "X_test_scaled = X_test - X_train_mean\n", + "#The model intercept (called y_scaler) is given by the mean of the target variable (IF X is centered, note)\n", + "y_scaler = np.mean(y_train)\n", + "y_train_scaled = y_train - y_scaler\n", + "\n", + "\n", + "#Calculate beta\n", + "beta_OLS = OLS_fit_beta(X_train_scaled, y_train_scaled)\n", + "beta_Ridge = Ridge_fit_beta(X_train_scaled, y_train_scaled,Lambda,d)\n", + "print(beta_OLS)\n", + "print(beta_Ridge)\n", + "# calculate intercepts and print them\n", + "interceptOLS = y_scaler - X_train_mean @ beta_OLS\n", + "interceptRidge = y_scaler - X_train_mean @ beta_Ridge\n", + "print(interceptOLS)\n", + "print(interceptRidge)\n", + "\n", + "#predict value with intercept\n", + "ytilde_test_OLS = X_test_scaled @ beta_OLS+y_scaler\n", + "ytilde_test_Ridge = X_test_scaled @ beta_Ridge+y_scaler\n", + "\n", + "\n", + "#Calculate MSE\n", + "\n", + "print(\" \")\n", + "print(\"test MSE of OLS:\")\n", + "print(MSE(y_test,ytilde_test_OLS))\n", + "print(\" \")\n", + "print(\"test MSE of Ridge\")\n", + "print(MSE(y_test,ytilde_test_Ridge))\n", + "\n", + "plt.scatter(x,y,label='Data')\n", + "plt.plot(x, X @ beta_OLS+interceptOLS,'*', label=\"OLS_Fit\")\n", + "plt.plot(x, X @ beta_Ridge+interceptRidge, label=\"Ridge_Fit\")\n", + "plt.grid()\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "522668c3", + "metadata": { + "editable": true + }, + "source": [ + "Finally, instead of using our own function we repeat the same example\n", + "using the **standardscaler** functionality of the library\n", + "**Scikit-Learn**. Here we limit ourselves to Ridge regression only." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "9954bcc1", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "from sklearn import linear_model\n", + "np.random.seed(2018)\n", + "n = 10\n", + "d = 2\n", + "Lambda = 0.01\n", + "\n", + "# Make data set.\n", + "x = np.linspace(-3, 3, n)\n", + "y = 2.0 + 0.5*x + 5.0*(x**2)+ np.random.randn(n)\n", + "\n", + "# Design matrix X does not include the intercept. \n", + "X = np.zeros((n, d))\n", + "for p in range(d): \n", + " X[:, p] = x ** (p+1)\n", + "\n", + "#Split data in train and test\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n", + "# Scale data by subtracting mean value of the input using scikit-learn\n", + "scaler = StandardScaler(with_std=False)\n", + "scaler.fit(X_train)\n", + "X_train_mean = np.mean(X_train,axis=0)\n", + "X_train_scaled = scaler.transform(X_train)\n", + "X_test_scaled = scaler.transform(X_test)\n", + "# We scale also the output, here by our own code\n", + "y_scaler = np.mean(y_train)\n", + "y_train_scaled = y_train - y_scaler\n", + "y_test_scaled = y_test- y_scaler\n", + "\n", + "#Calculate beta\n", + "OLS = LinearRegression()\n", + "betaOLS=OLS.fit(X_train_scaled,y_train_scaled)\n", + "ypredictOLS = OLS.predict(X_test_scaled)\n", + "linear_model.Ridge(Lambda)\n", + "RegRidge.fit(X_train_scaled,y_train_scaled)\n", + "ypredictRidge = RegRidge.predict(X_test_scaled)\n", + "betaOLS = OLS.coef_\n", + "betaRidge = RegRidge.coef_\n", + "print(betaOLS)\n", + "print(betaRidge)\n", + "interceptOLS = np.mean(y_train) - X_train_mean @ betaOLS\n", + "interceptRidge = y_scaler - X_train_mean @ betaRidge\n", + "print(interceptOLS)\n", + "print(interceptRidge)\n", + "#predict value \n", + "ytilde_test_Ridge = X_test_scaled @ betaRidge+y_scaler\n", + "ytilde_test_OLS = X_test_scaled @ betaOLS+y_scaler\n", + "\n", + "#Calculate MSE\n", + "print(\" \")\n", + "print(\"test MSE of OLS\")\n", + "print(MSE(y_test,ytilde_test_OLS))\n", + "print(\" \")\n", + "print(\"test MSE of Ridge\")\n", + "print(MSE(y_test,ytilde_test_Ridge))\n", + "plt.scatter(x,y,label='Data')\n", + "plt.plot(x, X @ RegRidge.coef_ + RegRidge.intercept_ , label=\"Ridge_Fit\")\n", + "plt.grid()\n", + "plt.legend()\n", + "plt.show()" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +}