AlphaStar

Update: Nog een geweldige analyse van de prestatie van AlphaStar kun je hier vinden. Misschien is deze AI nog geweldiger dan ik al dacht!

Hallo wereld,

Vandaag ga ik het hebben over de nieuwste creatie van Google’s DeepMind: AlphaStar. AlphaStar is een AI die afgelopen maand 2 professionele StarCraft II spelers elk met 5-0 heeft verslagen. Echter, na een kleine aanpassing in het programma wist de laatste van de twee spelers, MaNa, nog een wedstrijd terug te winnen. Desalniettemin was de prestatie van AlphaStar indrukwekkend.

DeepMind had al eerder professionele spelers verslagen in strategische spellen. AlphaGo had de topspelers van het bordspel Go al verslagen, en ook de schaak- en shogi-wereld konden niet op tegen DeepMind’s AlphaZero. OpenAI, een non-profit opgericht door Elon Musk en Sam Altman, versloeg in 2017 al een professionele speler in het real-time actie spel Dota 2 in een 1vs1 wedstrijd.

AlphaStar is echter de eerste AI die het voor elkaar heeft gekregen om een professionele speler te verslaan in een spel zo complex als StarCraft II. Een real-time-strategy game (RTS) met eindeloos veel manieren om het te spelen, waarvan slechts een zeer beperkt aantal effectief zijn. Het team van AlphaStar beweert op de blog-pagina dat AlphaStar won omdat het superieur was in zowel kleinschalig (micro) als grootschalig (macro) strategisch beslissing maken. Echter, na het zien van de demonstratie en een aantal analyses van de herhalingen ben ik het daar niet helemaal mee eens.

Persoonlijk ben ik van mening dat hoewel de macro van AlphaStar zeker indrukwekkend is, de micro de reden is waarom het in staat is om te winnen van een profspeler zoals MaNa. Dat is goed te zien in deze analyse van de video. Wel moet ik toegeven dat AlphaStar zijn macro strategie goed aanpast aan zijn superieure micro vaardigheden, door middel van bijvoorbeeld het kiezen van de meest geschikte units om mee te manoeuvreren, Stalkers en Phoenixs.

Wie ben ik om daar een uitspraken over te doen? Ik ben geen AI-expert, ik ben niet eens een StarCraft II speler. Maar, ik ben een mens met een brein, en af en toe gebruik ik het ook. Ik heb ook een heleboel casts gezien van professionele StarCraft II wedstrijden (vraag me niet waarom), en natuurlijk de demonstratie en een aantal analyses van de wedstrijden van AlphaStar zelf. Ook weet ik op basis van eigen onderzoek en experimentatie wel het een en ander over AI af. Ik verzoek je echter om mijn uitspraken op hun inhoud te beoordelen, niet op mijn achtergrond. Mocht je op basis van die inhoud concluderen dat deze uitspraken idioot (of geniaal) zijn dan hoor ik het graag.

Maar, de reden dat ik dit bericht schrijf is niet om te oordelen of AlphaStar zijn wedstrijden tegen MaNa eerlijk won. Ik denk dat een eerlijkere versie van AlphaStar zeker interessant zou zijn voor StarCraft spelers, maar niet per se voor de mogelijkheden van AI. Wat echt interessant is om hier op te merken is dat AlphaStar, zelfs met de beperkingen die het opgelegd gekregen had om het eerlijk te maken, in staat was om professionele spelers te verslaan! Nu al! Een spel met zoveel complexiteit dat het onmogelijk is om alle verschillende strategieën in alle verschillende situaties uit te rekenen.

Hoe heeft DeepMind dat gedaan? Door een combinatie van supervised learning (onder toezicht leren) en een speciale implementatie van reinforcement learning (leren door beloningen) genaamd de AlphaStar league.

In de supervised learning fase wordt het neurale netwerk getrained door het observeren van herhalingen van spellen tussen menselijke spelers. Dit stelt AlphaStar in staat om in korte tijd een competitief niveau te bereiken. In een spel zoals StarCraft zijn er enorm veel (1026 werd genoemd in een van de analyses) manieren zijn om het spel alleen al te beginnen, laat staan om het van begin tot eind te spelen. Zonder deze instructie zou AlphaStar er waarschijnlijk lang over doen om er achter te komen wat het moet doen om het spel te spelen, laat staan om het te winnen.

Vervolgens wordt het resultaat van deze fase gekopieerd en gemuteerd, en spelen deze verschillende “agents” tegen elkaar in een gesimuleerd toernooi, de AlphaStar league. De winnaars komen steeds verder in dit toernooi en op basis van kleine aanpassingen en de introductie van nieuwe agents worden ze dan stap voor stap verbeterd. Hierbij werden een aantal technieken toegepast om er voor te zorgen dat deze verbetering naar wens plaats kon vinden, maar daar kun je het beste meer over lezen op de blog. Het eindresultaat dat tegen MaNa speelde was een groep van 5 van die agents die elk het equivalent van 200 jaar real-time StarCraft ervaring hadden!

Wat betekent dit nu voor de toepassingen in de echte wereld? Nou, DeepMind heeft hier bewijs gegeven dat de combinatie van supervised en reinforcement learning in staat is om problemen op te lossen met enorme complexiteit. De overwinning over de schaakwereld was een heel ander verhaal, hierbij werd alleen een AI gecreëerd die in principe niets anders was dan een hele sterke schaak rekenmachine. De supervised versie alleen was niets anders dan een copycat van de strategieën die al door mensen toegepast worden.

Maar AlphaStar is meer dan dat, AlphaStar is een methode die gebruikt kan worden om niet alleen de menselijke capaciteit voor het oplossen van complexe problemen te evenaren, maar zelfs te ontstijgen. En hoe sterker de rekenkracht van onze computers zal worden, hoe groter de mogelijkheden van de AI die ermee gecreëerd wordt.

In een van de analyse wordt dan ook de grap gemaakt dat AlphaStar de eerste voorloper is van SkyNet. Nu denk ik zelf niet er ooit iets zo barbaars en inefficiënt in het uitroeien van de mensheid zal ontstaan als SkyNet, maar er zijn zeker risico’s waar we ons van bewust moeten zijn. Maar, er zijn natuurlijk ook een hele hoop positieve toepassingen te bedenken.

Op dit moment hebben we bijvoorbeeld al een begin gemaakt in het creëren van zelf rijdende auto’s. Hoewel die programma’s statistisch gezien al betrouwbaarder zijn dan mensen zelf, maken ze af en toe nog steeds verschrikkelijke fouten wanneer ze gepresenteerd worden met onbekende situaties. Situaties waar mensen zich met gemak aan zouden kunnen aanpassen, maar waar AI met beperkte rekenkracht niet weet hoe het er mee om moet gaan.

Dit is dan ook de reden, of een van de redenen, dat MaNa in staat was om de laatste wedstrijd tegen AlphaStar te winnen. Hij vond een exploit, een tactiek waar AlphaStar niet op voorbereid was, en totaal niet effectief mee wist om te gaan. In de toekomst is het dan ook de zaak om de mogelijkheid van deze exploits uit te sluiten, zeker in de echte wereld. Met meer onderzoek en meer rekenkracht is het waarschijnlijk mogelijk om dit te bereiken. En zelf rijdende auto’s zijn slechts een van de mogelijke toepassingen van AI. Waarom niet een AI die zelf rijdende auto’s ontwerpt, bijvoorbeeld? Waarom niet een AI die het geneesmiddel voor kanker ontdekt? Wie weet wat er mogelijk is met voldoende onderzoek en technologische vooruitgang.

Daar zullen we echter gauw genoeg achter komen denk ik. AI neemt op het moment zijn eerste stapjes, maar het tempo van vooruitgang lijkt eerder exponentieel dan lineair te zijn. Maar, dat is alles voor nu.

Tot de volgende keer!

Bronnen

 

 

Intro SQL

Hallo wereld,

Vandaag ga ik jullie een beetje SQL leren. SQL staat voor Structured Query Language, en is een programmeertaal om met relationele databases te werken. Met SQL kun je, zoals de naam al suggereert, queries doen, ofwel gegevens uit je database opvragen, maar je kunt er ook data mee invoeren en wijzigen. Meer info over SQL kun je hier vinden op Computerworld.

Op Youtube heb ik een video over SQL bestudeerd van Joey Blue. Als je wilt kun je deze video bekijken, of een van de vele andere video’s die te vinden zijn op Youtube. Maar in dit bericht ga ik de basics samenvatten en uitleggen op mijn eigen manier. Mocht het niet duidelijk zijn, bekijk dan zeker eens de video en gebruik dit bericht als intro, samenvatting en aanvulling.

Wat ga ik behandelen?

  1. Microsoft SQL Server Management Studio
  2. Gegevens invoeren
  3. Gegevens opvragen
  4. Gegevens wijzigen
  5. Relationele database
Microsoft SQL Server Management Studio

In de video wordt gebruikt gemaakt van Microsoft SQL Server Management Studio (SSMS). Als je wilt oefenen dan is het wel handig om deze te installeren, maar je kan ook gewoon doorlezen en oefenen op de sites waar ik later naar zal verwijzen. SSMS kun je hier gratis downloaden.

In SSMS kun je databases aanmaken en bewerken met query’s. Na het openen van het programma begin je door op connect te klikken om verbinding te maken met een server. Vervolgens maak je een nieuwe database aan door op Databases en vervolgens New Query te klikken. Vervolgens maak je in het geopende scherm een database aan met de opdracht CREATE DATABASE {naam van je database}. Run vervolgens je query door op Execute te klikken of op F5 te drukken. De syntax van SQL is niet hoofdletter gevoelig. Wel is er min of meer een conventie om hoofdletters te gebruiken voor de sleutelwoorden.

 

Gegevens invoeren

Gegevens invoeren doe je met behulp van INSERT INTO {database} (kolom 1, …. kolom n) VALUES (waard 1, … waarde n). Hierbij is het niet noodzakelijk om voor alle kolommen gegevens in te voeren, selecteer gewoon de kolommen waar je waarden voor wilt invoeren. Bij het invoeren van de kolom namen zul je gebruik moeten maken van vierkante haakjes in het geval dat deze spaties bevatten (bijv. [favoriete blogger]). Bij het invoeren van tekstwaarden moet je aanhalingstekens gebruiken (bijv. ‘Samson’).

 

Gegevens opvragen

Dit is natuurlijk het meest interessante voor Data Science. Door gebruik te maken van de juiste filters kun je gemakkelijk heel specifieke informatie uit je database halen. Overigens hoeft dit niet per se met een programma als SSMS, maar is het ook mogelijk (en af en toe noodzakelijk) om deze SQL query’s met Python te doen om te communiceren met een externe database. Hiervoor zijn natuurlijk wel wat libraries nodig. Op Kaggle leer je o.a. hoe je dit kan doen.

Hoe dan ook, je doet dit met gebruik van SELECT FROM WHERE. Na SELECT geef je aan welke kolommen je wil selecteren, na FROM geef je de database aan en na WHERE geef je de gewenste filters aan. Stel je bijvoorbeeld voor dat je een database genaamd ‘films’ hebt met ‘titel’, ‘regisseur’ en ‘jaar van publicatie’ als kolommen. Je wil de namen van de films hebben die zijn gepubliceerd in 2018. Dan doe je dat met de query: SELECT titel FROM films WHERE [jaar van publicatie]=2018. Simpel, nietwaar?

Je kunt je query’s echter een stuk specifieker maken dan dat. Wil je bijvoorbeeld alleen de titels van Steven Spielberg? Dan pas je de query aan naar SELECT titel FROM films WHERE [jaar van publicatie]=2018 AND regisseur=’Steven Spielberg’. En zo zijn er nog veel meer mogelijkheden. Meer dan ik in dit bericht kan behandelen.

 

Gegevens wijzigen

Hiervoor gebruik je de sleutelwoorden UPDATE en SET. Wil je bijvoorbeeld alle waarden voor [favoriete blogger] in de tabel van Dataridders corrigeren naar ‘Samson’ dan doe je dat door middel van: UPDATE Dataridders SET [favoriete blogger]=’Samson’. Je kunt ook een filter toevoegen aan je opdracht. Wil je bijvoorbeeld alleen de waarden voor [favoriete blogger] corrigeren naar ‘Samson’ voor de Dataridders die Nederlands als moedertaal hebben dan zou je dat kunnen doen met de opdracht: UPDATE Dataridders SET [favoriete blogger]=’Samson’ WHERE moedertaal=’Nederlands’.

 

Relationele database

Een relationele database is een database waarin je relaties kunt definiëren tussen kolommen van verschillende databases. Je kan bijvoorbeeld er voor zorgen dat je klantenindex kolom in je bestellingstabel gelinkt wordt aan de klantenindex kolom van je klantendatabase. Zo kun je voorkomen dat er voor een bestelling klantenindices gebruikt worden die niet in de klantendatabase staan. In SMSS kun je dit doen met behulp van Foreign keys. Ook dit wordt behandeld in de video.

En dat zijn de basics. Wil je meer leren, bekijk dan zeker eens de video, of een van de andere vele video’s op Youtube, en doe vooral ook eens wat opgaves op SQLBolt. Dat is alles voor nu.

Tot de volgende keer!

De toekomst

Hallo wereld,

In het vorige bericht had ik behandeld wat een Data Scientist precies is. Nou ja, niet precies, want het bleek nogal een vaag begrip te zijn. En om aan de de gangbare omschrijving van Data Scientist te voldoen bleek ook niet al te eenvoudig te zijn. In dit bericht zal ik het dus hebben over waarom je überhaupt een Data Scientist zou willen worden.

Zoals de titel al suggereert ben ik van mening dat Data Science een grote rol gaat spelen in de toekomst. Die mening komt niet zomaar uit de lucht vallen. Ik heb het er al eerder over gehad: we hebben te maken met een overvloed van gegevens. Een groeiende overvloed van gegevens. Gegevens die wij als mens niet in staat zijn om zonder hulp van software te analyseren.

Wat voor software? Nou, tot nu toe moesten we genoegen nemen met programma’s zoals Excel en op basis van visualisaties zelf beslissingen maken. Maar met de vooruitgang van kunstmatige intelligentie worden onze mogelijkheden voor het analyseren van en reageren op data alleen maar groter en groter.

En dat is waar de Data Scientist in het spel komt.

Want, een Data Scientist is hoofdzakelijk een expert in het gebruiken van kunstmatige intelligentie voor het analyseren van data! Hoe meer de mogelijkheden van kunstmatige intelligentie toenemen en hoe meer de overvloed van gegevens toeneemt, hoe meer de behoefte aan Data Scientists toeneemt.

Dat is de theorie. Maar, laten we eens een kijken wat Google Trends denkt. Denkt Google Trends dat Data Science steeds belangrijker wordt? Laten we de ontwikkeling van het relatieve aantal zoekopdrachten over het onderwerp Datawetenschap eens bekijken.

Dit is natuurlijk geen hard bewijs. Dit zijn alleen maar het relatieve aantal zoekopdrachten. En wie weet wat die lijn nog gaat doen? Maar, het geeft toch een sterke indicatie dat Data Science interessant aan het worden is. En als je dat plot naast de trendlijnen van Big Data (onderwerp), kunstmatige intelligentie (onderwerp) en machinaal leren (studierichting, dit was de enige beschikbare optie), dan zou die theorie van mij ook best wel eens kunnen kloppen.

Opnieuw, geen hard bewijs. Maar toch opvallend, nietwaar?

Wat denken anderen erover? Nou…

Inside Big Data – Data Science Job Postings Are Growing Quickly

Forbes – LinkedIn’s Fastest-Growing Jobs Today Are In Data Science And Machine Learning

Op de Facebook-pagina van Data Science 101 vond ik ook een link naar een interessant artikel over de voorspellingen voor 2019. Deze pagina en blog staan vol met interessante links voor Data Scientists, dus ik zou er zeker eens naar kijken. 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:

Project update: De eerste boompjes

Hallo wereld

Het is weer hoog tijd voor een project update. Mijn missie om een Random Forest te maken in Python gaat nog steeds door. Na uren van het vergroten van mijn kennis over beslissingsbomen, oefenen met Python en prutsen met Python is het me eindelijk gelukt om een werkende applicatie te maken! Er is nog een hele hoop werk te doen, maar de eerste boompjes hebben hun blaadjes gespreid.

Zoals ik al eerder had gezegd, mijn ervaring met Python was beperkt toen ik aan dit project begon. De helft van de uitdaging in dit project zat hem dan ook in het leren om te programmeren met Python. Echter, ik was ook geen complete beginner. Ik had al ervaring met Java en mezelf eerder al genoeg aangeleerd over Python om mijn eerste applicatie te maken: Conway’s Game of Life.

Deze manier van leren programmeren met het maken van een specifieke applicatie in gedachten is in mijn ogen HEEL BELANGRIJK. Want, als je niet weet WAT je wil programmeren en simpelweg het doel stelt om een programmeertaal te leren dan zul je nooit slagen. Je kunt een programmeertaal immers NOOIT helemaal leren! Zelfs een doel als “de basis principes van Python leren” is in mijn ogen nog steeds te vaag en je zult je daarbij eerst eens goed af moeten vragen:

  • Wat zijn die basis principes?
  • Waarom wil ik ze leren?
  • Wat kan ik ermee maken?

Aldus had ik opnieuw het doel om meer over Python te leren met een specifieke applicatie in gedachten. Om dit doel te behalen moest ik wel eerst mijn kennis van de basis syntax een beetje herhalen en aanvullen. Om dat te doen had ik onder andere deze video gekeken, waarin Python in 40 minuten wordt uitgelegd, op advies van EliteDataScience. Wees gewaarschuwd echter, hoewel het meeste wat in deze video wordt uitgelegd best nuttig is, is de kwaliteit niet overal even goed. Aan het eind van de video kwam ik namelijk in de problemen met niet werkende code vanwege een typefout. Nou, dat was mijn eigen schuld natuurlijk, maar toen ik daar op stackoverflow een vraag over stelde kwam ik erachter dat een significant aantal ervaren Python programmeurs de manier waarop hij een aantal dingen deed vrij slecht vonden. In het bijzonder ging het om zijn onhandige manier van het benoemen van variabelen, en zijn manier van het declareren van classes en het implementeren van inheritance. Als geheel is de video echter nog steeds nuttig als spoedcursus, maar wees dus gewaarschuwd dat het niet allemaal even geweldig is.

Daarna ging ik verder met het volgende advies op EliteDataScience. Ze verwezen naar een leuke puzzelpagina waarbij je puzzels kunt oplossen met Python. Hoewel dit in het begin heel leuk was werkte om de een of andere reden een van mijn oplossingen niet helemaal en kon ik de volgende pagina (derde geloof ik?) niet vinden. Ik kwam wel op een of andere forum pagina die mij informeerde dat ik de oplossing juist had, maar de url voor de volgende pagina werkte echter niet voor mij. Dus opnieuw, wees gewaarschuwd.

Maar ja, genoeg daarover. Terug naar het hoofd onderwerp, het project. Waar begin ik? Nou, ik ga er even van uit dat jullie al up-to-date zijn met hoe beslissingsbomen werken. Is dit niet het geval, lees dan misschien beter eerst even mijn eerdere bericht over de werking van beslissingsbomen. De code is te vinden op Github, maar ik denk dat het het handigst is om uit te leggen hoe het allemaal werkt in een video.

Hieronder staat ook nog een selectie van een aantal van de vele bronnen die ik gebruikt heb gedurende dit project tot dusver. 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.

Eerste Youtube video!

Hallo wereld,

Dataridder is vanaf nu ook te vinden op Youtube. Ik wilde namelijk een video over mijn projecten met neurale netwerken met jullie delen, maar kwam er achter dat deze te groot was om in een bericht te posten. Dus heb ik maar besloten om een Youtube kanaal aan te maken en de video daar op te posten. Ik was al van plan om dit vroeger of later te gaan doen, maar aldus werd het dus vroeger. Ook heb ik een bericht geschreven over neurale netwerken dat jullie kunnen lezen voor een uitleg over hoe ze werken. Oh, en de code is te vinden op mijn Github. Dat is alles voor nu.

Tot de volgende keer!

Missie Update

Hallo wereld,

Gelukkig nieuwjaar! Mogen jullie veel succes hebben met het analyseren van data dit jaar, zei het op de pc of in het leven. Want het leven is natuurlijk ook niets anders dan het analyseren van en reageren op data, nietwaar?

Helaas heb ik nog geen mooie logo’s van jullie ontvangen voor Dataridder vorig jaar. Zelf heb ik ook weinig tijd gehad om aan een logo te werken, dus ik heb de deadline dan maar uitgesteld tot 1 maart. Een nieuwe kans voor jullie dus om jullie eigen creativiteit los te laten op het uiterlijk van Dataridder, voordat ik dat zelf doe of er iemand anders voor inhuur!

Ook is het al lang tijd weer voor een nieuwe missie. En het is ook geen slecht idee om een aantal van die Riddermissies waar ik naar gehint had te definiëren.

Riddermissies:

1. Tutorial

Wat?: Schrijf een tutorial over een van de genoemde tools of vaardigheden in dit bericht of een ander relevant data science onderwerp.

Hoe?: Gebruik bijvoorbeeld Word of een andere teksteditor naar keuze en mail het naar mij. Voel je vrij om plaatjes toe te voegen maar let op met copyright alsjeblieft. Mijn email adres is sedaniel@dataridder.nl.

Waarvoor?: Het aantal punten is afhankelijk van het onderwerp en de kwaliteit van de tutorial, maar als de tutorial geplaatst wordt loopt het punten aantal op vanaf 500 Ridderpunten en Datapunten.

2. Project Showcase

Wat?: Stuur een tekstbericht en/of plaatje/video en/of code van een data science project dat je hebt uitgevoerd.

Hoe?: Per email naar sedaniel@dataridder.nl. Opnieuw, let op met copyright.

Waarvoor?: Dit hangt opnieuw af van het project, en opnieuw is het minimum weer 500 Ridder- en Datapunten. Ook wordt je project natuurlijk geshowcased op Dataridder! Iedereen zal je aanbidden.

Heldenmissie:

Vertel wat over je Data Science baan! Meer daarover in dit bericht.

Dat is alles voor nu.

Tot de volgende keer!

Heldenmissie: Modelridder

Hallo wereld,

Het is tijd voor een nieuwe Heldenmissie! Ben je al werkzaam als Data Scientist of in een vergelijkbaar functie? Vertel er wat over hier op Dataridder!

De missie

Wat: Vertel wat over je baan als Data Scientist of je vergelijkbare functie.

Hoe: Je mag een tekstbestand sturen, je mag er foto’ bij doen of je mag een video sturen. Het is helemaal aan jou! Zolang je het maar opstuurt naar sedaniel@dataridder.nl. En pas op met copyright en dergelijke.

Waarvoor: 2000 Ridderpunten, 1000 Datapunten en de Eretitel: Modelridder. En natuurlijk om alle mensen hier op Dataridder doodjaloers te maken op jouw geweldige baan!

Wanneer: Geen deadlines, en meerdere inzendingen zijn welkom, maar de Eretitel is alleen bestemd voor de eerste inzending dus wacht niet te lang!

Dat is alles voor nu.

Tot de volgende keer!