Uczenie maszynowe bez Pythona, Anacondy i innych gadów

Nie, no oczywiście, że nie na poważnie. Musi przecież być jakaś granica tego, jak bardzo można uprościć temat. Ale na początkowych etapach, aby zrozumieć podstawowe koncepcje i szybko „wciągnąć się” w temat, może to być do przyjęcia. A jak prawidłowo nazwać ten materiał (opcje: „Uczenie maszynowe dla żółtodziobów”, „Analiza danych od podstaw”, „Algorytmy dla najmłodszych”), omówimy na końcu.

Do rzeczy. Napisałem kilka aplikacji w MS Excel do wizualizacji i przystępnego przedstawienia procesów zachodzących w różnych metodach uczenia maszynowego przy analizie danych. Seeing is believing, w końcu, jak mówią przedstawiciele kultury, która opracowała większość z tych metod (zresztą nie wszystkie. Potężna „metoda wektorów nośnych”, czyli SVM, support vector machine – to wynalazek naszego rodaka Włodzimierza Wapnika z Moskiewskiego Instytutu Zarządzania. Rok 1963, przypomnę! Teraz zresztą uczy i pracuje w USA).

Trzy pliki do przeglądu

1. Klasteryzacja metodą k-średnich

Zadania tego typu należą do „uczenia bez nadzoru”, gdy musimy podzielić dane wejściowe na pewną wcześniej znaną liczbę kategorii, ale nie mamy żadnej liczby „poprawnych odpowiedzi”, które musimy wydobyć z samych danych. Fundamentalnym klasycznym zadaniem odnalezienia podtypów kwiatów irysa (Ronald Fisher, 1936 rok!), które uważa się za pierwsze jaskółki tej dziedziny wiedzy, jest właśnie tego typu.

Metoda jest dość prosta. Mamy zbiór obiektów, przedstawionych w postaci wektorów (zestawów N liczb). W przypadku irysów są to zestawy 4 liczb, charakterizujące kwiat: długość i szerokość zewnętrznych i wewnętrznych działek okwiatu, odpowiednio (Irysy Fishera — Wikipedia). Jako odległość, lub miarę bliskości między obiektami, wybiera się zwykłą metrykę euklidesową.

Następnie w sposób losowy (lub nie losowy, patrz dalej) wybierane są centra klastrów, a następnie obliczane są odległości od każdego obiektu do centrów klastrów. Każdy obiekt na tym etapie iteracji jest oznaczany jako przypisany do najbliższego centrum. Następnie środek każdego klastra przenoszony jest do średniej arytmetycznej współrzędnych swoich członków (z porównaniem z fizyką nazywany jest również „centrum masy”), a procedura powtarza się.

Proces szybko zbiega do wyniku. Na obrazkach w przestrzeni dwuwymiarowej wygląda to tak:

1. Początkowe losowe rozmieszczenie punktów na płaszczyźnie oraz liczba klastrów

Uczenie maszynowe bez Pythona, Anacondy i innych gadów

2. Określenie centrów klastrów i przypisanie punktów do swoich klastrów

Uczenie maszynowe bez Pythona, Anacondy i innych gadów

3. Przeniesienie współrzędnych centrów klastrów, przeliczenie przynależności punktów, aż centra się ustabilizują. Widać trajektorię ruchu centrum klastra do końcowej pozycji.

Uczenie maszynowe bez Pythona, Anacondy i innych gadów

W każdej chwili można ustalić nowe centra klastrów (nie generując nowego rozmieszczenia punktów!) i zobaczyć, że proces podziału nie zawsze jest jednoznaczny. Matematycznie oznacza to, że w optymalizowanej funkcji (suma kwadratów odległości punktów od centrów swoich klastrów) znajdujemy minimum lokalne, a nie globalne. Można temu zaradzić albo przez nielosowy wybór początkowych centrów klastrów, albo przez dokładne zbadanie możliwych centrów (czasami warto umieścić je dokładnie w jednym z punktów, wtedy mamy przynajmniej gwarancję, że nie uzyskamy pustych klastrów). W każdym razie, dla skończonego zbioru zawsze istnieje dokładna dolna granica.

Można z tym plikiem poeksperymentować pod tym linkiem (nie zapomnij włączyć obsługi makr. Pliki zostały sprawdzone pod kątem wirusów)

Opis metody na Wikipedii — Metoda k-średnich

2. Aproksymacja wielomianami i podział danych. Przeuczenie

Wybitny naukowiec i popularyzator nauki o danych K.W. Woroncow krótko mówi o metodach uczenia maszynowego jako o „nauce rysowania krzywych przez punkty”. W tym przykładzie będziemy znajdować wzorce w danych metodą najmniejszych kwadratów.

Przedstawiono technikę podziału danych pierwotnych na 'uczące' i 'kontrolne', a także takie zjawisko, jak przeuczenie, czyli 'dostosowanie się' do danych. Przy prawidłowej aproksymacji będziemy mieć pewien błąd na danych uczących i nieco większy błąd na kontrolnych. Przy niewłaściwej - dokładne dopasowanie do danych uczących i ogromny błąd na danych kontrolnych.

(Znany jest fakt, że przez N punktów można przeprowadzić jedną krzywą N-1 stopnia, a ten sposób w ogólnym przypadku nie daje oczekiwanego wyniku. Wielomian interpolacyjny Lagrange'a na Wikipedii)

1. Ustalamy początkowe rozmieszczenie

Uczenie maszynowe bez Pythona, Anacondy i innych gadów

2. Dzielimy punkty na 'uczące' i 'kontrolne' w proporcji 70 do 30.

Uczenie maszynowe bez Pythona, Anacondy i innych gadów

3. Rysujemy krzywą aproksymacyjną na punktach treningowych, widzimy błąd, jaki ona generuje na danych testowych

Uczenie maszynowe bez Pythona, Anacondy i innych gadów

4. Rysujemy dokładną krzywą przez punkty treningowe i widzimy ogromny błąd na danych testowych (i zerowy na treningowych, ale co z tego?).

Uczenie maszynowe bez Pythona, Anacondy i innych gadów

Oczywiście pokazano najprostszy przypadek z jedynym podziałem na podzbiory „treningowe” i „testowe”, w ogólnym przypadku robi się to wielokrotnie dla lepszego dostosowania współczynników.

Plik dostępny tutaj, sprawdzony przez program antywirusowy. Włącz makra, aby działało poprawnie

3. Spadek gradientowy i dynamika zmiany błędu

Tutaj będzie przypadek 4-wymiarowy i regresja liniowa. Współczynniki regresji liniowej będą określane krokami metodą spadku gradientowego, początkowo wszystkie współczynniki to zera. Na osobnym wykresie widać dynamikę zmniejszania się błędu w miarę coraz dokładniejszego dostosowania współczynników. Istnieje możliwość zobaczenia wszystkich czterech 2-wymiarowych projekcji.

Jeśli ustawimy zbyt duży krok spadku gradientowego, to widać, że za każdym razem przeskoczymy minimum i do wyniku dojdziemy w większej liczbie kroków, chociaż w końcu i tak tam dojdziemy (jeśli tylko nie za bardzo podniesiemy krok spadku — wtedy algorytm „zgubi się”). A wykres zależności błędu od kroku iteracji będzie nie gładki, a „szarpany”.

1. Generujemy dane, ustawiamy krok spadku gradientowego

Uczenie maszynowe bez Pythona, Anacondy i innych gadów

2. Przy odpowiednim dobraniu kroku spadku gradientowego gładko i wystarczająco szybko dochodzimy do minimum

Uczenie maszynowe bez Pythona, Anacondy i innych gadów

3. Przy niewłaściwie dobranym kroku spadku gradientowego przeskakujemy maksimum, wykres błędu jest „szarpany”, zbieżność zajmuje więcej kroków

Uczenie maszynowe bez Pythona, Anacondy i innych gadów
i

Uczenie maszynowe bez Pythona, Anacondy i innych gadów

4. Przy całkowicie niewłaściwie dobranym kroku spadku gradientowego oddalamy się od minimum

Uczenie maszynowe bez Pythona, Anacondy i innych gadów

(Aby odtworzyć proces przy pokazanych na obrazkach wartościach kroku spadku gradientowego, zaznacz zakładkę „dane referencyjne”).

Plik – pod tym linkiem, należy włączyć makra, wirusów nie ma.

Jak uważa szanowne społeczeństwo, czy takie uproszczenie i metoda prezentacji materiału są dopuszczalne? Czy warto przetłumaczyć artykuł na angielski?

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster