Zdjęcie: Tim Gage (Enigma Machine, Bletchley Park — CC 2.0)

Nauczanie maszynowe jest zabawne!

Najprostszy na świecie wstęp do nauczania maszynowego.

(tłumaczenie artykułu: Machine Learning is Fun! Autor: Adam Geitgey)

Czy słyszałeś kiedyś ludzi rozmawiających o nauczaniu maszynowym, ale masz tylko mglisty pomysł co ten termin oznacza? Czy jesteś zmęczony udawaniem i potakiwaniem, że rozumiesz o czym rozmawiają Twoi koledzy z pracy? Zmieńmy to!


Ten poradnik jest napisany dla każdego, kto jest zainteresowany nauczaniem maszynowym (NM), ale nie ma pojęcia gdzie zacząć.
Wyobrażam sobie (chodzi o oryginalnego autora tekstu — dop. MM), że trafiło tu wiele osób, które przeczytały artykuł w wikipedii i sfrustrowało się na tyle aby się poddać życząc sobie kogoś kto dostarczyłby jakiś opis na wyższym poziomie abstrakcji. To dokładnie problem, jaki rozwiązuje ten tekst.

Celem tego artykułu jest aby tekst był dostępny dla każdego — to znaczy nie będzie tu zbyt dużo uogólnień. Ale kogo to interesuje? Jeśli ktokolwiek czytający ten artykuł bardziej się zainteresuje NM, cel został osiągnięty.


Czym jest nauczanie maszynowe?

Nauczanie maszynowe reprezentuje koncepcję w której istnieją algorytmy podstawowe, które potrafią powiedzieć Ci coś interesującego o zbiorze danych bez potrzeby pisania jakiegokolwiek specjalistycznego kodu komputerowego specyficznego dla zadanego problemu. Zamiast pisania kodu, dostarczasz dane do algorytmu podstawowego i budujesz swoją własną logikę bazującą na tych danych.

Na przykład, jeden z algorytmów jest algorytmem klasyfikacji. Może on podzielić dane na różne grupy. Ten sam algorytm klasyfikacji użyty do rozpoznawania pisma pisanego ręcznie może również zostać użyty do wydzilenia części emaili jako spamu bez zmiany jednej linijki kodu. Ten sam algorytm, ale trenowany innym zbiorem danych w wyniku dostarcza inną logikę klasyfikacji zbiorów.

Ten algorytm nauczania maszynowego jest formą czarnej skrzynki (algorytmu typu black box), która może być używana dla różnych problemów klasyfikacji.

“Nauczanie maszynowe” (ang. Machine Learning) jest terminem obejmującym szeroką gamę algorytmów podstawowych tego typu.

Dwa typy nauczania maszynowego

Możesz myśleć o algorytmach nauczania maszynowego w dwóch różnych kategoriach — nauczania z nadzorem i bez nadzoru. Różnica jest prosta, ale naprawdę ważna.

Nauczanie z nadzorem

Przypuśćmy, że jesteś agentem nieruchomości. Twój biznes rośnie, więc zatrudniasz grupę stażystów do pomocy. Ale jest problem — Ty możesz rzucić okiem na dom i mieć mnie więcej pomysł ile jest on wart, tymczasem Twoi stażyści tego nie potrafią, bo brak im doświadczenia i nie umieją dokonać wyceny swoich nieruchomości.

Aby pomóc stażystom (i może samemu sobie aby wyjechać na wakacje), decydujesz się napisać mały program, który wyceni wartość domu w Twojej okolicy opierając się na jego wielkości, otoczeniu etc. Dodatkowo weźmiesz pod uwagę np. dotychczasowe ceny podobnych nieruchomości.

Dlatego zapisujesz różne informacje przy każdej sprzedaży domu w swoim mieście przez 3 miesiące. Dla każdego domu zapisujesz — liczbę pokoi, wielkość w m2, opis dzielnicy. Najważniejsze — zapisujesz też końcową cenę za którą sprzedałeś nieruchomość :

To są “dane treningowe”.

Używając tych danych treningowych chcemy napisać program, który przybliża cenę innych nieruchomości w Twojej dzielnicy:

Chcemy użyć danych treningowych, aby przewidzieć cenę innych domów.

To się nazywa nauczaniem z nadzorem. Wiedziałeś za ile sprzedałeś każdy dom do tej pory, parafrazując, znałeś odpowiedź do postawionego problemu i mogłeś wykonać krok wstecz z tego punktu, aby znaleźć logikę.

Aby zbudować swój program, musisz dostarczyć swoje dane treningowe dotyczące każdego domu do algorytmu nauczania maszynowego. Ten algorytm próbuje zorientować się jakie operacje matematyczne muszą być wykonane aby wygenerować wyniki które są poprawne.

To jest trochę jak posiadać klucz odpowiedzi do testu matematycznego z wyczyszczonymi symbolami arytmetycznymi w działaniach:

O nie! Przebiegły student wyczyścił symbole z notatnika nauczyciela!

Czy stąd możesz odgadnąć jakie typy problemów matematycznych były na teście? Wiesz tyle, że powinieneś “coś zrobić” z liczbami po lewej stronie, aby uzyskać odpowiedź po prawej stronie?.

W nauczaniu z nadzorem, pozwalasz komputerowi odgadnąć te relacje dla Ciebie. I kiedy już wiesz, jakie wyrażenia matematyczne były potrzebne do rozwiązania tego specyficznego rodzaju problemów, możesz rozwiązać dowolny problem tego samego typu!

Nauczanie bez nadzoru

Powróćmy do oryginalnego przykładu z agencją nieruchomości. Co, jeśli nie znsz ceny sprzedaży dla każdego z domów? Nawet, jeśli jedyne co znasz to wielkość, położenie i inne podobne informacje dla każdego z domów, okazuje się, że z omawianymi algorytmami możesz ciągle zrobić naprawdę ciekawe rzeczy. Ten proces nazywamy nauczaniem bez nadzoru.

Nawet jeśli nie próbujesz przewidzieć nieznanej liczby (np. ceny), nadal możesz zrobić interesujące rzeczy z nauczaniem maszynowym.

To jest trochę tak jakby ktoś dał Ci ciąg liczb na kartce papieru i powiedział “Nie wiem dokładnie co te liczby oznaczają, ale może uda Ci się to odgadnąć jeśli jest tu jakiś wzorzec, albo są one pogrupowane, albo coś w tym stylu — powodzenia!”.

Co możesz zrobić z tymi danymi? Na początku możesz mieć algorytm, który automatycznie rozpoznaje różne fragmenty (grupy) w Twoich danych. Może dasz radę się przekonać, że kupcy w Twojej okolicy niedaleko lokalnego uniwersytetu, lubią małe domy z dużą ilością pokoi, ale kupcy na przedmieściać preferują domu 3-pokojowe z dużym metrażem? Znająć różnice między różnymi typami klientów możesz odpowiednio ukierunkować swoje działania.

Kolejna ciekawa rzecz, którą możesz zrobić to automatyczne rozpoznanie nieruchomości, które są w jakimś sensie wyjątkowe i odstające od reszty. Może niektóre z tych domów o wielkie rezydencje i możesz tam skierować swoich najlepszych ludzi, bo tam wygenerują oni większe przychody?

W dalszej części skupimy się na nauczaniu maszynowym z nadzorcą, ale to nie dlatego, że nauczanie bez nadzorcy jest mniej użyteczne albo mniej interesujące. Właściwie, nauczanie bez nadzorcy staje się coraz ważniejsze wraz z polepszaniem się algorytmów, ponieważ może być używane bez wiedzy o poprawnych odpowiedziach dla dostarczonych danych.

Na marginesie: istnieje wiele innych typów algorytmów nauczania maszynowego. Ale to co omówiliśmy powinno wystarczyć na start.
Wspaniale, ale czy bycie w stanie przewidzieć cenę domu naprawdę oznacza pełnoprawne “nauczanie”?

Wspaniale, ale czy umiejętność szacowania ceny domu naprawdę może być zaliczona jako “nauczanie”?

Nasze ludzkie mózgi potrafią przystosować się do dowolnej sytuacji i nauczyć się jak sobie z nią poradzić bez podanych wyraźnych i ścisłych instrukcji. Jeśli sprzedajesz domy przez dłuższy czas, będziesz miał instynktowne “przeczucie” co do ceny kolejnych nieruchomości, najlepszej strategii sprzedaży domu, pomysłu jaki klient będzie odpowiedni itp. Celem badań nad silną sztuczną inteligencją jest przeprowadzenie podobnego rozumiwania z użyciem komputerów.

Ale aktualnie istniejące algorytmy nauczania maszynowego nie są jeszcze tak dobre — dobrze pracują jedynie skupione na specyficznym i ograniczonym problemie. Może lepszą definicją “nauczania” byłoby w naszym przypadku “rozpoznawanie jakie równanie rozwiązuje specyficzny problem bazując na pewnych przykładowych danych i wynikach”?

Niestety “Maszynowe rozpoznawanie jakie równanie rozwiązuje specyficzny problem bazując na pewnych przykładowych danych i wynikach” jest zbyt długą i niezbyt dobrą nazwą. Dlatego stanęło na “nauczaniu maszynowym” zamiast tego.

Oczywiście, jeśli będziesz to czytał za 50 lat i jako ludzkość mamy już opracowane algorytmy silnej sztucznej inteligencji, wtedy cały ten artykuł będzie, delikatnie mówiąc, osobliwy i staroświecki. Może skończ czytać w tym momencie i powiedz do swojego robota, aby zaserwował kanapkę, człowieku przyszłości.

Napiszmy ten program!

W takim razie, jak napisałbyś program do oszacowania wartości domów jak w naszym przykładzie na górze? Pomyśl o tym przez sekundę zanim zaczniesz czytać dalej.

Jeśli nie wiesz nic o nauczaniu maszynowym, prawdopodobnie spróbujesz napisać pewne proste reguły aby oszacować cenę domu w następujący sposób:

def oszacuj_cene_domu(liczba_sypialni, m2, okolica):
cena = 0
 # W mojej okolicy, średnia cena domu to 200PLN na m2
cena_na_m2 = 200
 if okolica == “hipsterska”:
# ale w niektórych rejonach cena jest trochę większa
cena_na_m2 = 400
 elif neighborhood == “familoki”:
# a w niektórych cena jest mniejsza
cena_na_m2 = 100
 # rozpoczynamy z ceną bazową i szacujemy w oparciu i wielkość w m2
cena = cena_na_m2 * m2
 # teraz zmieniamy cenę w zależności od ilości pokoi
if liczba_sypialni == 0:
# apartamenty typu studio są naprawdę tanie
cena = cena — 20000
else:
# miejsca z większą ilością sypialni są z reguły
# bardziej wartościowe
cena = cena + (liczba_sypialni * 1000)
return cena

Jeśli pokombinujesz z tym programem przez kilka godzin, możesz stworzyć coś co mniej więcej działa. Ale Twój program nigdy nie będzie idealny i ciągle będzie to trudne aby obsłużyć zmiany cen na rynku.

Czy nie byłoby lepiej, gdyby komputer umiał wykombinować jak zaimplementować tę funckcję dla Ciebie? Kogo obchodzi jak dokładnie funkcja wykona swoje zadanie tak długo jak długo zwróci ona poprawną wartość?

def oszacuj_cene_domu(liczba_sypialni, m2, okolica):
cena = <komputerze, wykonaj całą matematykę za mnie>
return cena

Mozna myśleć o problemie ceny jak o problemie przyrządzania pysznej potrawy, gdzie składnikami są liczba sypialni, metraż i okolica. Jeśli jesteś w stanie oszacować jak mocno każda ze składowych wpływa na końcową cenę, może istnieją współczynniki i ich wzajemne stosunki, które po zsumowaniu dadzą poprawną cenę końcową?

To zredukowałoby oryginalną funkcję (dla tych, którzy szaleją ze if-ami i else-ami w swoich programach) do czegoś takiego:

def oszacuj_cene_domu(liczba_sypialni, m2, okolica):
cena = 0
 # mała część tego
cena += liczba_sypialni * .841231951398213
 # większa część tego
cena += m2 * 1231.1231231
 # może trochę tego
cena += okolica * 2.3242341421
 # i szczypta soli na koniec
cena += 201.23432095
return cena

Zwróć uwagę na pogrubione magiczne numery — .841231951398213, 1231.1231231, 2.3242341421 i 201.23432095. To są nasze wagi. Jeśli byśmy odgadnęli idealne wagi, które działają dla każdej nieruchomości, nasza funkcja mogłaby przewidywać ceny domów!

Trywialny sposób żeby znaleźć wagi to wykonać taką procedurę:

Krok 1:

Zacznij ze wszystkimi wagami ustawionymi na 1.0:

def oszacuj_cene_domu(liczba_sypialni, m2, okolica):
cena = 0
 # mała część tego
cena += liczba_sypialni * 1.0
 # większa część tego
cena += m2 * 1.0
 # może trochę tego
cena += okolica * 1.0
 # i szczypta soli na koniec
cena += 1.0
return cena

Krok 2:

Wykonaj funkcję dla każdego domu dla którego posiadasz dane i zobacz jak bardzo funkcja myli się w zgadywaniu właściwej ceny:

]Użyj funkcji do oszacowania ceny każdego z domów.

Na przykład, jeśli pierwszy dom kosztuje naprawdę 250000 PLN, ale Twoja funkcja zgadła 178 000 PLN, wtedy pomyłka wynosi 72 000 PLN dla pojedynczego domu.

Teraz wysumuj kwadrat odchylenia od właściwej ceny dla każdego z wprowadzonych przez Ciebie domów. Powiedzmy, że miałeś 500 sprzedaży domów w swoim zbiorze danych i kwadrat odchylenia od ceny wzorcowej dla każdego z domów wynosił w sumie 82 123 373 PLN. To jest wskaźnik jak “źle” Twoja funkcja szacuje ceny nieruchomości.

Teraz weźmy tę końcową sumę i podzielmy ją przez 500, aby uzyskać średnią tego jaki błąd został popełniony dla indywidualnego domu. Nazwijmy to średnim błędem ceny naszej funkcji.

Jeśli potrafisz zmniejszyć ten średni błąd do 0 modyfikując wagi, Twoja funkcja będzie idealna. To by znaczyło, że w każdym przypadku, Twoja funkcja idealnie szacuje cenę domu w oparciu o dane wejściowe. W takim razie, osiągnęliśmy nasz cel — obniżyliśmy średni błąd tak jak to tylko możliwe próbując różnych wag.

Krok 3:

Powtarzaj krok 2 w kółko wybierając każdą możliwą kombinację wag. Jeśli jakakolwiek kombinacja wag przybliża średni błąd do 0 — staje się ona kolejną bieżącą kombinacją wag. Kiedy znajdziesz kombinację wag, które działają, rozwiązałeś problem!

Czas na prawdziwe wyzwanie

To dosyć proste, prawda? Pomyśl cośmy właśnie zrobili. Wziąłeś pewne dane, wykonałeś na nich trzy proste, podstawowe kroki, i skończyłeś z funkcją, która potrafi odgadnąć cenę dowolnego domu w Twojej okolcy.

Ale jest kilka rzeczy, które nadal stanowić będą wyzwanie:

  1. Badania w wielu dziedzinach (językoznawstwo/tłumaczenia) przez ostatnie 40 lat pokazały, że te podstawowe algorytmy nauczania wykonują swoje zadania lepiej od ludzi tam, gdzie ludzie próbują odnaleźć jawne i bezpośrednie zasady samodzielnie. Ten trywialny sposób nauczania maszynowego koniec końców pokona w tym zadaniu ludzi i ekspertów.
  2. Funkcja końcowa jest naprawdę trywialna. Ona nawet nie wie, co to jest “m2”, ani “liczba_sypialni”. Wszystko co wie, to że trzeba wymieszać jakoś liczby aby dostać poprawną odpowiedź (bardziej ściśle policzyć średnią ważoną z odpowiednimi wagami — dop. MM).
  3. Jest bardzo prawdopodobne, że nie będziesz miał pojęcia, dlaczego konkretna kombinacja wag pracuje poprawnie. Tak więc, właśnie napisałeś funkcję, której tak naprawdę nie rozumiesz, ale możesz pokazać, że ona działa poprawnie.
  4. Wyobraź sobie, że zamiast wybierać parametry takie jak “m2”, albo “liczba_sypialni”, Twoja funkcja pobierać będzie ciąg liczb. Powiedzmy, że każda liczba reprezentuje jasność pojedynczego piksela w zdjęciu zrobionym aparatem umieszczonym na Twoim samochodzie. Teraz powiedzmy, że zamiast generować odpowiedź na pytanie o “cenę”, funkcja będzie szacować wielkość nazwaną “ilość_stopni_do_skrętu_kierownicą”. Właśnie stworzyliśmy funkcję, która samodzielnie potrafi sterować naszym samochodem!

Trochę szalone, prawda?

O co chodzi z tym “ każdą możliwą kombinację wag” w kroku 3.?

Nie możesz oczywiście spróbować każdej kombinacji i wszystkich możliwych wag aby znaleźć tę, która pracuje najlepiej. To by dosłownie trwało wiecznie bo nie możesz przejść przez wszystkie liczby żeby spróbować.

Aby to obejść, matematycy wynaleźli wiele sprytnych sposobów aby szybko znaleźć dobre wartości tych wag bez potrzeby próbowania zbyt wielu. Oto jeden ze sposobów:

Najpierw, napisz proste równanie, które reprezentuje powyższy krok 2.:

To jest Twoja funkcja kosztu.

Teraz przepiszmy dokładnie to samo równanie, ale używając żargonu matematycznego uczenia maszynowego (na razie możesz to zignorować):

θ reprezentuje Twoje bieżące wagi. J(θ) oznacza ‘koszt dla Twoich aktualnych wag’.

To równanie reprezentuje jak złe jest nasze szacowanie dla aktualnego zbioru wag.

Jeśli narysujemy tę funkcję kosztu dla wszystkich możliwych wartości wag dla liczba_sypialni i m2, dostalibyśmy wykres wyglądający mniej więcej tak:

Ten wykres wyglądałby jak miska. Oś pionowa oznaczona jest jako funkcja kosztu.

W tym wykresie, najniższy punkt zaznaczony na niebiesko jest tym dla którego nasz koszt jest najmniejszy — dlatego nasza funkcja myli się tu najmniej. Najwyższy punkt jest tam, gdzie mylimy się najbardziej. W takim razie, jeśli możemy znaleźć wagi które przenoszą nas w punkt najniższy, mamy naszą odpowiedź!

W takim razie musimy jedynie lekko zmodyfikować nasze wagi tak, abyśmy “szli w kierunku doliny” na tym wykresie, czyli w kierunku niższych wartości. Jeśli będziemy robić małe zmiany wag, które zawsze przenoszą nas niżej, dojdziemy tam bez potrzeby wykonywania zbyt wielu kroków.

Jeśli uczyłeś się rachunku różniczkowego, wiesz, że pochodna z funkcji mówi o tym jak jest ona nachylona w danym punkcie.
Parafrazując, mówi nam ona w którym kierunku iść aby obniżyć wartość funkcji dla danego punktu z naszego wykresu. I tą więdzę możemy użyć, aby zmierzać w kierunku naszej doliny.

Dlatego, jeśli policzymy pochodną cząstkową naszej funkcji kosztu względem każdej z naszych wag, wtedy możemy odjąć tą wartość od każdej wagi. W ten sposób wykonamy spacer o jeden krok bliżej w kierunku doliny, czyli minimum naszej funkcji. Wykonując to kilka razy w końcu osiągniemy dno, a tam będziemy mieli kombinację najlepszych wag dla naszego problemu. (Jeśli to dla Ciebie nie brzmi jeszcze zbyt zrozumiale nie przejmuj się i czytaj dalej).

To jest podsumowanie jednego ze sposobów znalezienia najlepszej kombinacji wag dla Twojej funkcji, metoda ta nazywa się metodą gradientów prostych. Nie obawiaj się czytać dalej w tym kierunku jeśli interesują Cię szczegóły.

Kiedy używasz bibliotek do nauczania maszynowego, aby rozwiązać prawdziwy problem, wszystko to zostanie dla Ciebie zrobione. Ale ciągle jest to naprawdę pożyteczne, aby wiedzieć co dzieje się “za kulisami”.

Co jeszcze kryją za sobą metody nauczania maszynowego?

Trójstopniowy algorytm opisany wyżej jest nazywany analizą wieloczynnikową regresji liniowej. Szacowane jest równanie liniowe, które dopasowywane jest tak aby prosta przehodziła przez wszystkie punkty z danymi. Następnie używasz tego równania aby odgadnąć ceny sprzedaży domów, których nigdy nie widziałeś przedtem opierając się na tym gdze dom ten pojawi się na Twojej prostej. To napradę potężna idea i możesz rozwiązać “prawdziwe” problemy z jej użyciem.

Niestety, pomimo, że podejście jakie pokazałem w tych prostych zagadnieniach, nie będą dobrze działać we wszystkich innych. Powodem jest, m.in. to, że ceny domów nie są zawsze na tyle proste aby układać się na linii prostej.

Na szczęście jest wiele sposobów, aby poradzić sobie z bardziej skomplikowanymi problemami. Istnieje wiele innych algorytmów nauczania maszynowego, które potrafią sobie poradzić z danymi nieliniowymi (np. sieci neuronowe lub metoda wektorów nośnych z tzw. kernelami). Istnieją też sposoby na użycie regresji liniowej w sprytny sposób tak aby przybliżyć bardziej skomplikowane funkcje do naszych danych. We wszystkich przypadkach, nadal celem jest znalezienie najlepszego zestawu wag.

Również, zignorowałem tu problem przeuczenia sieci. To dość proste aby ukończyć algorytm z wagami, które zawsze pracują poprawnie dla nieruchomości z Twojego zbioru danych uczących, ale nigdy nie pracują poprawnie dla żadnych nowych domów, które nie były w oryginalnym zbiorze uczącym. Są sposoby na to aby temu zapobiec (regularyzacja i użycie testów walidacyjnych). Umiejętność radzenia sobie z tym problemem jest kluczowe w sprawnym posługiwaniu się narzędziami nauczania maszynowego.

Parafrazując, pomimo że podstawowa idea jest bardzo prosta, zabiera to trochę czasu i doświadczenia, aby zastosować nauczanie maszynowe i uzyskać jakiekolwiek użyteczne rezultaty. To umiejętność, której każdy programista może się nauczyć!

Czy nauczanie maszynowe jest magiczne?

Kedy zobaczysz jak prosto nauczanie maszynowe może być zastosowane do problemów, które wyglądają na naprawdę trudne (jak rozpoznawanie pisma odręcznego), możesz mieć wrażenie, że możesz użyć nauczania maszynowego do rozwiązania dowolnego problemu i uzyskać odpowiedź tak długo jak masz wystarczającą ilość danych. Po prostu dostarczasz dane i oglądasz jak komputer w sposób magiczny rozpoznaje równanie które dopasowuje się do danych!

Jest jednak bardzo ważne, aby pamiętać, że nauczanie maszynowe pracuje dobrze tylko dla problemów, które są rozwiązywalne danymi, które posiadasz.

Na przykład, jeśli próbujesz znaleźć model, który przewidzi ceny domów na podstawie rodzaju roślin doniczkowych, które się w nim znajdują, metoda raczej nie zadziała. Nie ma po prostu żadnej zależności między roślinami doniczkowymi w każdym z domów, a ceną domu na rynku nieruchomości. Dlatego, nieważne jak mocne będą próby, komputer nigdy nie wydedukuje żadnej relacji pomiędzy tymi wielkościami.

Z użyciem nauczania maszynowego możesz modelować jedynie zależności, które istnieją.

Dlatego pamiętaj, jeśli prawdziwy ekspert (człowiek) nie potrafiłby rozwiązać problemu ręcznie używając dostarczonych danych, komputer tymbardziej nie bedzie tego potrafił. Zamiast tego, problemy które człowiek potrafi rozwiązać mogą zostać rozwiązane szybciej z użyciem komputera.

Jak uczyć się o nauczaniu maszynowym

W mojej głowie, największym problemem związanym z nauczaniem maszynowym w tej chwili jest to, że jest ono używane głównie w środowisku akademickim, ewentualnie w grupach badawczych w firmach. Nie ma zbyt dużo materiałów, które są łatwe do zrozumienia dla ludzi, którzy chcieliby zrozumieć problem szerzej nie stając się jednocześnie ekspertami w tej dziedzinie. Ale każdego dnia jest lepiej i lepiej.

Darmowy kurs nauczania maszynowego na platformie Coursera jest zdumiewający. Bardzo polecam rozpocząć tutaj. Kurs powinien być na poziomie dowolnej osoby z tytułem w dziedzinie informatyki i kto pamięta minimalną ilość matematyki ze studiów.

Możesz równiesz bawić się dużą ilością algorytmów nauczania maszynowego ściągając i instalując SciKit-Learn. Jest to zbiór procedur w Pythonie, które zawierają wersje “black box” wszystkich standardowych algorytmów.


Jeśli podobał Ci się ten artykuł, proszę rozważ zapisanie się na moją listę email Machine Learning is Fun! Będę wysyłał emaile tylko wtedy kiedy będę miał coś nowego i wartego podzielenia się. To jest też najlepsza droga aby zostać poinformowanym o nowych artykułach napisanych przeze mnie.

Możesz śledzić mnie na Twitterze na profilu @ageitgey, wysłać mi email bezpośrednio lub znaleźć mnie na linkedin. Bardzo chcę coś od Ciebie usłyszeć i jeśli mogę — pomóc Tobie lub Twojej grupie z nauczaniem maszynowym.

Możesz kontynuować czytanie części 2, 3 4 i 5.

Jeśli jesteś zainteresowany dalszymi częściami i ich tłumaczeniem na język polski napisz tu: maciej.matyka@gmail.com.

Moja Strona domowa: http://panoramix.ift.uni.wroc.pl/~maq/
Strona w pracy: http://www.ift.uni.wroc.pl/~maq/
Aplikacje dla dzieci ONLINE: http://felp.pl
Mój YouTube: https://www.youtube.com/user/maqflp
Mój FB: https://www.facebook.com/ComputerSimulations/
Mój Twitter: https://twitter.com/maqpl