Neurale netwerken

Gegroet Dataridders!

In januari had ik een bericht geplaatst over neurale netwerken.

Nu was dit bericht over het algemeen wel in orde, er was ook aardig wat ruimte voor verbetering. Inmiddels heb ik namelijk al weer een stuk meer geleerd over dit onderwerp en daarom heb ik besloten mijn vorige versie te updaten.

Laten we beginnen.

 

Wat en waarom?

Kunstmatige neurale netwerken zijn een onderdeel van Machine Learning en een van de krachtigste programmeer constructies voor het analyseren van data. Ze zijn gebaseerd op biologische neurale netwerken, en stellen een programma in staat te leren op een vergelijkbare manier als wij dit doen. Dit is een krachtig concept!

We hebben dan namelijk niet meer te maken met een programma dat wij stap voor stap moeten vertellen wat het moet doen en hoe het dat moet doen. In plaats daarvan hoeven we het neurale netwerk alleen een doel te geven en wat trainingsdata, en daarna leert het zelf om dit doel te bereiken.

Afhankelijk van het type en formaat van het gebruikte netwerk en de verwerkingskracht van het systeem kan zo’n systeem dan dingen leren die wij nooit op de gebruikelijke manier hadden kunnen programmeren. Hoe schrijf je nou bijvoorbeeld een programma dat het verschil tussen het plaatje van een hond en een kat kan zien?

Dit is een machine learning taak die vrijwel onmogelijk op te lossen is met algoritmes zoals random forest en gradient boosted trees (tree-ensembles). Om nog maar niet te beginnen over een simpele lineaire regressie.

Een plaatje kan namelijk uit duizenden pixels bestaan en de interpretatie van die pixels is alles behalve simpel. Deze complexiteit is vrijwel onmogelijk te vangen met deze andere methoden. Een tree-ensemble zou wellicht in staat zijn om een dataset uit het hoofd te leren, maar zou het bijzonder slecht doen op nieuwe data.

Maar, met neurale netwerken is deze taak met grote precisie op te lossen. Neurale netwerken worden echter niet alleen gebruikt voor beeldherkenning, maar ook voor spraakherkenning, spam filtering, chatbots, zelf lerende systemen en nog veel meer!

 

Hoe werkt het?

Net zoals in het brein wordt er gebruik gemaakt van neuronen en verbindingen tussen die neuronen om input en output te regelen. De neuronen in kunstmatige neurale netwerken zijn echter versimpeld tot knooppunten met een aantal parameters die gevarieerd kunnen worden om het gedrag van het netwerk aan te passen.

Perceptron

Een perceptron is een voorbeeld van een kunstmatig neuron. Het neemt een aantal inputs x genereert op basis daarvan een binaire output (een 0 of een 1). Hierbij is x dikgedrukt omdat het een vector is. Om dat te doen heeft het een aantal parameters, namelijk een serie van “weights” w voor elke input x en een treshold (drempel). De weights bepalen hoe sterk de inputs x worden meegerekend en de treshold bepaalt hoe moeilijk het perceptron vuurt (een 1 genereert). Het gedrag van het perceptron kan dan beschreven worden met de volgende formule:

Wat is nou het nut van zo’n perceptron? Nou, door de waardes van w en b te varieren krijgen we nu verschillende outputs voor de zelfde waardes van x. Een netwerk van deze perceptrons kan dus “leren” door de juiste waardes van w en b te vinden, de waardes die het netwerk het gewenste gedrag zo goed mogelijk laten benaderen.

Ofwel de juiste output bij een gegeven input, bijvoorbeeld het antwoord ‘hond’ (output) bij een plaatje van een hond (input).

Antwoord: Muis

Oeps! Er komt helaas nog best wat meer bij kijken dan dat…

 

Complicaties

Ten eerste wordt er gebruik gemaakt van verschillende activatie functies. Een perceptron is een lineaire activatie functie, maar er wordt vrijwel altijd gebruik gemaakt van niet lineaire activatie functies.

Dit is nodig om het model goed te kunnen trainen op niet lineaire verbanden. Er is nog steeds sprake van inputs, gewichten en outputs, maar het verband tussen de inputs en outputs is wat ingewikkelder als bij het perceptron en de outputs kunnen meer waarden aannemen dan 0 en 1.

Daarnaast wordt bij image recognition (beeldherkenning) ook gebruik gemaakt van convolutional layers (convolutionele lagen). Deze transformeren de ruwe pixel data tot simpelere “meta-data” die het netwerk kan gebruiken om de plaatjes te analyseren.

Een convolutional layer kan bijvoorbeeld aangeven waar de horizontale lijnen in het plaatje te vinden zijn. Een andere laag kan aangeven waar de verticale zijn. Een volgende zou deze kunnen combineren tot vierkanten. Etc. De lagen worden in de praktijk echter ook automatisch getraind en wat ze precies doen weet je eigenlijk nooit.

Pfoe, wat een termen allemaal!

 

Om in een bericht alles uit te leggen over hoe neurale netwerken werken is een beetje teveel gevraagd ben ik bang. Ik hoop echter dat je het een beetje hebt kunnen volgen en dat ik je interesse heb aangewakkerd.

Maar dat is alles voor nu,

 

Tot de volgende keer!

 

Bronnen

 

 

 

50 uur Kaggle ervaring in 5 minuten

Gegroet Dataridder,

Deze week heb ik mijn eerste Kaggle wedstrijd afgerond. De opdracht was om een zo goed mogelijk model te trainen voor het detecteren van online fraude.

Ik heb er in totaal meer dan 50 uur aan besteed en het is me uiteindelijk gelukt om in de top 50 procent van het Leaderboard te komen. In dit bericht ga ik jou in vogelvlucht wat vertellen over wat ik daar bij heb geleerd. Hopelijk zal het je helpen bij je eigen projecten en wedstrijden.

Laten we beginnen.

 

1. Het is niet zo makkelijk als het lijkt

“Wat? Hoezo makkelijk?!”, denk je misschien.

Tja, toen ik met machine learning leek het me dan ook alles behalve makkelijk. Maar, op een bepaald punt had ik genoeg geleerd dat ik dacht dat het allemaal best simpel was en dat ik deze wedstrijd wel eens even zou gaan laten zien wie de baas was. Immers, alle informatie die ik verder nodig had om te winnen was te vinden, inclusief legio aan voorbeeld kernels van mede-Kagglers.

Viel toch tegen.

Zoals ik al zei was er meer dan genoeg informatie te vinden. Maar, dat was dan ook precies het probleem: teveel informatie is bijna net zo erg als geen informatie. Waar begin je? Wat negeer je? Wat is belangrijk? Wat is minder belangrijk?

Er is gewoon niet genoeg tijd om het allemaal te bestuderen. En tegelijkertijd is er ook een heleboel wat er komt kijken bij het maken van een winnend model, heb ik gemerkt. Om zoveel informatie te verwerken tijdens een wedstrijd en dan ook nog die informatie allemaal foutloos toe te passen, dat valt niet mee.

2. Het is ook niet zo moeilijk als het leek

Het is niet onmogelijk. Stapje voor stapje kan je er komen.

Het is waar: Er is een heleboel informatie. Het is niet allemaal even belangrijk, maar er is toch een heleboel te leren.

Desalniettemin IS het allemaal best te doen. Een universitaire opleiding bevat nog veel meer informatie, en toch zijn er mensen die hun diploma halen, met voldoende tijd en inzet. Zo ook is de informatie voor het maken van een winnend model uiteindelijk gewoon te overwinnen.

De individuele onderdelen van een winnend model zijn soms op het eerste gezicht ingewikkeld, maar uiteindelijk valt dit best mee, heb ik gemerkt. Je leert ze gewoon een voor een, en langzaam maar zeker begint het dan allemaal wel in elkaar te passen. Er is nog een hoop te doen, maar er is ook al een hele hoop gedaan.

Stukje bij beetje. Dat is hoe je vooruitgang maakt.

 

3. Een EDA lijkt misschien nutteloos maar is dat zeker niet

In mijn eerste 3 Kaggle projecten deed ik alles vrij snel. Gewoon een werkend model krijgen in zo min mogelijk tijd.

Soms deed ik daarbij ook wat Exploratory Data Analysis (EDA), maar ik had dan altijd het idee dat dit niet echt veel uithaalde. Uiteindelijk ik gewoon alles in het machine learning algoritmen en kwamen er gewoon goede resultaten uit.

De informatie die ik dan tijdens mijn EDA had verzameld was misschien wel interessant, ik deed er uiteindelijk niets mee in mijn model. Daarom bleef ik ook niet al te lang hangen in de EDA tijdens deze Kaggle wedstrijd.

Dat was een fout.

Het is niet de schuld van de EDA wanneer je er geen nuttige informatie uit haalt. Het is een gebrek aan ervaring met het stellen van de juiste vragen en het herkennen van nuttige informatie. Mijn EDA’s waren tot dan toe nutteloos omdat ik gewoon nog geen benul had van wat je allemaal kan leren van een goede EDA. Nu ben ik begonnen daar een idee van te krijgen.  En wou ik dat ik in het begin de dingen had geweten die ik later met EDA en het lezen van de analyses van andere Kagglers had uitgevonden.

4. Leren vs resultaten vs gewerkte uren

Het maakt niet uit hoe lang je ergens mee bezig bent of hoe ingewikkeld het is. Althans, niet voor je Leaderboard score.

Je kan uren bezig zijn met het puzzelen met Principal Component Analysis, geheugen vermindering, herstructureren van je code en noem het maar. En deze dingen zijn zeker belangrijk. Maar, je score gaat er niet per se van omhoog. Zelfs Feature Engineering kan verspilde tijd zijn als je geen goede features weet te vinden.

Tegelijkertijd kunnen een paar minuten handmatig uitproberen van verschillende hyperparameters voor je model je 100 plekken omhoog brengen op het Leaderboard.

Mijn eerste score op het Leaderboard bracht mij al bijna in de top 50 procent waar ik uiteindelijk geëindigd was. En het enige wat ik gedaan had was een simpele kernel kopiëren die de data in gooide XGBoost zonder enige analyse of feature engineering. Vervolgens ben ik WEKEN bezig geweest met het proberen van allerlei technieken om mijn score te verbeteren, zonder enige verbetering van mijn score.

Waren deze weken verspilde tijd? Nee, dat zeker niet. Ik heb mijn score wellicht niet verbeterd, maar ik heb een hele hoop geleerd. Ook had ik een gevonden om het model sneller te laten uitrekenen. Deze zaken kwamen echter niet tot uiting op het Leaderboard.

Uiteindelijk behaalde ik mijn eerste verbetering in mijn score gewoon door domweg wat andere hyperparameters in te voeren in het bare bones model. Daarna pas begon het geleerde te klikken en verbeterde ik mijn score nog verder met Feature Engineering.

Ik had mijn score misschien nog sneller kunnen verbeteren als ik een beetje rond gekeken had voor kernels met betere scores en deze gewoon gekopieerd had.

Maar dan had ik natuurlijk niets geleerd.

 

5. Kaggle is een geweldige leerbron, maar…

Er valt ECHT een hele hoop te leren over machine learning op Kaggle, daar ben ik inmiddels wel achter. Maar deze kennis is niet allemaal direct toe te passen in de echte wereld.

Voor de beginnende Data Scientist die nog weinig ervaring met het trainen van modellen heeft en zijn PCA nog moet leren onderscheiden van zijn EDA is Kaggle geweldig. Zelfs voor de verder gevorderde Data Scientist is er nog een hoop te leren. Maar, er zijn grenzen aan wat je kan bereiken met het doen van Kaggle wedstrijden.

Want, een Kaggle probleem is niet een bedrijfsprobleem, en een Kaggle score is geen complete representatie van de kwaliteit van een machine learning oplossing.

Een model dat 20 verschillende algoritmes combineert om met behulp van honderden uren rekentijd de hoogst mogelijke accuraatheid te behalen is misschien geweldig voor Kaggle. Maar, niet zo geweldig voor een bedrijf dat voorspellingen wil maken over de vraag naar hun product voor morgen en inzicht wil krijgen in de belangrijkste factoren die deze vraag bepalen.

En hoe denk je dat die data die jouw Kaggle model gebruikt in de eerste instantie bij elkaar verzameld is? Denk je misschien dat die data zomaar uit de lucht is komen vallen? Of dat er uren aan research, brainstormen en verzamelwerk aan vooraf is gegaan?

Kortom, Kaggle is een geweldige leerbron, maar perfecte Kaggle skills maken nog geen perfecte Data Scientist.

 

Natuurlijk is dit lang niet het enige wat ik geleerd heb tijdens deze wedstrijd. Ik wou dat het mogelijk was om dit allemaal in een bericht van 5 minuten aan jullie te leren. Als dat namelijk het geval was dan had ik zelf zo’n bericht gelezen en had dit bericht 5 minuten Kaggle leeservaring in 5 minuten kunnen heten.

Helaas.

Wees niet getreurd. Er komen nog meer berichten. Maar, dat is alles voor nu.

 

Tot de volgende keer!

 

 

Relevante links

Wordt vandaag nog een Data Scientist!

Hallo wereld!

Wanneer is iemand een Data Scientist?

Wanneer hij een dataset heeft geopend? Wanneer hij een machine learning model heeft gebouwd? Wanneer hij een dag als Data Scientist heeft gewerkt? Een jaar? Twintig jaar?

Allemaal fout.

Iemand is een Data Scientist nadat hij/zij mijn geweldige tutorial voor Data Analyse met Jupyter Notebook heeft gevolgd!

In deze tutorial ga ik jullie wat simpele maar belangrijke trucjes leren om je data te analyseren.

Data analyse is de eerste stap voor alle data aspiranten. Of je nu Data Scientist wil worden, Data Analyst of Machine Learning Engineer, het begint allemaal met het openen van en analyseren van je databestandje.

Bekijk het gauw hier op mijn Github!

Waarom je aarzelt en waarom het niet nodig is

Waarom?

Waarom is het dat je op sommige dagen moeiteloos door kunt gaan met leren en op andere dagen jezelf moet dwingen om het ook maar een enkel uurtje vol te houden?

En waar is al dat enthousiasme gebleven waarmee je deze reis begonnen was?!

  • Is het dat je op sommige dagen meer zin hebt dan op andere?
  • Is het dat je er meer plezier in hebt wanneer het goed gaat?
  • Is het dat je liefde voor het onderwerp over de tijd heen is uitgedoofd?

Dat speelt er misschien allemaal een rol bij, maar er is meer aan de hand. En als jij dit inziet dan kun je ophouden jezelf tegen te houden en eindelijk op volle toeren op je doel afvliegen!

Jij bent begonnen met leren omdat jij een passie hebt voor het werk waar jij voor aan het leren bent. Die passie was misschien wat sterker in het begin, toen alles nog nieuw en opwindend was, maar zelfs nu merk jij op sommige dagen dat die passie er nog steeds is. Waarom is het dan op die andere dagen zo moeilijk om jezelf op gang te laten komen en door te zetten?

Zoals ik al zei is een deel ervan dat dingen leuker zijn wanneer ze goed gaan. Maar, tegelijkertijd zijn dingen ook weer leuker als ze uitdagend zijn. Dus waarom zou je ontmoedigd moeten raken als iets uitdagend is? Je zou toch juist enthousiast moeten worden? En op sommige dagen is dat ook zo, maar op andere dagen niet. Hoe komt dit nou?

Onzekerheid.

De reden waarom jij het werk ontwijkt waar jij zoveel plezier in hebt is NIET dat dat plezier vervaagd is. Integendeel. Nee, de reden is dat jij twijfelt. Jij twijfelt of je wel de capaciteiten bezit om het te maken. Om je doel te bereiken. Om de prijs te veroveren waarvoor je dit allemaal begonnen bent: het werk doen waar jij van houdt.

En omdat jij twijfelt voel jij je ongemakkelijk wanneer je bezig bent met het werk. Omdat jij twijfelt voel jij je moedeloos. Je voelt je onzeker. Je schaamt je. Je bent bang voor de toekomst.

  • “Waar ben ik mee bezig?”
  • “Het gaat me nooit lukken.”
  • “Dit is onmogelijk.”
  • “Hoe ga ik mijn brood verdienen als dit het niet wordt?”
  • “Wat zullen ze wel niet van me denken?”

Dat zijn de gedachten die jou tegenhouden. Dat zijn de gedachten die door jou hoofd spoken wanneer jij aan het leren bent voor het beroep waar jij van houdt. En de gevoelens die deze gedachten opwekken zijn de reden waarom jij het plezier op deze dagen niet kan vinden en het tempo niet kan vol houden.

Wat is nu de oplossing? Nou, ik heb hem tijdens dit artikel al meerdere keren genoemd.

Dit is het werk waar jij van houdt.

En de kans is groot dat dit niet alleen het werk is waar jij van houdt, maar dat het ook het werk is waarvoor jij een natuurlijke aanleg hebt.

Maar, zelfs al zou dit niet het geval zijn dan is dat geen probleem. Want de belangrijkste sleutel tot succes is niet talent, maar consistente inzet. En wat is nou een groter voordeel in het leveren van die consistente inzet dan pure passie voor het leerproces zelf?!

Jij houdt namelijk niet alleen van het het werk dat jij mag gaan doen zodra je je baan hebt veroverd. Jij houdt van het werk dat jij moet doen om de baan in de eerste instantie te krijgen! En niets is zo krachtig voor het behalen van jouw doel.

Dus jij hoeft niet onzeker te zijn. Jij bent hiervoor gemaakt. En het enige wat je hoeft doen is het werk waar jij van houdt, totdat en lang nadat jij je baan veroverd hebt.

Dat is alles voor nu,

 

Tot de volgende keer!

IKKE NIE SNAP NIE…

Gegroet Dataridders,

In dit bericht ga ik je drie praktische tips geven om om te gaan met het gevoel dat je een idioot bent tijdens het bestuderen van Data Science.

Of wat dan ook eigenlijk. Maar ik denk dat deze tips vooral erg nuttig zijn voor de aspirant Dataridder, omdat deze vaak niet alleen met hele complexe theorie in aanraking komt, maar dat vaak ook in isolatie doet van zijn mede idioten…

 

Tip nummer 1: Iedereen is een idioot

Wij mensen geloven graag dat we heel erg slim zijn. We kijken naar uitvindingen zoals de space shuttle, nano-technologie en Jersey Shore en kunnen ons superioriteitsgevoel over het dierenrijkdom niet bedwingen. Maar, de bittere waarheid is dat wij mensen als individu niet zo veel slimmer zijn dan de gemiddelde chimpansee als we graag willen geloven.

Tuurlijk, als soort als geheel kunnen wij een hele hoop indrukwekkende dingen bereiken maar als individu zijn we eigenlijk niet echt zo slim. Er zijn uitzonderingen geweest zoals Einstein en Mozart, maar zelfs deze geweldige brainiacs bouwden voort op de gezamenlijke intellectuele inspanningen van alle idioten die voor hen kwamen.

Iedereen kan een briljant idee hebben, maar niemand kan altijd briljant zijn, en dingen niet snappen is een state of life. Zelfs Einstein heeft nooit uitgevogeld hoe hij nu die muur moest bouwen.

Dus als jij een tutorial serie over Deep Learning aan het kijken bent en af en toe geen idee hebt waar meneer de Data Scientist het allemaal over heeft hoef je je echt niet te schamen of ontmoedigd te raken. De kans is groot dat hij het zelf ook niet altijd weet, en de student achter de laptop in het huis aan de overkant weet het al helemaal niet.

 

Tip nummer 2: De aanhouder wint, meestal…

Oke, misschien dat je het de eerste keer allemaal maar half begrijpt en je hoofd inmiddels op springen staat, maar morgen is er weer een nieuwe dag. Zie het leren als het drinken van een grote emmer vol water, bier, thee, of wat je vloeistof naar keuze ook mag zijn.

Het punt is, er is maar zoveel nieuwe informatie die je op een dag kan verwerken. Maar, morgen is er weer een nieuwe dag, is je hoofd weer uitgerust en kan je de informatie weer opnieuw aanvallen.

Grote kans dat je het deze keer beter begrijpt dan de vorige keer!

Herhaal dit proces vaak genoeg en op een gegeven moment zul je de informatie meestal voldoende geadsorbeerd hebben.

Meestal. Geen garanties echter. Soms is de informatie gewoon geschreven in het Chinees en is het beter om een andere leerbron te vinden of door te gaan naar de volgende les. Of om eerst Chinees te leren.

Maar dat je iets niet meteen snapt hoeft niet te betekenen dat je het met wat herhaling niet kan ontcijferen. Zelfs een chimpansee kan een paar woordjes Chinees leren met voldoende doorzettingsvermogen.

 

Tip nummer 3: Je hoeft het niet allemaal te snappen!

Dit is misschien nog wel het allerbelangrijkste om je te realiseren. Zoals ik al zei kan je als je iets niet snapt af en toe het beste gewoon door gaan naar de volgende les. Maar, de beste manier om uit te vinden of je moet weten om iets te doen is door het gewoon te doen.

Blijf niet hangen in de theorie, probeer gewoon dat model te trainen. Kom je er dan niet uit dan weet je vaak wel wat je moet herhalen om er uit te komen. Zo niet, dan wordt het tijd om daar achter te komen.

Zelfs als je 80 procent van de theorie niet begrijpt kun je soms nog steeds prima de opgaves maken. Als je altijd alles probeert te snappen dan kom je nooit aan uitvoeren toe en leer je uiteindelijk niets praktisch.

Dat is alles voor nu,

 

Tot de volgende keer!

3 Lessen uit 3 Kaggle projecten

Gegroet Dataridders,

In dit artikel zal ik de 3 lessen delen die ik geleerd heb bij het uitvoeren van de 3 actieve Getting Started wedstrijden/projecten op Kaggle. In volgorde van uitvoeren:

  1. Titanic: Machine Learning from Disaster

  2. Digit Recognizer

  3. House Prices: Advanced Regression Techniques

Let’s get started!

 

Les 1: Als je er een kan, dan kan je ze allemaal.

Mijn machine learning cursus eindproject heeft mij wekenlang zoet gehouden. Maar, mijn eerste Kaggle project was al klaar binnen een aantal uurtjes. De volgende twee projecten waren ook klaar binnen een dagje of twee.

Daarmee heb ik dan op Kaggle een project gedaan met classificatie, een met image recognition en een met regressie voor een dataset met 80 variabelen. Het proces was vrij vergelijkbaar voor alle drie. Verrassend vergelijkbaar.

Waren er uitdagingen? Ja. Was het moeilijk? Niet echt. Tuurlijk, er waren obstakels, maar het was slechts een kwestie van trial, error en Google search en de oplossingen waren redelijk snel gevonden.

Natuurlijk wil ik niet beweren dat alle machine learning technieken makkelijk zijn. Maar volgens mij zit de moeilijkheid niet zozeer in het maken van een model, maar in het maken van een optimaal model.

 

Les 2: Goede scores halen hoeft niet veel tijd te kosten.

Zoals ik al zei had ik er niet lang over gedaan om mijn projecten op Kaggle af te ronden. Waarom? Ik probeerde geen topscores te behalen. Het was slechts mijn doel om EEN score te halen. En dus trainde ik gewoon mijn modellen met zo weinig mogelijk data cleaning en feature engineering.

Het resultaat?

Verrassend goed! Oke, ik heb geen topscores behaald. Bij mijn eerste wedstrijd haalde ik de top 80 procent en de overige twee zat ik net onder de top 50 procent.

Dat klinkt vrij niet al te indrukwekkend, maar de modelprestaties van die modellen lagen allemaal vrij dicht bij de topscores. Mijn Titanic model haalde 75 procent accuraatheid, terwijl de hoogste realistische score zo’n 80 procent zou bedragen volgens de discussie pagina’s. Mijn image recognition model haalde 98 procent.

Een minimale inzet model doet dus niet veel onder voor een top tier model. Dit komt omdat de algoritmes het meeste werk al voor je doen. Lekker makkelijk!

 

Les 3: Kaggle succes kan misleidend zijn.

Bij elke van de 3 leaderboards zijn er mensen die een accuraatheid van 100 procent of een foutpercentage van (bijna) 0 procent gehaald hebben. Echter, dit zijn geen realistische scores voor een voorspellend model.

Hoe kan dit dan?

Vals spelen. Deze mensen hebben hun model simpelweg getraind op de gehele dataset en het vervolgens ook nog eens drastisch overfit. Vergelijk het met het uit je hoofd leren van de antwoorden voor een meerkeuzevraag proefwerk zonder de theorie te leren. Maar gelukkig is dit niet mogelijk bij de normale Kaggle wedstrijden waarbij de test data niet simpelweg van het internet af te halen is.

Ik ontdekte echter nog een vreemd fenomeen bij het opsturen van mijn antwoorden voor de House Prices wedstrijd. Ik had 3 verschillende lineaire regressie modellen getraind op de trainingsdata. Deze modellen presteerden ongeveer allemaal even goed op de testset die ik van de trainingsdata had achtergehouden. Er was echter een groot verschil met hoe twee van deze modellen scoorden op het leaderboard.

Mijn eerste submissie leverde mij een plek in de buurt van de bodem op met een Root-Mean-Squared-Error (RMSE) van 0.45. Mijn tweede submissie, een model dat vrijwel hetzelfde score op de testfractie van de trainingsdata,  plaatste mij in de buurt van de top 60 procent met een RMSE van 0.15! Een drastische verbetering!

Misschien dat ik iets gemist heb maar volgens mij is de enige verklaring voor dit verschil toeval. Met meer data was dit volgens mij dan ook nooit het geval geweest.

 

Samenvatting

Als je er een kan kan je ze allemaal, goede scores vergen weinig inzet en Kaggle scores zijn soms misleidend. Dat zijn de lessen die ik geleerd heb.

Misschien dat ik er met meer ervaringsdata achter kom dat mijn conclusiepatronen moeten worden bijgesteld, maar voor nu is dit mijn model van de Kaggle en Machine Learning wereld.

Dat is alles voor nu.

 

Tot de volgende keer!

Moeiteloos leren

Gegroet aspirant Dataridder,

Ben je al DAGEN, WEKEN, misschien zelfs MAANDEN lang aan het studeren voor Machine Learning? Heb je je verdiept in Neurale Netwerken, Beslissingsbomen, Lineaire Algebra, Statistiek en Python en ben je inmiddels al weer vergeten wat je geleerd had over Neurale Netwerken? En heb je nog steeds geen enkele praktijk ervaring met het trainen van Machine Learning modellen?

Dat moet toch makkelijker kunnen?

In een eerder bericht had ik je al verteld dat ik recent mijn eerste eigen Machine Learning project volbracht had. In dit bericht ga ik jou vertellen hoe jij dit OOK kan bereiken, maar dan zo snel, gemakkelijk en plezierig mogelijk!

Waarom is dit eerste project nou zo belangrijk?

Nou, het is mijn ervaring dat je het beste leert programmeren door, je raadt het al, te programmeren. Het merendeel van mijn vaardigheden met Java heb ik aangeleerd door gewoon lekker te prutsen met het maken van mijn eigen spellen. En wat dat betreft is machine learning precies hetzelfde.

Dankzij de Machine Learning Accelerator had ik de vaardigheden geleerd die nodig waren om mijn eerste project te volbrengen. En tijdens dat project heb ik een hele hoop geleerd.

Vervolgens ben ik door gegaan naar Kaggle en heb ik in een fractie van de tijd NOG een project volbracht, de Titanic wedstrijd, en daarbij NOG meer geleerd.

Nu ben ik met enthousiasme begonnen aan de Digit Recognizer en daarvoor het Deep Learning traject aan het bestuderen voor Image Recognition met TensorFlow. Dankzij de ervaring die ik heb opgedaan tijdens mijn eerste twee projecten sluit deze nieuwe informatie geweldig aan bij wat ik al weet.

Zie je wat de kracht is van het maken van je eerste machine learning model?

Je zou jaren lang door kunnen blijven leren over Neurale Netwerken, Lineaire Algebra, optimalisatie problemen en ga zo maar door en nog steeds geen stap dichterbij zijn bij het maken van je eerste model. De kans is groot dat je ook de motivatie verliest LANG voordat je zover bent. Maar leer om één model te maken, hoe stom of simpel dan ook, en je hebt niet alleen de basiskennis om een geavanceerder model te maken, maar ook de motivatie!

Misschien dat je denkt dat dit allemaal vanzelfsprekend is. Geweldig! Maar, zelf heb ik gemerkt hoe gemakkelijk het is om verdwaald te raken in de overvloed aan informatie die beschikbaar is op het internet, vooral als je helemaal zelfstandig en groen aan het leren bent.

Oké, hopelijk heb ik je nu overtuigd.

Maar, wat moet je nu leren om je eerste machine learning project te volbrengen? Nou, er is niet echt één antwoord. Het hangt ervan af wat je wil maken. En dat is maar goed ook. Want, dat betekent dat er ook al meteen een hele hoop is wat je NIET hoeft te leren.

Desalniettemin zijn er een aantal dingen die ik zou adviseren om te leren, ongeacht wat je eerste project ook zal zijn:

  1. Wat is Machine Learning?
  2. Basis van met Python programmeren in Jupyter Notebook
  3. Hoe werkt een Machine Learning Algoritme?
  4. De Machine Learning Workflow

En dat is het!

Blijf echter niet te lang vast hangen in deze stappen. Zorg gewoon dat je snel een overzicht hebt van deze onderwerpen en begin dan gewoon. Als er gaten blijken te zijn dan kan je die het best al doende aanvullen tijdens het uitvoeren van je eerste project. Zo voorkom je dat je tijd en momentum verspilt aan dingen die je niet echt nodig hebt voor het volbrengen van je eerste project.

Nu zijn er meer dan genoeg opties beschikbaar om dit punt te bereiken. Het IS mogelijk om dit allemaal stukje voor stukje van het internet aan te vissen, maar ik zou aanraden om een tutorial te volgen die al deze stappen behandeld zonder teveel overige afleidingen.

Zelf heb ik dat dus gedaan met de Machine Learning Accelerator cursus, maar Kaggle heeft bijvoorbeeld ook een Intro to Machine Learning cursus van Dan Becker, welke al deze elementen lijkt te bevatten. Nu heb ik deze cursus zelf niet gevolgd, maar de Deep Learning cursus die ik nu volg is ook van Dan Becker en de kwaliteit is goed, al vermoed ik wel dat het lastig kan zijn om het te volgen als je niet een beetje meer achtergrond hebt.

Maar ja, welke cursus het meest geschikt voor jou is hangt af van je bestaande voorkennis en hoe snel je dingen op pakt. Dat is aan jou. Maar, wat ik je met dit bericht hopelijk heb meegebracht is dat de leukste, makkelijkste en snelste manier om te leren programmeren of modelleren al doende is.

En dat je daarom dan ook van het begin af aan zo weinig mogelijk tijd wilt verspillen aan andere onzin. Focus op het leren van alleen het meest essentiële voor het uitvoeren van dat eerste project. Zodra je dat in je zak hebt wordt het leerproces opeens een stuk leuker en gaat het bijna vanzelf.

Ik zou daarom ook aanraden om dat eerste project niet al te ambitieus te maken. Begin bijvoorbeeld gewoon met de Titanic wedstrijd op Kaggle. Dat is al uitdaging genoeg voor een beginner, geloof me. En als je dan vast loopt zijn er dan ook meer dan genoeg hulpbronnen te vinden om je verder te helpen.

Bijvoorbeeld sedaniel@dataridder.nl 😉

Maar dat is alles voor nu,

 

Tot de volgende keer!

FOCUS Evaluatie

Gegroet Dataridders,

Een aardig tijdje terug schreef ik een post met de titel FOCUS. In dit bericht stelde ik een aantal doelen voor de volgende 6 maanden. Nu, 7 maanden later, zal ik mijn prestatie evalueren.

Mijn doel was om redelijk tot uitstekend te worden op de volgende gebieden:

  • Toegepaste Statistiek
  • Machine Learning
  • Python
  • Java
  • SQL
  • R
  • Excel
  • Git
  • Calculus
  • Lineaire Algebra

Ik zal heel eerlijk zijn, zwart op wit heb ik het niet bijzonder goed gedaan. Mijn doelen waren ook een beetje vaag, maar dat was onvermijdelijk.

Echter, tegelijkertijd ben ik ook niet al te teleurgesteld. Want, hoewel ik niet alles geleerd heb wat ik mij had voorgenomen realiseer ik mij nu de volgende drie dingen:

1. Ik had teveel hooi op mijn vork genomen.

2. Niet alles wat ik dacht te moeten leren was essentieel.

3. Wat ik geleerd heb, dat is volgens mij wel het belangrijkste.

 

Had ik meer kunnen leren met meer discipline en inzet? Sowieso. Maar, uiteindelijk ben ik ook maar mens, en had ik ook andere dingen aan mijn hoofd.

Uiteindelijk heb ik vooral veel over Statistiek en, nog belangrijker, Applied Machine Learning met Python geleerd. Ook ben ik een stuk handiger geworden met Excel en heb ik een beetje geprutst met SQL. Ik had ook een beetje herhaling gedaan voor Java, Calculus en Lineaire Algebra, maar heb daar niet veel nieuws over geleerd en heb er niet al te veel tijd aan besteed. Git heb ik ook nog steeds regelmatig gebruikt. Maar aan R ben ik niet meer toegekomen.

Desalniettemin heb ik nu wel het punt bereikt waar ik mij in staat voel om een Applied Machine Learning project van start tot finish uit te voeren. In ieder geval van dataset tot machine learning model. Dankzij de Machine Learning Accelerator (grotendeels) bezit ik nu namelijk alle fundamentele vaardigheden die daarvoor nodig zijn en heb ik een goed begrip van het stappenplan, alsmede ervaring met het uitvoeren van die stappen.

Mijn zelfstudie en herhaling van wiskundige vaardigheden heeft me geen wiskundige excellentie opgeleverd, maar wel een goed overzicht van de relevante principes en hun rol in de wereld van Data Science. En ook over de rol van Excel, Java en Git heb ik nu een stuk meer duidelijkheid.

Tijdens het leren was ik vooral aan het leren wat ik nu eigenlijk moest leren. Dat is wel goed gelukt denk ik.

Maar wat van mijn doelen voor Dataridder?

Ik wilde dat jullie aan het einde van de 6 maanden toegang zouden hebben tot een hele hoop artikelen “waarin ik uitleg wat ik heb geleerd en de projecten die ik heb uitgevoerd presenteer en uitleg”. Dat is min of meer gelukt, maar niet helemaal zoals ik toentertijd voor ogen had.

Ik kwam er namelijk al snel achter dat het onmogelijk was om alles wat ik leerde, of zelfs maar een significant deel van wat ik leerde, in detail uit te leggen. Daar was simpelweg niet genoeg tijd voor. Niet alleen dat, het leek mij ook niet al te waardevol, aangezien er al meer dan genoeg goede leerbronnen voor handen waren.

Daarom probeerde ik mij al snel meer te focussen op het grote plaatje in mijn berichten, en een overzicht te schetsen van de relevante begrippen en principes, en ook te linken naar goede leerbronnen.

Later ontwikkelde zich dat meer en meer tot artikelen over de mindset alsmede over wat je nou überhaupt moest leren en waarom, omdat ik daar zelf ook veel mee bezig was en ook dacht dat jullie daar het meeste aan zouden hebben. Zelf lees ik mijn artikelen af en toe ook nog eens door als ik een beetje herhaling nodig heb.

Ook heb ik jullie regelmatig op de hoogte gehouden van mijn projecten.

Ik hoop dat jullie er wat aan gehad hebben, en ook dat toekomstige lezers het nuttig zullen vinden.

Hoe nu verder?

Nou, volgens de makers van de Machine Learning Accelerator ben ik nu klaar om te solliciteren voor mijn eerste (Junior) Data Science baan. In hoeverre dat waar is moet ik nog achter komen. Ik zal beginnen mijn moed te verzamelen en ondertussen gewoon door gaan met leren en vooral ook oefenen.

Wat betreft Dataridder, ik denk dat ik voorlopig gewoon zal doorgaan zoals de afgelopen maanden, wat betreft de inhoud. Wel zal ik proberen de frequentie weer een beetje op te voeren. Mijn aanvankelijke voornemen om elke week minimaal een artikel te posten was niet helemaal succesvol, maar gemiddeld genomen heb ik dat toch wel gehaald. Toch zal ik proberen om weer wat consistenter te worden.

Maar dat is alles voor nu,

 

Tot de volgende keer!

Vervulling en frustratie

Gegroet Dataridder,

De meest vervullende dingen in het leven zijn vaak ook het meest frustrerend. Afgelopen week heb ik mijn eerste echte Applied Machine Learning Project afgerond, en daarmee mijn certificaat voor de Machine Learning Accelerator cursus behaald.

Het was niet makkelijk.

En ik zou liegen als ik zou zeggen dat het alleen maar plezierig en totaal niet onaangenaam was. Sterker nog, er waren meerdere periodes waar dit totaal niet het geval was, en waarin ik mezelf moest dwingen om door te gaan. Maar, uiteindelijk was het ook heel leerzaam en waren er ook veel periodes van plezier en vervulling.

In dit artikel zal ik mijn ervaringen met mijn eerste machine learning project bespreken in de hoop je voor te bereiden voor je eigen eerste project, mocht je daar nog niet aan begonnen zijn. Zowel, dan herken je je misschien in mijn ervaringen en weet je dat je niet de enige bent.

Voor de cursus mocht ik na het afronden van de leermodules mijn eigen eindproject formuleren. De eerste uitdaging was het kiezen van een onderwerp. Het is makkelijk genoeg om classificatie, regressie of clustering taken te bedenken, maar om taken te bedenken die ook nuttig en haalbaar zijn voor een eerste project en aansluiten bij mijn persoonlijke interesses, dat was echt bijzonder lastig. Ik was er dan ook vele uren aan kwijt, verspreid over vele, vele dagen.

De tweede uitdaging was het vinden van een goede dataset bij dat gekozen onderwerp. Het was echt verrassend lastig om een dataset te vinden die zowel geschikt is voor machine learning als goed gedocumenteerd is. Ik heb zo’n beetje het hele internet afgezocht en data voorbij zien komen in alle vormen en maten, van csv tot json en noem het maar.

Uiteindelijk heb ik gekozen voor het maken van een voorspellend model voor het succes van telemarketing voor een termijndeposito. De dataset kwam van The UCI Machine Learning Repository, was al eerder gebruikt door onderzoekers voor het zelfde doeleinde en goed gedocumenteerd. Een project dat zowel haalbaar leek als interessant, ook al sloot het niet helemaal aan bij mijn eerste ideeën en was het niet erg revolutionair.

Maar, na uren lang zoeken naar de perfecte dataset was het toch echt tijd om eens te gaan beginnen. Beter om een minder dan perfect project te doen, en dan nog een, en dan nog een, en op deze manier dan ook daadwerkelijk iets te leren, dan om voor altijd vast te blijven hangen in het keuzeproces.

Na de eerste stappen kwam ik uit bij de volgende uitdaging: het bedenken van goede ideeën voor feature engineering, het selecteren en vervormen van de gegevens voor het verbeteren van de prestatie van het model. Mijn domeinkennis bij mijn gekozen onderwerp was vrij beperkt, maar ook de dataset zelf liet vrij weinig ruimte over voor creativiteit aangezien hij al door een proces van filteren en feature engineering onderworpen was.

Na veel onderzoek kwam ik slechts met een handvol ideeën en deze bleken de prestatie van het model niet significant te verbeteren. Dit was erg frustrerend maar van wat ik gelezen en geleerd had tijdens de cursus ook niet ongebruikelijk. In ieder geval had ik wel veel geleerd en geoefend met de technieken die ik geleerd had in de cursus.

De vierde uitdaging was het wachten op het trainen van het model.

Ja, serieus.

Stel je het volgende scenario voor:

Je hebt eindelijk je feature engineering gedaan, je hyperparameters gekozen en je start het algoritme. Geweldig, nu kun je een paar uur wachten op de uitslag voordat je weer verder kunt. Na een paar uur wachten kom je terug om je resultaat te bewonderen. Maar, je bent ergens iets vergeten en/of de resultaten zijn teleurstellend en je kunt het hele proces weer opnieuw kunt beginnen.

Zucht…

Het kostte me een significant aantal iteraties om mijn aanpak en functies voldoende te verfijnen om dit proces wat vlotter te laten verlopen.

De laatste uitdaging was het documenteren van het proces zelf. Het eindresultaat moest namelijk een mooi lineair verslag zijn dat de lezer laat zien hoe je aan je resultaat gekomen bent. Vrij lastig om te doen voor een totaal niet-lineair proces waarbij je constant stappen terug zet en extra onderzoek doet om je resultaten te verbeteren. Uiteindelijk heb ik er maar het beste van gemaakt en mijn persoonlijke aantekeningen zo goed mogelijk omgezet in documentatie voor de lezer.

En dat was dus mijn project. Een proces van vele frustratie en vervulling als gevolg van het overwinnen van die frustratie. Hopelijk heb ik je met het delen van mijn uitdagingen een beetje voorbereid op je eigen toekomstige machine learning projecten, en/of je wat beter laten voelen over de projecten die je al gedaan hebt.

Dat was alles voor nu,

 

Tot de volgende keer.

 

De 7 stappen van Machine Learning

Wat komt er allemaal kijken bij het maken en implementeren van een machine learning model?

 

Nou, het is meer dan alleen een databestandje laden en er een machine learning algoritme op los laten!

In dit artikel zal ik een kort overzicht schetsen van de stappen van het machine learning proces.

Bij elke stap zou een hele bibliotheek aan verdere uitleg geschreven kunnen worden, maar ik zal het zo kort mogelijk houden.

 

Stap 0: Voorbereiden

Voordat je kan beginnen moet je eerst weten wat het probleem is dat je met je machine learning model hoopt op te lossen!

Dit is de minst technische maar meest cruciale stap en vereist vooral inzicht in het probleem en communicatie met belanghebbenden.

Vervolgens is het de zaak om de benodigde data te identificeren en verzamelen. Dit gaat hand in hand met de definitie van het probleem, want zonder data heeft het weinig zin om na te denken over een machine learning oplossing.

 

Stap 1: Verkennen (Exploratory Analysis)

Je hebt het probleem gedefinieerd en de data verzameld. Tijd om te beginnen!

Maar, voordat je in het diepe springt is het de zaak om de data kort te verkennen en overzicht te krijgen. Hierbij gaat het vooral om het vinden van informatie die nuttig is voor de volgende stappen van het maken van het model.

Misschien dat je er zelfs achter komt dat je terug een stap terug moet doen en wat meer data moet verzamelen of het probleem moet herdefiniëren.

 

Stap 2: Schoonmaken (Data Cleaning)

Een machine learning model is nooit beter dan de informatie waar het op gebaseerd is.

Daarom is het van belang om te zorgen dat de data die erin gaat van goede kwaliteit is en geen fouten bevat. Missende observaties, ongewenste observaties, foute observaties. Geen van deze dingen helpen de prestatie van ons model.

 

Stap 3: Knutselen (Feature Engineering)

Nogmaals is het de zaak om te benadrukken dat een machine learning model nooit beter is dan de informatie waarop het gebaseerd is.

Niet alleen is het van belang data de data foutloos is. Het is ook van belang dat hij relevant is en op de juiste manier aan de algoritmes wordt gepresenteerd.

Denk bijvoorbeeld aan het toevoegen van een nieuwe variabele die het verschil geeft tussen twee jaartallen. Dit kan nuttiger zijn voor het algoritme dan de jaartallen zelf.

Dit is de stap die het meeste inzicht vereist in het probleem wat gemodelleerd wordt.

 

Stap 4: Selecteren (Algorithm Selection)

Oké, de data is klaar voor het model. Maar welk algoritme gebruiken we?

Dit is meestal vrij voor de hand liggend op basis van de machine learning taak (classificatie, regressie, clustering), maar er moet toch even over nagedacht worden. Het is belangrijk om een veelzijdig scala aan algoritmes te kiezen zodanig dat er goede resultaten te halen zijn met tenminste een aantal ervan.

 

Stap 5: Trainen (Model Training)

Eindelijk! De stap waar het allemaal om draait.

Het maken van het model.

Hierbij gaat het erom om de juiste hyper-parameters te vinden voor onze algoritmes, deze op de data los te laten, de resultaten op de juiste manier te evalueren en het winnende (meest nauwkeurige) model uit te kiezen.

 

Stap 6: Implementeren

We zijn echter nog niet klaar!

Nu het model af is moet het nog in gebruik genomen worden. Dit kan bijvoorbeeld betekenen dat het model moet worden opgenomen in een selfservice tool met een gebruiksvriendelijke interface. Ook zullen we het model misschien regelmatig moeten updaten door het nieuwe data te voeren.

En wie weet wat er allemaal nog meer gedaan moet worden om het model in gebruik te brengen en te houden?!

 

Pfoe!

Het is niet makkelijk om een machine learning model te implementeren.

Gelukkig hoef je deze stappen niet per se allemaal alleen te doen. Maar, het is wel van belang dat je je er van bewust bent wat er allemaal bij komt kijken zodat je jouw deel goed uit kunt voeren en effectief met je team kunt samenwerken.

Dat is alles voor nu,

 

Tot de volgende keer!

 

Bronnen