Maskinlæring uden Python, Anaconda og andre krybdyr

Nej, jeg mener selvfølgelig ikke alvorligt. Der må være en grænse for, hvor meget man kan forsimple emnet. Men til de første trin, forståelsen af grundlæggende koncepter og hurtig indføring i emnet, kan det måske være acceptabelt. Og hvordan man korrekt navngiver dette materiale (muligheder: "Maskinlæring for begyndere", "Dataanalyse fra bunden", "Algoritmer for de mindste"), diskuterer vi til sidst.

Til sagen. Jeg har skrevet nogle anvendelige programmer i MS Excel til visualisering og klar præsentation af processerne i forskellige metoder til maskinlæring ved dataanalyse. Seeing is believing, som kulturerne, der har udviklet de fleste af disse metoder, plejer at sige (for resten, ikke alle. Den kraftfulde "support vector machine" metode, eller SVM, er opfindelsen af vores landsmand Vladimir Vapnik fra Moskva Institut for Styring. 1963, for resten! I dag underviser han dog og arbejder i USA).

Tre filer til besigtigelse

1. Klyngedannelse ved hjælp af k-means

Opgaver af denne art falder under "uskiftet indlæring", hvor vi har brug for at opdele de indledende data i et på forhånd kendt antal kategorier, men hvor vi samtidig ikke har nogen mængde "korrekte svar", som vi skal udtrække fra dataene selv. Den fundamentale klassiske opgave med at finde underarter af irisblomster (Ronald Fisher, 1936!) er netop af denne natur og betragtes som den første spæde begyndelse inden for dette vidensområde.

Metoden er temmelig simpel. Vi har et sæt objekter repræsenteret som vektorer (sæt af N tal). For iriserne er det sæt af 4 tal, der karakteriserer blomsten: længde og bredde på både den ydre og indre del af blomsterkransen, henholdsvis (Irisserne fra Fisher — Wikipedia). Som afstand, eller mål for nærhed mellem objekterne, vælges den almindelige euklidiske metrik.

Derefter vælges tilfældigt (eller ikke tilfældigt, se videre) klyngernes centre, og der beregnes afstande fra hvert objekt til klyngernes centre. Hvert objekt mærkes i dette iterationstrin som tilhørende det nærmeste centrum. Derefter flyttes centrum for hver klynge til det aritmetiske gennemsnit af koordinaterne for sine medlemmer (analogt med fysik kaldes det også "massecentrum"), og proceduren gentages.

Processen konvergerer rimeligt hurtigt. På billederne i to dimensioner ser det sådan ud:

1. Den oprindelige tilfældige fordeling af punkter på planet og antallet af klynger

Maskinlæring uden Python, Anaconda og andre krybdyr

2. Angivelse af klyngecentrene og tildeling af punkter til deres klynger

Maskinlæring uden Python, Anaconda og andre krybdyr

3. Flytning af koordinaterne for klyngecentrene, genberegning af punkternes tilhørsforhold, indtil centrene stabiliserer sig. Man kan se klyngens centrum bevæge sig mod en endelig position.

Maskinlæring uden Python, Anaconda og andre krybdyr

Man kan når som helst angive nye klyngecentre (uden at generere en ny fordeling af punkter!) og se, at opdelingen ikke altid er entydig. Matematisk set betyder det, at vi finder et lokalt minimum for den optimerede funktion (summen af kvadraterne af afstandene fra punkterne til centrene af deres klynger), ikke et globalt minimum. Man kan overvinde dette problem ved enten ikke at vælge klyngecentre tilfældigt i starten eller ved at prøve mulige centre (nogle gange er det fordelagtigt at placere dem præcist på et af punkterne, så der i det mindste er en garanti for, at vi ikke får tomme klynger). Uanset hvad, har en ændelig mængde altid en præcis nedre grænse.

Du kan lege med denne fil via dette link (Glem ikke at aktivere makro-support. Filen er kontrolleret for vira)

Metodebeskrivelse på Wikipedia — k-means metoden

2. Approksimation med polynomier og opdeling af data. Overfitting

Den fremragende forsker og videnskabsformidler K.V. Vorontsov beskriver kort maskinlæringsmetoder som "videnskaben om at trække kurver gennem punkter". I dette eksempel vil vi finde mønstre i dataene ved hjælp af metoden med de mindste kvadrater.

Teknikken til at opdele de oprindelige data i "trænings" og "test" sæt vises, samt et fænomen såsom overfitting eller "tilpasning" til dataene. Ved korrekt approksimation vil vi have en vis fejl på træningsdataene og en noget større på testdataene. Ved ukorrekt approksimation vil der være en præcis tilpasning til træningsdataene og en enorm fejl på testdataene.

(Det er en kendt kendsgerning, at der gennem N punkter kan trækkes en unik kurve af N-1. grad, og denne metode giver generelt ikke det ønskede resultat. Lagrange-interpolationspolynomiet på Wikipedia)

1. Vi angiver den oprindelige fordeling

Maskinlæring uden Python, Anaconda og andre krybdyr

2. Vi opdeler punkterne i "trænings" og "test" sæt i forholdet 70 til 30.

Maskinlæring uden Python, Anaconda og andre krybdyr

3. Vi tegner en approksimerende kurve baseret på træningspunkterne, og vi ser den fejl, den giver på testdataene.

Maskinlæring uden Python, Anaconda og andre krybdyr

4. Vi trækker en præcis kurve gennem træningspunkterne og ser en enorm fejl på testdataene (og nul på træningsdataene, men hvad nytter det?).

Maskinlæring uden Python, Anaconda og andre krybdyr

Her vises selvfølgelig den enkleste version med en enkelt opdeling i "trænings" og "test" undergrupper; i det generelle tilfælde gøres dette flere gange for bedst at tilpasse koefficienterne.

Filen er tilgængelig her, scannet med antivirus. Aktivér makroer for korrekt funktion.

3. Gradient descent og dynamikken i fejlændringen.

Her vil der være en 4-dimensional situation og lineær regression. Koefficienterne for den lineære regression vil blive fastsat trin for trin ved hjælp af gradient descent, hvor alle koefficienter oprindeligt er nul. På en separat graf kan man se dynamikken i reduktionen af fejlene, efterhånden som koefficienterne tilpasses mere præcist. Der er mulighed for at se alle fire 2-dimensionelle projicer.

Hvis der angives et for stort skridt for gradient descent, vil man se, at vi hver gang springer forbi minimum og vil nå frem til resultatet efter flere skridt, selvom vi til sidst stadig når derhen (medmindre vi sætter skridtet for højt — så vil algoritmen gå "ud af kontrol"). Og grafen for fejlens afhængighed af iterationsskridtet vil ikke være glat, men "stødende".

1. Generer data, angiv skridtet for gradient descent.

Maskinlæring uden Python, Anaconda og andre krybdyr

2. Ved korrekt valg af skridtet for gradient descent kommer vi glat og hurtigt frem til minimum.

Maskinlæring uden Python, Anaconda og andre krybdyr

3. Ved forkert valg af skridtet for gradient descent springer vi over maksimum; fejlgrafen er "stødende", og konvergensen tager flere skridt.

Maskinlæring uden Python, Anaconda og andre krybdyr
og

Maskinlæring uden Python, Anaconda og andre krybdyr

4. Ved helt forkert valg af skridtet for gradient descent trækker vi os væk fra minimum.

Maskinlæring uden Python, Anaconda og andre krybdyr

(For at reproducere processen med de viste skridt for gradient descent, sæt kryds i "reference data").

Filen er tilgængelig via dette link, makroer skal aktiveres, der er ingen virus.

Som det respektable samfund mener, er dette forenkling og metode til præsentation acceptabelt? Burde artiklen oversættes til engelsk?

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster