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

Machine Learning

Gegroet Dataridder,

In een eerder bericht had ik je al uitgelegd wat Datamining is. Dit keer ga ik het hebben over Machine Learning.

Misschien dat je je nu afvraagt wat het verschil is. Zelf was ik namelijk ook even in de war. Datamining en Machine Learning gaan toch immers allebei om het vinden van patronen in data? Om het omzetten van ruwe data naar nuttige informatie?

En dat is ook zo, maar bij Machine Learning gaat het erom om COMPUTERS te leren om nuttige informatie uit data te halen. Datamining zelf is een algemenere term, en hierbij kan het dus bijvoorbeeld ook gaan om het maken van grafieken en het interpreteren daarvan.

Maar, bij Machine Learning programmeer je de computer om zelf data om te zetten in nuttige informatie. Hierbij wordt dan gebruik gemaakt van de zogenaamde machine learning algoritmes (zoals bijvoorbeeld het random forest algoritme). Met behulp van deze algoritmes kan de computer leren van data, en op basis van het geleerde beslissingen en voorspellingen leren te maken.

Dit is een krachtig concept. Het stelt ons in staat om beslissingen en voorspellingen te automatiseren. Dat konden wij al eerder natuurlijk, dankzij computers over het algemeen, maar die moesten wij daarvoor expliciet programmeren. Maar met machine learning hoeft dat dus niet meer. De computer leert zelf om data gedreven beslissingen te maken.

Het is de techniek die centraal staat in de vierde industriële revolutie. Dankzij de eerste drie leven we nu in een tijd waarin we van de luxe kunnen genieten van geautomatiseerde spierkracht. Ook hebben we toegang tot een hele hoop informatie dankzij het internet. Maar nu gaan we dus een stap verder met geautomatiseerde denkkracht. Het is misschien wel het begin van de laatste uitvinding die we ooit hoeven te maken.

Hoe dan ook, de computer leert bij machine learning in principe om zelf een model te vormen. Een representatie/simplificatie van de werkelijkheid die gebruikt kan worden voor het maken van beslissingen en voorspellingen.

Er zijn nu al een heleboel nuttige toepassingen van machine learning. In onder andere dit artikel had ik er al een aantal genoemd. Maar, om er nog een paar te herhalen, denk bijvoorbeeld aan gepersonaliseerde reclames, spraakherkenning en zelfrijdende auto’s. Dit is echter slechts het begin, wie weet wat er nog meer mogelijk is?

Machine learning algoritmes kunnen vrij moeilijk zijn om te begrijpen. Mijn missie om mijn random forest algoritme te programmeren bleek een heel karwei, en dat was misschien nog een van de simpelere algoritmes. En bij de werking van neurale netwerken komt ook heel wat wiskunde kijken. Maar, natuurlijk is het erg belangrijk om deze algoritmes te begrijpen. Als je er een proefwerk over krijgt.

Grapje.

Deze algoritmes komen natuurlijk niet uit de lucht vallen en iemand moet ze bedenken en verbeteren. Leren hoe ze werken is dus zeker nuttig. Maar, wil je leren om zelf machine learning toe te passen dan is het vooral belangrijk dat je leert hoe je ze moet gebruiken. Moet je weten hoe een computer werkt om een blog artikel te lezen?

Natuurlijk niet.

Je moet alleen weten wat alle knoppen doen. En zo is het ook met machine learning. Je moet leren werken met de tools.  Leer gewoon programmeren met de machine learning libraries en je kunt aan de slag. Je hoeft ze niet helemaal van binnen en buiten te kennen om ze te gebruiken, en waarschijnlijk heb je daar ook de tijd niet voor want er zijn er een hele boel en er komt een hele boel wiskunde bij kijken.

Maar, het mag wel.

Persoonlijk vindt ik het heel leuk om te weten hoe dingen werken en ze zelf na te maken. Daarom heb ik ook mijn eigen versies gemaakt van een random forest en neuraal netwerk. En als jij dat ook leuk vindt, laat je dan zeker niet tegen houden om hetzelfde te doen. Op deze manier leer je jezelf tegelijkertijd programmeren aan en leer je wat over de werking van machine learning algoritmes. Een veel leukere manier van leren dan neuzen door een stapel stoffige tekstboeken, als je het mij vraagt.

Wil je echter leren machine learning modellen en applicaties te maken dan zul je toch echt aan de slag moeten gaan met de bestaande tools. Zelf ben ik inmiddels weer ver gevorderd met de Machine Learning Accelerator van EliteDataScience. Een prima keuze om machine learning met Python te leren, ben ik nog steeds van mening. Er zijn echter meer dan genoeg cursussen beschikbaar dus kijk ook zeker verder.

Maar ja, dat is alles voor nu.

Tot de volgende keer!

 

 

 

Accelerator

Hallo wereld,

Vorige week ben ik dan toch eindelijk over de streep getrokken; ik heb geld geïnvesteerd in mijn educatie! Tot nu toe had ik, zoals ik al zei op de Over Dataridder pagina, alles gewoon gratis en voor niets van het internet af gevist. Maar, na het volgen van een webinar van EliteDataScience was ik dan toch verkocht; ik heb de Machine Learning Accelerator cursus aangeschaft.

Sindsdien heb ik hem tijdens bijna al mijn zelfstudie sessies tot dusver helemaal verslonden. En tot nu toe ben ik zeer positief, want deze cursus lijkt echt te doen wat hij belooft.

En wat belooft hij dan?

Nou, het is een cursus gericht op beginnende tot ‘intermediate’ Data Scientists die hun leerproces willen versnellen. Het is volgens EliteDataScience (net zoals volgens mij, overigens) heel goed mogelijk om alles zelf te leren. Maar, het nadeel daarvan is vooral dat het een langzaam en moeizaam proces kan zijn, zoals ik zelf ook al gemerkt heb. Het is niet zozeer dat de informatie niet te vinden is, maar vooral juist dat er TEVEEL informatie te vinden is! Hierdoor zie je al snel door de bomen het bos niet meer.

Deze cursus richt zich echter op het aanleren van de fundamentele vaardigheden voor de Data Scientist, met behulp van een van de meest gebruikte professionele Data Science tools: Jupyter Notebook, met Python.

De FUNDAMENTELE vaardigheden.

Dat is heel belangrijk, want hierdoor raak je niet afgeleid en leer je de kern van het Data Science proces aan, waardoor je de gereedschappen hebt die je bij vrijwel elk project nodig zal hebben. Maar, het is zeker niet zo dat het zo erg versimpeld is dat je zelf van alles er bij moet leren om er iets mee te kunnen doen. Je leert echt alles wat je nodig hebt voor je eerste projecten. En je leert het beste in context, door het doen van projecten, en deze cursus brengt je op een goed niveau om daar mee te beginnen.

Althans, dat is de belofte.

Natuurlijk heb ik deze cursus pas een week gevolgd en ben ik nog niet eens op de helft. Maar, ik heb al wel een aardig overzicht van wat ik in dit programma allemaal ga leren. Ik heb nu de eerste module (‘Cornerstone’) afgerond en ben nu een kei met Jupyter Notebook, maar dat is slechts het begin.

Het beste van dit programma is wel dat er een grote nadruk ligt op het uitvoeren van oefeningen. Hierdoor leer je je de vaardigheden echt aan, in plaats dat je ze alleen aan kijkt. En je wordt ook gestimuleerd om zelf met de principes te experimenteren en er over na te denken. Ik kreeg er via het webinar ook gratis het certificatie pakket bij. Mooi voor op je CV. Tot slot is er ook nog de mogelijkheid om vragen te stellen als je er niet uit komt.

Wel zijn er best een aantal kleine foutjes in de cursus. Maar die vallen toch in het niet bij de waarde die dit programma in mijn ogen heeft. Het heeft mijn leerproces in ieder geval al een stuk versneld. Ik zou hem aanraden.

Maar, dat is alles voor nu.

Tot de volgende keer!

 

Data wat?

Hallo wereld,

Wat is een Data Scientist? Vandaag de dag is het lastig om daar een eenduidig antwoord op te vinden.

Sommigen zijn van mening dat Data Scientists vooral experts moeten zijn in statistiek. Anderen zijn van mening dat ze vooral geweldig moeten zijn in programmeren. Weer anderen leggen de nadruk op zakelijk inzicht.

Sommigen  vinden dat statistiek niet genoeg is, ze moeten zowel breedte en diepgang hebben in allerlei wiskundige disciplines. Niet alleen dat, ze moeten ook een diepgaande kennis hebben over de bedrijfstak waar ze in werkzaam zijn!

Maar de meesten vinden dat een Data Scientist dit eigenlijk ALLEMAAL moet kunnen! En nog veel meer!!!

Pfoe, het is niet makkelijk om een Data Scientist te zijn! Als je de omschrijvingen van het beroep allemaal letterlijk zou nemen is het moeilijk om jezelf voor te stellen dat deze wonderen der natuur daadwerkelijk de aardbodem bewandelen.

Photo by Elias Castillo on Unsplash

Waar begin je als leek om jezelf om te scholen tot Data Scientist? Hoe ga je verder?! Wanneer ben je klaar? Het antwoord op de eerste twee vragen is lastig, maar het antwoord op de laatste is duidelijk: NOOIT. Wat?! Maar Samson, hoe wordt ik dan een Data Scientist? Waarom zou ik beginnen als ik toch nooit klaar zal zijn met leren?!

Een betere vraag zou zijn, waarom zou je NIET beginnen als je dan nooit klaar HOEFT te zijn met leren? Oké, dat is eng, toegegeven, maar dat is ook wat Data Science juist zo interessant maakt! Maar, om praktisch te blijven, wat betekent het nou precies om Data Scientist te worden, en hoe krijg je er brood mee op de plank?

Nou, ik ben natuurlijk maar een leek, maar mij lijkt het dat je een Data Scientist bent wanneer je een combinatie van de eerder genoemde vaardigheden toepast om tot waardevolle inzichten te komen voor een bedrijf. Of voor een consument in de vorm van een applicatie. Wat voor combinatie? Hoe waardevol? Dat kan verschillen. Maar de kern zit hem in het bedenken van creatieve oplossingen voor complexe, multidisciplinaire data problemen. Datamining in principe, waar ik al meer over had geschreven in dit bericht.

Dat is best vaag, en de term Data Scientist kan dan misschien ook wel wat specifiekere “sub-classes” gebruiken. Er lijken echter wel wat algemene kenmerken te bestaan. Namelijk:

  1. Kennis van wiskunde, en vooral statistiek
  2. Ervaring met Python of vergelijkbare taal
  3. Ervaring met data analyse en data visualisatie
  4. Ervaring met het trainen van machine learning algoritmes
  5. Communicatievaardigheden
  6. Zakelijk inzicht

Verder? The sky is the limit!

Hopelijk heb ik je nu niet al te bang gemaakt? Oké, ik zal ophouden. Maar, bedenk jezelf het volgende.

Ook al zou je niet in staat zijn om al deze dingen te leren, dan zijn het stuk voor stuk nog steeds verdomd waardevolle vaardigheden om in je portfolio te hebben! Neem gewoon een stapje tegelijk, blijf jezelf ontwikkelen, en kijk hoe ver je komt. Je hoeft niet te wachten totdat je voldoet aan alle omschrijvingen van een Data Scientist voordat je er iets geweldigs mee kan gaan doen!

Wil je lezen wat anderen zeggen over wat een Data Scientist is? Kijk dan eens in de onderstaande bronnen. Dat is alles voor nu.

 

Tot de volgende keer!

 

Bronnen

SPOEDCURSUS STATISTIEK

Hallo wereld

Dit keer ga ik jullie een spoedcursus aanbieden in statistiek. In dit bericht zal het tempo wat hoger ligger dan normaal. Wil je een Dataridder worden dan is het echter van belang dat je een beetje werkt aan je conditie!

Op Wikipedia wordt statistiek gedefinieerd als de wetenschap, methodiek en de techniek van het verzamelen, bewerken, interpreteren en presenteren van gegevens. Dat is nogal een mondvol, maar statistiek is in principe niets anders dan de wiskundige theorie achter Data Science.

Wil je meer leren over Data Science dan is het dus belangrijk ook statistiek te leren. Bovendien zal het je helpen mijn toekomstige berichten beter te begrijpen.

Oké, klaar voor de start?

Af!

Hoofdgebieden

In de statistiek zijn er twee hoofdgebieden, de beschrijvende en de inductieve statistiek. Bij de beschrijvende statistiek houdt men zich bezig met de gegevens van een bepaalde populatie, ofwel verzameling van objecten. Hierbij gaat het in tegenstelling tot bij de inductieve statistiek om de gehele populatie, waarbij een steekproef genomen wordt. Dat wil zeggen, er wordt (willekeurig) een deelverzameling uit de totale populatie genomen om informatie over deze populatie te vinden. Dit is noodzakelijk wanneer de gehele populatie te groot is of om andere redenen onmogelijk of onwenselijk is om te onderzoeken.

Gegevens

Ook kan men onderscheid maken tussen numerieke en categorische gegevens. Binnen categorische gegevens kan men weer verder onderscheid maken tussen ordinale (geordende) en nominale (ongeordende) kenmerken.  Een voorbeeld voor een ordinaal kenmerk is bijvoorbeeld leeftijdsgroep (kind, volwassene, bejaarde), en een voorbeeld voor een nominaal kenmerk is kleur (rood, groen, blauw). Numerieke gegevens kunnen worden opgedeeld in discrete en continue waarden. Discrete waarden nemen alleen bepaalde waarden aan met constante intervallen ertussen in, bijvoorbeeld aantallen. Continue waarden kunnen alle waarden (binnen een bepaald interval) aannemen op de numerieke schaal, zoals bijvoorbeeld gewicht of tijd.

Visualisatie

Om categorische data te visualiseren kunnen we onder andere gebruik maken van kolomdiagrammen, staafdiagrammen of taartdiagrammen. We visualiseren dan het aantal of percentage van objecten dat van een bepaalde categorie is. Om numerieke data te visualiseren kunnen we onder andere gebruik maken van tijdgrafieken, histogrammen, stamdiagrammen en spreidingsdiagrammen.

Kolomdiagrammen en staafdiagrammen zijn heel simpel. Er wordt in zo’n diagram gewoon een aantal staven weergegeven die het aantal (of percentage) van objecten van een bepaalde categorie representeren. In het geval kolomdiagrammen zijn die staven verticaal en in het geval van staafdiagrammen horizontaal. Taartdiagrammen zijn ook niet al te ingewikkeld. In plaats van staven hebben we hier te maken met cirkelsegmenten die de percentages representeren van de categorieën. Waarschijnlijk zul je deze grafieken allemaal al eerder gezien hebben.

Kolomdiagrammen, staafdiagram en taartdiagram

Tijdgrafieken zul je ook vast al kennen. We hebben hier dan een lijn door een aantal punten met op de horizontale as de tijd en op de verticale as de afhankelijke variabele. Histogrammen en stamdiagrammen zijn visuele representaties van de zogenaamde frequentietabel. In een frequentietabel word de verdeling van een verzameling numerieke waarden weergegeven. Er wordt hierbij aangegeven hoe veel van de getallen binnen de gekozen intervallen voorkomen. In een histogram wordt daar dan simpelweg een kolomdiagram van gemaakt, in een stamplot worden deze gegevens in getalvorm weergegeven. In de stam, de getallen links van de lijn, staan dan de eerste getallen van de waardes. De bladeren zijn de overige getallen van de gesorteerde waardes in de verzameling.

Tijdgrafiek
Histogram

Afbeeldingsresultaat voor stemplot

Halverwege, ga zo door!

Numerieke presentatie

Naast visuele manieren voor het presenteren van data zijn er ook numerieke methodes. De belangrijkste eigenschappen van verzamelingen binnen de statistiek zijn centrummaten en spreidingsmaten.

De belangrijkste centrummaten zijn het gemiddelde, de mediaan en de modus. Het gemiddelde is de som van de waardes gedeeld door het aantal. De mediaan is de waarde die in het midden van de gesorteerde reeks ligt. In het geval van een even aantal is hij gelijk aan het gemiddelde van de twee middelste getallen. De modus is het getal dat het meeste voorkomt.

De belangrijkste spreidingsmaten zijn de standaardafwijking en de variatie. Deze getallen geven aan hoe ver de getallen over het algemeen van het gemiddelde afliggen. De standaardafwijking, ook wel standaarddeviatie genoemd, rekent men uit met de volgende formule.

De variatie is simpelweg het kwadraat van deze standaarddeviatie.

Percentielen en doosdiagrammen

Ook kunnen we de data representeren met percentielen en de vijf-getallensamenvatting. Percentielen geven aan voor welk getal een bepaald percentage van de getallen onder dit getal vallen. Een goed voorbeeld hiervan is het 50ste percentiel, ook wel bekend als de mediaan. Voor dit getal vallen dus 50 procent van de getallen onder dit getal (en 50 procent erboven). Als we dan het minimum, 25ste percentiel, 50ste percentiel, 75ste percentiel en maximum nemen hebben we de vijf-getallensamenvatting. Deze kunnen we visualiseren aan de hand van een doosdiagram. Hierbij wordt de data binnen de 25ste en 75ste percentielen weergegeven als een rechthoek (doos) en de minima en maxima met zogenaamde snorharen.

Afbeeldingsresultaat voor doosdiagram
Doosdiagram

Eventjes doorzetten nog!

Correlatie

Correlatie is de statistische samenhang tussen twee variabelen. We kunnen bijvoorbeeld waarnemen dat er een positief verband bestaat tussen het aantal uur dat een student studeert en het cijfer dat hij haalt. Het gedrag van zo’n correlatie wordt in het geval van een lineair verband uitgedrukt door middel van de correlatiecoëfficiënt. Deze kan varieren van -1 tot +1. Bij -1 is er een perfect negatief verband, bij +1 een perfect positief verband. Dit zegt echter niets over de helling van dit lineaire verband, alleen hoe goed de punten binnen een verzameling op een dergelijke lijn vallen. Lineaire regressie is het proces waarbij de lijn die zo’n correlatie zo goed mogelijk beschrijft berekend wordt.

Experimentatie

Ook kunnen we niet automatisch aannemen dat bij zo’n verband een variabele de oorzaak is en de andere het gevolg. Vaak zijn er een hele hoop andere factoren die op de achtergrond meespelen. Om met zekerheid te kunnen vast stellen of een correlatie een causaal (oorzaak-gevolg) verband beschrijft is het noodzakelijk om een goed opgezet (statistisch) experiment uit te voeren. Hierbij wordt dan een aantal objecten aan een bepaalde behandeling blootgesteld en daarna wordt het effect van die behandeling geobserveerd. Bijvoorbeeld het geven van een bepaald medicijn aan een muis en observeren of het effectief is of niet. Op deze manier kunnen we dan uitspraken doen over oorzaak en gevolg, mits zo’n experiment goed is opgezet en de resultaten op de juiste wijze worden geïnterpreteerd. Bij deze experimenten is het in geval van steekproeven (vrijwel altijd het geval) zowel van belang om objecten willekeurig te selecteren voor behandelingen en zoveel mogelijk objecten te bestuderen, zodat resultaten representatief zijn voor de gehele populatie.

Finish!

En nu ben je een expert in statistiek!

Nou ja, niet echt natuurlijk. Er is nog veel meer te leren. Op het moment ben ik dat zelf aan het doen met het gratis e-book ThinkStats en met af en toe een video uit de playlist Crash Course Statistics op Youtube. Dus als je meer wilt leren kun je daar kijken, of misschien in de onderstaande bronnen. Maar als je deze spoedcursus hebt volgehouden dan ben je al een heel eind op weg! Dat is alles voor nu.

Tot de volgende keer!

 

Bronnen:

Een boom tegelijk

Hallo wereld,

Dit keer ga ik jullie wat uitleggen over decision trees oftewel beslissingsbomen. Want, zonder beslissingsbomen kan je geen random forest maken.

In mijn eerdere bericht over random forests had ik jullie al in grote lijnen uitgelegd hoe deze werken. Zoals ik al zei, decision trees leren data te categoriseren aan de hand van een model met knooppunten en vertakkingen. Bij elk knooppunt word een data punt aan een bepaalde test onderworpen om te beslissen naar welk volgende knooppunt de data gaat voor een volgende test. In het voorbeeld dat ik had gegeven kun je bijvoorbeeld een object hebben met de volgende eigenschappen: snelheid: 9001 km/u, lengte: 2m.

Als we willen weten wat dit is dan kunnen we het testen met onze beslissingsboom. Is de snelheid hoger dan 60 km/u? Ja. Dus is het geen vogel en moeten we de vraag stellen: Is de lengte langer dan 3m? Nee. Dus het is ook geen vliegtuig, het is Superman!

Maar, hoe maak je nou zo’n beslissingsboom? Nou, die in het voorbeeld heb ik gewoon helemaal zelf bedacht. Maar wat als je nou niet zo geweldig slim bent, of de data wat ingewikkelder is? Dan heb je een computer algoritme nodig dat de beslissingsboom voor je maakt op basis van gelabelde data.

Want, het is een supervised learning algoritme, weet je nog? Dat betekent in dit geval dus dat je het moet trainen door het gelabelde data te voeren. We zouden de bovenstaande beslissingsboom dus kunnen genereren door het algoritme een hele hoop datarijen met eigenschappen van vogels, vliegtuigen en superman te voeren. In dit geval data rijen met drie kolommen: snelheid, lengte en een label. Op basis van die data kan het computer algoritme dan een beslissingsboom berekenen die het label kan raden voor nieuwe datapunten.

Hoe goed die beslissingsboom is hangt echter af van de kwaliteit van de data. Zowel de relevantie als de juistheid van de data. Geef je het bijvoorbeeld alleen maar kleuren in plaats van snelheden en lengtes dan zal het het waarschijnlijk een stuk minder goed doen. Ook het verkeerd labelen van de data zal weinig goeds uithalen. En ook geldt vaak: hoe meer data, hoe beter!

Maar hoe werkt dat algoritme dan? Nou, het stappenplan is als volgt:

1. Bereken voor de gegeven dataset voor alle mogelijke criteria (alle mogelijke waardes voor alle variabelen)  de kwaliteit van de resulterende splijting van gegevens uit.

2. Kies het criterium uit dat de beste splijting oplevert.  (De splijting die de data zo goed mogelijk verdeeld in de gewenste categorieën.) Dit is het criterium voor het eerste knooppunt.

3. Herhaal voor de resulterende datasets totdat alle data compleet zuiver gespleten is in de gewenste categorieën. Dan zijn er dus alleen nog bladeren. (Of als de boom de maximum lengte bereikt heeft.)

Hoe wordt de kwaliteit van de splijting bepaalt? Nou hier zijn verschillende manieren voor. Een ervan is de Gini index. De Gini index is een statistische maatstaf voor de ongelijkheid binnen een verdeling. Hij wordt vooral in de economie gebruikt om de inkomensongelijkheid te berekenen, maar kan ook gebruikt worden om de kwaliteit van de splijting van onze dataset te bepalen. De Gini index is een getal dat een waarde heeft tussen 0 en 1. Een waarde van 0 komt overeen met volkomen gelijkheid, een waarde van 1 met volkomen ongelijkheid. In ons geval komt 0 overeen met een perfecte splijting en 1 overeen met een compleet waardeloze. In het geval van 2 categorieën zou een score van 1 betekenen dat we precies de helft van onze datapunten in de juiste en de andere helft in de onjuiste categorie zouden plaatsen. Daar schieten we dus niets mee op. Een score van 0 daarentegen zou betekenen dat we onze datapunten allemaal in aparte categorieën hebben geplaatst.

Met 3 categorieën, zoals in ons voorbeeld, wordt het iets ingewikkelder en hebben we al minimaal 2 knooppunten nodig om alle data te kunnen categoriseren. De eerste splijting kan namelijk nooit perfect zijn aangezien er 3 categorieën zijn en maar 2 mogelijke subsets. Ook is het lang niet altijd het geval dat we meteen een perfecte splijting vinden, ongeacht het aantal categorieën. We zijn dus bij elke splijting op zoek naar de laagst mogelijke gini index mogelijk en gaan gewoon net zo lang door totdat we de perfecte boom hebben (met een gini index van 0 in elk blad), of dat onze boom te groot wordt.

Een andere veelgebruikte is de information gain (informatie toename). De information gain is een maat voor de afname van entropie in een verzameling. De entropie is gelijk aan 0 voor een compleet homogene verzameling en 1 voor een evenredig verdeelde verzameling. Een toename van de information gain staat gelijk tot een afname van entropie. En dat betekent dus dat de verzameling puurder wordt, wat precies is wat we willen. We willen dat er alleen maar vogels in ons eerste blad terechtkomen, en geen vliegtuigen!

Nu zijn er natuurlijk ook formules voor deze getallen, en om die uit te leggen zou ik makkelijk een heel nieuw bericht kunnen schrijven. Ik ga dit echter voorlopig denk ik niet doen. Wil je weten hoe ze worden uitgerekend, Google is je vriend. Maar ik zal er natuurlijk ook een van gebruiken in mijn eigen implementatie van de random forest wijnproever, aangenomen dat dit gaat lukken. Ik ben er van overtuigd dat ik er uiteindelijk wel uit zal komen, maar hoe lang dit nog gaat duren is moeilijk te zeggen.

Het nadeel van deze beslissingsbomen is wel dat ze de neiging hebben om data te overfitten. Dat wil zeggen, ze leren de trainingsdata zo goed te classificeren dat ze het slecht doen voor nieuwe gegevens, die net wat anders is. Ze leren de oefentoetsen perfect uit hun hoofd, maar weten niet hoe ze andere sommen op moeten lossen. Een oplossing hiervoor is snoeien (pruning). Dat houdt in dat we er gewoon een aantal takken afhalen zodat de boom wat minder gefixeerd is op details. Maar een andere en betere oplossing is het bundelen van een aantal variaties van deze bomen in een random forest. Maar, dat is alles voor nu,

Tot de volgende keer.

Neurale netwerken

Hallo wereld. Dit keer ga ik jullie een inleiding geven in de wereld van neurale netwerken en machine learning.

Kunstmatige neurale netwerken zijn een onderdeel van machine learning en een van de belangrijkste programmeer constructies bij 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?

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.

Waarschuwing: Er komt wiskunde aan. Wil je een beetje begrijpen hoe neurale netwerken werken dan kom je daar niet omheen. Wordt echter niet al te bang, zolang je maar een beetje basiskennis van algebra hebt (variabelen, optellen, vermenigvuldigen etc.) moet je het verhaal goed kunnen volgen. Kennis van Lineaire algebra en Calculus zou ook helpen, maar ik zal linken naar wat je hiervan moet weten.

Perceptron

Een perceptron is een type 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:

In de formule hierboven wordt een sommatie gebruikt. Mocht je dit niets zeggen en is de formule Chinees voor je, klik dan op de link. Maar deze formule is nog een beetje onhandig gedefinieerd. In plaats van de sommatie gebruiken we liever gewoon het inproduct. En in plaats van de treshold gebruiken we liever een bias b, die gedefinieerd is als de negatieve waarde van de treshold. Als een treshold aangeeft hoe moeilijk een perceptron vuurt, dan geeft de bias dus aan hoe makkelijk hij vuurt. Dan kunnen we de formule als volgt herschrijven.

Volg je me nog? Zo niet, stel gerust een vraag in de reacties of stuur me een email. Of bekijk gewoon de bronnen die ik gebruikt hebt en kijk of je er daarmee wel uit komt. Daarin wordt alles uitgebreider uitgelegd.

Wat is nou het nut van zo’n perceptron? Nu 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

Hoe doet zo’n netwerk dat? Nou, dit kan op verschillende manieren. De meest interessante en meest gebruikte manier daarvoor is waarschijnlijk deep learning. Echter, hiervoor wordt niet gebruikt van perceptrons maar van sigmoid neurons. Sigmoid neuronen lijken heel veel op perceptrons, maar in tegenstelling tot perceptrons hebben sigmoid neurons geen binaire maar een reële output die kan variëren van 0 tot 1. Dit zorgt ervoor dat het gedrag veel beter gefinetuned kan worden.

 

Ik zelf heb gebruikt gemaakt van een genetisch algoritme in mijn projecten: Text-Color-Learning en Dodger-AI. Wat voor leermethode je ook gebruikt, het is in principe gewoon een optimaliseringsprobleem.

Pfoe, wat een termen allemaal! Heeft dit meer vragen opgeleverd dan antwoorden? Nou, dat is ook mooi, toch? Om in een bericht uit te leggen hoe neurale netwerken en machine learning werkt is een beetje teveel gevraagd ben ik bang. Ik hoop echter dat je het een beetje hebt kunnen volgen en het interessant vond. Zo niet, laat het me weten. Zowel, laat het me ook weten. Dat is alles voor nu,

Tot de volgende keer!

Bronnen

http://neuralnetworksanddeeplearning.com/index.html

https://en.wikipedia.org/wiki/Artificial_neural_network

 

 

 

 

Door de bomen het bos zien

Hallo wereld,

Wat zijn random forests? Hoe werken ze? Waar worden ze voor gebruikt? Nou, laat ik om dat uit te leggen eerst een stap terug doen en wat uit leggen over machine learning en decision trees. Random forests zijn namelijk machine learning algoritmes die zijn opgebouwd uit decision trees.

Machine learning is het subgebied binnen kunstmatige intelligentie dat zich bezig houdt met het bedenken en trainen van algoritmes die leren van gegevens. Het zijn programma’s met een aantal variabele parameters die zich aan passen aan een dataset om een zo effectief mogelijk eindprogramma te realiseren. Het is te vergelijken met de manier waarop wij leren. Op basis van de gebeurtenissen in ons verleden passen wij ons gedrag aan voor de gebeurtenissen in de toekomst.

Soms krijgen wij hier begeleiding bij, van ouders en leraren, die ons vertellen wat we wel of niet moeten of kunnen doen. Op andere momenten zoeken we het zelf uit, met vallen en opstaan. Zo is het ook met machine learning. Je hebt daarbij supervised (onder toezicht) en unsupervised (zonder toezicht) leren.

Decision trees (beslissingsbomen) vallen onder de supervised categorie. Wat houdt dit in? Nou, je moet het algoritme in principe les geven. Je geeft het een gelabelde dataset, dat wil zeggen een dataset met de gewenste antwoorden bijgevoegd. Bijvoorbeeld een verzameling van plaatjes van honden en katten met de labels hond of kat. Op basis daarvan kan het algoritme leren wat het verschil is tussen honden en katten en nieuwe plaatjes zelf leren categoriseren. Decision trees worden gebruikt voor classificatie en regressie. Bij classificatie wordt de data gecategoriseerd, net zoals bij het voorbeeld met honden en katten. Bij regressie wordt er een continue waarde aan toegedeeld. Bijvoorbeeld een algoritme dat de leeftijd van een mens of dier op basis van een foto bepaalt.

Decision trees leren data te categoriseren aan de hand van een model met knooppunten en vertakkingen. Bij elk knooppunt wordt een datapunt getest op een bepaalde variabele en op basis daarvan wordt bepaald naar welk volgende knooppunt het gaat voor de volgende test. Uiteindelijk komt het dan uit bij een eindknooppunt, een blad (leaf). Hierbij wordt het datapunt dan gelabeld binnen een een bepaalde klasse (of een continue waarde in het geval van regressie). Een voorbeeld?

Hierbij zijn de vierkanten dan dus de knooppunten, de lijntjes de takken en de rondjes de bladeren. Hoe bepaalt het algoritme wat de criteria zijn waar op getest wordt in de knooppunten? Brute kracht in principe. Bij elk knooppunt wordt voor elke variabele voor een groot aantal waarden getest tot wat voor split het zou zorgen in de dataset. Uiteindelijk wordt dan gewoon de split gekozen die de data het beste opsplitst. Dit proces wordt herhaald tot de gekozen eindcriteria bereikt worden (bijvoorbeeld de maximale lengte voor de boom).

Decision trees hebben echter de vervelende gewoonte om data te ‘overfitten’. Ze vormen zichzelf op een manier die heel nauwkeurig de trainingset kan modeleren, maar doen dit zo overdreven dat ze het slecht doen voor nieuwe gegevens. Ze leren de antwoorden in plaats van de patronen. Om dit te voorkomen kun je de decision trees ‘snoeien’. Dit houdt in dat je hem kleiner maakt zodat hij niet te gefocust raakt op de details. Maar er zijn ook andere oplossingen, en een daarvan is het random forest algoritme.

Een random forest is precies dat wat de naam al suggereert: een verzameling van random bomen, beslissingsbomen. Er wordt een verzameling van decision trees gegenereerd met random variaties in de trainingset en input variabelen. Deze decision trees krijgen dan elk een stem. In het geval van classificatie wordt het uiteindelijke antwoord bepaald door de meerderheid van die stemmen. In het geval van regressie wordt het gemiddelde genomen. Op deze manier wordt voorkomen dat het model overfit raakt, iets wat vooral een risico is voor trainingsets met veel variabelen en weinig datapunten. Random forests daarentegen kunnen daar over het algemeen uitstekend mee omgaan.

Dit en het feit dat ze over het algemeen vrij simpel te trainen zijn maakt ze erg populair. Ze doen het vooral goed voor classificatie maar zijn ook geschikt voor regressie. Ze worden gebruikt bij allerlei toepassingen op allerlei gebieden. Ze worden gebruikt door banken om kandidaten voor een lening te beoordelen. Ze worden gebruikt op de beurs om trends te voorspellen. Ze worden gebruikt in computer visie, bijvoorbeeld voor X-box connect. En nog veel meer.

En dat is het. Simpel nietwaar? Natuurlijk komt er wat meer bij kijken als je zo’n decision tree of random forest zelf wilt implementeren en trainen. Maar daarover later meer. Ik wil er namelijk eerst voor zorgen dat je het grote plaatje duidelijk hebt. Door de bomen het bos zien aldus. Bovendien heb ik de details zelf ook nog niet allemaal op een rijtje. Een boom tegelijk planten en zo. Maar, dat is alles voor nu.

Tot de volgende keer!

Datamining

Hallo wereld. Dit keer ga ik jullie wat vertellen over datamining. Datamining (gegevensdelving, datadelving) is het gericht zoeken naar patronen en verbanden in verzamelingen van gegevens met als doel tot waardevolle kennis te komen. Het wordt toegepast in legio aan gebieden, zoals de wetenschap, de detailhandel, de financiële sector, de politie en de journalistiek. Denk bijvoorbeeld aan het analyseren van het aankoopgedrag van klanten om bedrijfsstrategieën te verbeteren, of het vinden van onregelmatigheden in online activiteit voor het opspeuren van criminelen.

De technologische ontwikkelingen van de laatste tijd hebben het verzamelen en opslaan van data steeds makkelijker gemaakt. Niet alleen dat, de wetenschappelijke en economische ontwikkelingen hebben ervoor gezorgd dat er veel meer data relevant voor ons geworden is. Echter, als mens zijn we niet opeens beter geworden in het verwerken van al die gegevens. Hierdoor hoopt het aantal gegevens zich op, gegevens die mogelijk tot waardevolle informatie zouden kunnen leiden als we ze zouden kunnen analyseren. Dit is waarom datamining steeds interessanter wordt als technologie. Het stelt ons in staat het onttrekken van informatie, dat wil zeggen nuttige inzichten en voorspellingen, uit die steeds harder groeiende hoop van gegevens te automatiseren.

Hierbij is het echter belangrijk dat dit allemaal op een verstandige en wetenschappelijke manier gebeurt. Het is heel gemakkelijk om verbanden te vinden met een programma die in werkelijkheid niets zeggen of iets heel anders betekenen dan op het eerste gezicht lijkt. Wist je bijvoorbeeld dat er meer mensen verdrinken op dagen dat er meer ijsjes verkocht worden? We moeten echt ophouden met al die ijsjes, niet waar?! Oh, of is het misschien dat er op warmere dagen meer mensen naar het strand komen en het risico lopen te verdrinken, en dat er ook meer ijsjes verkocht worden omdat er meer mensen op het strand zijn?

Datamining is onderdeel van een groter proces bekend als KDD: knowledge discovery in databases (kennisvergaring uit databases), waar meer bij komt kijken dan alleen het analyseren van de data. Maar met datamining wordt gerefereerd naar de analyse stap zelf en hierbij zijn een aantal verschillende analyse taken te onderscheiden:

  • Het groeperen van data. (Clustering)
  • Het vinden van verbanden tussen data. (Dependency modeling)
  • Het vinden van onregelmatigheden in data. (Anomaly detection)
  • Classificatie. (Classification)
  • Regressie. (Regression)
  • Samenvatten. (Summarization)
Het groeperen van data. (Clustering)

Hierbij gaat het om het groeperen van objecten op een dusdanige manier dat de objecten binnen een groep meer met elkaar in gemeen hebben dan met objecten binnen een andere groep. Hierbij gaat het om het vormen van nieuwe groepen in plaats van het indelen in bestaande categorieën. Dit kan worden toegepast op allerlei gebieden en leiden tot interessante nieuwe inzichten. Bijvoorbeeld een nieuwe groep consumenten met bepaalde gemeenschappelijke kenmerken die voorheen onopgemerkt bleven, door deze techniek toe te passen op klantonderzoeksgegevens.

Het vinden van verbanden tussen data. (Dependency modeling)

Het schijnt dat er een verband is tussen het aantal ooievaars dat wordt aangetroffen in een land en het aantal baby’s dat geboren wordt. Wist je dat? Helaas, het is weer niet echt een veelzeggend verband, en heeft meer te maken met het feit dat grotere landen zowel meer ooievaars als geboortes hebben. Toch, met datamining kunnen allerlei verbanden worden ontdekt tussen gegevens en soms zeggen die verbanden wel nuttige dingen. Bijvoorbeeld dat het gebruik van een bepaald medicijn vaak voorkomt in combinatie met hartproblemen. Handig om te weten. Of bijvoorbeeld om te voorspellen wat voor weer het morgen wordt.

Het vinden van onregelmatigheden in data. (Anomaly detection)

Je hebt een oneindige hoeveelheid aan gegevens en je bent op zoek naar de uitschieters, de objecten die buiten de boot vallen. Bijvoorbeeld om criminelen op te sporen, of een defect product. Succes om dat met het blote oog te doen. Daar heb je datamining voor nodig. Het is in principe niets anders dan het vinden van waarden die buiten bepaalde grenzen vallen, maar dus ook het bepalen van de grenzen waarbinnen het merendeel van de andere gegevens liggen.

Classificatie. (Classification)

Is dit een foto van een hond of een kat? Is dit bericht spam of geen spam? Is deze persoon zwanger, of niet zwanger? Zal deze persoon zijn lening wel of niet gaan aflossen? Dit zijn voorbeelden van vragen die je met (statistische) classificatie kan beantwoorden. En hoe doet een systeem dat? Nou, door op basis van een training set van objecten met bekende classificatie te leren onbekende objecten te classificeren. Als dat te ingewikkeld klinkt, het komt er in principe op neer om een systeem bijvoorbeeld een aantal plaatjes van honden en katten te laten zien totdat het in staat is om zelf te raden (met een bepaalde nauwkeurigheid) of een plaatje van een hond of een kat is. Dit is dan ook een van de hoofdtoepassingen van machine learning.

Regressie. (Regression)

Welke functie beschrijft deze datapunten het beste? Regressie is het proces waarmee verbanden tussen gegevens worden ingeschat. Het gaat er dan om uit te vinden hoe veranderingen in een bepaalde onafhankelijke variabele een bepaalde afhankelijke variabele beïnvloedt. Hierbij worden de andere onafhankelijke variabelen constant gehouden. Bijvoorbeeld: als je een hele hoop gegevens hebt over de verkoop van ijsjes N op een bepaalde dag onder bepaalde omstandigheden, hoe hangt dan de verkoop van ijsjes af van de temperatuur T? We zijn dan op zoek naar een functie N(T) die dit verband beschrijft zodat we voor elke T kunnen voorspellen hoeveel ijsjes er verkocht zullen worden.

Samenvatten. (Summarization)

Hierbij gebeurt er letterlijk wat er staat. Er wordt wat samengevat. Heb je bijvoorbeeld een groot document (of een grote hoeveelheid grote documenten) dan kun je met een programma een samenvatting genereren die bijvoorbeeld bepaalde veelvoorkomende zinnen verzameld. Of als je een grote verzameling tekst hebt van bijvoorbeeld een klantenonderzoek, dan kun je uitzoeken wat het meest gebruikte woord of de meest voorkomende zin is. Hierbij komt natuurlijk het een en ander kijken om dit goed te kunnen doen en met meer diepgang dan alleen het uitvinden van de meest gebruikte combinatie van letters. Ook hier komt machine learning bij kijken.

En dat is het! Nou niet per se. Dit zijn slechts de taken die genoemd werden op Wikipedia, en er zijn er waarschijnlijk nog wel meer te bedenken. Ja ik geef het toe, ik heb deze informatie voor een groot deel (maar niet exclusief) van Wikipedia afgehaald. Ik hoop echter dat je mijn uitleg beter begrijpt dan het lange en technische verhaal dat daar te vinden is. De bronnen die ik gebruikt heb staan onderaan dit bericht. Dat is alles voor nu.

Tot de volgende keer!

Bronnen

https://nl.wikipedia.org/wiki/Datamining

https://en.wikipedia.org/wiki/Data_mining

https://en.wikipedia.org/wiki/Cluster_analysis

https://nl.wikipedia.org/wiki/Rofecoxib

https://en.wikipedia.org/wiki/Regression_analysis

https://en.wikipedia.org/wiki/Statistical_classification

Data Mining Practical Machine Learning Tools and Techniques – I. Witten, E. Frank (Geweldig boek!)