×

Nós usamos os cookies para ajudar a melhorar o LingQ. Ao visitar o site, você concorda com a nossa política de cookies.


image

Tölvunarfræði. María Óskarsdóttir - fyrirlestrar, Líkön í vélrænum lærdómi (gervigreind)

Líkön í vélrænum lærdómi (gervigreind)

Ókei, þá getum við byrjað. Sem sagt hérna við ætlum í dag að tala um það hvernig maður metur hversu góð sem sagt módelin manns eru þar sem að machine learning model sem maður er að búa til, hérna, skiptir náttúrulega miklu máli að vita, þú veist, hvort þeir séu að gera það sem maður vill að þau geri og það gerir maður með því að sem sagt mæla performance-inn hjá þeim, í þeim. Og hérna þetta er svona það sem við ætlum að tala um í dag, þetta þessir fjórir punktar, af hverju viljum við mæla performance-inn? Af hverju viljum evaluate-a módelin? Og svo ætlum við að fara í sem sagt svona aðferðir sem maður notar til þess að mæla þau sem sagt svona sampling aðferðir, hvernig maður getur sem sagt splittað gagnasafninu sínu til þess að mæla hversu vel þau eru að spá og svo ætlum við að tala um það, hérna, hvernig við mælum sem sagt einhvers konar mál eða measures sem getur notað til að mæla performance-inn. Og svo ætla ég að tala aðeins líka um hérna gagnasöfn sem eru ekki balönsuð sem sagt ekki í jafnvægi þar sem er mikill munur á hérna, fjölda, fjöldans sem sagt í, í target breytunni okkar sem sagt þegar maður er að reyna að spá einhverri target breytu. Og það kemur stundum fyrir eins til dæmis þegar þú ert með fraud, að það er mjög mikill imbalance í þessum, þessari fraud breytu af því það eru svo rosalega fá fraud miðað við ekki fraud. Og þá skiptir miklu máli að sem sagt að búa til jafnvægi í gagnasafninu áður en maður byrjar að spá fyrir um eitthvað. En ókei, af hverju ætlum við að hérna sem sagt mæla módelin okkar? Af hverju ætlum við að gera það? Við náttúrulega þurfum að vita hvort að hérna þau séu að gera það sem við viljum þau geri. Af því við erum með einhver gögn og það fer inn í einhvern machine learning algoritma hérna og það kemur eitthvað út, en vitum ekkert hérna hvort að þetta sem kemur út sé raunverulega það sem við viljum. Kannski er módelið bara að spá því að allir séu fraud eða allir séu ekki fraud. Og þá náttúrulega er það kannski ekki mjög gott módel ef að módelið nær ekki að finna einstaklingana sem eru fraud eða observation-irnar sem eru fraud. Og þ Og þess vegna viljum við sem sagt já eins og ég segi komast að því hvort að hvort að þetta sé að gera það sem við erum að gera. Til dæmis í þessu tilfelli hér þar sem við erum með hérna eitthvað módel sem er að taka email og er að spá fyrir um það hvort email-in sem við erum að fá í inbox-ið okkar séu hérna bara venjuleg email eða hvort þau séu spam. Og þá mundi þessi classifier hérna vera kannski að að skoða þú veist hvað hérna title-ið af, á emailinu er eða eða sem sagt emailið er svona ekki þeim sem eru að senda og þetta eru svona indicator-ar um það hvort að emailið sé spam eða ekki. Og, við náttúrulega viljum að þetta módel hér þessi classifier hérna sé að spá rétt. Við viljum ekkert fá spam í inboxið okkar við viljum að allt spam-ið fari í spam folder-inn og við viljum líka öll venjuleg email-in sem eru ekki spam, fari í inboxi-ið okkar og hérna þannig að þið hafið verið að train-a þennan classifier hér. Þá viljum við train-a hann þannig, að þjálfa hann þannig að hann classify-i rétt venjulegu email-in og spam email-in og við náttúrlega gert það með því að telja hversu mörg spam email lenda í inbox-inu og hversu mörg venjuleg email lenda í spam folder-inum. Það mundi vera mjög, hérna, já, basic aðferð til að meta það hvort þessi classifier hérna sé að standa sig eða ekki, hvort við þurfum kannski að bæta hann eða ekki. Og sem sagt þegar við erum að meta þessi módel okkar þá gerir það okkur kleift að bera saman mismunandi módel, til dæmis til þess að velja hvaða machine learning aðferð við viljum nota af því að sem sagt mismunandi aðferðir virka vel fyrir mismunandi [HIK:tilf] tilvik. Við getum líka reynt að sem sagt gera þetta til þess að bæta módelið sem við erum með það er hægt að bæta módelið á ýmsan hátt, til dæmis með því að eins og ég er rebalance data gagnasafnið að bæta við breytum og svo framvegis og þá getum við byrjað með eitthvert eitt módel og svo reynt að bæta það með því að mæla hversu mikil aukningin er í í hérna þessum performance og svo að lokum til þess að forðast það að overfitt-a gögnin okkar, overfitting er mjög algengt vandamál í þessu í machine learning af því að í staðinn fyrir að módelið læri einhver mynstur í gögnunum þá bara lærir það gögnin sjálf sem það er að nota sem input þannig að það veldur því að þegar maður gefur þú sem sagt ert að þjálfa módel á gagnasafni og módelið það bara lærir gögnin þannig að ef þú gefur þeim eitthvað nýtt gagnasafn þá getur það ekki fundið neitt í þessu nýja gagnasafni af því að það er búið að overfitt-a eins og þið sjáið hér. Þetta mundi vera dæmi fyrir classification módel og í þessu gagnasafni þá eru allir annaðhvort svona grænt x eða gulur hringur og markmiðið okkar hér er að búa til einhvers konar skil á milli þessara tveggja flokka. Og þið sjáið hérna á fyrstu myndinni þar sem við erum með underfitting þar sem við erum bara með beina línu á milli þeirra. Þar eru rosalega margir gulir punktar á græna svæðinu og, hérna, græn x á gula svæðinu. Þannig að þessi hérna classifier mundi ekkert vera neitt voðalega góður af því að það eru svo margir ranginr sem hann er að spá svo í miðjunni þar sem við erum með eitthvað sem heitir að appropriate-fitting þar erum við með grade, sem sagt þá erum við með þessi mörk sem eru búin að aðlaga sig aðeins betur að gagnasafninu. En samt sem áður eru enn þá nokkrir grænir þarna hinum megin, sem er alveg eðlilegt. Þú færð aldrei fullkomna klössun á gagnasafni en svo ertu með hérna hinum megin þar sem þú ert over-fitta gögnin þín þar erum við búin að búa til boundary sem er rosalega hérna flókið og og svo flókið að þegar þú ætlaðir að byrja henda inn nýjum punktum ef þú kæmir méð nýjan punkt sem væri kannski, hérna, gulur, þá er ekkert víst að hann mundi endilega lenda þarna inn í gula svæðinu á þessum, þessari mynd. Þannig að við erum búin að búa til sem sagt mörk á milli sem eru bara hreinlega of flókin meðan hérna megin eru mörkin of einföld og við viljum fá einhvern svona gullinn meðalveg til þess að hafa svona appropriate-fitting eins og það heitir hér. ér er annað dæmi fyrir sem sagt ef maður er með hérna regression ef þú ert að búa til módel fyrir regression sem þú vilt að falli að einhverjum svona samfelldum gögnum sem eru punktarnir hérna á línunni þá mundi skálínan hérna í underfitted rammanum er dæmi um það, þú ert með módel sem er hérna bara alls ekkert að spá neitt voðalega vel fyrir, það er ekkert að laða sig neitt voðalega vel að gögnunum hér. Af því að þið sjáið að línan hún er langt frá því að fylgja þessum punktum og svo í miðjunni þar sem við erum með gott fit, þá sjáið þið að hún svona fylgir nokkurn veginn. Ókei, punktarnir eru allir svolítið frá þessari línu en, en samt sérhver punktur er ekkert mjög langt frá. Þannig að error-in hérna myndu ekkert vera neitt voðalega mikill, meðan að hérna lengst til hægri þar sem við erum að overfit-a gögnin, við erum að láta línuna fara á milli punktana alveg þar erum við búin að hérna overfit-a af því að, af því að þetta módel er of of specific það er of hérna miklir detail-ar í því. Þannig að aftur þá viljum við fylgja hérna einhverjum gullnum meðalvegi. Og þegar við erum að tala um þetta performance þá erum við að reyna að meta hversu hérna módelið sem við búum til, módelið sem við þjálfum úr gögnum, hversu gott er það í því að spá fyrir þegar það er með ný gögn. Af því að maður er alltaf að þjálfa sem sagt módelið á einu gagnasafni og svo viljum við beita því á nýtt gagnasafn og sjá hversu vel það stendur sig á nýju gagnasafni og það er það sem við köllum performance. Hversu vel stendur módelið sig þegar þú gefur því observation-ir sem það hefur ekki séð áður. Og, það sem við þurfum að gera til þess að mæla þetta er í fyrsta lagi að, sem sagt skipta gagnasafninu upp í, upp í einhverja hluta og það eru nokkrar aðferðir til þess sem ég ætla að fara í núna á eftir. En hérna eru taldir upp nokkrir, það er bara skipta því í tvennt og svo er hægt að skipta því í marga hluta og gera svona cross-validation og svo að lokum þá viljum við líka ákveða hvaða, hvernig við viljum mæla skekkjuna eða hversu oft módelið sem sagt hefur rétt fyrir sér. Og þá erum við með mismunandi svona performance measure sem ég mun fara líka í núna á eftir. En ef við tölum eðeins meira um overfitting þá hérna finnst mér þetta svoldið góð mynd hérna. Kannski hafið þið séð hana. Hefur einhver séð svona mynd svipaða? Þið sjáið það að við erum með, hérna, eitthvað módel og módelið það getur verið mjög einfalt eða það getur verið mjög flókið og eftir því sem það er hérna flóknara módelið og munið við erum að byrja að vera með eitthvað training gagnasafn. Við erum með eitthvað gagnasafn sem við erum að þjálfa módelið á. Og við byrjum með mjög einfalt módel og þá verður sem sagt error-in mjög hár en eftir því sem módelið okkar verður flóknara og lærir betur mynstrin í gagnasafninu, þá minnkar error-in í þessu þjálfunarsafni en svo, ef við tökum þetta módel sem við erum að búa til með því að við erum að þjálfa á sem sagt þjálfunar gagnasafninu og beitum því á eitthvað svona test gagnasafn þá gerist þetta líka að fyrst eftir því sem að hérna módelið verður flóknara þá minnkar error-in í þessu test gagnasafni en svo á einhverjum tímapunkti þá verður byrjar sem sagt error-inn aftur að hækka í test safninu vegna þess að í test safninu eru hérna punktar eða observation-ir með einhverja eiginleika sem eru ekki fyrir hendi í þjálfunarsafninu. Og þess vegna getur módelið ekki hérna spáð þeim rétt af því að af því að þeir eru ekki til staðar í þjálfunarsafninu. zf því að módelið okkar er búið að læra það hvernig punktarnir í þjálfunarsafninu líta út og vita ekkert hvað þeir eiga gera við punkta sem þeir hafa aldrei séð áður og eins tengist þetta líka hvernig gagnasafnið stækkar. Ef við erum með lítið gagnasafn þá erum við oft með hérna þá sem sagt er þjálfunarskekkjan, hún eykst svona þangað til að hún nær einhverju jafnvægi eftir því sem gagnasafnið stækkar en fyrir test safnið þá minnkar skekkjan eftir því sem að gagnasafnið stækkar og hérna og hérna í upphafi þegar við erum með lítið gagnasafn þá erum við oft með mikið overfitting í gangi af því að það er svo mikill munur á þjálfunar og test gagnasöfnunum. Við vorum búin að fara í þessa mynd um daginn um sem sagt þessa hluti af machine learning sem við ætlum að tala um hér í þessu námskeiði, við ætluðum aðallega að fókusa á munið þið supervised learning og unsupervised learning og í dag þá ætla ég sem sagt að hérna, já, fókusa á þá hluta nema hvað að unsupervised learning það er hluti af hérna einni nemendakynningu sem verður annan mars, þannig að ég ætla bara að leyfa þeim hópi sem eru að tala þar að kynna fyrir okkur hvernig maður metur mælir sem sagt performance unsupervised módela af því að það er hluti af þessu K-means og svona hvernig maður metur það hversu góðir cluster-arnir manns eru. Þannig að ég ætla ekki að neitt spoil-a neitt það neitt hér. Og þið bara bíðið spenntir eftir þeim fyrirlestri en ég ætla hins vegar að tala um supervised learning af því að það er töluvert algengara heldur en unsupervised learning og kannski svona meira intuitive líka og þar að auki ætlið þið sem sagt að kynna marga mismunandi algóritma fyrir unsupervised learning þannig að það er kannski bara ágætt að við núna í dag tölum um það hvernig maður metur það hversu góðir svoleiðis algóritmar eru. En í supervised learning þá það sem við viljum gera, er að læra þessar reglur á milli input-sins og output-sins. Output-ið það sem kallast target það er sem sagt einhvers konar einhver hegðun, það getur verið já, annað hvort classification þar sem við erum að með hérna strjált target þar sem að getur verið við erum með endanlegt sett af einhverjum svona kategoríum sem getur verið þá fraud eða spam email eða litur eða kyn og svo framvegis. Og hins vegar þá erum við með regression aðferðir þar sem að target breytan er samfelld, eins og til dæmis innkoma eða aldur eða einkunn og svo framvegis. Og markmiðið í þessu er að læra sem sagt einhvers konar reglur á milli input breytanna sem getur verið alls konar getur verið hérna aldur, hæð, þyngd, innkoma hvað sem er og við viljum nota þessar input breytur til að spá fyrir um target-ið þar sem target-ið mundi þá vera fraud eða eða eitthvað annað eða í tilfellinu þar sem við vorum með email-in og við viljum nota hérna subject line-ið við viljum nota hérna email adressuna til þess að spá fyrir um það hvort að emailið sé venjulegt eða spam email. Það mundi vera classification supervised learning sem sagt application. Og, og, hérna, og í þessu tilfelli þá notum við sem sagt eitthvað svona þjálfunar gagnasafn til þess að þjálfa módelið og svo tökum við módelið sem við erum búin að þjálfa, og [HIK:bæt] sem sagt beitum því á gögn sem við höfum ekki séð áður og mælum hversu vel það er perform-ar og hérna og aftur til þess að hamra á því að ef við ofþjálfum módelið þá munum við vera með overfitting og sem þýðir það að módelið mun ekki höndla það vel að sjá að sem sagt spá fyrir um target á gögnum sem það hefur ekki séð áður. Og kannski svona smá myndrænt. Hérna, við erum með sem sagt þetta mundi vera classification við erum með eitthvað training data af eplum og og möffins og við notum það sem input í eitthvað svona machine learning model sem eru að læra mynstur og er við þjálfum eitthvað módel þarna í miðjunni. Og svo tökum við hérna eina observation, hérna, sem er sem sagt sem módelið hefur ekki séð áður og módelið veit ekki hvort þetta sé möffins eða epli, og við setjum það inn í módelið okkar og fáum út að þetta sé möffins. Þannig að svona mundi þetta virka, gróft á litið. Og svo með sem sagt classification supervised learning þá er binary classification langalgengast, þar sem að, hérna, markmiðið er að skilja á milli tveggja flokka eins og til dæmis fraud eða ekki fraud, fall eða eða ekki fall, spam eða ekki spam og þá er markmiðið líka oft sem sagt að finna þennan þennan flokk sem er, já, maður lítur á hann sem svona undesirable eða eða jafnvel desirable. En eins og til dæmis hér þá mundirðu vilja finna þá sem eru fraud. Þú mundir vilja finna það sem er spam. Það fer náttúrulega eftir því hvernig þú lítur á það, en, en það er oft litið á það þannig. Svo til dæmis kannski hérna með með það að finna hverjir eru að ná kúrsinum og hverjir eru ekki að ná kúrsinum. Hvað, hvað veldur því að nemendur falla til dæmis. Hvaða breytur eru, hafa mikið spágildi fyrir það að falla? Þetta er svona, hérna, dæmi um þetta binary classification og þegar við erum að þjálfa módel til þess að spá fyrir um þetta þá er output-ið úr módelinu, annað hvort sem sagt kategorían sem að observation-ið er sem sagt er hluti af annað hvort núll eða einn þar sem að kannski núll mundi standa fyrir venjulegt email og eitt mundi standa fyrir spam eða núll mundi standa fyrir ekki fraud og einn mundi standa fyrir fraud. Þá mundi þetta módel spá fyrir um það hvort það sé fraud, einn, eða ekki fraud, núll, og hinn bóginn þá getur útkoman úr módelinu verið líkurnar á því að, þú veist, að, að, hérna, observation-in tilheyri öðrum hvorum þessum klössum. Þannig að í tilfellinu hérna með fraud þá mundi það vera líkurnar á því að þessi einstaklingur sé fraud eða að líkurnar á því að þetta email sé spam. Þannig að þetta er svona tvenns konar output sem maður getur fengið út úr módelinu og þegar við verðum að gera þetta í Python þá einfaldlega sem sagt segir maður hérna python hvort maður vilji fá sem sagt kategoríuna sjálfa eða hvort maður vilji fá líkurnar á því að vera sem sagt kategorían. Og svo um það hvernig maður sem sagt skiptir upp gögnunum til þess að búa til þetta þjálfunar og þetta test set eins og við búin að nefna er þetta notað til þess að komast hjá því að vera að overfit-a gögnin sín og til þess að mæla hversu góð módelin eru og ég ætla að tala um hérna sem sagt þrjár algengar aðferðir, fyrsta lagi erum við með split sample method og svo erum við með cross validation og svo leave one out cross validation. Það sem að í fyrsta lagi split sample er einfaldlega þannig að við tökum gagnasafnið okkar sem við erum að vinna með, við bara skiptum því í tvennt í tvo hluta og sem sagt, og það heitir annar hlutinn heitir training set, eða þjálfunarsett, og hinn hlutinn heitir test set og eins og nöfnin benda til þá munum við nota þjálfunar settið til þess að þjálfa módelið okkar á og svo notum við test set-ið til þess að mæla hversu gott módelið er og þegar við erum að þjálfa módelið þá gefum við því gögnin með target-inu þannig að módelið þarf að vita, hérna, hvað, hvað target-ið er fyrir hverja einustu hérna mælingu það þarf að vita hvort að email-in séu spam eða eða ekki spam og svo þjálfum við módelið og módelið lærir mynstur á milli breytanna í tengslum við target-ið og svo tökum við hérna sem sagt test gagnasafnið okkar og við fjarlægjum, hérna, target-ið og við setjum gagnasafnið inn í módelið og módelið spáir fyrir um það hvort hvað sem sagt hvaða flokki hver mæling tilheyrir, hvort sé spam eða ekki og svo berum við saman við þessi raunverulegu gildi sem við héldum í burtu og og hérna og þegar verið að splitta þessu svona þá er oft hérna sem sagt er yfirleitt training safnið haft stærra, annaðhvort sextíu, sjötíu eða áttatíu prósent af heildarsafninu og þá er test safnið sem sagt restin, þannig þú skiptir safninu í sextíu, fjörutíu prósent, sjötíu þrjátíu prósent eða áttatíu tuttugu prósent þetta er náttúrulega ekkert heilagt þú getur alveg gert sjötíu og fimm, tuttugu og fimm bara eins og hentar í hvert skipti og og hérna og þetta eru oft bara svona random þá skipt bara randomly nema hérna það sem er stundum er gert líka að það er notað svona stratification og þér er bara verið að passa upp á það að það sé sama dreifing á báðum hérna klössunum í sem sagt training og test söfnunum. Þannig að ef við skoðum þetta á gífurlega fallegri mynd, þá erum við með hérna gögnin okkar og við skiptum því í tvennt. Við erum með train og test og við tökum train gögnin okkar til að byggja módelið. Svo tökum við módelið og beitum því á testið. Og þá fáum við hérna út einhvers konar score sem er þá líkurnar á því að að hérna í þessu tilfelli að vera sem sagt þetta einn sem stendur fyrir good og núll stundum fyrir bad. Þetta mundi vera hérna gögn úr til dæmis svona credit scoring þegar er verið að spá fyrir um hérna greiðslugetu. Þá erum við með hérna fimm einstaklinga og þeir eru með einhverja innkomu og sumir þeirra hafa sem sagt ekki borgað aftur hérna lánin sín á meðan aðrir gerðu það þannig að þessir góðu þeir borguðu til baka meðan þessir, þessir vondu þeir default-uðu af lánunum sínum og hérna og svo beitum við þessu á sem sagt nýja gagnasafnið. Og við sjáum til dæmis það að Emma hérna, hún fær score-ið núll komma fjörutíu og fjórir þannig að hún er sem sagt fjörutíu og fjögur prósent líkur á því að hún sé góð og Will hérna tvö hann fær score núll komma sjötíu og sex og það er aftur sjötíu og sex prósent líkur á því að hann sé góður af því að þetta er miðað við það að einn standi fyrir gott og núll standi fyrir vont. Og já, hérna eitt í viðbót að þetta er oft notað þegar maður er með sem sagt stór gagnasöfn. Ég vil ekkert gefa neinar concrete tölur af því að það náttúrulega breytist mjög fljótt hvað telst stórt og hvað telst ekki stórt. En ef þið eruð með þú veist hundrað þúsund observation-ir og yfir þá mundi þetta vera vera góð aðferð. Og svo erum við með það sem heitir cross validation eða n-fold cross validation það er eitthvað sem er notað á gagnasöfn sem eru þá aðeins minni, við getum sagt minni en hundrað þúsund, það bara fer eftir því hvað þú ert með mikla, hérna, computing power. En þetta sem sagt felst í því að maður skiptir gagnasafninu í n hluta og oft er miðað við tíu hluta en það má alveg vera hvaða önnur tala sem er og og þá er sem sagt það sem við gerum er að við ætlum að þjálfa módelið á öllum þessum hlutum nema einum og svo testum við á þessum eina sem við skildum eftir. etta endurtökum við fyrir sem sagt allar mögulegar skiptingar eins og þið sjáið hér ef við erum með gagnasafnið okkar, við skiptum því hérna í einn tvo, þrjá, fjóra, fimm, sex, sjö, já tíu hluta. Núna í fyrstu ítrun þá erum við að train-a hérna á fyrstu níu og testum á þessum tíunda í annarri ítrun þá train-um við á hérna fyrstu átta og þessum tíunda og hérna testum á þessum þarna númer níu. Þetta endurtökum við þangað til við höfum sem sagt farið yfir allt gagnasafnið þannig að allir þessir partar öll þessi fold hafa einu sinni verið sem sagt notuð til þess, til þess að testa. Og þá út úr hverju svona hverri ítrun fáum við einhvers konar hérna performance mælingu eða error af því hversu gott módelið er og þá er sem sagt heildar mælingin á performance-inu bara meðaltalið yfir öll, yfir öll þessi, öll þessi, hérna, allar þessar ítranir. Þannig að þið sjáið það að mælingarnar allar observation-irnar þær eru einhvern tímann í test hlutanum, þannig þær, þær eru allar notaðar til að test-a á og svo allar eru notaðar til þess að þjálfa á. Og eins og ég segi þá er þetta sem sagt yfirleitt gert með tíu, en það má líka alveg vera fimm eða tuttugu. Og ástæðan fyrir því að þetta virkar betur á minni gagnasöfn er einfaldlega sú að hérna maður er náttlega að þjálfa tíu módel, maður er að þjálfa módel tíu sinnum þess vegna tekur það lengri tíma. þannig að ef maður er með mjög stórt gagnasafn þá er þetta ekkert voðalega hérna þá getur þetta tekið mjög langan tíma þó að þetta sé náttúrlega miklu meira robust heldur en þetta split sample sem við notuðum sem sagt áðan. Og auk þess af því að við fáum svona meðaltal yfir performance-inn þá getum við reiknað út staðalfrávik og jafnvel hérna öryggisbil og svo framvegis. Þannig að við fáum svona betra mat á því hversu gott módelið er og svo ef við tökum þetta svona to the extreme þá fáum við það sem heitir leave one out cross validation þar sem að n er jafnt fjölda mælinga í gagnasafninu þannig að við erum alltaf að þjálfa á öllum observation-unum nema einni og svo spáum við, notum módelið sem við þjálfuðum til þess að spá fyrir um klassana á þessu þessari einu sem við skyldum eftir og þetta endurtökum við fyrir allar observation-irnar í gagnasafninu þannig að þið sjáið það að þetta tekur lengri tíma heldur en venjuleg cross validation ef þú ert að búa til jafn mörg módel eins og observation-irnar í gagnasafninu eru þannig að þetta er enn þá tímafrekara en þetta er raunverulega samt besta aðferðin en, en, hérna, en mjög sjaldan notað í praxís af því að þetta bara tekur ógeðslega langan tíma en, en hérna ég myndi segja að sem sagt, já, ten fold cross validation er bara svona gott go to ef maður er að þjálfa einhver módel. Ókei, og hvernig ætlum við svo að mæla það hversu góð módelin okkar eru? Ég ætla að fara aðeins í það hvernig sem sagt spárnar verða til að við einsog við erum búin að tala um í binary classification þar sem við erum með tvo flokka í ferlinu okkar sem sagt fókusa á það að þá sem sagt erum við að þjálfa módelið okkar og við notum hérna þjálfunarsafnið okkar með targe-inusem við þekkjum til þess að þjálfa svona supervised classification model, þannig að gögnin fara hérna í módelið og við erum að þjálfa módelið og þegar við erum búin að þjálfa módelið þá tökum við test gögnin okkar, sem sagt allar breyturnar setjum inn í módelið og við fáum út einhvers konar líkur á því að mælingarnar tilheyri öðrum hvorum flokknum. þannig að fyrsta þarna eru fjörutíu og fjögur komma tvö prósent líkur á því að þessi tilheyrir flokki eitt. Og þá mundi flokkur eitt vera til dæmis spam eða að vera góður viðskiptavinur og svo framvegis. Ókei, og svo ætlum við að bera þessa spá sem við fengum út þennan dálk hérna. Bera þetta saman við target-ið sem er vitað, sem við vissum fyrir fram. Og þá sjáum við það til dæmis hérna að hérna tíunda röðin, hann er hérna venjulegur tölvupóstur, hann er með núll, og líkurnar á því að hann sé einn er hérna núll komma tveir einn þrír. Ókei, og svo til þess að vita það hvort að við séum að spá rétt eða ekki þá þarf maður að ákvarða eitthvað svona cut-off gildi, þar sem við segjum, ókei, allir sem eru með spágildi fyrir ofan þetta cut-off þeir eru einn og allir hinir eru núll. Þannig að ef við berum saman þennan hérna dálk og þennan hérna dálk þá sjáum við það að fyrsta mælingin er núll af því að hún er minna en hálfur á meðan að mæling fjögur er einn af því hún er stærri en hálfur og svo getum við bara borið saman þessa tvo dálka, real target og predicted target, og bara séð hversu oft höfum við rétt fyrir okkur. Þannig að fyrir fyrstu mælingunna, þar er raunverulega target-ið einn en við spáðum að það væri núll þannig að við höfðum rangt fyrir okkur, önnur mælingin þá er raunverulega target-ið núll og við spáðum að væri núll þannig að við höfðum rétt fyrir okkur. Við getum bara hreinlega talið hversu oft höfðum við rétt fyrir okkur og ef við gerum það þá sjáum við það að það var átta sinnum af tíu í heildina þannig að accuracy-ið hérna sem er fyrsta sem sagt svona performance measure-ið það er áttatíu prósent, af því áttatíu skiptum höfðum við rétt fyrir okkur. Þið sjáið það að ef við myndum breyta cut-off-inu í staðinn fyrir að vera með núll komma fimm þá er það núll komma sjö. Þá breytist spáða target-ið þá breytist spágildið sem veldur því að til dæmis, úps. Nei, það er hérna, sex er, sex breyttist, það fór úr einum í það að vera núll. Þannig að í þessu tilfelli þá eru höfum við rétt fyrir okkur bara sjö skipti af tíu, þannig að accuracy-ið er sjötíu prósent. Og þarna sjáið þið hvernig að sem sagt þetta spágildi er háð þessu cut-off-i sem að við ákvörðum. Þetta heitir confusion matrix og þetta sem sagt hérna er notað til þess að lista, hversu oft við höfðum rétt fyrir okkur og hversu oft við höfðum rangt fyrir okkur og ef þið horfið á þetta þá sjáið þið að þetta er mjög líkt töflu sem við sáum þarna um daginn þegar við vorum hypothesis testing, er það ekki? Af því að við erum að spá fyrir um eitthvað og stundum höfum við rétt fyrir okkur og stundum ekki, hérna megin erum við með það sem við sem sagt spáðum, predicted class, og þarna uppi erum við með sem sagt það sem er raunverulegt, það sem er rétt, actual class og við sjáum það að hérna þegar eitthvað er af class-anum eitt sem sagt actual class-ar eitt og við spáðum fyrir að það væri eitt þá erum við með true positive og eins ef það var núll og við spáðum núll þá erum við með true negative ef það var einn og við spáðum fyrir núll þá er það false negative og ef það var núll og við spáðum fyrir um einn þá er það false positive. Og þessi gildi getum við notað til þess að meta sem sagt hversu gott módelið okkar er með því að nota ýmsar sem sagt svona measures og þetta er sem sagt listi af performance measures sem er hægt að leiða út frá þessu confusion matrix-i sem við vorum með þarna seinstu glæru og við erum strax nú þegar búin að prófa að reikna accuracy segjum bara hversu oft við höfum rétt fyrir okkur miðað við stærð gagnasafnsins það er sem sagt true positive plús true negative deilt með bara heildarfjölda af af hérna mælingum og svo á móti þá er error rate það er bara andstæðan við accuracy hversu oft höfðum við rangt fyrir okkur. Það var sem sagt false positive og false negative. Og svo erum við með sem sagt eitt sem heitir recall sem að hérna mælir það hversu oft við höfum rétt fyrir okkur innan sem sagt innan raunverulegra sannra gilda og á móti þá erum við með specificity sem að gerir andstæðuna og svo er f einn score sem er mjög oft notað líka. Það er svona, hérna, það sem heitir harmonic mean af precision og recall, og þá sem sagt það er sem sagt tala á milli núll og eins sem að sem sagt segir manni hversu gott módelið er út frá þessum tveimur sem sagt hinum mælingum. En takið eftir því að sem sagt allar þessar öll þessi gildi, þau eru háð cut-off-inu sem ákvörðuðum og hérna. ar af leiðandi eru þau kannski svolítið takmörkuð en ég ætla að útskýra aðeins betur hérna precision og recall af því þeir skipta svolítið miklu máli þegar maður er að reyna að finna einhverja ákveðna hegðun í gagnasafninu sínu þannig að hérna á myndinni hér erum við með sem sagt allar mælingarnar okkar, og, það sem er inni í hringnum, er það sem að módelið okkar spáði sem hérna einn til dæmis allt sem módelið spáði sem spam og þannig að þið sjáið það að hérna græni hlutinn inni í hringnum það eru sem sagt true positives sem sagt allir sem voru spam og voru spáðir sem spam meðan að rauði hlutinn eru allir sem að voru spam en módelið spáði sem ekki spam. Og þ Og þá er precision módelsins nákvæmnin í módelinu er hlutfallið þarna á milli. Hversu oft vorum við með sem sagt hversu oft spáði módelið að það væri spam og það var spam deilt með hversu oft módelið spáði að það væri spam sem sagt hversu, mörg hit af spömum. Já, ok. mörg hversu oft innan, sem sagt þessum svæði þar sem hann spáði því að það væri spam var það raunverulega spam, og það heitir sem sagt precision. Og svo erum við með hérna, já, eins og stendur þarna how many selected items are relevant af því að módelið sem velur hluta af mælingunum okkar og hversu mörg af þessum sem að módelið mældi voru sönn og rétt. Og svo á hinn bóginn þá erum við með recall þar sem við erum að velta fyrir okkur hversu hérna mörg af þessum relevant item-um voru valin hversu mörg af spömunum okkar voru hérna spáð sem spam. Já, og hérna er bara mjög einfalt dæmi um það hvernig maður getur reiknað mismunandi performance-a. Við erum með hérna accuracy við erum með error, sensitivity og specificity og svo eins og ég er búinn að nefna þá eru öll þessi sem eru tengd þessu confusion matrix-i þau eru háð cut-off-inu þannig að ef maður breytir cut-off-inu þá breytist líka performance-inn. Og þar af leiðandi er mjög gott að vera með einhverja mælingu sem, eitthvað mál sem er ekki háð þessu cut-off-i og það er til dæmis hérna A U C eða area under the receiver operating characteristic curve sem að er svona hérna, þetta er svona kúrfa þetta ROC er svona kúrfa sem að við getum plottað út frá gögnunum okkar. Þar sem við erum raunverulega að taka cut-off-ið og við erum að breyta því, láta það breytist frá því að vera núll og uppí einn og fyrir hvert gildi af cut-off-inu þá reiknum við annars vegar recall og hins vegar specificity og plottum það svona upp. Þannig að fyrir hvert gildi af cut-off-inu reiknum við þessar tvær stærðir og plottum það svona upp og þá fáum við þessa kúrfu. Og þessi kúrfa segir okkur til um það hversu gott módelið okkar er óháð cut-off-i og þannig að þessi bláa lína bara sem sagt hérna á milli núll komma eins og eins komma eins þetta er hérna þetta mundi þá vera random módel, þannig að við erum með módel sem að spáir bara randomly, hvort að emailið sé spam eða ekki spam. Þetta mundi vera ROC kúrfan fyrir það þannig að það mundi allt sem er fyrir neðan þessa línu er mjög slæmt þá erum við að spá verr fyrir heldur en random model. við erum alltaf að reyna að gera þessa kúrfu eins hátt upp og við getum. Þegar við erum að byggja módelin okkar, þá viljum við alltaf þessi kúrfa sé sem sagt fyrir ofan alla skálínuna og eins hátt upp og við hérna mögulega getum og þá er sem sagt kemur að góðum notum það sem heitir A U C þar sem við reiknum einfaldlega flatarmálið undir þessari kúrfu, það er sem sagt area under the curve. Og það er tala sem er á bilinu núll til einn þar sem einn er sem sagt fullkomið módel og núll mundi vera módel sem spáir alltaf rangt. En hálfur þið sjáið það að flatarmálið undir hérna bláu línunni er er hálfur þannig að hérna málið fyrir fyrir hérna random módel er hálfur og við erum þá alltaf að reyna að búa til módel sem er betra heldur en hálfur og helst sem næst einum og þá getum við borið saman sem sagt módelin okkar með því að bera saman hérna þessi A U C gildi og því hærra sem A U C ið er því betra. Þannig að þið sjáið þetta aftur hérna við erum með sem sagt flatarmálið undir þessum ferli það er A U C ið og við viljum að sé stærra til þess að hafa betra módel. Nákvæmara módel. Og þá gefur þessi tala svona hérna svona mat á því hversu, já, hversu gott módelið er og, og, hérna, Já, ég var búinn að segja þetta allt saman held ég. Ókei og svo í, í A U C inu þá erum við að bera saman recall og sensitivity en svo ef við berum saman recall og precision þá fáum við það sem heitir precision recall curve sem er líka mjög góður stiki til þess að mæla svona sem sagt módelin okkar hversu góð þau eru. Þar sem við erum aftur á sama hátt að breyta cut-off gildinu frá núlli og upp í einn og reikna fyrir hvert cut-off bæði recall og precision. Svo getum við plottað þessa kúrfu sem er þá þessi gula línan hér, og, og, hérna, svo getum við sem sagt fundið hvað flatarmálið er undir þessum ferli og þá fáum við sem sagt mat á því hversu gott módelið er og við getum notað þetta gildi til þess að bera saman mismunandi módel og aftur þá er sem sagt því hærra sem þetta hérna flatarmál undir ferlinum er því því betra er módelið því nákvæmari er módelið. Þið sjáið það að ef hérna að við viljum sem sagt hafa bæði hátt precision og hátt recall og eftir því sem bæði eru hærri þá náttúrulega verður kúrfan lengra upp þarna í hægra horninu og þá verður flatarmálið stærra. Þannig að það er mjög gott að kunna góð skil á þessu. Þetta er mjög mikilvægt mál fyrir svona binary classification methods þetta er mjög mjög mikið notað, þetta A U C og svo eins, hérna, þetta precision recall curve þetta er líka mjög mikilvægt og sérstaklega ef maður er að vinna með gagnasöfn þar sem er hérna mikill unbalance á milli hérna Og svo er náttlega til alveg mígrúta af fleiri málum til þess að mæla hérna hversu góð módelin eru þetta er það sem að Python býður upp á. Þið sjáið það að við erum búin að tala um hérna ROC curve og við erum búin að tala um recall og precision og svo eru fleiri það eru þarna log loss, það er jaccard, það er hamming, það er hérna cohen kappa alls konar og yfirleitt er þetta bara alls konar mælikvarðar á sem sagt þessu confusion matrix sem maður er að taka saman tölurnar á mismunandi hátt til þess að spá fyrir um einhverja ákveðna eiginleika módelsins. Og það kannski bara fer eftir því svolítið hvað maður er hvað það er sem maður vill finna en það sem er langmest notað er náttúrlega accuracy af því það er bara hversu oft spáir þú rétt og svo eins recall og precision eru mjög mikilvæg og A U C er hérna er mjög mikilvægt. Og svo ef við erum með sem sagt í regresion módel þar sem við erum að spá fyrir um eitthvað sem er samfellt þá erum við líka með lista af alls konar málum sem við getum notað þegar við erum með regresion módel, þá erum við ekki bara að spá fyrir um það hvort einhver sé hluti af einhverjum hóp eða ekki, heldur er spágildið okkar bara einhver tala og þá er tilgangur sem sagt að maður ber saman þessa tölu við sanna gildið og maður tekur sem sagt mismuninn á milli þeirra til þess að einhvern error út og svo erum við með mismunandi týpur af þessum error-um við erum með hérna sem sagt min squared error þar sem maður er búinn að setja þau öll í annað veldi. Maður er með absolute error þar sem maður tekur tölugildið og svo framvegis. Þannig maður er alltaf bara svona mæla í heildina hversu langt spágildið er frá raunverulega gildinu. Ókei, svo um gagnasöfn sem eru ekki í jafnvægi unbalanced data. Ókei, gerum ráð fyrir því að við séum að þjálfa módel sem hérna er þannig þegar við erum búin að þjálfa það að það spáir því að allir séu í sama hérna flokknum það spáir því að öll email-in séu venjuleg email og hérna við sem sagt apply-um sem sagt beitum þessu módeli á test sett þar sem eru hundrað mælingar og hérna við vitum það að níutíu og níu af þessum mælingum eru í class, klassa núll og ein er í klassa eitt þannig að við getum ímyndað okkur það að þetta er safn af email-um og við vitum það að níutíu og níu þeirra eru hérna venjuleg, en það er eitt email sem er spam. Hvað hérna, hvert er accuracy-ið í þessum módelum, ef við ætlum að mæla accuracy-ið. Við erum með hundrað mælingar og módelið spáir því að allir séu núll. Níutíu og níu. Nákvæmlega þannig að ef við setjum þetta upp í confusion matrix-ið okkar, þá erum við með hérna hinn sanna klasa og spáðan klasa og sem sagt sannur klassi er hérna það eru níutíu og níu sem eru hérna núll og einn sem er eitt nema það að allir eru spáðir í núll. Þannig að svona lítur confusion fylkið okkar út og við getum reiknað út accuracy-ið sem er þá bara gildin á hornalínunni níutíu og níu plús núll og svo deilt með heildarfjölda þannig að við erum með accuracy sem er níutíu og níu sem er bara rosalega hátt af því accuracy er á bilinu núll og uppí einn. Ef accuracy-ið er einn þá erum við með fullkomið módel. Þannig að jafnvel þó að þetta módel sem við þjálfuðum hérna finni ekki þessa einu observation sem er spam þá erum við með ógeðslega hátt accuracy, bara, þú veist, maður lítur á þetta bara eitthvað: Vá heyrðu, þetta er gott módel. En módelið það finnur ekki neitt. Og það er vegna þess að það hefur verið þjálfað á gagnasafni sem að er sem sagt imbalanced og þess vegna er það getur það ekki fundið hérna, getur það ekki classify-að mælingarnar í gagnasafninu okkar. Af því að við erum með of mikið af hérna mælingum sem eru í þessum majority klassa og þær bara dominate-a þegar það er verið að þjálfa módelið þá bara dominate-a þær yfir þessum hinum sem eru í minority klassanum og þess vegna lærir módelið ekki mynstrin fyrir minority klassan. Og þetta er sem sagt dæmi um gagnasafn sem er hérna unbalanced og við þurfum þá að grípa til einhverja aðgerða til þess að laga þetta svo að við getum fundið af því auðvitað viljum við finna þessar mælingar sem eru öðruvísi. Ef þetta er til dæmis þessi spam filter sem við töluðum um áðan þá viljum við að sjálfsögðu geta fundið spam email-in svo þau fari í spam möppuna en ekki bara inbox-ið okkar. Já, þannig að class imbalance balance er þegar að er einn af klössunum í target breytunni okkar eru sem sagt underrepresented það er ekki nógu mikið af þeim og í sumum tilfellum er þetta mjög alvarlegt vandamál eins til dæmis þegar maður að spá fyrir um fraud af því að fraud er svo rosalega algengt. Þá er maður með þúst núll komma eitt prósent af öllum í target breytunni eru núll komma eða, þú veist, já, ein af þúsund er fraud og þá er mjög erfitt að finna þær. Og þegar þessi imbalance er sem sagt minni heldur en tíu prósent, þannig að ef að sem sagt, ef við erum með, að hérna class eitt, class núll, fyrirgefið þið er níutíu prósent, og class eitt er tíu prósent, þá ættum við að grípa til aðgerða og reyna að koma á jafnvægi í gagnasafninu okkar. Þannig að ef það er þetta eða minna sem sagt class eitt er hefur minna vægi heldur en tíu prósent þá ættum við að grípa til aðgerða og það eru sem betur fer til aðferðir til þess að hérna laga þetta, það er einfaldlega að, já, búa til jafnvægi í gagnasafninu. Og fyrsta svona naive aðferðin er að taka hérna gagnasafnið okkar. Þið sjáið það að við erum með fjórar, fjórir sinnum einn af þessum fjórtán mælingum hérna og við ætlum að koma þessu gagnasafni á jafnvægi með því að nota þetta sem heitir under sampling þá bara einfaldlega fjarlægjum við af handahófi, mælingar sem eru í klassanum núll áður en við þjálfum módelið þannig að það mundi vera svona til dæmis bara ákveðum það að fjarlægja nokkrar mælingar. Og þá erum við komin með minority klassa í fjörutíu prósent sem er meira jafnvægi heldur en við vorum með áður, og nota bene að hérna markmiðið er ekki endilega koma á fullkomnu jafnvægi, það er nóg að það sé þið vitið þrjátíu prósent eða fjörutíu prósent. Það þarf ekki að vera fifty fifty. Þegar maður talar um að balance-a gagnasafn þá er það ekki að koma því fullkomið jafnvægi, bara að auka minority klassan þannig að algóritmarnir geti fundið, sem sagt lært mynstrin. Af því ef við balance-um það alveg þið sjáið það ef maður fer úr, þú veist, eitt prósent við erum með eitt prósent og níutíu og níu prósent, ef maður fer úr því í fifty fifty þá þyrfti því maður hérna, ef maður notar þessa aðferð að fjarlægja rosalega mikið af línum og þá ertu of mikið distort-a gagnasafnið sem að bara veldur skekkju líka. Þannig að maður þarf að gera þetta svolítið varlega, prófa sig áfram og og hérna og bara finna svona einhvern hérna gullinn gullinn meðalveg. En maður getur fjarlægt línur, maður getur bætt við línum til dæmis með því að nota það sem heitir random over sampling þar sem maður tekur hérna þessar mælingar þar sem að klassinn er, hérna, einn og bara tvöfaldar þær bara duplicate-ar þær hérna þær línur, þannig að hérna ef við mundum duplicate-a nokkrar af þessum hérna línum sem að eru í með target-ið einn, þá þá mundi það líta svona út. Og þá erum við með hérna kominn með aðeins betra, hérna, vægi fyrir minority klassann. En þetta getur líka valdið vandamálum af því að hérna að maður er bara að tvöfalda einhverjar mælingar, og þá býr maður líka til bias því þær náttúrulega þessar mælingar sem eru með target-ið einn þær eru eitthvað svo mikið eins og þá náttúrulega gerist ekkert í raunveruleikanum að að þær mundu vera nákvæmlega eins þannig að það er svolítið [HIK:óraun] óraunhæft að bara duplicate-a. Þannig að það er búið að þróa meiri sophisticated aðferðir til þess að duplicate-a sem sagt observation-ir til dæmis með þessari aðferð sem heitir SMOTE eða synthetic minority over-sampling technique sem að er sýnd hér, það sem við erum með hérna þessa grænu sem eru af majority klassanum og förum með þessa rauða sem eru minority class og hérna já, þetta svona sýnir aðeins hvernig það virkar að maður sem sagt tengir saman þessar mælingar sem eru í minority klasanum, og svo býr maður til nýjar hérna mælingar á þessum [HIK:ten] sem sagt línum sem að tengja þær Þannig að í staðinn fyrir bara að tvöfalda einhverja mælingu þá svona hérna reynir maður svona aðeins að, að varia líka gildunum á hinum breytunum. Hún er ekki bara nákvæmlega eins heldur er aðeins meira svona variation í í gildunum. Og þetta er mjög hérna mjög sem sagt skilvirk og góð aðferð til þess að balance-a gagnasafn. Ókei, þá er ég búinn með glærurnar mínar. Ég ætla að fara í, í Python eftir fimm mínútna pásu. Er það ekki?


Líkön í vélrænum lærdómi (gervigreind)

Ókei, þá getum við byrjað. Sem sagt hérna við ætlum í dag að tala um það hvernig maður metur hversu góð sem sagt módelin manns eru þar sem að machine learning model sem maður er að búa til, hérna, skiptir náttúrulega miklu máli að vita, þú veist, hvort þeir séu að gera það sem maður vill að þau geri og það gerir maður með því að sem sagt mæla performance-inn hjá þeim, í þeim. Og hérna þetta er svona það sem við ætlum að tala um í dag, þetta þessir fjórir punktar, af hverju viljum við mæla performance-inn? Af hverju viljum evaluate-a módelin? Og svo ætlum við að fara í sem sagt svona aðferðir sem maður notar til þess að mæla þau sem sagt svona sampling aðferðir, hvernig maður getur sem sagt splittað gagnasafninu sínu til þess að mæla hversu vel þau eru að spá og svo ætlum við að tala um það, hérna, hvernig við mælum sem sagt einhvers konar mál eða measures sem getur notað til að mæla performance-inn. Og svo ætla ég að tala aðeins líka um hérna gagnasöfn sem eru ekki balönsuð sem sagt ekki í jafnvægi þar sem er mikill munur á hérna, fjölda, fjöldans sem sagt í, í target breytunni okkar sem sagt þegar maður er að reyna að spá einhverri target breytu. Og það kemur stundum fyrir eins til dæmis þegar þú ert með fraud, að það er mjög mikill imbalance í þessum, þessari fraud breytu af því það eru svo rosalega fá fraud miðað við ekki fraud. Og þá skiptir miklu máli að sem sagt að búa til jafnvægi í gagnasafninu áður en maður byrjar að spá fyrir um eitthvað. En ókei, af hverju ætlum við að hérna sem sagt mæla módelin okkar? Af hverju ætlum við að gera það? Við náttúrulega þurfum að vita hvort að hérna þau séu að gera það sem við viljum þau geri. Af því við erum með einhver gögn og það fer inn í einhvern machine learning algoritma hérna og það kemur eitthvað út, en vitum ekkert hérna hvort að þetta sem kemur út sé raunverulega það sem við viljum. Kannski er módelið bara að spá því að allir séu fraud eða allir séu ekki fraud. Og þá náttúrulega er það kannski ekki mjög gott módel ef að módelið nær ekki að finna einstaklingana sem eru fraud eða observation-irnar sem eru fraud. Og þ Og þess vegna viljum við sem sagt já eins og ég segi komast að því hvort að hvort að þetta sé að gera það sem við erum að gera. Til dæmis í þessu tilfelli hér þar sem við erum með hérna eitthvað módel sem er að taka email og er að spá fyrir um það hvort email-in sem við erum að fá í inbox-ið okkar séu hérna bara venjuleg email eða hvort þau séu spam. Og þá mundi þessi classifier hérna vera kannski að að skoða þú veist hvað hérna title-ið af, á emailinu er eða eða sem sagt emailið er svona ekki þeim sem eru að senda og þetta eru svona indicator-ar um það hvort að emailið sé spam eða ekki. Og, við náttúrulega viljum að þetta módel hér þessi classifier hérna sé að spá rétt. Við viljum ekkert fá spam í inboxið okkar við viljum að allt spam-ið fari í spam folder-inn og við viljum líka öll venjuleg email-in sem eru ekki spam, fari í inboxi-ið okkar og hérna þannig að þið hafið verið að train-a þennan classifier hér. Þá viljum við train-a hann þannig, að þjálfa hann þannig að hann classify-i rétt venjulegu email-in og spam email-in og við náttúrlega gert það með því að telja hversu mörg spam email lenda í inbox-inu og hversu mörg venjuleg email lenda í spam folder-inum. Það mundi vera mjög, hérna, já, basic aðferð til að meta það hvort þessi classifier hérna sé að standa sig eða ekki, hvort við þurfum kannski að bæta hann eða ekki. Og sem sagt þegar við erum að meta þessi módel okkar þá gerir það okkur kleift að bera saman mismunandi módel, til dæmis til þess að velja hvaða machine learning aðferð við viljum nota af því að sem sagt mismunandi aðferðir virka vel fyrir mismunandi [HIK:tilf] tilvik. Við getum líka reynt að sem sagt gera þetta til þess að bæta módelið sem við erum með það er hægt að bæta módelið á ýmsan hátt, til dæmis með því að eins og ég er rebalance data gagnasafnið að bæta við breytum og svo framvegis og þá getum við byrjað með eitthvert eitt módel og svo reynt að bæta það með því að mæla hversu mikil aukningin er í í hérna þessum performance og svo að lokum til þess að forðast það að overfitt-a gögnin okkar, overfitting er mjög algengt vandamál í þessu í machine learning af því að í staðinn fyrir að módelið læri einhver mynstur í gögnunum þá bara lærir það gögnin sjálf sem það er að nota sem input þannig að það veldur því að þegar maður gefur þú sem sagt ert að þjálfa módel á gagnasafni og módelið það bara lærir gögnin þannig að ef þú gefur þeim eitthvað nýtt gagnasafn þá getur það ekki fundið neitt í þessu nýja gagnasafni af því að það er búið að overfitt-a eins og þið sjáið hér. Þetta mundi vera dæmi fyrir classification módel og í þessu gagnasafni þá eru allir annaðhvort svona grænt x eða gulur hringur og markmiðið okkar hér er að búa til einhvers konar skil á milli þessara tveggja flokka. Og þið sjáið hérna á fyrstu myndinni þar sem við erum með underfitting þar sem við erum bara með beina línu á milli þeirra. Þar eru rosalega margir gulir punktar á græna svæðinu og, hérna, græn x á gula svæðinu. Þannig að þessi hérna classifier mundi ekkert vera neitt voðalega góður af því að það eru svo margir ranginr sem hann er að spá svo í miðjunni þar sem við erum með eitthvað sem heitir að appropriate-fitting þar erum við með grade, sem sagt þá erum við með þessi mörk sem eru búin að aðlaga sig aðeins betur að gagnasafninu. En samt sem áður eru enn þá nokkrir grænir þarna hinum megin, sem er alveg eðlilegt. Þú færð aldrei fullkomna klössun á gagnasafni en svo ertu með hérna hinum megin þar sem þú ert over-fitta gögnin þín þar erum við búin að búa til boundary sem er rosalega hérna flókið og og svo flókið að þegar þú ætlaðir að byrja henda inn nýjum punktum ef þú kæmir méð nýjan punkt sem væri kannski, hérna, gulur, þá er ekkert víst að hann mundi endilega lenda þarna inn í gula svæðinu á þessum, þessari mynd. Þannig að við erum búin að búa til sem sagt mörk á milli sem eru bara hreinlega of flókin meðan hérna megin eru mörkin of einföld og við viljum fá einhvern svona gullinn meðalveg til þess að hafa svona appropriate-fitting eins og það heitir hér. ér er annað dæmi fyrir sem sagt ef maður er með hérna regression ef þú ert að búa til módel fyrir regression sem þú vilt að falli að einhverjum svona samfelldum gögnum sem eru punktarnir hérna á línunni þá mundi skálínan hérna í underfitted rammanum er dæmi um það, þú ert með módel sem er hérna bara alls ekkert að spá neitt voðalega vel fyrir, það er ekkert að laða sig neitt voðalega vel að gögnunum hér. Af því að þið sjáið að línan hún er langt frá því að fylgja þessum punktum og svo í miðjunni þar sem við erum með gott fit, þá sjáið þið að hún svona fylgir nokkurn veginn. Ókei, punktarnir eru allir svolítið frá þessari línu en, en samt sérhver punktur er ekkert mjög langt frá. Þannig að error-in hérna myndu ekkert vera neitt voðalega mikill, meðan að hérna lengst til hægri þar sem við erum að overfit-a gögnin, við erum að láta línuna fara á milli punktana alveg þar erum við búin að hérna overfit-a af því að, af því að þetta módel er of of specific það er of hérna miklir detail-ar í því. Þannig að aftur þá viljum við fylgja hérna einhverjum gullnum meðalvegi. Og þegar við erum að tala um þetta performance þá erum við að reyna að meta hversu hérna módelið sem við búum til, módelið sem við þjálfum úr gögnum, hversu gott er það í því að spá fyrir þegar það er með ný gögn. Af því að maður er alltaf að þjálfa sem sagt módelið á einu gagnasafni og svo viljum við beita því á nýtt gagnasafn og sjá hversu vel það stendur sig á nýju gagnasafni og það er það sem við köllum performance. Hversu vel stendur módelið sig þegar þú gefur því observation-ir sem það hefur ekki séð áður. Og, það sem við þurfum að gera til þess að mæla þetta er í fyrsta lagi að, sem sagt skipta gagnasafninu upp í, upp í einhverja hluta og það eru nokkrar aðferðir til þess sem ég ætla að fara í núna á eftir. En hérna eru taldir upp nokkrir, það er bara skipta því í tvennt og svo er hægt að skipta því í marga hluta og gera svona cross-validation og svo að lokum þá viljum við líka ákveða hvaða, hvernig við viljum mæla skekkjuna eða hversu oft módelið sem sagt hefur rétt fyrir sér. Og þá erum við með mismunandi svona performance measure sem ég mun fara líka í núna á eftir. En ef við tölum eðeins meira um overfitting þá hérna finnst mér þetta svoldið góð mynd hérna. Kannski hafið þið séð hana. Hefur einhver séð svona mynd svipaða? Þið sjáið það að við erum með, hérna, eitthvað módel og módelið það getur verið mjög einfalt eða það getur verið mjög flókið og eftir því sem það er hérna flóknara módelið og munið við erum að byrja að vera með eitthvað training gagnasafn. Við erum með eitthvað gagnasafn sem við erum að þjálfa módelið á. Og við byrjum með mjög einfalt módel og þá verður sem sagt error-in mjög hár en eftir því sem módelið okkar verður flóknara og lærir betur mynstrin í gagnasafninu, þá minnkar error-in í þessu þjálfunarsafni en svo, ef við tökum þetta módel sem við erum að búa til með því að við erum að þjálfa á sem sagt þjálfunar gagnasafninu og beitum því á eitthvað svona test gagnasafn þá gerist þetta líka að fyrst eftir því sem að hérna módelið verður flóknara þá minnkar error-in í þessu test gagnasafni en svo á einhverjum tímapunkti þá verður byrjar sem sagt error-inn aftur að hækka í test safninu vegna þess að í test safninu eru hérna punktar eða observation-ir með einhverja eiginleika sem eru ekki fyrir hendi í þjálfunarsafninu. Og þess vegna getur módelið ekki hérna spáð þeim rétt af því að af því að þeir eru ekki til staðar í þjálfunarsafninu. zf því að módelið okkar er búið að læra það hvernig punktarnir í þjálfunarsafninu líta út og vita ekkert hvað þeir eiga gera við punkta sem þeir hafa aldrei séð áður og eins tengist þetta líka hvernig gagnasafnið stækkar. Ef við erum með lítið gagnasafn þá erum við oft með hérna þá sem sagt er þjálfunarskekkjan, hún eykst svona þangað til að hún nær einhverju jafnvægi eftir því sem gagnasafnið stækkar en fyrir test safnið þá minnkar skekkjan eftir því sem að gagnasafnið stækkar og hérna og hérna í upphafi þegar við erum með lítið gagnasafn þá erum við oft með mikið overfitting í gangi af því að það er svo mikill munur á þjálfunar og test gagnasöfnunum. Við vorum búin að fara í þessa mynd um daginn um sem sagt þessa hluti af machine learning sem við ætlum að tala um hér í þessu námskeiði, við ætluðum aðallega að fókusa á munið þið supervised learning og unsupervised learning og í dag þá ætla ég sem sagt að hérna, já, fókusa á þá hluta nema hvað að unsupervised learning það er hluti af hérna einni nemendakynningu sem verður annan mars, þannig að ég ætla bara að leyfa þeim hópi sem eru að tala þar að kynna fyrir okkur hvernig maður metur mælir sem sagt performance unsupervised módela af því að það er hluti af þessu K-means og svona hvernig maður metur það hversu góðir cluster-arnir manns eru. Þannig að ég ætla ekki að neitt spoil-a neitt það neitt hér. Og þið bara bíðið spenntir eftir þeim fyrirlestri en ég ætla hins vegar að tala um supervised learning af því að það er töluvert algengara heldur en unsupervised learning og kannski svona meira intuitive líka og þar að auki ætlið þið sem sagt að kynna marga mismunandi algóritma fyrir unsupervised learning þannig að það er kannski bara ágætt að við núna í dag tölum um það hvernig maður metur það hversu góðir svoleiðis algóritmar eru. En í supervised learning þá það sem við viljum gera, er að læra þessar reglur á milli input-sins og output-sins. Output-ið það sem kallast target það er sem sagt einhvers konar einhver hegðun, það getur verið já, annað hvort classification þar sem við erum að með hérna strjált target þar sem að getur verið við erum með endanlegt sett af einhverjum svona kategoríum sem getur verið þá fraud eða spam email eða litur eða kyn og svo framvegis. Og hins vegar þá erum við með regression aðferðir þar sem að target breytan er samfelld, eins og til dæmis innkoma eða aldur eða einkunn og svo framvegis. Og markmiðið í þessu er að læra sem sagt einhvers konar reglur á milli input breytanna sem getur verið alls konar getur verið hérna aldur, hæð, þyngd, innkoma hvað sem er og við viljum nota þessar input breytur til að spá fyrir um target-ið þar sem target-ið mundi þá vera fraud eða eða eitthvað annað eða í tilfellinu þar sem við vorum með email-in og við viljum nota hérna subject line-ið við viljum nota hérna email adressuna til þess að spá fyrir um það hvort að emailið sé venjulegt eða spam email. Það mundi vera classification supervised learning sem sagt application. Og, og, hérna, og í þessu tilfelli þá notum við sem sagt eitthvað svona þjálfunar gagnasafn til þess að þjálfa módelið og svo tökum við módelið sem við erum búin að þjálfa, og [HIK:bæt] sem sagt beitum því á gögn sem við höfum ekki séð áður og mælum hversu vel það er perform-ar og hérna og aftur til þess að hamra á því að ef við ofþjálfum módelið þá munum við vera með overfitting og sem þýðir það að módelið mun ekki höndla það vel að sjá að sem sagt spá fyrir um target á gögnum sem það hefur ekki séð áður. Og kannski svona smá myndrænt. Hérna, við erum með sem sagt þetta mundi vera classification við erum með eitthvað training data af eplum og og möffins og við notum það sem input í eitthvað svona machine learning model sem eru að læra mynstur og er við þjálfum eitthvað módel þarna í miðjunni. Og svo tökum við hérna eina observation, hérna, sem er sem sagt sem módelið hefur ekki séð áður og módelið veit ekki hvort þetta sé möffins eða epli, og við setjum það inn í módelið okkar og fáum út að þetta sé möffins. Þannig að svona mundi þetta virka, gróft á litið. Og svo með sem sagt classification supervised learning þá er binary classification langalgengast, þar sem að, hérna, markmiðið er að skilja á milli tveggja flokka eins og til dæmis fraud eða ekki fraud, fall eða eða ekki fall, spam eða ekki spam og þá er markmiðið líka oft sem sagt að finna þennan þennan flokk sem er, já, maður lítur á hann sem svona undesirable eða eða jafnvel desirable. En eins og til dæmis hér þá mundirðu vilja finna þá sem eru fraud. Þú mundir vilja finna það sem er spam. Það fer náttúrulega eftir því hvernig þú lítur á það, en, en það er oft litið á það þannig. Svo til dæmis kannski hérna með með það að finna hverjir eru að ná kúrsinum og hverjir eru ekki að ná kúrsinum. Hvað, hvað veldur því að nemendur falla til dæmis. Hvaða breytur eru, hafa mikið spágildi fyrir það að falla? Þetta er svona, hérna, dæmi um þetta binary classification og þegar við erum að þjálfa módel til þess að spá fyrir um þetta þá er output-ið úr módelinu, annað hvort sem sagt kategorían sem að observation-ið er sem sagt er hluti af annað hvort núll eða einn þar sem að kannski núll mundi standa fyrir venjulegt email og eitt mundi standa fyrir spam eða núll mundi standa fyrir ekki fraud og einn mundi standa fyrir fraud. Þá mundi þetta módel spá fyrir um það hvort það sé fraud, einn, eða ekki fraud, núll, og hinn bóginn þá getur útkoman úr módelinu verið líkurnar á því að, þú veist, að, að, hérna, observation-in tilheyri öðrum hvorum þessum klössum. Þannig að í tilfellinu hérna með fraud þá mundi það vera líkurnar á því að þessi einstaklingur sé fraud eða að líkurnar á því að þetta email sé spam. Þannig að þetta er svona tvenns konar output sem maður getur fengið út úr módelinu og þegar við verðum að gera þetta í Python þá einfaldlega sem sagt segir maður hérna python hvort maður vilji fá sem sagt kategoríuna sjálfa eða hvort maður vilji fá líkurnar á því að vera sem sagt kategorían. Og svo um það hvernig maður sem sagt skiptir upp gögnunum til þess að búa til þetta þjálfunar og þetta test set eins og við búin að nefna er þetta notað til þess að komast hjá því að vera að overfit-a gögnin sín og til þess að mæla hversu góð módelin eru og ég ætla að tala um hérna sem sagt þrjár algengar aðferðir, fyrsta lagi erum við með split sample method og svo erum við með cross validation og svo leave one out cross validation. Það sem að í fyrsta lagi split sample er einfaldlega þannig að við tökum gagnasafnið okkar sem við erum að vinna með, við bara skiptum því í tvennt í tvo hluta og sem sagt, og það heitir annar hlutinn heitir training set, eða þjálfunarsett, og hinn hlutinn heitir test set og eins og nöfnin benda til þá munum við nota þjálfunar settið til þess að þjálfa módelið okkar á og svo notum við test set-ið til þess að mæla hversu gott módelið er og þegar við erum að þjálfa módelið þá gefum við því gögnin með target-inu þannig að módelið þarf að vita, hérna, hvað, hvað target-ið er fyrir hverja einustu hérna mælingu það þarf að vita hvort að email-in séu spam eða eða ekki spam og svo þjálfum við módelið og módelið lærir mynstur á milli breytanna í tengslum við target-ið og svo tökum við hérna sem sagt test gagnasafnið okkar og við fjarlægjum, hérna, target-ið og við setjum gagnasafnið inn í módelið og módelið spáir fyrir um það hvort hvað sem sagt hvaða flokki hver mæling tilheyrir, hvort sé spam eða ekki og svo berum við saman við þessi raunverulegu gildi sem við héldum í burtu og og hérna og þegar verið að splitta þessu svona þá er oft hérna sem sagt er yfirleitt training safnið haft stærra, annaðhvort sextíu, sjötíu eða áttatíu prósent af heildarsafninu og þá er test safnið sem sagt restin, þannig þú skiptir safninu í sextíu, fjörutíu prósent, sjötíu þrjátíu prósent eða áttatíu tuttugu prósent þetta er náttúrulega ekkert heilagt þú getur alveg gert sjötíu og fimm, tuttugu og fimm bara eins og hentar í hvert skipti og og hérna og þetta eru oft bara svona random þá skipt bara randomly nema hérna það sem er stundum er gert líka að það er notað svona stratification og þér er bara verið að passa upp á það að það sé sama dreifing á báðum hérna klössunum í sem sagt training og test söfnunum. Þannig að ef við skoðum þetta á gífurlega fallegri mynd, þá erum við með hérna gögnin okkar og við skiptum því í tvennt. Við erum með train og test og við tökum train gögnin okkar til að byggja módelið. Svo tökum við módelið og beitum því á testið. Og þá fáum við hérna út einhvers konar score sem er þá líkurnar á því að að hérna í þessu tilfelli að vera sem sagt þetta einn sem stendur fyrir good og núll stundum fyrir bad. Þetta mundi vera hérna gögn úr til dæmis svona credit scoring þegar er verið að spá fyrir um hérna greiðslugetu. Þá erum við með hérna fimm einstaklinga og þeir eru með einhverja innkomu og sumir þeirra hafa sem sagt ekki borgað aftur hérna lánin sín á meðan aðrir gerðu það þannig að þessir góðu þeir borguðu til baka meðan þessir, þessir vondu þeir default-uðu af lánunum sínum og hérna og svo beitum við þessu á sem sagt nýja gagnasafnið. Og við sjáum til dæmis það að Emma hérna, hún fær score-ið núll komma fjörutíu og fjórir þannig að hún er sem sagt fjörutíu og fjögur prósent líkur á því að hún sé góð og Will hérna tvö hann fær score núll komma sjötíu og sex og það er aftur sjötíu og sex prósent líkur á því að hann sé góður af því að þetta er miðað við það að einn standi fyrir gott og núll standi fyrir vont. Og já, hérna eitt í viðbót að þetta er oft notað þegar maður er með sem sagt stór gagnasöfn. Ég vil ekkert gefa neinar concrete tölur af því að það náttúrulega breytist mjög fljótt hvað telst stórt og hvað telst ekki stórt. En ef þið eruð með þú veist hundrað þúsund observation-ir og yfir þá mundi þetta vera vera góð aðferð. Og svo erum við með það sem heitir cross validation eða n-fold cross validation það er eitthvað sem er notað á gagnasöfn sem eru þá aðeins minni, við getum sagt minni en hundrað þúsund, það bara fer eftir því hvað þú ert með mikla, hérna, computing power. En þetta sem sagt felst í því að maður skiptir gagnasafninu í n hluta og oft er miðað við tíu hluta en það má alveg vera hvaða önnur tala sem er og og þá er sem sagt það sem við gerum er að við ætlum að þjálfa módelið á öllum þessum hlutum nema einum og svo testum við á þessum eina sem við skildum eftir. etta endurtökum við fyrir sem sagt allar mögulegar skiptingar eins og þið sjáið hér ef við erum með gagnasafnið okkar, við skiptum því hérna í einn tvo, þrjá, fjóra, fimm, sex, sjö, já tíu hluta. Núna í fyrstu ítrun þá erum við að train-a hérna á fyrstu níu og testum á þessum tíunda í annarri ítrun þá train-um við á hérna fyrstu átta og þessum tíunda og hérna testum á þessum þarna númer níu. Þetta endurtökum við þangað til við höfum sem sagt farið yfir allt gagnasafnið þannig að allir þessir partar öll þessi fold hafa einu sinni verið sem sagt notuð til þess, til þess að testa. Og þá út úr hverju svona hverri ítrun fáum við einhvers konar hérna performance mælingu eða error af því hversu gott módelið er og þá er sem sagt heildar mælingin á performance-inu bara meðaltalið yfir öll, yfir öll þessi, öll þessi, hérna, allar þessar ítranir. Þannig að þið sjáið það að mælingarnar allar observation-irnar þær eru einhvern tímann í test hlutanum, þannig þær, þær eru allar notaðar til að test-a á og svo allar eru notaðar til þess að þjálfa á. Og eins og ég segi þá er þetta sem sagt yfirleitt gert með tíu, en það má líka alveg vera fimm eða tuttugu. Og ástæðan fyrir því að þetta virkar betur á minni gagnasöfn er einfaldlega sú að hérna maður er náttlega að þjálfa tíu módel, maður er að þjálfa módel tíu sinnum þess vegna tekur það lengri tíma. þannig að ef maður er með mjög stórt gagnasafn þá er þetta ekkert voðalega hérna þá getur þetta tekið mjög langan tíma þó að þetta sé náttúrlega miklu meira robust heldur en þetta split sample sem við notuðum sem sagt áðan. Og auk þess af því að við fáum svona meðaltal yfir performance-inn þá getum við reiknað út staðalfrávik og jafnvel hérna öryggisbil og svo framvegis. Þannig að við fáum svona betra mat á því hversu gott módelið er og svo ef við tökum þetta svona to the extreme þá fáum við það sem heitir leave one out cross validation þar sem að n er jafnt fjölda mælinga í gagnasafninu þannig að við erum alltaf að þjálfa á öllum observation-unum nema einni og svo spáum við, notum módelið sem við þjálfuðum til þess að spá fyrir um klassana á þessu þessari einu sem við skyldum eftir og þetta endurtökum við fyrir allar observation-irnar í gagnasafninu þannig að þið sjáið það að þetta tekur lengri tíma heldur en venjuleg cross validation ef þú ert að búa til jafn mörg módel eins og observation-irnar í gagnasafninu eru þannig að þetta er enn þá tímafrekara en þetta er raunverulega samt besta aðferðin en, en, hérna, en mjög sjaldan notað í praxís af því að þetta bara tekur ógeðslega langan tíma en, en hérna ég myndi segja að sem sagt, já, ten fold cross validation er bara svona gott go to ef maður er að þjálfa einhver módel. Ókei, og hvernig ætlum við svo að mæla það hversu góð módelin okkar eru? Ég ætla að fara aðeins í það hvernig sem sagt spárnar verða til að við einsog við erum búin að tala um í binary classification þar sem við erum með tvo flokka í ferlinu okkar sem sagt fókusa á það að þá sem sagt erum við að þjálfa módelið okkar og við notum hérna þjálfunarsafnið okkar með targe-inusem við þekkjum til þess að þjálfa svona supervised classification model, þannig að gögnin fara hérna í módelið og við erum að þjálfa módelið og þegar við erum búin að þjálfa módelið þá tökum við test gögnin okkar, sem sagt allar breyturnar setjum inn í módelið og við fáum út einhvers konar líkur á því að mælingarnar tilheyri öðrum hvorum flokknum. þannig að fyrsta þarna eru fjörutíu og fjögur komma tvö prósent líkur á því að þessi tilheyrir flokki eitt. Og þá mundi flokkur eitt vera til dæmis spam eða að vera góður viðskiptavinur og svo framvegis. Ókei, og svo ætlum við að bera þessa spá sem við fengum út þennan dálk hérna. Bera þetta saman við target-ið sem er vitað, sem við vissum fyrir fram. Og þá sjáum við það til dæmis hérna að hérna tíunda röðin, hann er hérna venjulegur tölvupóstur, hann er með núll, og líkurnar á því að hann sé einn er hérna núll komma tveir einn þrír. Ókei, og svo til þess að vita það hvort að við séum að spá rétt eða ekki þá þarf maður að ákvarða eitthvað svona cut-off gildi, þar sem við segjum, ókei, allir sem eru með spágildi fyrir ofan þetta cut-off þeir eru einn og allir hinir eru núll. Þannig að ef við berum saman þennan hérna dálk og þennan hérna dálk þá sjáum við það að fyrsta mælingin er núll af því að hún er minna en hálfur á meðan að mæling fjögur er einn af því hún er stærri en hálfur og svo getum við bara borið saman þessa tvo dálka, real target og predicted target, og bara séð hversu oft höfum við rétt fyrir okkur. Þannig að fyrir fyrstu mælingunna, þar er raunverulega target-ið einn en við spáðum að það væri núll þannig að við höfðum rangt fyrir okkur, önnur mælingin þá er raunverulega target-ið núll og við spáðum að væri núll þannig að við höfðum rétt fyrir okkur. Við getum bara hreinlega talið hversu oft höfðum við rétt fyrir okkur og ef við gerum það þá sjáum við það að það var átta sinnum af tíu í heildina þannig að accuracy-ið hérna sem er fyrsta sem sagt svona performance measure-ið það er áttatíu prósent, af því áttatíu skiptum höfðum við rétt fyrir okkur. Þið sjáið það að ef við myndum breyta cut-off-inu í staðinn fyrir að vera með núll komma fimm þá er það núll komma sjö. Þá breytist spáða target-ið þá breytist spágildið sem veldur því að til dæmis, úps. Nei, það er hérna, sex er, sex breyttist, það fór úr einum í það að vera núll. Þannig að í þessu tilfelli þá eru höfum við rétt fyrir okkur bara sjö skipti af tíu, þannig að accuracy-ið er sjötíu prósent. Og þarna sjáið þið hvernig að sem sagt þetta spágildi er háð þessu cut-off-i sem að við ákvörðum. Þetta heitir confusion matrix og þetta sem sagt hérna er notað til þess að lista, hversu oft við höfðum rétt fyrir okkur og hversu oft við höfðum rangt fyrir okkur og ef þið horfið á þetta þá sjáið þið að þetta er mjög líkt töflu sem við sáum þarna um daginn þegar við vorum hypothesis testing, er það ekki? Af því að við erum að spá fyrir um eitthvað og stundum höfum við rétt fyrir okkur og stundum ekki, hérna megin erum við með það sem við sem sagt spáðum, predicted class, og þarna uppi erum við með sem sagt það sem er raunverulegt, það sem er rétt, actual class og við sjáum það að hérna þegar eitthvað er af class-anum eitt sem sagt actual class-ar eitt og við spáðum fyrir að það væri eitt þá erum við með true positive og eins ef það var núll og við spáðum núll þá erum við með true negative ef það var einn og við spáðum fyrir núll þá er það false negative og ef það var núll og við spáðum fyrir um einn þá er það false positive. Og þessi gildi getum við notað til þess að meta sem sagt hversu gott módelið okkar er með því að nota ýmsar sem sagt svona measures og þetta er sem sagt listi af performance measures sem er hægt að leiða út frá þessu confusion matrix-i sem við vorum með þarna seinstu glæru og við erum strax nú þegar búin að prófa að reikna accuracy segjum bara hversu oft við höfum rétt fyrir okkur miðað við stærð gagnasafnsins það er sem sagt true positive plús true negative deilt með bara heildarfjölda af af hérna mælingum og svo á móti þá er error rate það er bara andstæðan við accuracy hversu oft höfðum við rangt fyrir okkur. Það var sem sagt false positive og false negative. Og svo erum við með sem sagt eitt sem heitir recall sem að hérna mælir það hversu oft við höfum rétt fyrir okkur innan sem sagt innan raunverulegra sannra gilda og á móti þá erum við með specificity sem að gerir andstæðuna og svo er f einn score sem er mjög oft notað líka. Það er svona, hérna, það sem heitir harmonic mean af precision og recall, og þá sem sagt það er sem sagt tala á milli núll og eins sem að sem sagt segir manni hversu gott módelið er út frá þessum tveimur sem sagt hinum mælingum. En takið eftir því að sem sagt allar þessar öll þessi gildi, þau eru háð cut-off-inu sem ákvörðuðum og hérna. ar af leiðandi eru þau kannski svolítið takmörkuð en ég ætla að útskýra aðeins betur hérna precision og recall af því þeir skipta svolítið miklu máli þegar maður er að reyna að finna einhverja ákveðna hegðun í gagnasafninu sínu þannig að hérna á myndinni hér erum við með sem sagt allar mælingarnar okkar, og, það sem er inni í hringnum, er það sem að módelið okkar spáði sem hérna einn til dæmis allt sem módelið spáði sem spam og þannig að þið sjáið það að hérna græni hlutinn inni í hringnum það eru sem sagt true positives sem sagt allir sem voru spam og voru spáðir sem spam meðan að rauði hlutinn eru allir sem að voru spam en módelið spáði sem ekki spam. Og þ Og þá er precision módelsins nákvæmnin í módelinu er hlutfallið þarna á milli. Hversu oft vorum við með sem sagt hversu oft spáði módelið að það væri spam og það var spam deilt með hversu oft módelið spáði að það væri spam sem sagt hversu, mörg hit af spömum. Já, ok. mörg hversu oft innan, sem sagt þessum svæði þar sem hann spáði því að það væri spam var það raunverulega spam, og það heitir sem sagt precision. Og svo erum við með hérna, já, eins og stendur þarna how many selected items are relevant af því að módelið sem velur hluta af mælingunum okkar og hversu mörg af þessum sem að módelið mældi voru sönn og rétt. Og svo á hinn bóginn þá erum við með recall þar sem við erum að velta fyrir okkur hversu hérna mörg af þessum relevant item-um voru valin hversu mörg af spömunum okkar voru hérna spáð sem spam. Já, og hérna er bara mjög einfalt dæmi um það hvernig maður getur reiknað mismunandi performance-a. Við erum með hérna accuracy við erum með error, sensitivity og specificity og svo eins og ég er búinn að nefna þá eru öll þessi sem eru tengd þessu confusion matrix-i þau eru háð cut-off-inu þannig að ef maður breytir cut-off-inu þá breytist líka performance-inn. Og þar af leiðandi er mjög gott að vera með einhverja mælingu sem, eitthvað mál sem er ekki háð þessu cut-off-i og það er til dæmis hérna A U C eða area under the receiver operating characteristic curve sem að er svona hérna, þetta er svona kúrfa þetta ROC er svona kúrfa sem að við getum plottað út frá gögnunum okkar. Þar sem við erum raunverulega að taka cut-off-ið og við erum að breyta því, láta það breytist frá því að vera núll og uppí einn og fyrir hvert gildi af cut-off-inu þá reiknum við annars vegar recall og hins vegar specificity og plottum það svona upp. Þannig að fyrir hvert gildi af cut-off-inu reiknum við þessar tvær stærðir og plottum það svona upp og þá fáum við þessa kúrfu. Og þessi kúrfa segir okkur til um það hversu gott módelið okkar er óháð cut-off-i og þannig að þessi bláa lína bara sem sagt hérna á milli núll komma eins og eins komma eins þetta er hérna þetta mundi þá vera random módel, þannig að við erum með módel sem að spáir bara randomly, hvort að emailið sé spam eða ekki spam. Þetta mundi vera ROC kúrfan fyrir það þannig að það mundi allt sem er fyrir neðan þessa línu er mjög slæmt þá erum við að spá verr fyrir heldur en random model. við erum alltaf að reyna að gera þessa kúrfu eins hátt upp og við getum. Þegar við erum að byggja módelin okkar, þá viljum við alltaf þessi kúrfa sé sem sagt fyrir ofan alla skálínuna og eins hátt upp og við hérna mögulega getum og þá er sem sagt kemur að góðum notum það sem heitir A U C þar sem við reiknum einfaldlega flatarmálið undir þessari kúrfu, það er sem sagt area under the curve. Og það er tala sem er á bilinu núll til einn þar sem einn er sem sagt fullkomið módel og núll mundi vera módel sem spáir alltaf rangt. En hálfur þið sjáið það að flatarmálið undir hérna bláu línunni er er hálfur þannig að hérna málið fyrir fyrir hérna random módel er hálfur og við erum þá alltaf að reyna að búa til módel sem er betra heldur en hálfur og helst sem næst einum og þá getum við borið saman sem sagt módelin okkar með því að bera saman hérna þessi A U C gildi og því hærra sem A U C ið er því betra. Þannig að þið sjáið þetta aftur hérna við erum með sem sagt flatarmálið undir þessum ferli það er A U C ið og við viljum að sé stærra til þess að hafa betra módel. Nákvæmara módel. Og þá gefur þessi tala svona hérna svona mat á því hversu, já, hversu gott módelið er og, og, hérna, Já, ég var búinn að segja þetta allt saman held ég. Ókei og svo í, í A U C inu þá erum við að bera saman recall og sensitivity en svo ef við berum saman recall og precision þá fáum við það sem heitir precision recall curve sem er líka mjög góður stiki til þess að mæla svona sem sagt módelin okkar hversu góð þau eru. Þar sem við erum aftur á sama hátt að breyta cut-off gildinu frá núlli og upp í einn og reikna fyrir hvert cut-off bæði recall og precision. Svo getum við plottað þessa kúrfu sem er þá þessi gula línan hér, og, og, hérna, svo getum við sem sagt fundið hvað flatarmálið er undir þessum ferli og þá fáum við sem sagt mat á því hversu gott módelið er og við getum notað þetta gildi til þess að bera saman mismunandi módel og aftur þá er sem sagt því hærra sem þetta hérna flatarmál undir ferlinum er því því betra er módelið því nákvæmari er módelið. Þið sjáið það að ef hérna að við viljum sem sagt hafa bæði hátt precision og hátt recall og eftir því sem bæði eru hærri þá náttúrulega verður kúrfan lengra upp þarna í hægra horninu og þá verður flatarmálið stærra. Þannig að það er mjög gott að kunna góð skil á þessu. Þetta er mjög mikilvægt mál fyrir svona binary classification methods þetta er mjög mjög mikið notað, þetta A U C og svo eins, hérna, þetta precision recall curve þetta er líka mjög mikilvægt og sérstaklega ef maður er að vinna með gagnasöfn þar sem er hérna mikill unbalance á milli hérna Og svo er náttlega til alveg mígrúta af fleiri málum til þess að mæla hérna hversu góð módelin eru þetta er það sem að Python býður upp á. Þið sjáið það að við erum búin að tala um hérna ROC curve og við erum búin að tala um recall og precision og svo eru fleiri það eru þarna log loss, það er jaccard, það er hamming, það er hérna cohen kappa alls konar og yfirleitt er þetta bara alls konar mælikvarðar á sem sagt þessu confusion matrix sem maður er að taka saman tölurnar á mismunandi hátt til þess að spá fyrir um einhverja ákveðna eiginleika módelsins. Og það kannski bara fer eftir því svolítið hvað maður er hvað það er sem maður vill finna en það sem er langmest notað er náttúrlega accuracy af því það er bara hversu oft spáir þú rétt og svo eins recall og precision eru mjög mikilvæg og A U C er hérna er mjög mikilvægt. Og svo ef við erum með sem sagt í regresion módel þar sem við erum að spá fyrir um eitthvað sem er samfellt þá erum við líka með lista af alls konar málum sem við getum notað þegar við erum með regresion módel, þá erum við ekki bara að spá fyrir um það hvort einhver sé hluti af einhverjum hóp eða ekki, heldur er spágildið okkar bara einhver tala og þá er tilgangur sem sagt að maður ber saman þessa tölu við sanna gildið og maður tekur sem sagt mismuninn á milli þeirra til þess að einhvern error út og svo erum við með mismunandi týpur af þessum error-um við erum með hérna sem sagt min squared error þar sem maður er búinn að setja þau öll í annað veldi. Maður er með absolute error þar sem maður tekur tölugildið og svo framvegis. Þannig maður er alltaf bara svona mæla í heildina hversu langt spágildið er frá raunverulega gildinu. Ókei, svo um gagnasöfn sem eru ekki í jafnvægi unbalanced data. Ókei, gerum ráð fyrir því að við séum að þjálfa módel sem hérna er þannig þegar við erum búin að þjálfa það að það spáir því að allir séu í sama hérna flokknum það spáir því að öll email-in séu venjuleg email og hérna við sem sagt apply-um sem sagt beitum þessu módeli á test sett þar sem eru hundrað mælingar og hérna við vitum það að níutíu og níu af þessum mælingum eru í class, klassa núll og ein er í klassa eitt þannig að við getum ímyndað okkur það að þetta er safn af email-um og við vitum það að níutíu og níu þeirra eru hérna venjuleg, en það er eitt email sem er spam. Hvað hérna, hvert er accuracy-ið í þessum módelum, ef við ætlum að mæla accuracy-ið. Við erum með hundrað mælingar og módelið spáir því að allir séu núll. Níutíu og níu. Nákvæmlega þannig að ef við setjum þetta upp í confusion matrix-ið okkar, þá erum við með hérna hinn sanna klasa og spáðan klasa og sem sagt sannur klassi er hérna það eru níutíu og níu sem eru hérna núll og einn sem er eitt nema það að allir eru spáðir í núll. Þannig að svona lítur confusion fylkið okkar út og við getum reiknað út accuracy-ið sem er þá bara gildin á hornalínunni níutíu og níu plús núll og svo deilt með heildarfjölda þannig að við erum með accuracy sem er níutíu og níu sem er bara rosalega hátt af því accuracy er á bilinu núll og uppí einn. Ef accuracy-ið er einn þá erum við með fullkomið módel. Þannig að jafnvel þó að þetta módel sem við þjálfuðum hérna finni ekki þessa einu observation sem er spam þá erum við með ógeðslega hátt accuracy, bara, þú veist, maður lítur á þetta bara eitthvað: Vá heyrðu, þetta er gott módel. En módelið það finnur ekki neitt. Og það er vegna þess að það hefur verið þjálfað á gagnasafni sem að er sem sagt imbalanced og þess vegna er það getur það ekki fundið hérna, getur það ekki classify-að mælingarnar í gagnasafninu okkar. Af því að við erum með of mikið af hérna mælingum sem eru í þessum majority klassa og þær bara dominate-a þegar það er verið að þjálfa módelið þá bara dominate-a þær yfir þessum hinum sem eru í minority klassanum og þess vegna lærir módelið ekki mynstrin fyrir minority klassan. Og þetta er sem sagt dæmi um gagnasafn sem er hérna unbalanced og við þurfum þá að grípa til einhverja aðgerða til þess að laga þetta svo að við getum fundið af því auðvitað viljum við finna þessar mælingar sem eru öðruvísi. Ef þetta er til dæmis þessi spam filter sem við töluðum um áðan þá viljum við að sjálfsögðu geta fundið spam email-in svo þau fari í spam möppuna en ekki bara inbox-ið okkar. Já, þannig að class imbalance balance er þegar að er einn af klössunum í target breytunni okkar eru sem sagt underrepresented það er ekki nógu mikið af þeim og í sumum tilfellum er þetta mjög alvarlegt vandamál eins til dæmis þegar maður að spá fyrir um fraud af því að fraud er svo rosalega algengt. Þá er maður með þúst núll komma eitt prósent af öllum í target breytunni eru núll komma eða, þú veist, já, ein af þúsund er fraud og þá er mjög erfitt að finna þær. Og þegar þessi imbalance er sem sagt minni heldur en tíu prósent, þannig að ef að sem sagt, ef við erum með, að hérna class eitt, class núll, fyrirgefið þið er níutíu prósent, og class eitt er tíu prósent, þá ættum við að grípa til aðgerða og reyna að koma á jafnvægi í gagnasafninu okkar. Þannig að ef það er þetta eða minna sem sagt class eitt er hefur minna vægi heldur en tíu prósent þá ættum við að grípa til aðgerða og það eru sem betur fer til aðferðir til þess að hérna laga þetta, það er einfaldlega að, já, búa til jafnvægi í gagnasafninu. Og fyrsta svona naive aðferðin er að taka hérna gagnasafnið okkar. Þið sjáið það að við erum með fjórar, fjórir sinnum einn af þessum fjórtán mælingum hérna og við ætlum að koma þessu gagnasafni á jafnvægi með því að nota þetta sem heitir under sampling þá bara einfaldlega fjarlægjum við af handahófi, mælingar sem eru í klassanum núll áður en við þjálfum módelið þannig að það mundi vera svona til dæmis bara ákveðum það að fjarlægja nokkrar mælingar. Og þá erum við komin með minority klassa í fjörutíu prósent sem er meira jafnvægi heldur en við vorum með áður, og nota bene að hérna markmiðið er ekki endilega koma á fullkomnu jafnvægi, það er nóg að það sé þið vitið þrjátíu prósent eða fjörutíu prósent. Það þarf ekki að vera fifty fifty. Þegar maður talar um að balance-a gagnasafn þá er það ekki að koma því fullkomið jafnvægi, bara að auka minority klassan þannig að algóritmarnir geti fundið, sem sagt lært mynstrin. Af því ef við balance-um það alveg þið sjáið það ef maður fer úr, þú veist, eitt prósent við erum með eitt prósent og níutíu og níu prósent, ef maður fer úr því í fifty fifty þá þyrfti því maður hérna, ef maður notar þessa aðferð að fjarlægja rosalega mikið af línum og þá ertu of mikið distort-a gagnasafnið sem að bara veldur skekkju líka. Þannig að maður þarf að gera þetta svolítið varlega, prófa sig áfram og og hérna og bara finna svona einhvern hérna gullinn gullinn meðalveg. En maður getur fjarlægt línur, maður getur bætt við línum til dæmis með því að nota það sem heitir random over sampling þar sem maður tekur hérna þessar mælingar þar sem að klassinn er, hérna, einn og bara tvöfaldar þær bara duplicate-ar þær hérna þær línur, þannig að hérna ef við mundum duplicate-a nokkrar af þessum hérna línum sem að eru í með target-ið einn, þá þá mundi það líta svona út. Og þá erum við með hérna kominn með aðeins betra, hérna, vægi fyrir minority klassann. En þetta getur líka valdið vandamálum af því að hérna að maður er bara að tvöfalda einhverjar mælingar, og þá býr maður líka til bias því þær náttúrulega þessar mælingar sem eru með target-ið einn þær eru eitthvað svo mikið eins og þá náttúrulega gerist ekkert í raunveruleikanum að að þær mundu vera nákvæmlega eins þannig að það er svolítið [HIK:óraun] óraunhæft að bara duplicate-a. Þannig að það er búið að þróa meiri sophisticated aðferðir til þess að duplicate-a sem sagt observation-ir til dæmis með þessari aðferð sem heitir SMOTE eða synthetic minority over-sampling technique sem að er sýnd hér, það sem við erum með hérna þessa grænu sem eru af majority klassanum og förum með þessa rauða sem eru minority class og hérna já, þetta svona sýnir aðeins hvernig það virkar að maður sem sagt tengir saman þessar mælingar sem eru í minority klasanum, og svo býr maður til nýjar hérna mælingar á þessum [HIK:ten] sem sagt línum sem að tengja þær Þannig að í staðinn fyrir bara að tvöfalda einhverja mælingu þá svona hérna reynir maður svona aðeins að, að varia líka gildunum á hinum breytunum. Hún er ekki bara nákvæmlega eins heldur er aðeins meira svona variation í í gildunum. Og þetta er mjög hérna mjög sem sagt skilvirk og góð aðferð til þess að balance-a gagnasafn. Ókei, þá er ég búinn með glærurnar mínar. Ég ætla að fara í, í Python eftir fimm mínútna pásu. Er það ekki?