Tytuł 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