Maskinlæring uten Python, Anaconda og andre reptiler

Nei, vel, selvfølgelig, jeg er ikke seriøs. Det må være en grense for i hvilken grad det er mulig å forenkle et fag. Men for de første stadiene, å forstå grunnleggende konsepter og raskt "gå inn" i emnet, kan det være akseptabelt. Vi vil diskutere hvordan du navngir dette materialet riktig (alternativer: "Maskinlæring for dummies", "Dataanalyse fra bleier", "Algorithmer for de minste") på slutten.

Til punktet. Skrev flere applikasjonsprogrammer i MS Excel for visualisering og visuell representasjon av prosesser som skjer i ulike maskinlæringsmetoder ved analyse av data. Å se er tross alt å tro, som bærerne av kulturen sier, som utviklet de fleste av disse metodene (forresten ikke alle. Den kraftigste "støttevektormaskinen", eller SVM, støttevektormaskinen er oppfinnelsen av vår landsmann Vladimir Vapnik, Moscow Institute of Management. 1963, forresten! Nå underviser og jobber han imidlertid i USA).

Tre filer for gjennomgang

1. K-betyr gruppering

Problemer av denne typen refererer til "uovervåket læring", når vi trenger å dele de første dataene inn i et visst antall kategorier kjent på forhånd, men vi har ikke et antall "riktige svar"; vi må trekke dem ut fra selve dataene . Det grunnleggende klassiske problemet med å finne underarter av irisblomster (Ronald Fisher, 1936!), som regnes som det første tegnet på dette kunnskapsfeltet, er nettopp av denne art.

Metoden er ganske enkel. Vi har et sett med objekter representert som vektorer (sett med N tall). Hos iris er dette sett med 4 tall som karakteriserer blomsten: lengden og bredden på henholdsvis ytre og indre lober av perianth (Fischers iris - Wikipedia). Den vanlige kartesiske metrikken er valgt som avstand, eller mål for nærhet mellom objekter.

Deretter velges klyngesentre tilfeldig (eller ikke tilfeldig, se nedenfor), og avstandene fra hvert objekt til klyngesentra beregnes. Hvert objekt ved et gitt iterasjonstrinn er merket som tilhørende det nærmeste sentrum. Deretter overføres midten av hver klynge til det aritmetiske gjennomsnittet av koordinatene til medlemmene (i analogi med fysikk kalles det også "massesenteret"), og prosedyren gjentas.

Prosessen konvergerer ganske raskt. På bilder i to dimensjoner ser det slik ut:

1. Innledende tilfeldig fordeling av punkter på planet og antall klynger

Maskinlæring uten Python, Anaconda og andre reptiler

2. Spesifisere klyngesentre og tilordne punkter til deres klynger

Maskinlæring uten Python, Anaconda og andre reptiler

3. Overføring av koordinatene til klyngesentrene, omberegning av tilknytningen til punktene til sentrene stabiliserer seg. Banen til klyngesenteret som beveger seg til sin endelige posisjon er synlig.

Maskinlæring uten Python, Anaconda og andre reptiler

Du kan når som helst sette nye klyngesentre (uten å generere en ny fordeling av poeng!) og se at partisjoneringsprosessen ikke alltid er entydig. Matematisk betyr dette at for funksjonen som optimaliseres (summen av kvadrerte avstander fra punkter til sentrum av deres klynger), finner vi ikke et globalt, men et lokalt minimum. Dette problemet kan løses enten ved et ikke-tilfeldig valg av innledende klyngesentre, eller ved å telle opp mulige sentre (noen ganger er det fordelaktig å plassere dem nøyaktig på ett av punktene, da er det i det minste en garanti for at vi ikke blir tomme klynger). I alle fall har et begrenset sett alltid et infimum.

Du kan leke med denne filen på denne lenken (ikke glem å aktivere makrostøtte. Filene er skannet for virus)

Beskrivelse av metoden på Wikipedia - k-betyr metode

2. Approksimasjon ved polynomer og dataoppdeling. Omskolering

Bemerkelsesverdig vitenskapsmann og populariserer av datavitenskap K.V. Vorontsov beskriver kort maskinlæringsmetoder som "vitenskapen om å tegne kurver gjennom punkter." I dette eksemplet vil vi finne et mønster i dataene ved å bruke minste kvadraters metode.

Teknikken for å dele kildedataene inn i "trening" og "kontroll" vises, samt et slikt fenomen som omskolering, eller "omjustering" til dataene. Ved korrekt tilnærming vil vi ha en viss feil på treningsdataene og en litt større feil på kontrolldataene. Hvis feil, resulterer det i nøyaktig justering av treningsdataene og en stor feil på testdataene.

(Det er et velkjent faktum at man gjennom N punkter kan tegne en enkelt kurve av N-1. grad, og denne metoden gir i det generelle tilfellet ikke det ønskede resultatet. Lagrange-interpolasjonspolynom på Wikipedia)

1. Still inn startfordelingen

Maskinlæring uten Python, Anaconda og andre reptiler

2. Vi deler poengene inn i "trening" og "kontroll" i forholdet 70 til 30.

Maskinlæring uten Python, Anaconda og andre reptiler

3. Vi tegner den tilnærmede kurven langs treningspunktene, vi ser feilen den gir på kontrolldataene

Maskinlæring uten Python, Anaconda og andre reptiler

4. Vi tegner en eksakt kurve gjennom treningspunktene, og vi ser en monstrøs feil på kontrolldataene (og null på treningsdataene, men hva er poenget?).

Maskinlæring uten Python, Anaconda og andre reptiler

Vist er selvfølgelig det enkleste alternativet med en enkelt inndeling i "trening" og "kontroll" undersett; i det generelle tilfellet gjøres dette mange ganger for den beste justeringen av koeffisientene.

Filen er tilgjengelig her, skannet av antivirus. Aktiver makroer for korrekt drift

3. Gradientnedstigning og feildynamikk endres

Det vil være en 4-dimensjonal kasus og lineær regresjon. Lineære regresjonskoeffisienter vil bli bestemt trinnvis ved bruk av gradientnedstigningsmetoden, i utgangspunktet er alle koeffisienter null. En egen graf viser dynamikken til feilreduksjon ettersom koeffisientene justeres mer og mer nøyaktig. Det er mulig å se alle fire 2-dimensjonale projeksjoner.

Hvis du setter gradientnedstigningstrinnet for stort, kan du se at hver gang vi hopper over minimumet og kommer frem til resultatet i et større antall trinn, selv om vi til slutt fortsatt kommer frem (med mindre vi forsinker nedstigningstrinnet også mye - da vil algoritmen gå "i spar"). Og grafen for feilen avhengig av iterasjonstrinnet vil ikke være jevn, men "rykket".

1. Generer data, angi gradientnedstigningstrinnet

Maskinlæring uten Python, Anaconda og andre reptiler

2. Med riktig valg av gradientnedstigningstrinnet når vi jevnt og raskt minimumet

Maskinlæring uten Python, Anaconda og andre reptiler

3. Hvis gradientnedstigningstrinnet er feil valgt, overskrider vi maksimum, feilgrafen er "rykket", konvergens tar et større antall trinn

Maskinlæring uten Python, Anaconda og andre reptiler
и

Maskinlæring uten Python, Anaconda og andre reptiler

4. Hvis vi velger gradientnedstigningstrinnet helt feil, beveger vi oss bort fra minimum

Maskinlæring uten Python, Anaconda og andre reptiler

(For å reprodusere prosessen ved å bruke trinnverdiene for gradientnedstigning vist på bildene, merk av for "referansedata").

Filen er på denne lenken, du må aktivere makroer, det er ingen virus.

I følge det respekterte fellesskapet, er en slik forenkling og fremgangsmåte for materialet akseptabel? Er det verdt å oversette artikkelen til engelsk?

Kilde: www.habr.com

Legg til en kommentar