Table Of ContentTytuł oryginału: Machine Learning for Hackers
Tłumaczenie: Przemysław Szeremiota
ISBN: 978-83-246-9819-6
© 2015 Helion S.A.
Authorized Polish translation of the English edition of Machine Learning
for Hackers 9781449303716 © 2012 Drew Conway and John Myles White.
This translation is published and sold by permission of O’Reilly Media,
Inc., which owns or controls all rights to publish and sell the same.
All rights reserved. No part of this book may be reproduced or transmitted
in any form or by any means, electronic or mechanical, including photocopying,
recording or by any information storage retrieval system, without permission
from the Publisher.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości
lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione.
Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie
książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie
praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi
bądź towarowymi ich właścicieli.
Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte
w tej książce informacje były kompletne i rzetelne. Nie bierze jednak żadnej
odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne
naruszenie praw patentowych lub autorskich. Wydawnictwo HELION nie ponosi
również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania
informacji zawartych w książce.
Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: [email protected]
WWW: http://helion.pl (księgarnia internetowa, katalog książek)
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie/umapro_ebook
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Poleć książkę na Facebook.com Księgarnia internetowa
Kup w wersji papierowej Lubię to! » Nasza społeczność
Oceń książkę
Spis treści
Wstęp .............................................................................................................................7
1. Język R ..........................................................................................................................13
Język R w uczeniu maszynowym 14
Pobieranie i instalowanie R 16
Edytory plików tekstowych i środowiska programistyczne 19
Ładowanie i instalowanie pakietów R 20
Podstawy R w uczeniu maszynowym 23
Dodatkowe materiały o R 36
2. Eksplorowanie danych ................................................................................................39
Analiza eksploracyjna i analiza potwierdzająca 39
Czym są dane? 40
Wnioskowanie o typach danych w kolumnach 43
Wnioskowanie o znaczeniu wartości 45
Podsumowania liczbowe 46
Średnie, mediany i dominanty 46
Kwantyle 48
Odchylenia standardowe i wariancje 49
Eksploracyjne wizualizacje danych 52
Wizualizowanie powiązań pomiędzy kolumnami 67
3. Klasyfikacja — odsiewanie spamu .............................................................................73
To czy nie to? Klasyfikacja binarna 73
Płynne przejście do prawdopodobieństwa warunkowego 77
Nasz pierwszy bayesowski klasyfikator spamu 78
Definiowanie i testowanie klasyfikatora
na wątpliwych wiadomościach treściwych 84
Testowanie klasyfikatora na wiadomościach wszystkich typów 88
Polepszanie wyników klasyfikacji 91
3
4. Układanie rankingu — priorytetowa skrzynka pocztowa ........................................93
Jak uporządkować, nie znając kryterium? 93
Układanie wiadomości e-mail według ważności 94
Cechy istotności wiadomości e-mail 95
Implementacja skrzynki priorytetowej 99
Funkcje wyłuskujące wartości cech 99
Tworzenie mechanizmu nadawania wag 106
Nadawanie wag na podstawie aktywności w wątku 110
Uczenie i testowanie algorytmu układającego ranking 115
5. Regresja — przewidywanie odsłon stron ................................................................123
Wprowadzenie do regresji 123
Model wyjściowy 123
Regresja z użyciem zmiennych sztucznych 126
Podstawy regresji liniowej 128
Przewidywanie odwiedzin stron WWW 135
Definiowanie korelacji 145
6. Regularyzacja — regresja tekstu ..............................................................................149
Nieliniowe zależności pomiędzy kolumnami — świat krzywych 149
Wstęp do regresji wielomianowej 152
Metody zapobiegania nadmiernemu dopasowaniu 158
Zapobieganie nadmiernemu dopasowaniu przez regularyzację 162
Regresja tekstu 166
Pociecha w regresji logistycznej 170
7. Optymalizacja — łamanie szyfrów ...........................................................................175
Wprowadzenie do optymalizacji 175
Regresja grzbietowa 181
Łamanie szyfrów jako problem optymalizacji 185
8. Analiza głównych składowych — budowanie indeksu rynku ................................195
Uczenie nienadzorowane 195
9. Skalowanie wielowymiarowe — uwidocznianie podobieństwa polityków .........203
Grupowanie na podstawie podobieństwa 203
Wprowadzenie do miar odległości i skalowania wielowymiarowego 204
Jak się grupują amerykańscy senatorzy? 209
Analiza rejestrów głosowań w Senacie (kongresy 101. – 111.) 210
4 Spis treści
10. kNN — systemy rekomendacyjne..............................................................................219
Algorytm kNN 219
Dane o instalacjach pakietów języka R 224
11. Analiza grafów społecznych .....................................................................................229
Analiza sieci społecznych 229
Myślenie grafowe 231
Pozyskiwanie danych do grafu społecznego Twittera 233
Praca z API usługi SocialGraph 236
Analiza sieci Twittera 241
Lokalna struktura społeczna 242
Wizualizacja pogrupowanej sieci społecznej Twittera w programie Gephi 246
Własny mechanizm rekomendacji wartościowych twitterowiczów 251
12. Porównanie modeli ...................................................................................................259
SVM — maszyna wektorów nośnych 259
Porównanie algorytmów 269
Bibliografia ................................................................................................................274
Skorowidz ..................................................................................................................276
Spis treści 5
6 Spis treści
Wstęp
Aby dobrze przedstawić perspektywę, z jakiej książka ta została napisana, najlepiej będzie
zdefiniować nasze rozumienie uczenia maszynowego i nasze rozumienie programisty.
Czym jest uczenie maszynowe? Na najwyższym poziomie abstrakcji uczenie maszynowe może-
my traktować jako zestaw narzędzi i metod, których celem jest określenie wzorców i wyłuskanie
istotnych elementów z zarejestrowanych aspektów obserwowalnego świata. Jeśli na przykład
próbujemy nauczyć komputer rozpoznawać kody pocztowe na kopertach, możemy użyć da-
nych składających się z fotografii kopert wraz z listą kodów pocztowych, które na tych kopertach
widnieją. W obrębie pewnego kontekstu możemy więc zarejestrować zdarzenia z przed-
miotowej dziedziny, uczyć się z tego rejestru, a potem utworzyć model, który zorientuje nasze
zrozumienie kontekstu. W praktyce wymaga to danych, co we współczesnych zastosowaniach
może oznaczać ich mnóstwo (liczone choćby i w terabajtach). Większość technik uczenia ma-
szynowego zakłada dostępność owych danych, a w obliczu ilości danych będących niejako
produktem ubocznym działalności współczesnych firm wachlarz zastosowań uczenia maszy-
nowego wciąż się poszerza.
A kim jest nasz programista? W naszym rozumieniu to ktoś, kto lubi rozwiązywać problemy
i eksperymentować z nowymi technologiami. Każdy, kto złapał się kiedyś na dulczeniu nad
najnowszą książką o nowym języku programowania, maltretując kod dopóty, dopóki nie
wyszedł dalece poza obowiązkowe „Hello World”, może nazwać siebie programistą. Każdy,
kto ślęczał nad czyimś oprogramowaniem, aby je ulepszyć lub wykorzystać w nieprzewidziany
sposób, może się nazywać programistą. Owe pościgi są najczęściej podejmowane wyłącznie
na zasadzie wyzwania oraz dla zyskania wiedzy o działaniu nieznanej wcześniej technologii.
Obok wrodzonej dociekliwości i żądzy tworzenia programista ma też doświadczenie w pro-
jektowaniu i pisaniu oprogramowania. Dla nas jest to ktoś, kto pisał już programy, zapewne
w wielu różnych językach programowania. Dla programisty Unix nie jest li tylko czterolitero-
wym słowem, a posługiwanie się konsolą tekstową i skryptami powłoki przychodzi mu rów-
nie łatwo (albo łatwiej), jak klikanie w GUI. Nieobce mu są wyrażenia regularne, a klasyczne
narzędzia, takie jak sed, awk czy grep, to jego pierwsza linia wsparcia przy pracy z danymi
tekstowymi. W poszczególnych rozdziałach książki będziemy więc zakładać stosunkowo wysoki
poziom tego rodzaju umiejętności.
7
Organizacja materiału
Uczenie maszynowe łączy pomysły i techniki z wielu różnych tradycyjnych dyscyplin, takich
jak matematyka, statystyka i informatyka. Skoro tak, to zagadnienia uczenia maszynowego
można poznawać z różnych stron. Z uwagi na osadzenie uczenia maszynowego w matematyce
i statystyce warto na wstępie zapoznać się w jakimś stopniu z formalnymi specyfikacjami
podstawowych technik uczenia maszynowego. Można do tego wykorzystać jedną z wielu świet-
nych książek poświęconych podstawom tej dziedziny, klasyczną pracę Hastiego, Tibshiraniego
i Friedmana The Elements of Statistical Learning ([HTF09]; komplet odniesień do literatury znajduje
się w dodatku „Bibliografia”)1. Ale programista praktyk uczy się przede wszystkim przez
ćwiczenie. Wielu programistów woli traktować problemy pod kątem procesu prowadzącego
do rozwiązania, a nie ślęczeć nad teoretycznymi podstawami problemu i jego rozwiązania.
Z tej perspektywy alternatywnym podejściem do uczenia maszynowego byłoby przećwiczenie
„recept” programistycznych dla przykładowych problemów. Aby na przykład przybliżyć działa-
nie systemów rekomendacyjnych, moglibyśmy dostarczyć próbkę danych zbioru uczącego oraz
wersję modelu, a potem pokazać, jak model korzysta z danych. To podejście również jest dobrze
reprezentowane w literaturze, choćby w postaci niedawnej publikacji Programming Collective
Intelligence [Seg07] Toby’ego Segarana. W ten sposób wyczerpalibyśmy tematykę „jak”, ale nieko-
niecznie tematykę „dlaczego”. Poza przyswojeniem sobie samej mechaniki danej metody
warto dowiedzieć się, dlaczego właśnie ona została użyta w kontekście danego problemu.
Aby wyposażyć programistów praktyków w lepszą wiedzę o uczeniu maszynowym, musimy
znaleźć kompromis pomiędzy głęboką analizą podstaw teoretycznych tej dyscypliny a szerokim
przeglądem stosowania jej w zadaniach praktycznych.
Dlatego postanowiliśmy pokazywać uczenie maszynowe w kontekście konkretnego proble-
mu, owszem, ale z prezentacją i wyjaśnieniem działania narzędzi wykorzystywanych typowo
w jego rozwiązaniach. Na tej zasadzie działają nasze studia przypadków, z tym że unikamy
wałkowania problemów, dla których być może nie istnieje znane nauce rozwiązanie — kon-
centrujemy się na tych problemach uczenia maszynowego, które zostały dobrze rozpoznane,
i prezentujemy konkretne przykłady przypadków, w których niektóre rozwiązania sprawdziły
się znakomicie, a inne widowiskowo zawiodły.
Każdy rozdział tej książki jest więc zamkniętym studium przypadku, ukierunkowanym na
jeden konkretny problem uczenia maszynowego. Pierwsze przypadki to przejście od klasyfi-
kacji do regresji, a niektóre studia przypadków będą ujmować (jawnie albo mniej jawnie) ele-
menty obu. Potem omawiamy grupowanie (ang. clustering), redukcję wymiarowości i opty-
malizację. Trzeba zaznaczyć, że nie wszystkie problemy są czyste, to znaczy nie wszystkie
pasują idealnie do klasy problemów regresji czy klasyfikacji. Niektóre przypadki analizowane
w książce zawierają więc elementy obu klas (niekiedy jawnie, a niekiedy w subtelnych aspek-
tach omawianych dodatkowo). Oto krótki spis wszystkich studiów przypadków z tej książki,
w kolejności występowania:
Klasyfikacja tekstu — wykrywanie spamu
W tym rozdziale wprowadzamy koncepcję klasyfikacji binarnej na przykładzie wykorzy-
stującym dane tekstowe z wiadomości e-mail. Podejmujemy tam klasyczny problem
1 Tekst książki The Elements of Statistical Learning można obecnie pobrać nieodpłatnie ze strony http://www-
stat.stanford.edu/~tibs/ElemStatLearn/.
8 Wstęp
uczenia maszynowego w postaci klasyfikowania pewnych danych wejściowych do jed-
nego z dwóch typów (w tym przypadku są to wiadomości wartościowe oraz wiadomości
niechciane).
Układanie rankingu — priorytetowa skrzynka pocztowa
Na podstawie tych samych danych tekstowych z wiadomości e-mail przechodzimy od kla-
syfikacji binarnej do predefiniowanych typów. Tym razem chcemy zidentyfikować te cechy
wiadomości, które najlepiej świadczą o ich „ważności” względem innych wiadomości.
Modele regresji — przewidywanie popularności stron WWW
Tutaj wprowadzamy drugie podstawowe narzędzie uczenia maszynowego w postaci re-
gresji liniowej. W rozdziale eksplorujemy dane, w których da się zauważyć zależność
modelowana (mniej więcej) linią prostą. W ramach studium przypadku chcemy przewi-
dzieć liczbę odwiedzin dla 1000 najpopularniejszych stron WWW w internecie (według
danych z 2011 roku).
Regularyzacja — regresja tekstowa
Niekiedy zależności występujące w danych nie dają się dobrze opisać linią prostą. Aby jed-
nak je ująć, musimy uciec się do innej, bardziej złożonej funkcji. Pułapką jest tutaj ryzyko
nadmiernego dopasowania. W rozdziale wprowadzamy pojęcie regularyzacji jako środka
zapobiegawczego do nadmiernego dopasowania modeli regresji i przekładamy to na
studium przypadku, w którym próbujemy wykryć zależności pomiędzy słowami w opisach
książek wydawnictwa a popularnością tych książek.
Optymalizacja — łamanie szyfrów
Wychodząc poza modele regresji, niemal każdy problem uczenia maszynowego można
postrzegać jako problem optymalizacji, w którym próbujemy zminimalizować pewną
miarę błędu predykcji. W tym rozdziale prezentujemy klasyczne algorytmy optymalizacji
i próbujemy za ich pomocą złamać prosty szyfr literowy.
Uczenie nienadzorowane — budowanie indeksu giełdowego
Aż do tego momentu zajmowaliśmy się wyłącznie technikami uczenia maszynowego
nadzorowanego. Tutaj omawiamy jego metodologiczne przeciwieństwo w postaci uczenia
nienadzorowanego. Różnica sprowadza się do tego, że w uczeniu nadzorowanym chcemy
użyć wykrytej struktury danych do stawiania prognoz (predykcji); w uczeniu nienadzoro-
wanym celem jest samo wykrycie struktury danych. W ramach studium przypadku usi-
łujemy na podstawie danych z rynku akcji utworzyć indeks, który opisuje ogólną „kondycję”
rynku.
Podobieństwo przestrzenne — grupowanie senatorów Kongresu USA
na podstawie rejestrów głosowań
Kolejny rozdział wprowadza pojęcie odległości pomiędzy obserwacjami. Definiujemy
miary odległości i opisujemy metody grupowania obserwacji na podstawie odległości
pomiędzy nimi. Dane z rejestrów głosowań w Kongresie USA wykorzystujemy do pogru-
powania legislatorów według poglądów wyrażanych w głosowaniach.
System rekomendacyjny — sugerowanie programistom języka R wartościowych bibliotek
Kontynuując omawianie zagadnień podobieństwa przestrzennego, pokazujemy, jak zbudo-
wać system rekomendacyjny oparty na bliskości obserwacji w przestrzeni. W rozdziale poja-
wia się algorytm k-najbliższych sąsiadów (kNN), wykorzystany do sugerowania pakietów
R programistom tego języka na podstawie tego, jakie pakiety mają już zainstalowane.
Organizacja materiału 9
Analiza sieci społecznych — kogo obserwować na Twitterze
W tym rozdziale podejmujemy próbę połączenia wielu omawianych wcześniej (oraz kil-
ku nowych) koncepcji, usiłując zaprojektować i zbudować system rekomendujący, „kogo
obserwować” na podstawie danych z serwisu Twitter. Na potrzeby systemu budujemy
mechanizm pobierania danych o sieci Twittera, wykrywamy lokalne społeczności w sieci
społecznej i na bazie podstawowych technik analizy sieci społecznych rekomendujemy
wartościowych użytkowników do obserwowania.
Porównywanie modeli — typowanie najlepszego algorytmu do rozwiązania problemu
W ostatnim rozdziale omawiamy techniki pozwalające na skuteczne wybieranie algorytmów
uczenia maszynowego odpowiednich do rozwiązania postawionego problemu. Omawiamy
też ostatni z algorytmów uczenia maszynowego, SVM (ang. support vector machine), a następ-
nie porównujemy jego sprawność ze sprawnością wcześniej omawianych modeli, po-
nownie posługując się danymi o wiadomościach e-mail z rozdziału trzeciego.
Najważniejszym narzędziem eksploracji tych przypadków będzie język programowania R
(http://www.r-project.org/). Język R szczególnie dobrze nadaje się do przypadków uczenia maszy-
nowego, ponieważ jest wysokopoziomowym, funkcyjnym językiem skryptowym zaprojektowa-
nym właśnie pod kątem analizy danych. Większość potrzebnych nam algorytmów statystyczno-
analitycznych mamy już do dyspozycji w samym języku, a mnóstwo innych jest dostępnych
w tysiącach gotowych pakietów R, gromadzonych w repozytorium CRAN (Comprehensive R
Archive Network)2.
Konwencje typograficzne
W książce wykorzystano następujące konwencje typograficzne:
Czcionka pochylona
Adresy URL, adresy e-mail, nazwy plików i rozszerzenia nazw plików.
Czcionka pogrubiona
Nowe pojęcia.
Czcionka o stałej szerokości znaków
Kod źródłowy programów przykładowych, a także tekst w obrębie akapitów odnoszący
się do elementów programu, takich jak zmienne czy nazwy funkcji, nazwy baz danych,
typów danych, zmiennych środowiskowych, instrukcji i słów kluczowych języka C#.
Pogrubiona czcionka o stałej szerokości znaków
Oznaczenie tekstu, który należy wprowadzić dosłownie, zgodnie z wykonywaną krok po
kroku procedurą.
Pochylona czcionka o stałej szerokości znaków
Oznaczenie kodu, który należy zastąpić odpowiednią wartością wynikającą z kontekstu
omówienia.
2 Pozwoli to nam skoncentrować się na analitycznym podejściu do rozwiązywania stawianych problemów, bez
konieczności własnoręcznego implementowania podstawowych algorytmów.
10 Wstęp