Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00246 004320 12931757 na godz. na dobę w sumie
Zaawansowane uczenie maszynowe z językiem Python - ebook/pdf
Zaawansowane uczenie maszynowe z językiem Python - ebook/pdf
Autor: Liczba stron: 248
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-283-3608-7 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> python - programowanie
Porównaj ceny (książka, ebook (-40%), audiobook).

Uczenie maszynowe przyczyniło się do powstania wielu innowacyjnych technologii. Pojazdy autonomiczne, mechanizmy rozpoznawania obrazów, badania genetyczne, a także dynamiczne dostosowywanie prezentowanych treści do preferencji odbiorcy to tylko niektóre przykłady. Możliwości związane z rozwojem tych technik sprawiają, że analityka danych i zaawansowane uczenie maszynowe stają się wyjątkowo cenną wiedzą. Dotyczy to szczególnie nowatorskich technik analizy danych, takich jak głębokie uczenie, algorytmy częściowo nadzorowane i metody zespołowe.

Niniejsza książka jest przystępnie napisanym podręcznikiem, dzięki któremu poznasz niektóre zaawansowane techniki uczenia maszynowego. Szczególną uwagę poświęcono tu algorytmom uczenia maszynowego: zostały dokładnie wyjaśnione, opisano ich zastosowanie oraz topologię, metody uczenia i miary wydajności. Każdy rozdział uzupełniono o wykaz źródeł, pomocny w dalszym zgłębianiu tematu. Dodatkowo przedstawiono wiele cennych wskazówek dotyczących specyfiki pracy analityka danych. Do prezentacji przykładów wybrano język Python z uwagi na jego wszechstronność, elastyczność, prostotę oraz możliwość stosowania do specjalistycznych zadań.

Najważniejsze zagadnienia przedstawione w książce:

Zaawansowane uczenie maszynowe — poznaj algorytmy przyszłości!


John Hearty — jest autorytetem w dziedzinie analityki danych i inżynierii infrastruktury. Przez pewien czas zajmował się modelowaniem zachowań gracza i infrastrukturą dużych zbiorów danych w Microsofcie. Ważniejszymi jego projektami były modelowanie umiejętności gracza w grach asymetrycznych i modele segmentacji graczy mające na celu zindywidualizowanie rozgrywki. Obecnie Hearty jest niezależnym ekspertem, szczególnie cenionym przez zespoły zajmujące się eksploracją danych. W wolnym czasie tworzy modele uczenia maszynowego w Pythonie.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: Advanced Machine Learning with Python Tłumaczenie: Konrad Matuk ISBN: 978-83-283-3607-0 Copyright © Packt Publishing 2016. First published in the English language under the title Advanced Machine Learning with Python - (9781784398637) Polish edition copyright © 2017 by Helion SA All rights reserved. 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 biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą 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: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/zaaucz.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/zaaucz Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis tre(cid:258)ci O autorze O korektorach merytorycznych Wst(cid:218)p Rozdzia(cid:239) 1. Nienadzorowane uczenie maszynowe Analiza g(cid:239)ównych sk(cid:239)adowych (PCA) Podstawy analizy g(cid:239)ównych sk(cid:239)adowych Stosowanie algorytmu analizy g(cid:239)ównych sk(cid:239)adowych Wprowadzenie grupowania metod(cid:200) k-(cid:258)rednich Grupowanie — wprowadzenie Rozpoczynamy grupowanie Dostrajanie konfiguracji klastrów Sieci Kohonena Sieci Kohonena — wprowadzenie Korzystanie z sieci Kohonena Dalsza lektura Podsumowanie Rozdzia(cid:239) 2. Sieci DBN Sieci neuronowe — wprowadzenie Budowa sieci neuronowej Topologie sieci Ograniczona maszyna Boltzmanna Ograniczone maszyny Boltzmanna — wst(cid:218)p Zastosowania ograniczonych maszyn Boltzmanna Dalsze zastosowania ograniczonej maszyny Boltzmanna 9 11 13 19 20 20 21 24 24 25 29 34 34 35 38 39 41 42 42 43 45 46 49 58 Poleć książkęKup książkę Zaawansowane uczenie maszynowe z j(cid:266)zykiem Python Sieci g(cid:239)(cid:218)bokie Trenowanie sieci DBN Stosowanie sieci DBN Walidacja sieci DBN Dalsza lektura Podsumowanie Rozdzia(cid:239) 3. Stosy autoenkoderów odszumiaj(cid:200)cych Autoenkodery Autoenkodery — wprowadzenie Odszumianie autoenkoderów Korzystanie z autoenkodera odszumiaj(cid:200)cego Stosy autoenkoderów odszumiaj(cid:200)cych Korzystanie ze stosu autoenkoderów odszumiaj(cid:200)cych Ocena wydajno(cid:258)ci stosu autoenkoderów odszumiaj(cid:200)cych Dalsza lektura Podsumowanie Rozdzia(cid:239) 4. Konwolucyjne sieci neuronowe Konwolucyjne sieci neuronowe — wprowadzenie Topologia sieci konwolucyjnej Korzystanie z konwolucyjnych sieci neuronowych Dalsza lektura Podsumowanie Rozdzia(cid:239) 5. Cz(cid:218)(cid:258)ciowo nadzorowane uczenie maszynowe Wst(cid:218)p Czym jest uczenie cz(cid:218)(cid:258)ciowo nadzorowane? Dzia(cid:239)anie algorytmów uczenia cz(cid:218)(cid:258)ciowo nadzorowanego Samodzielne uczenie si(cid:218) Kontrastywna pesymistyczna estymacja prawdopodobie(cid:241)stwa Dalsza lektura Podsumowanie Rozdzia(cid:239) 6. Rozpoznawanie j(cid:218)zyka naturalnego i selekcja cech Wst(cid:218)p Selekcja cech danych tekstowych Czyszczenie danych tekstowych Tworzenie cech na podstawie danych tekstowych Testowanie przygotowanych danych Dalsza lektura Podsumowanie 6 59 59 60 63 64 64 67 67 68 70 72 75 76 82 83 83 85 85 86 98 104 105 107 107 108 109 109 119 128 129 131 131 133 133 141 146 152 153 Poleć książkęKup książkę Spis tre(cid:286)ci Rozdzia(cid:239) 7. Selekcja cech — cz(cid:218)(cid:258)(cid:202) II Wst(cid:218)p Tworzenie zestawu cech Selekcja cech pod k(cid:200)tem uczenia maszynowego Korzystanie z technik selekcji cech In(cid:285)ynieria cech w praktyce Pobieranie danych za pomoc(cid:200) interfejsów REST Dalsza lektura Podsumowanie Rozdzia(cid:239) 8. Metody zespo(cid:239)owe Wprowadzenie do metod zespo(cid:239)owych Metody u(cid:258)redniaj(cid:200)ce Stosowanie metod wzmacniania Stosowanie metod kontaminacji Wykorzystanie modeli w zastosowaniach dynamicznych Czym jest elastyczno(cid:258)(cid:202) modeli? Strategie zarz(cid:200)dzania elastyczno(cid:258)ci(cid:200) modelu Dalsza lektura Podsumowanie Rozdzia(cid:239) 9. Dodatkowe narz(cid:218)dzia uczenia maszynowego w j(cid:218)zyku Python Alternatywne narz(cid:218)dzia programowe Biblioteka Lasagne — wprowadzenie Biblioteka TensorFlow — wprowadzenie Kiedy warto korzysta(cid:202) z tych bibliotek? Dalsza lektura Podsumowanie Dodatek A. Wymagania przyk(cid:239)adowych skryptów Skorowidz 155 155 156 156 164 172 173 192 193 195 196 197 201 207 212 213 220 223 224 225 226 226 228 232 235 235 237 239 7 Poleć książkęKup książkę Poleć książkęKup książkę 1 Nienadzorowane uczenie maszynowe W tym rozdziale opisz(cid:218) zagadnienia zwi(cid:200)zane ze stosowaniem technik nienadzorowanego ucze- nia maszynowego w celu identyfikacji wzorców i struktur w zbiorach danych. Techniki uczenia nienadzorowanego to doskona(cid:239)e narz(cid:218)dzia s(cid:239)u(cid:285)(cid:200)ce do eksploracji danych. Pozwalaj(cid:200) na wykrycie wzorców i struktur zawartych w zbiorach danych — informacje te mog(cid:200) okaza(cid:202) si(cid:218) przydatne same w sobie lub pomóc w dalszej analizie zbioru. Warto dysponowa(cid:202) zesta- wem konkretnych narz(cid:218)dzi nienadzorowanego uczenia maszynowego, które pozwol(cid:200) na wyci(cid:200)- gni(cid:218)cie przydatnych informacji z nieznanych lub z(cid:239)o(cid:285)onych zbiorów danych. Na pocz(cid:200)tku opisz(cid:218) analiz(cid:218) g(cid:239)ównych sk(cid:239)adowych (ang. Principal Component Analysis, PCA) — podstawow(cid:200) technik(cid:218) przetwarzania danych stosowan(cid:200) w celu zredukowania liczby wymia- rów i zakresu. Pó(cid:283)niej zajm(cid:218) si(cid:218) grupowaniem metod(cid:200) k-(cid:258)rednich — popularn(cid:200) i w miar(cid:218) prost(cid:200) technik(cid:200) uczenia nienadzorowanego. Na koniec opisz(cid:218) zagadnienia zwi(cid:200)zane z sieciami Kohonena (ang. Self-Organizing Map, SOM) — metod(cid:200) topologicznego grupowania, która pozwala na przedstawienie skomplikowanych zbiorów danych za pomoc(cid:200) dwóch wymiarów. W trakcie lektury tego rozdzia(cid:239)u dowiesz si(cid:218), jak efektywnie zastosowa(cid:202) wymienione wcze(cid:258)niej techniki podczas pracy z wielowymiarowymi zbiorami danych. Praktyczne zastosowanie ka(cid:285)de- go z algorytmów zostanie pokazane na podstawie zbioru obrazów r(cid:218)cznie pisanych cyfr UCI Handwritten Digits. Poza zapoznaniem si(cid:218) z opisem zastosowa(cid:241) wspomnianych technik poznasz je od strony praktycznej, a tak(cid:285)e uzyskasz odpowiedzi na metodologiczne pytania dotycz(cid:200)ce mi(cid:218)dzy innymi kalibracji, walidacji i oceny wydajno(cid:258)ci poszczególnych technik. Reasumuj(cid:200)c, porusz(cid:218) kolejno nast(cid:218)puj(cid:200)ce tematy: (cid:81) analiza g(cid:239)ównych sk(cid:239)adowych, (cid:81) grupowanie metod(cid:200) k-(cid:258)rednich, (cid:81) sieci Kohonena. Poleć książkęKup książkę Zaawansowane uczenie maszynowe z j(cid:266)zykiem Python Analiza g(cid:239)ównych sk(cid:239)adowych (PCA) Wydajna praca z wielowymiarowymi zbiorami danych wymaga opanowania zestawu technik pozwalaj(cid:200)cych na redukcj(cid:218) liczby wymiarów do poziomu, przy którym dane da si(cid:218) analizowa(cid:202). Redukcja liczby wymiarów pozwala na przedstawienie wielowymiarowych danych na dwuwy- miarowych wykresach, uj(cid:218)cie najwa(cid:285)niejszych informacji zawartych w danych za pomoc(cid:200) jak najmniejszej liczby cech, a tak(cid:285)e identyfikacj(cid:218) wspó(cid:239)liniowych komponentów modelu. Dla przypomnienia — wspó(cid:239)liniowo(cid:258)(cid:202) w kontek(cid:258)cie uczenia maszynowego oznacza wyst(cid:218)powa- nie w modelu cech, pomi(cid:218)dzy którymi jest zale(cid:285)no(cid:258)(cid:202) liniowa. To chyba oczywiste, (cid:285)e obec- no(cid:258)(cid:202) takich cech utrudnia analiz(cid:218) danych — cechy zale(cid:285)ne od siebie mog(cid:200) wprowadzi(cid:202) anali- tyka w b(cid:239)(cid:200)d (cech zale(cid:285)nych od siebie nie mo(cid:285)na traktowa(cid:202) tak, jakby ka(cid:285)da z nich dostarcza(cid:239)a tak samo wa(cid:285)nej informacji), a dodatkowo mog(cid:200) wskazywa(cid:202) na wyst(cid:218)powanie lokalnych war- to(cid:258)ci minimalnych tam, gdzie w rzeczywisto(cid:258)ci ich nie ma. Prawdopodobnie obecnie najcz(cid:218)(cid:258)ciej stosowan(cid:200) metod(cid:200) redukcji wymiarów jest analiza g(cid:239)ównych sk(cid:239)adowych. W dalszej cz(cid:218)(cid:258)ci ksi(cid:200)(cid:285)ki b(cid:218)dziesz wielokrotnie korzysta(cid:202) z tej metody, a wi(cid:218)c warto, aby(cid:258) dobrze si(cid:218) z ni(cid:200) zapozna(cid:239), zrozumia(cid:239) teoretyczne podstawy jej dzia(cid:239)ania, a tak(cid:285)e napisa(cid:239) kod implementuj(cid:200)cy j(cid:200) w j(cid:218)zyku Python. Podstawy analizy g(cid:239)ównych sk(cid:239)adowych Analiza g(cid:239)ównych sk(cid:239)adowych jest wszechstronn(cid:200) technik(cid:200) dekompozycji umo(cid:285)liwiaj(cid:200)c(cid:200) podzia(cid:239) wielowymiarowych zbiorów danych na zestaw niezale(cid:285)nych komponentów. Analiza odpowied- niej liczby takich komponentów mo(cid:285)e pozwoli(cid:202) na opisanie wyja(cid:258)nienia wszystkich wymiarów zbioru danych. Ponadto komponenty te tworz(cid:200) skrócony opis zbioru danych. Analiza g(cid:239)ównych sk(cid:239)adowych ma wiele zastosowa(cid:241), a jej uniwersalno(cid:258)(cid:202) sprawia, (cid:285)e warto po(cid:258)wi(cid:218)ci(cid:202) czas na opa- nowanie zwi(cid:200)zanych z ni(cid:200) zagadnie(cid:241). Zwró(cid:202) uwag(cid:218) na to, (cid:285)e zmniejszenie liczby zmiennych wchodz(cid:200)cych w sk(cid:239)ad zbioru danych prawie zawsze wi(cid:200)(cid:285)e si(cid:218) z utrat(cid:200) cz(cid:218)(cid:258)ci informacji zawartych w zbiorze wej(cid:258)ciowym. Je(cid:285)eli liczba komponentów jest wystarczaj(cid:200)ca, to utrata ta jest minimalna, ale w przypadku zbio- rów charakteryzuj(cid:200)cych si(cid:218) ma(cid:239)(cid:200) liczb(cid:200) g(cid:239)ównych sk(cid:239)adowych utworzonych na podstawie zbiorów o bardzo du(cid:285)ej liczbie wymiarów mo(cid:285)e doj(cid:258)(cid:202) do znacznej utraty informacji. Stosuj(cid:200)c technik(cid:218) analizy g(cid:239)ównych sk(cid:239)adowych, musisz zawsze my(cid:258)le(cid:202) o tym, ile komponentów jest niezb(cid:218)dnych do efektywnego modelowania przetwarzanego zbioru danych. Metoda analizy g(cid:239)ównych sk(cid:239)adowych identyfikuje kolejne osie zbioru danych o najwy(cid:285)szej wa- riancji (g(cid:239)ówne sk(cid:239)adowe). Operacja ta jest wykonywana w nast(cid:218)puj(cid:200)cych krokach: 1. Identyfikacja (cid:258)rodkowego punktu zbioru danych. 2. Obliczenie macierzy kowariancji danych. 3. Obliczenie wektorów w(cid:239)asnych macierzy kowariancji. 20 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Nienadzorowane uczenie maszynowe 4. Ortonormalizacja wektorów w(cid:239)asnych. 5. Obliczenie proporcji wariancji przedstawianej przez ka(cid:285)dy wektor w(cid:239)asny. Czas zdefiniowa(cid:202) niektóre wa(cid:285)ne poj(cid:218)cia: (cid:81) Kowariancja jest efektywn(cid:200) wariancj(cid:200) wielu wymiarów — wariancj(cid:200) pomi(cid:218)dzy przynajmniej dwiema zmiennymi. Pojedyncza warto(cid:258)(cid:202) mo(cid:285)e opisywa(cid:202) wariancj(cid:218) jednego wymiaru lub jednej zmiennej, ale w celu przedstawienia kowariancji pomi(cid:218)dzy dwiema zmiennymi niezb(cid:218)dne jest u(cid:285)ycie macierzy 2(cid:117)2, a w celu przedstawienia kowariancji pomi(cid:218)dzy trzema zmiennymi nale(cid:285)y u(cid:285)y(cid:202) macierzy 3(cid:117)3 itd. W zwi(cid:200)zku z tym pierwszym krokiem algorytmu analizy g(cid:239)ównych sk(cid:239)adowych jest obliczenie macierzy kowariancji. (cid:81) Wektor w(cid:239)asny to wektor, który jest charakterystyczny dla zbioru danych i transformacji liniowej. Wektor ten ma taki sam kierunek przed wykonaniem transformacji, jak po jej wykonaniu. Aby zrozumie(cid:202) dzia(cid:239)anie tego wektora, wyobra(cid:283) sobie, (cid:285)e rozci(cid:200)gasz pomi(cid:218)dzy swoimi d(cid:239)o(cid:241)mi gumow(cid:200) opask(cid:218). Za(cid:239)ó(cid:285)my, (cid:285)e rozci(cid:200)gasz j(cid:200) do momentu napi(cid:218)cia. Wektorem w(cid:239)asnym jest wektor, którego kierunek by(cid:239) taki sam przed rozci(cid:200)gni(cid:218)ciem opaski, jak w trakcie jej rozci(cid:200)gania. W tym przypadku wektor ten b(cid:218)dzie przechodzi(cid:239) bezpo(cid:258)rednio przez (cid:258)rodek gumowej opaski pomi(cid:218)dzy Twoimi d(cid:239)o(cid:241)mi. (cid:81) Ortogonalizacja jest procesem polegaj(cid:200)cym na poszukiwaniu dwóch wektorów, które s(cid:200) ortogonalne (ustawione wzgl(cid:218)dem siebie pod k(cid:200)tem prostym). W przypadku n-wymiarowej przestrzeni danych proces ortogonalizacji polega na przetwarzaniu grupy wektorów i generuje zestaw wektorów ortogonalnych. (cid:81) Ortonormalizacja jest procesem ortogonalizacji, który normalizuje równie(cid:285) iloczyn. (cid:81) Warto(cid:258)(cid:202) w(cid:239)asna (z grubsza odpowiada d(cid:239)ugo(cid:258)ci wektora w(cid:239)asnego) jest u(cid:285)ywana do obliczenia proporcji wariancji reprezentowanej przez ka(cid:285)dy wektor w(cid:239)asny. Operacja ta polega na podzieleniu warto(cid:258)ci w(cid:239)asnej poszczególnych wektorów w(cid:239)asnych przez sum(cid:218) warto(cid:258)ci w(cid:239)asnych wszystkich wektorów w(cid:239)asnych. Podsumowuj(cid:200)c, macierz kowariancji jest u(cid:285)ywana w celu obliczenia wektorów w(cid:239)asnych. Proces ortonormalizacji jest przeprowadzany w celu uzyskania znormalizowanych wektorów ortogo- nalnych na podstawie wektorów w(cid:239)asnych. Wektor w(cid:239)asny o najwy(cid:285)szej warto(cid:258)ci w(cid:239)asnej jest pierwsz(cid:200) g(cid:239)ówn(cid:200) sk(cid:239)adow(cid:200). Kolejne sk(cid:239)adowe charakteryzuj(cid:200) si(cid:218) ni(cid:285)szymi warto(cid:258)ciami w(cid:239)asnymi. To w ten sposób algorytm analizy g(cid:239)ównych sk(cid:239)adowych pomaga w przetworzeniu wej(cid:258)ciowego zbioru danych na zbiór o mniejszej liczbie wymiarów. Stosowanie algorytmu analizy g(cid:239)ównych sk(cid:239)adowych Pozna(cid:239)e(cid:258) ju(cid:285) dzia(cid:239)anie algorytmu analizy g(cid:239)ównych sk(cid:239)adowych na wysokim poziomie. Teraz przeskocz(cid:218) bezpo(cid:258)rednio do zastosowania go w analizie jednego z najciekawszych zbiorów danych — zbioru obrazów r(cid:218)cznie zapisanych cyfr — digits, który mo(cid:285)e zosta(cid:202) pobrany razem z pakie- tem scikit-learn. 21 Poleć książkęKup książkę Zaawansowane uczenie maszynowe z j(cid:266)zykiem Python Zbiór ten sk(cid:239)ada si(cid:218) z 1797 przyk(cid:239)adów cyfr zapisanych r(cid:218)cznie przez 44 ró(cid:285)ne osoby. Nacisk d(cid:239)u- gopisu osoby zapisuj(cid:200)cej cyfry zosta(cid:239) przedstawiony na siatce 8(cid:117)8. W wyniku takiej operacji kwantyzacji otrzymano np. nast(cid:218)puj(cid:200)c(cid:200) map(cid:218): Mapy te mog(cid:200) zosta(cid:202) zamienione na wektory cech o d(cid:239)ugo(cid:258)ci równej 64, które mo(cid:285)na stosowa(cid:202) w roli danych wej(cid:258)ciowych analizatora. Gdy widzi si(cid:218) zbiór danych wej(cid:258)ciowych o 64 cechach, od razu chce si(cid:218) zastosowa(cid:202) technik(cid:218) redukcji liczby zmiennych, tak(cid:200) jak algorytm analizy g(cid:239)ównych sk(cid:239)adowych. Tak du(cid:285)a liczba cech uniemo(cid:285)liwia analiz(cid:218) zbioru danych za pomoc(cid:200) wizualnych technik eksploracji danych! Poni(cid:285)szy kod przetworzy zbiór danych reprezentuj(cid:200)cych napisane r(cid:218)cznie cyfry (digits) za pomo- c(cid:200) metody analizy g(cid:239)ównych sk(cid:239)adowych: import numpy as np from sklearn.datasets import load_digits import matplotlib.pyplot as plt from sklearn.decomposition import PCA from sklearn.preprocessing import scale from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA import matplotlib.cm as cm digits = load_digits() data = digits.data n_samples, n_features = data.shape n_digits = len(np.unique(digits.target)) labels = digits.target Przedstawiony kod wykonuje kilka operacji: 1. Najpierw (cid:239)aduje niezb(cid:218)dne biblioteki: bibliotek(cid:218) numpy, komponenty pakietu scikit-learn (w tym sam zbiór danych digits, funkcj(cid:218) analizy g(cid:239)ównych sk(cid:239)adowych i funkcj(cid:218) skalowania danych), a tak(cid:285)e bibliotek(cid:218) matplotlib s(cid:239)u(cid:285)(cid:200)c(cid:200) do tworzenia wykresów. 22 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Nienadzorowane uczenie maszynowe 2. Nast(cid:218)pnie rozpoczyna przygotowanie zbioru danych digits. Operacja ta sk(cid:239)ada si(cid:218) z kilku nast(cid:218)puj(cid:200)cych po sobie czynno(cid:258)ci: (cid:81) Operacja (cid:239)adowania zbioru danych jest przeprowadzana przed utworzeniem zmiennych pomocniczych. (cid:81) Tworzona jest zmienna data, z której kod b(cid:218)dzie korzysta(cid:202) pó(cid:283)niej. Ponadto tworzona jest zmienna digits, która definiuje liczb(cid:218) cyfr w docelowym wektorze target (n_digits = 10, poniewa(cid:285) b(cid:218)dziemy przetwarza(cid:202) cyfry z zakresu od 0 do 9). Utworzenie tej zmiennej u(cid:239)atwi proces dalszej analizy. (cid:81) Zapisany zostaje wektor target, który pó(cid:283)niej b(cid:218)dzie u(cid:285)ywany jako (cid:283)ród(cid:239)o etykiet. (cid:81) Ca(cid:239)y ten proces tworzenia zmiennych ma na celu uproszczenie dalszej analizy. 3. Po przygotowaniu zbioru danych inicjowany jest algorytm analizy g(cid:239)ównych sk(cid:239)adowych: pca = PCA(n_components=10) data_r = pca.fit(data).transform(data) print( wspó(cid:239)czynnik wyja(cid:258)nionych wariancji (10 pierwszych sk(cid:239)adowych): s str (cid:180)(pca.explained_variance_ratio_)) print( suma wyja(cid:258)nionych wariancji (10 pierwszych sk(cid:239)adowych): s str (cid:180)(sum(pca.explained_variance_ratio_))) 4. Powy(cid:285)szy kod wy(cid:258)wietla wariancj(cid:218) opisan(cid:200) ka(cid:285)d(cid:200) z 10 pierwszych sk(cid:239)adowych. W analizowanym przypadku 10 g(cid:239)ównych sk(cid:239)adowych opisuje 0,589 wariancji ca(cid:239)ego zbioru danych. Nie jest to najgorszy wynik, bior(cid:200)c pod uwag(cid:218) to, (cid:285)e zeszli(cid:258)my z 64 do 10 sk(cid:239)adowych, ale wyra(cid:283)nie widoczna jest potencjalna stratno(cid:258)(cid:202) algorytmu analizy g(cid:239)ównych sk(cid:239)adowych. Teraz trzeba stwierdzi(cid:202), czy ta redukcja sprawi, (cid:285)e dalsza analiza b(cid:218)dzie prostsza. Czy wariancje pozo- sta(cid:239)ych komponentów przeszkadza(cid:239)y w klasyfikacji? Dysponujemy obiektem data_r zawieraj(cid:200)cym dane wyj(cid:258)ciowe wygenerowane przez algorytm pca przetwarzaj(cid:200)cy zbiór danych digits. Spróbujmy przedstawi(cid:202) te dane w sposób graficzny. W tym celu nale(cid:285)y utworzy(cid:202) wektor kolorów klasy colors, a nast(cid:218)pnie wygenerowa(cid:202) wykres punktowy z pokolorowanymi klasami: x = np.arange(10) ys = [i+x+(i*x)**2 for i in range(10)] plt.figure() colors = cm.rainbow(np.linspace(0, 1, len(ys))) for c, i, target_name in zip(colors, [1,2,3,4,5,6,7,8,9,10], labels): plt.scatter(data_r[labels == i, 0], data_r[labels == i, 1], c=c, alpha = 0.4) plt.legend() plt.title( Wykres przedstawiaj(cid:200)cy punkty \n opisywane przez 10 g(cid:239)ównych sk(cid:239)adowych ) plt.show() 23 Poleć książkęKup książkę Zaawansowane uczenie maszynowe z j(cid:266)zykiem Python Wygenerowany zostanie nast(cid:218)puj(cid:200)cy wykres: Na podstawie tego rysunku mo(cid:285)na doj(cid:258)(cid:202) do wniosku, (cid:285)e klasy dwóch pierwszych g(cid:239)ównych sk(cid:239)a- dowych s(cid:200) do pewnego stopnia roz(cid:239)(cid:200)czne, ale przeprowadzenie wysoce dok(cid:239)adnej klasyfikacji zbioru danych mo(cid:285)e by(cid:202) do(cid:258)(cid:202) trudne. Klasy wydaj(cid:200) si(cid:218) pogrupowane, a wi(cid:218)c prawdopodobnie analiza skupie(cid:241) mo(cid:285)e da(cid:202) w miar(cid:218) sensowne rezultaty. Analiza g(cid:239)ównych sk(cid:239)adowych umo(cid:285)liwi(cid:239)a lepsze poznanie struktury zbioru danych, co znacznie u(cid:239)atwi dalsz(cid:200) analiz(cid:218). Skorzystajmy ze zdobytej wiedzy i przeprowad(cid:283)my analiz(cid:218) skupie(cid:241) za pomoc(cid:200) algorytmu grupo- wania metod(cid:200) k-(cid:258)rednich. Wprowadzenie grupowania metod(cid:200) k-(cid:258)rednich W poprzednim podrozdziale dowiedzia(cid:239)e(cid:258) si(cid:218), (cid:285)e algorytmy nienadzorowanego uczenia maszy- nowego s(cid:200) u(cid:285)ywane do okre(cid:258)lania struktury z(cid:239)o(cid:285)onych zbiorów danych. Wi(cid:218)kszo(cid:258)(cid:202) tego typu algorytmów funkcjonuje bez potrzeby r(cid:218)cznego wprowadzania danych wej(cid:258)ciowych i dzia(cid:239)a bez treningowego zbioru danych (zbioru pogrupowanych elementów, na podstawie których algorytm jest w stanie okre(cid:258)li(cid:202) zasady klasyfikacji). W zwi(cid:200)zku z tym algorytmy nienadzorowane to efektywne narz(cid:218)dzia dostarczaj(cid:200)ce informacji o strukturze i zawarto(cid:258)ci nowych lub nieznanych zbiorów danych. Pozwalaj(cid:200) one analitykowi na szybkie rozpoznanie przetwarzanego zbioru. Grupowanie — wprowadzenie Grupowanie jest prawdopodobnie archetypow(cid:200) technik(cid:200) uczenia nienadzorowanego. S(cid:200) ku temu liczne przes(cid:239)anki. 24 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Nienadzorowane uczenie maszynowe Po(cid:258)wi(cid:218)cono wiele czasu na optymalizacj(cid:218) algorytmów grupowania — implementacje tych algo- rytmów s(cid:200) dost(cid:218)pne w wi(cid:218)kszo(cid:258)ci j(cid:218)zyków (w tym w Pythonie), z których korzystaj(cid:200) analitycy. Algorytmy grupowania s(cid:200) zwykle bardzo szybkie — ich implementacje s(cid:200) wydajne i pozwalaj(cid:200) na zrównoleglenie oblicze(cid:241). Umo(cid:285)liwia to do(cid:258)(cid:202) proste przeprowadzanie wielu operacji grupowa- nia nawet na du(cid:285)ych zbiorach danych. Skalowalne implementacje algorytmów grupowania pozwa- laj(cid:200) na zrównoleglenie oblicze(cid:241) umo(cid:285)liwiaj(cid:200)ce przetwarzanie terabajtowych zbiorów danych. Algorytmy grupowania s(cid:200) zwykle (cid:239)atwe do zrozumienia — zasady ich dzia(cid:239)ania da si(cid:218) bez k(cid:239)opotu wyt(cid:239)umaczy(cid:202). Najpopularniejszym algorytmem grupowania jest metoda k-(cid:258)rednich. Algorytm ten tworzy k klastrów, zaczynaj(cid:200)c od losowego rozrzucenia k punktów w przestrzeni zbioru danych. Ka(cid:285)dy z tych punktów jest (cid:258)rodkiem ((cid:258)rednim elementem) grupy. Nast(cid:218)pnie algorytm przeprowadza proces iteracyjny: (cid:81) Ka(cid:285)dy punkt jest przypisywany do najbli(cid:285)szego klastra (odleg(cid:239)o(cid:258)(cid:202) pomi(cid:218)dzy punktem a (cid:258)rodkami klastrów jest obliczana jako suma kwadratów). (cid:81) (cid:165)rodek (centroid) ka(cid:285)dej z grup jest uznawany za now(cid:200) (cid:258)redni(cid:200), co sprawia, (cid:285)e odleg(cid:239)o(cid:258)ci punktów od (cid:258)rodka grupy ul(cid:218)gaj(cid:200) zmianie. Po przeprowadzeniu odpowiedniej liczby iteracji centroidy znajd(cid:200) si(cid:218) w po(cid:239)o(cid:285)eniach minimali- zuj(cid:200)cych metryk(cid:218), która jest zwykle definiowana jako najmniejsza suma odleg(cid:239)o(cid:258)ci pomi(cid:218)dzy (cid:258)rodkiem grupy a przyporz(cid:200)dkowanymi do niej obserwacjami. Po zminimalizowaniu tych odleg(cid:239)o- (cid:258)ci nie s(cid:200) one przypisywane do kolejnych grup podczas kolejnych iteracji. Algorytm przerywa prac(cid:218), poniewa(cid:285) znalaz(cid:239) rozwi(cid:200)zanie. Rozpoczynamy grupowanie Pozna(cid:239)e(cid:258) zasad(cid:218) dzia(cid:239)ania algorytmu grupowania, a wi(cid:218)c mo(cid:285)esz przyst(cid:200)pi(cid:202) do jego uruchomienia. Sprawd(cid:283), co algorytm ten zrobi z Twoim zbiorem danych: rom time import time import numpy as np import matplotlib.pyplot as plt np.random.seed() digits = load_digist() data = scale(digits.data) n_samples, n_features = data.shape n_digits = len(np.unique(digits.target)) labels = digits.target sample_size = 300 25 Poleć książkęKup książkę Zaawansowane uczenie maszynowe z j(cid:266)zykiem Python print( n_digits: d, \t n_samples: d, \t n_features: d (n_digits, n_samples, n_features)) print(73 * _ ) print( 9s inic. czas inercja hom. zup. traf. (cid:180)ARI AMI sylwetka ) def bench_k_means(estimator, name, data): t0 = time() estimator.fit(data) print( 9s .2fs i .3f .3f .3f .3f .3f .3f (name, (time() - t0), estimator.inertia_, metrics.homogeneity_score(labels, estimator.labels_), metrics.completeness_score(labels, estimator.labels_), metrics.v_measure_score(labels, estimator.labels_), metrics.adjusted_rand_score(labels, estimator.labels_), metrics.silhouette_score(data, estimator.labels_, metric= euclidean , sample_size=sample_size))) Jedn(cid:200) z najwa(cid:285)niejszych ró(cid:285)nic pomi(cid:218)dzy tym kodem a przedstawionym wcze(cid:258)niej kodem analizuj(cid:200)cym g(cid:239)ówne sk(cid:239)adowe jest to, (cid:285)e kod przedstawiony w tej sekcji rozpoczyna si(cid:218) od za- stosowania funkcji scale na zbiorze danych digits. Funkcja ta skaluje warto(cid:258)ci zbioru da- nych tak, aby znajdowa(cid:239)y si(cid:218) w zakresie od 0 do 1. Skalowanie danych jest bardzo wa(cid:285)nym procesem pozwalaj(cid:200)cym na unikni(cid:218)cie problemów wynikaj(cid:200)cych z nieproporcjonalnych za- kresów warto(cid:258)ci przyjmowanych przez warto(cid:258)ci opisuj(cid:200)ce ró(cid:285)ne cechy. Konieczno(cid:258)(cid:202) przepro- wadzenia skalowania, a tak(cid:285)e jego rodzaj i zakres wyj(cid:258)ciowy zale(cid:285)(cid:200) od rodzaju i natury anali- zowanych danych. Je(cid:285)eli rozk(cid:239)ad danych wykazuje elementy odstaj(cid:200)ce lub rozci(cid:200)gni(cid:218)cie danych w du(cid:285)ym zakresie, to w(cid:239)a(cid:258)ciwe b(cid:218)dzie wtedy zastosowanie skalowania logarytmicznego. Niezale(cid:285)nie od tego, czy zostanie to zrobione za pomoc(cid:200) wizualizacji i technik analizy eksplo- racyjnej, czy za pomoc(cid:200) statystyk podsumowuj(cid:200)cych, decyzje dotycz(cid:200)ce skalowania s(cid:200) (cid:258)ci(cid:258)le zwi(cid:200)zane z analizowanymi danymi i stosowanymi technikami ich analizy. Dok(cid:239)adniejsze omówienie zagadnie(cid:241) zwi(cid:200)zanych ze skalowaniem znajdziesz w rozdziale 7. „Selekcja cech — cz(cid:218)(cid:258)(cid:202) II”. Na szcz(cid:218)(cid:258)cie pakiet scikit-learn korzysta domy(cid:258)lnie z algorytmu k-means++, który jest lepszy od standardowego algorytmu k-(cid:258)rednich, je(cid:285)eli chodzi o szybko(cid:258)(cid:202) i umiej(cid:218)tno(cid:258)(cid:202) unikania s(cid:239)abego grupowania. Jest to mo(cid:285)liwe, poniewa(cid:285) algorytm ten korzysta z procedury inicjowania, która pozwala na znalezienie centroidów grup b(cid:218)d(cid:200)cych przybli(cid:285)eniami minimalnych wariancji klas. Zapewne zauwa(cid:285)y(cid:239)e(cid:258), (cid:285)e w zaprezentowanym kodzie obliczane s(cid:200) miary wydajno(cid:258)ci pozwalaj(cid:200)ce oceni(cid:202) skuteczno(cid:258)(cid:202) podzia(cid:239)u dokonanego za pomoc(cid:200) metody k-(cid:258)rednich. Pomiar wydajno(cid:258)ci algorytmu grupuj(cid:200)cego za pomoc(cid:200) jednej warto(cid:258)ci wyra(cid:285)onej procentowo nie jest zbyt praktyczny pomimo tego, (cid:285)e takie rozwi(cid:200)zanie stosowane jest w przypadku innych algorytmów. Z definicji sukces algorytmu grupuj(cid:200)cego polega na osi(cid:200)gni(cid:218)ciu daj(cid:200)cego si(cid:218) zinterpretowa(cid:202) logicznego 26 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Nienadzorowane uczenie maszynowe podzia(cid:239)u na grupy, czyli sukces ten jest kompromisem pomi(cid:218)dzy czynnikami takimi jak separacja klas, podobie(cid:241)stwo obserwacji zakwalifikowanych do tych samych klas i ró(cid:285)nice pomi(cid:218)dzy elementami przyporz(cid:200)dkowanymi do ró(cid:285)nych klas. Homogeniczno(cid:258)(cid:202) (jednorodno(cid:258)(cid:202)) jest prost(cid:200) miar(cid:200) przyjmuj(cid:200)c(cid:200) warto(cid:258)ci z zakresu od 0 do 1, która okre(cid:258)la przyporz(cid:200)dkowanie do grupy tylko elementów danej klasy. Wynik równy 1 (cid:258)wiadczy o tym, (cid:285)e wszystkie grupy zawieraj(cid:200) obserwacje z pojedynczych klas. Uzupe(cid:239)nieniem tego para- metru jest zupe(cid:239)no(cid:258)(cid:202), która przyjmuje warto(cid:258)ci z tego samego zakresu co homogeniczno(cid:258)(cid:202), ale okre(cid:258)la stopie(cid:241) przypisania elementów danej klasy do tej samej grupy. W zwi(cid:200)zku z tym zupe(cid:239)no(cid:258)(cid:202) równa 1 i homogeniczno(cid:258)(cid:202) równa 1 wskazuj(cid:200) na idealne pogrupowanie. Trafno(cid:258)(cid:202) (miara V) jest (cid:258)redni(cid:200) harmoniczn(cid:200) homogeniczno(cid:258)ci i zupe(cid:239)no(cid:258)ci, czyli czym(cid:258) analo- gicznym do miary F klasyfikacji binarnej. Trafno(cid:258)(cid:202) przyjmuje warto(cid:258)(cid:202) z zakresu od 0 do 1, która pozwala na monitorowanie homogeniczno(cid:258)ci i zupe(cid:239)no(cid:258)ci. Skorygowany indeks Randa (indeks ARI) jest miar(cid:200) podobie(cid:241)stwa bior(cid:200)c(cid:200) pod uwag(cid:218) zgodno(cid:258)(cid:202) zestawu przypisa(cid:241). W przypadku grupowania indeks ten mierzy zgodno(cid:258)(cid:202) prawdziwych przypisa- nych wcze(cid:258)niej etykiet obserwacji z etykietami przewidzianymi przez algorytm grupuj(cid:200)cy. Indeks Randa mierzy podobie(cid:241)stwo etykiet w skali od 0 do 1, gdzie jedynka oznacza idealne przewidy- wanie etykiet. G(cid:239)ównym problemem tych, a tak(cid:285)e innych, podobnych do nich miar wydajno(cid:258)ci, takich jak kryterium informacyjne Akaikego, jest to, (cid:285)e wymagaj(cid:200) one rozumienia danych — cz(cid:218)(cid:258)(cid:202) obserwa- cji lub wszystkie obserwacje musz(cid:200) by(cid:202) oznaczone za pomoc(cid:200) etykiet. Je(cid:285)eli takie etykiety nie ist- niej(cid:200) i nie mo(cid:285)na ich wygenerowa(cid:202), to miary te si(cid:218) nie sprawdz(cid:200). To w praktyce bardzo du(cid:285)a wada, poniewa(cid:285) wi(cid:218)kszo(cid:258)(cid:202) zbiorów danych nie posiada etykiet, a ich tworzenie mo(cid:285)e by(cid:202) czasoch(cid:239)onne. Jednym ze sposobów na okre(cid:258)lenie wydajno(cid:258)ci procesu grupowania za pomoc(cid:200) metody k-(cid:258)rednich przy danych bez etykiet jest skorzystanie ze wspó(cid:239)czynnika sylwetki. Miara ta okre(cid:258)la trafno(cid:258)(cid:202) zdefiniowania grup wewn(cid:200)trz modelu. Wspó(cid:239)czynnik sylwetki danego zbioru danych jest (cid:258)redni(cid:200) wspó(cid:239)czynnika ka(cid:285)dej próbki. Oblicza si(cid:218) go za pomoc(cid:200) nast(cid:218)puj(cid:200)cego wzoru: s (cid:32) (cid:16) ab max( ba ), We wzorze tym: (cid:81) a jest (cid:258)redni(cid:200) odleg(cid:239)o(cid:258)ci(cid:200) pomi(cid:218)dzy próbk(cid:200) a wszystkimi pozosta(cid:239)ymi punktami tego samego klastra, (cid:81) b jest (cid:258)redni(cid:200) odleg(cid:239)o(cid:258)ci(cid:200) pomi(cid:218)dzy próbk(cid:200) a wszystkimi innymi punktami kolejnego najbli(cid:285)szego klastra. Wspó(cid:239)czynnik ten przyjmuje warto(cid:258)ci od –1 do 1, przy czym –1 oznacza nieprawid(cid:239)owe grupowa- nie, a 1 oznacza bardzo zwarte grupowanie. Warto(cid:258)ci oscyluj(cid:200)ce w okolicy 0 oznaczaj(cid:200) nak(cid:239)adanie si(cid:218) klastrów. Wspó(cid:239)czynnik ten mo(cid:285)e by(cid:202) u(cid:285)yty do okre(cid:258)lenia poprawno(cid:258)ci podzia(cid:239)u, który zdefi- niowali(cid:258)my wcze(cid:258)niej. 27 Poleć książkęKup książkę Zaawansowane uczenie maszynowe z j(cid:266)zykiem Python W przypadku zbioru danych digits mo(cid:285)emy okre(cid:258)li(cid:202) wszystkie opisane parametry wydajno(cid:258)ci. W tym celu nale(cid:285)y uzupe(cid:239)ni(cid:202) zaprezentowany wcze(cid:258)niej przyk(cid:239)ad — zainicjowa(cid:202) funkcj(cid:218) bench_k_means na zbiorze danych digits: bench_k_means(KMeans(init= k-means++ , n_clusters=n_digits, n_ init=10), name= k-means++ , data=data) print(79 * _ ) Teraz kod wygeneruje nast(cid:218)puj(cid:200)ce dane wyj(cid:258)ciowe (kod korzysta z losowanego ziarna, a wi(cid:218)c uzy- skane przez Ciebie warto(cid:258)ci mog(cid:200) odbiega(cid:202) od poni(cid:285)szych): n_digits: 10, n_samples: 1797, n_features: 64 inic. k-means++ inercja hom. 69517 0.596 czas 0.25s zup. 0.643 traf. 0.619 ARI 0.465 AMI 0.592 sylwetka 0.123 Przyjrzyjmy si(cid:218) otrzymanym warto(cid:258)ciom. Warto(cid:258)(cid:202) wspó(cid:239)czynnika sylwetki (0,123) jest do(cid:258)(cid:202) niska, ale to chyba nic dziwnego, gdy we(cid:283)mie si(cid:218) pod uwag(cid:218) to, (cid:285)e zbiór danych zawieraj(cid:200)cy zapisane r(cid:218)cznie cyfry charakteryzuje si(cid:218) zaszu- mieniem i zachodzeniem na siebie elementów. Inne uzyskane warto(cid:258)ci równie(cid:285) nie s(cid:200) zachwyca- j(cid:200)ce. Trafno(cid:258)(cid:202) (0,619) wydaje si(cid:218) osi(cid:200)ga(cid:202) do(cid:258)(cid:202) rozs(cid:200)dn(cid:200) warto(cid:258)(cid:202), ale parametr homogeniczno(cid:258)ci jest do(cid:258)(cid:202) s(cid:239)aby, co sugeruje, (cid:285)e centroidy grup nie zosta(cid:239)y dobrane idealnie. Ponadto wspó(cid:239)czynnik ARI równy 0,465 tak(cid:285)e nie jest dobrym wynikiem. Umie(cid:258)(cid:202)my t(cid:218) teori(cid:218) w praktycznym kontek(cid:258)cie. Najgorszy mo(cid:285)liwy przypadek, czyli grupowanie losowe, da w najlepszym razie wynik o dok(cid:239)adno(cid:258)ci 10 . W takiej sytuacji wszystkie wspó(cid:239)- czynniki by(cid:239)yby odpowiednio niskie. Co prawda uzyskane przez nas warto(cid:258)ci wspó(cid:239)czynników s(cid:200) o wiele lepsze, ale wci(cid:200)(cid:285) dalekie od najlepszych rozwi(cid:200)za(cid:241). Podczas lektury rozdzia(cid:239)u 4., „Konwolucyjne sieci neuronowe”, przekonasz si(cid:218), (cid:285)e konwolucyjne sieci neuronowe uzyskuj(cid:200) bardzo niskie warto(cid:258)ci b(cid:239)(cid:218)dów klasyfikacji zbioru danych cyfr pisanych r(cid:218)cznie. Tak wysokiego poziomu dok(cid:239)adno(cid:258)ci najprawdopodobniej nie osi(cid:200)gniemy za pomoc(cid:200) tradycyjnego grupowania metod(cid:200) k-(cid:258)rednich. Tak czy inaczej, warto przyj(cid:200)(cid:202) za(cid:239)o(cid:285)enie, (cid:285)e mo(cid:285)na osi(cid:200)gn(cid:200)(cid:202) lepszy wynik. Podejmijmy jeszcze jedn(cid:200) prób(cid:218) analizy. Tym razem dodajmy dodatkowy etap przetwarzania da- nych — zastosujmy opisan(cid:200) wcze(cid:258)niej metod(cid:218) analizy g(cid:239)ównych sk(cid:239)adowych w celu redukcji liczby wymiarów wej(cid:258)ciowego zbioru danych. Kod wykonuj(cid:200)cy t(cid:218) operacj(cid:218) jest bardzo prosty: pca = PCA(n_components=n_digits).fit(data) bench_k_means(KMeans(init=pca.components_, n_clusters=10), name= PCA , data=data) Zaprezentowany kod przetwarza zbiór danych digits przy u(cid:285)yciu metody PCA. Generuje on na wyj(cid:258)ciu tyle g(cid:239)ównych sk(cid:239)adowych, ile klas ma dany zbiór (w tym przypadku klasami s(cid:200) cyfry). 28 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Nienadzorowane uczenie maszynowe Przed wykonaniem kolejnych operacji warto przeanalizowa(cid:202) dane wyj(cid:258)ciowe metody PCA, ponie- wa(cid:285) ma(cid:239)a ilo(cid:258)(cid:202) g(cid:239)ównych sk(cid:239)adowych mo(cid:285)e oznacza(cid:202) wyst(cid:218)powanie wspó(cid:239)liniowo(cid:258)ci cech lub innych problemów wymagaj(cid:200)cych przyjrzenia si(cid:218) danym. Tym razem wynik grupowania jest wyra(cid:283)nie lepszy: n_digits: 10, n_samples: 1797, n_features: 64 zup. inic. PCA 0.715 inercja 71820 czas 0.2s hom. 0.673 traf. 0.693 ARI 0.567 sylwetka 0.123 Trafno(cid:258)(cid:202) i wspó(cid:239)czynnik ARI wzros(cid:239)y o oko(cid:239)o 0,08 punkta — trafno(cid:258)(cid:202) osi(cid:200)gn(cid:218)(cid:239)a do(cid:258)(cid:202) sensown(cid:200) warto(cid:258)(cid:202) (0,693). Wspó(cid:239)czynnik sylwetki podzia(cid:239)u nie uleg(cid:239) znacznej zmianie. Je(cid:258)li we(cid:283)mie si(cid:218) pod uwag(cid:218) z(cid:239)o(cid:285)ono(cid:258)(cid:202) analizowanego zbioru danych, nak(cid:239)adanie si(cid:218) na siebie jego klas i to, (cid:285)e wyko- nali(cid:258)my tylko operacj(cid:218) prostego dodania kodu, osi(cid:200)gni(cid:218)te wyniki mo(cid:285)na uzna(cid:202) za dobre. Je(cid:285)eli przyjrzysz si(cid:218) zbiorowi danych digits przedstawionemu na wykresie z naniesionymi gru- pami, to zauwa(cid:285)ysz uformowanie pewnych znacz(cid:200)cych klastrów, ale przekonasz si(cid:218) równie(cid:285) o tym, (cid:285)e wykrywanie znaków na podstawie wektorów cech mo(cid:285)e okaza(cid:202) si(cid:218) trudnym zadaniem: Dostrajanie konfiguracji klastrów W poprzedniej sekcji dowiedzia(cid:239)e(cid:258) si(cid:218), jak korzysta(cid:202) z metody k-(cid:258)rednich, przeanalizowa(cid:239)e(cid:258) jej kod, zobaczy(cid:239)e(cid:258) graficzn(cid:200) interpretacj(cid:218) efektów pracy tego algorytmu i pozna(cid:239)e(cid:258) wspó(cid:239)czynniki pozwalaj(cid:200)ce na ocen(cid:218) uzyskanych wyników. W tej sekcji opisz(cid:218) rzeczy, na które trzeba zwróci(cid:202) dodatkow(cid:200) uwag(cid:218) podczas stosowania metody k-(cid:258)rednich do rozwi(cid:200)zywania prawdziwych problemów. 29 Poleć książkęKup książkę Zaawansowane uczenie maszynowe z j(cid:266)zykiem Python Kolejnym wa(cid:285)nym zagadnieniem jest wybór w(cid:239)a(cid:258)ciwej warto(cid:258)ci parametru k. Rozpocz(cid:218)cie grupowania metod(cid:200) k-(cid:258)rednich przy wybraniu niew(cid:239)a(cid:258)ciwej warto(cid:258)ci k nie b(cid:218)dzie niczym szko- dliwym, ale na pocz(cid:200)tku mo(cid:285)esz nie wiedzie(cid:202), w jakim zakresie warto(cid:258)ci parametru k nale(cid:285)y eksperymentowa(cid:202) (na ile grup trzeba podzieli(cid:202) zbiór danych). Zaprezentowany wcze(cid:258)niej kod mo(cid:285)na zmodyfikowa(cid:202) tak, aby dokonywa(cid:239) kilku operacji grupowa- nia dla ró(cid:285)nych warto(cid:258)ci parametru k, a nast(cid:218)pnie porówna(cid:202) parametry podzia(cid:239)u, ale niestety nie powiedz(cid:200) one, który z podzia(cid:239)ów dobrze odzwierciedla struktur(cid:218) danych. Wraz ze wzrostem warto(cid:258)ci parametru k mo(cid:285)e doj(cid:258)(cid:202) do spadku wspó(cid:239)czynnika sylwetki podzia(cid:239)u i zmniejszenia ilo(cid:258)ci niewyja(cid:258)nionych wariancji, bez utworzenia grup poprawiaj(cid:200)cych rozumienie danych. Do ekstre- malnego przypadku dosz(cid:239)oby, gdyby parametr k by(cid:239) równy o, gdzie o by(cid:239)oby liczb(cid:200) obserwacji w ka(cid:285)dej próbce — ka(cid:285)dy punkt znajdowa(cid:239)by si(cid:218) wtedy we w(cid:239)asnym klastrze, warto(cid:258)(cid:202) wspó(cid:239)czyn- nika sylwetki podzia(cid:239)u by(cid:239)aby niska, ale uzyskany wynik operacji grupowania nie pozwala(cid:239)by na poznanie istoty danych. W praktyce istnieje wiele mniej ekstremalnych przypadków nadmier- nego dopasowania, do którego mo(cid:285)e doj(cid:258)(cid:202) w wyniku przyj(cid:218)cia zbyt du(cid:285)ej warto(cid:258)ci parametru k. Aby unikn(cid:200)(cid:202) tego typu problemów, warto skorzysta(cid:202) z technik pomocniczych pozwalaj(cid:200)cych na sensowne dobranie warto(cid:258)ci parametru k. W przypadku naszego zbioru danych mo(cid:285)emy skorzy- sta(cid:202) z metody (cid:239)okcia — bardzo prostej techniki polegaj(cid:200)cej na przedstawieniu na wykresie pro- centowej ilo(cid:258)ci wyja(cid:258)nionych wariancji przy ró(cid:285)nych warto(cid:258)ciach parametru k. Wykres ten wygl(cid:200)- da zwykle jak ugi(cid:218)te rami(cid:218). Poni(cid:285)szy kod generuje taki wykres dla zbioru zredukowanego metod(cid:200) analizy g(cid:239)ównych sk(cid:239)adowych: import numpy as np from sklearn.cluster import KMeans from sklearn.datasets import load_digits from scipy.spatial.distance import cdist import matplotlib.pyplot as plt from sklearn.decomposition import PCA from sklearn.preprocessing import scale digits = load_digits() data = scale(digits.data) n_samples, n_features = data.shape n_digits = len(np.unique(digits.target)) labels = digits.target K = range(1,20) explainedvariance= [] for k in K: reduced_data = PCA(n_components=2).fit_transform(data) kmeans = KMeans(init = k-means++ , n_clusters = k, n_init = k) kmeans.fit(reduced_data) explainedvariance.append(sum(np.min(cdist(reduced_data, kmeans.cluster_centers_, euclidean ), axis = 1))/data.shape[0]) plt.plot(K, meandistortions, bx- ) 30 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Nienadzorowane uczenie maszynowe plt.show() Powy(cid:285)sza aplikacja metody (cid:239)okcia korzysta z danych zredukowanych za pomoc(cid:200) metody analizy g(cid:239)ównych sk(cid:239)adowych (poprzedni fragment kodu) i wykonuje test wyja(cid:258)nionej wariancji (a kon- kretnie test wariancji wewn(cid:200)trzgrupowej). Zaprezentowany kod generuje miar(cid:218) nieokre(cid:258)lonej wariancji dla ka(cid:285)dej warto(cid:258)ci k znajduj(cid:200)cej si(cid:218) w podanym zakresie. Pracujemy nad zbiorem digits (wiemy, (cid:285)e ma on 10), a wi(cid:218)c sprawdzamy zakres (range) od 1 do 20: Korzystanie z metody (cid:239)okcia pozwala na wybranie warto(cid:258)ci parametru k, która maksymalizuje wyja(cid:258)nion(cid:200) wariancj(cid:218) przy minimalizacji parametru K, to jest warto(cid:258)ci parametru k znajduj(cid:200)cej si(cid:218) na wygi(cid:218)ciu „(cid:239)okcia”. Minimalny wzrost wyja(cid:258)nionej wariancji przy wy(cid:285)szych warto(cid:258)ciach parametru k wi(cid:200)(cid:285)e si(cid:218) ze wzrostem ryzyka nadmiernego dopasowania. Wykresy (cid:239)okciowe mog(cid:200) odbiega(cid:202) mniej lub bardziej od kszta(cid:239)tu (cid:239)okcia, a punkt wygi(cid:218)cia wykresu mo(cid:285)e by(cid:202) czasami trudny do zidentyfikowania. Zaprezentowany przyk(cid:239)ad pokazuje bardziej stop- niow(cid:200) zmian(cid:218) warto(cid:258)ci od tej, któr(cid:200) mo(cid:285)na zaobserwowa(cid:202) w przypadku innych zbiorów danych. Wiemy, (cid:285)e zbiór sk(cid:239)ada si(cid:218) z dziesi(cid:218)ciu klas, ale warto zauwa(cid:285)y(cid:202), (cid:285)e z wykresu wynika, (cid:285)e punkt wygi(cid:218)cia (cid:239)okcia znajduje si(cid:218) w okolicy pi(cid:218)ciu klas (dalszy wzrost parametru k wi(cid:200)(cid:285)e si(cid:218) z ni(cid:285)sz(cid:200) popraw(cid:200) uzyskanych wyników). Bierze si(cid:218) to w du(cid:285)ej mierze z nak(cid:239)adania si(cid:218) klas. Zjawisko to mo(cid:285)na by(cid:239)o zaobserwowa(cid:202) na poprzednim wykresie. Zbiór sk(cid:239)ada si(cid:218) z dziesi(cid:218)ciu klas, ale identyfikacja wi(cid:218)cej ni(cid:285) pi(cid:218)ciu jest wyra(cid:283)nie trudna. Wiedz(cid:200)c o tym, warto wzi(cid:200)(cid:202) pod uwag(cid:218) to, (cid:285)e metoda (cid:239)okcia nie jest obiektywn(cid:200) zasad(cid:200). Nale(cid:285)y j(cid:200) traktowa(cid:202) w sposób pogl(cid:200)dowy. Zastosowanie metody analizy g(cid:239)ównych sk(cid:239)adowych jako proce- su przygotowuj(cid:200)cego dane do sprawniejszego grupowania równie(cid:285) zwykle wyg(cid:239)adza wykres — doprowadza do powstania bardziej smuk(cid:239)ej krzywej. Poza skorzystaniem z metody (cid:239)okcia czasami warto przyjrze(cid:202) si(cid:218) samym grupom, tak jak robili(cid:258)my to wcze(cid:258)niej podczas korzystania z metody analizy g(cid:239)ównych sk(cid:239)adowych w celu zredukowania wielowymiarowo(cid:258)ci zbioru danych. Poprzez tworzenie wykresów przedstawiaj(cid:200)cych zbiór danych i projektu przypisania elementów zbioru danych do poszczególnych grup czasami bardzo (cid:239)atwo mo(cid:285)na wykry(cid:202) to, (cid:285)e implementacja metody k-(cid:258)rednich dopasowa(cid:239)a si(cid:218) do lokalnego minimum lub uzyska(cid:239)a nadmierne dopasowanie. Poni(cid:285)szy wykres przedstawia ekstremalne nadmierne 31 Poleć książkęKup książkę Zaawansowane uczenie maszynowe z j(cid:266)zykiem Python dopasowanie uzyskane przez zaprezentowany wcze(cid:258)niej algorytm grupowania metod(cid:200) k-(cid:258)rednich przetwarzaj(cid:200)cy zbiór danych digits. Algorytm ten mia(cid:239) podzieli(cid:202) zbiór na 150 grup. Niektóre grupy zawieraj(cid:200) tylko jedn(cid:200) obserwacj(cid:218) — taki podzia(cid:239) nie pozwala równie(cid:285) na logiczny opis pozosta(cid:239)ych próbek: Bardzo szybko mo(cid:285)na wygenerowa(cid:202) i zinterpretowa(cid:202) wykres (cid:239)okcia lub przypisania do grup, ale warto pami(cid:218)ta(cid:202) o tym, (cid:285)e s(cid:200) to techniki heurystyczne. Je(cid:285)eli zbiór danych zawiera okre(cid:258)lon(cid:200) liczb(cid:218) klas, nie mo(cid:285)emy by(cid:202) pewni, (cid:285)e metoda heurystyczna doprowadzi do daj(cid:200)cych si(cid:218) uogól- ni(cid:202) wyników. Kolejn(cid:200) wad(cid:200) jest to, (cid:285)e analiza wykresu jest czym(cid:258), co trzeba zrobi(cid:202) r(cid:218)cznie, a to sprawia, (cid:285)e nie nadaje si(cid:218) do zastosowania w (cid:258)rodowiskach produkcyjnych i nie mo(cid:285)na jej zautomatyzowa(cid:202). Lepiej jest korzysta(cid:202) z rozwi(cid:200)zania opartego na kodzie, które mo(cid:285)na zautomatyzowa(cid:202). Przyk(cid:239)adem takiego rozwi(cid:200)zania jest v-krotna walidacja krzy(cid:285)owa. Walidacja krzy(cid:285)owa jest prosta do przeprowadzenia — wystarczy podzieli(cid:202) zbiór danych na v cz(cid:218)- (cid:258)ci. Jedna z cz(cid:218)(cid:258)ci jest odk(cid:239)adana na bok — ma w przysz(cid:239)o(cid:258)ci pe(cid:239)ni(cid:202) funkcj(cid:218) testowego zbioru danych. Model jest trenowany na zbiorze treningowym sk(cid:239)adaj(cid:200)cym si(cid:218) ze wszystkich cz(cid:218)(cid:258)ci zbioru danych poza zbiorem testowym. Spróbujmy to zrobi(cid:202) ze zbiorem danych digits: import numpy as np from sklearn import cross_validation from sklearn.cluster import KMeans from sklearn.datasets import load_digits from sklearn.preprocessing import scale digits = load_digits() 32 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Nienadzorowane uczenie maszynowe data = scale(digits.data) n_samples, n_features = data.shape n_digits = len(np.unique(digits.target)) labels = digits.target kmeans = KMeans(init= k-means++ , n_clusters=n_digits, n_init=n_digits) cv = cross_validation.ShuffleSplit(n_samples, n_iter = 10, test_size = 0.4, random_state = 0) scores = cross_validation.cross_val_score(kmeans, data, (cid:180)labels, cv = cv, scoring = adjusted_rand_score ) print(scores) print(sum(scores)/cv.n_iter) Powy(cid:285)szy kod wykonuje znane Ci operacje (cid:239)adowania danych, a tak(cid:285)e przygotowania i inicjowania algorytmu grupowania metod(cid:200) k-(cid:258)rednich. Nast(cid:218)pnie definiuje zmienn(cid:200) cv zawieraj(cid:200)c(cid:200) parametry walidacji krzy(cid:285)owej, czyli mi(cid:218)dzy innymi liczb(cid:218) iteracji (n_iter) i ilo(cid:258)(cid:202) danych, które powinny by(cid:202) u(cid:285)yte podczas ka(cid:285)dej iteracji. W tym przypadku 60 danych pe(cid:239)ni funkcj(cid:218) zbioru trenin- gowego, a 40 — zbioru testowego. Nast(cid:218)pnie stosowany jest model k-(cid:258)rednich, funkcja oceniaj(cid:200)ca krzy(cid:285)owo wynik grupowania korzysta z parametrów cv, po czym wy(cid:258)wietla wyniki przypisane zmiennej scores. Przyjrzyjmy si(cid:218) tym wynikom: [ 0.39276606 0.49571292 0.43933243 0.53573558 0.42459285 0.55686854 0.4573401 0.49876358 0.50281585 0.4689295 ] 0.4772857426 W nawiasie kwadratowym umieszczono skorygowane indeksy Randa walidacji krzy(cid:285)owej gru- powania przeprowadzonego za pomoc(cid:200) algorytmu k-means++ dla 10 kolejnych krotno(cid:258)ci walidacji. Warto(cid:258)ci wahaj(cid:200) si(cid:218) od 0,4 do 0,55. Wcze(cid:258)niejsza warto(cid:258)(cid:202) skorygowanego indeksu Randa dla algorytmu k-means++ bez analizy g(cid:239)ównych sk(cid:239)adowych mie(cid:258)ci(cid:239)a si(cid:218) w tym przedziale (wynosi(cid:239)a 0,465). Utworzyli(cid:258)my kod, który mo(cid:285)emy do(cid:239)(cid:200)czy(cid:202) do kodu przeprowadzaj(cid:200)cego analiz(cid:218) w celu zautomatyzowania sprawdzania jako(cid:258)ci grupowania. Zgodnie z tym, co pisa(cid:239)em wcze(cid:258)niej, wybór miary sukcesu grupowania zale(cid:285)y od posiadanych przez Ciebie informacji. W wi(cid:218)kszo(cid:258)ci przypadków w pracy z prawdziwymi danymi nie b(cid:218)dziesz dysponowa(cid:239) etykietami definiuj(cid:200)cymi przynale(cid:285)no(cid:258)(cid:202) obserwacji do grup i b(cid:218)dziesz musia(cid:239) korzy- sta(cid:202) z opisanych wcze(cid:258)niej parametrów takich jak wspó(cid:239)czynnik sylwetki podzia(cid:239)u. Czasami zastosowanie zarówno walidacji krzy(cid:285)owej, jak i wizualizacji nie musi da(cid:202) sensownych rezultatów. Dotyczy to szczególnie nieznanych zbiorów danych, w przypadku których podzia(cid:239), który chcesz zweryfikowa(cid:202), wypada gorzej od innych podzia(cid:239)ów (innych warto(cid:258)ci parametru k) lub szumu. Podobnie jak w przypadku pozosta(cid:239)ych algorytmów opisanych w tej ksi(cid:200)(cid:285)ce, zachodzi koniecz- no(cid:258)(cid:202) zrozumienia zbioru danych, z którym pracujesz. Bez odpowiedniej wiedzy o zbiorze danych mo(cid:285)liwe jest przeprowadzenie technicznie poprawnej i rygorystycznej analizy prowadz(cid:200)cej do nieprawid(cid:239)owych wniosków. W rozdziale 6., „Rozpoznawanie j(cid:218)zyka naturalnego i selekcja cech”, 33 Poleć książkęKup książkę Zaawansowane uczenie maszynowe z j(cid:266)zykiem Python opisz(cid:218) w sposób bardziej szczegó(cid:239)owy zasady i techniki badania i przygotowywania zbiorów danych o nieznanej naturze. Sieci Kohonena Sieci Kohonena (ang. Self-Organizing Map, SOM) to technika s(cid:239)u(cid:285)(cid:200)ca do generowania topolo- gicznych reprezentacji danych w przestrzeni charakteryzuj(cid:200)cej si(cid:218) zredukowan(cid:200) liczb(cid:200) wymiarów. Jest to jedna z wielu technik s(cid:239)u(cid:285)(cid:200)cych do redukcji liczby wymiarów. Inn(cid:200), bardziej znan(cid:200) tech- nik(cid:200) tego typu jest analiza g(cid:239)ównych sk(cid:239)adowych. Sieci Kohonena oferuj(cid:200) jednak(cid:285)e wi(cid:218)ksze mo(cid:285)- liwo(cid:258)ci redukcji wielowymiarowo(cid:258)ci, a tak(cid:285)e wizualnej reprezentacji danych. Sieci Kohonena — wprowadzenie Algorytm sieci Kohonena polega na przeprowadzaniu iteracji wielu prostych operacji. W przypadku przetwarzania niewielkich danych dzia(cid:239)a podobnie do grupowania metod(cid:200) k-(cid:258)rednich (za chwil(cid:218) przedstawi(cid:218) to w praktyce). Dla danych o du(cid:285)ej skali sieci Kohonena s(cid:200) doskona(cid:239)ym narz(cid:218)dziem do poznawania ich topologii. Sie(cid:202) Kohonena (ma zwykle kszta(cid:239)t kwadratowy lub sze(cid:258)cienny) tworz(cid:200) w(cid:218)z(cid:239)y zawieraj(cid:200)ce wektor wagi charakteryzuj(cid:200)cy si(cid:218) tak(cid:200) sam(cid:200) liczb(cid:200) w(cid:218)z(cid:239)ów jak wej(cid:258)ciowy zbiór danych. W(cid:218)z(cid:239)y mog(cid:200) by(cid:202) inicjowane w sposób losowy, ale w celu przyspieszenia procesu trenowania stosuje si(cid:218) inicjo- wanie przybli(cid:285)one do rozk(cid:239)adu zbioru danych. Algorytm dokonuje kolejnych iteracji, a funkcj(cid:218) danych wej(cid:258)ciowych pe(cid:239)ni(cid:200) kolejne obserwacje. Podczas iteracji wykonywane s(cid:200) nast(cid:218)puj(cid:200)ce operacje: (cid:81) Identyfikowany jest najlepszy w(cid:218)ze(cid:239) w bie(cid:285)(cid:200)cej konfiguracji — jednostka najlepszego dopasowania (ang. Best Matching Unit, BMU). Jednostka ta jest okre(cid:258)lana w wyniku pomiaru odleg(cid:239)o(cid:258)ci euklidesowej w przestrzeni danych wszystkich wektorów wag. (cid:81) Jednostka najlepszego dopasowania jest przesuwana w kierunku wektora wej(cid:258)ciowego. (cid:81) Korygowane s(cid:200) równie(cid:285) s(cid:200)siednie w(cid:218)z(cid:239)y. Zwykle korekta ich po(cid:239)o(cid:285)enia jest mniejsza — zale(cid:285)y ona od funkcji otoczenia. Stosuje si(cid:218) ró(cid:285)ne funkcje otoczenia. W tym rozdziale b(cid:218)dziemy korzysta(cid:202) z funkcji Gaussa. Proces ten jest wykonywany przez tyle iteracji, ile trzeba do zbiegni(cid:218)cia si(cid:218) sieci (osi(cid:200)gni(cid:218)cia punktu, w którym nowe dane wej(cid:258)ciowe nie tworz(cid:200) mo(cid:285)liwo(cid:258)ci minimalizacji strat). O ile to mo(cid:285)liwe, w procesie tym stosuje si(cid:218) próbkowanie. W(cid:218)ze(cid:239) sieci Kohonena ró(cid:285)ni si(cid:218) nieco od w(cid:218)z(cid:239)a sieci neuronowej. Zwykle posiada on wektor wag d(cid:239)ugo(cid:258)ci równej liczbie wymiarów wej(cid:258)ciowego zbioru danych, co umo(cid:285)liwia zachowanie 34 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Nienadzorowane uczenie maszynowe topologii wej(cid:258)ciowego zbioru danych, a tak(cid:285)e jej wizualizacj(cid:218) za pomoc(cid:200) mapowania na p(cid:239)asz- czyzn(cid:218) o mniejszej liczbie wymiarów. Kod implementacji klasy SOM (sieci Kohonena) znajdziesz w archiwum pobranym ze strony wydaw- nictwa Helion, w pliku som.py. Na razie spróbujmy zastosowa(cid:202) algorytm sieci Kohonena w zna- nym kontek(cid:258)cie. Korzystanie z sieci Kohonena Algorytm sieci Kohonena ma charakter iteracyjny i jest oparty na porównywaniu wektorów za pomoc(cid:200) odleg(cid:239)o(cid:258)ci euklidesowej. Odwzorowanie to ma zwykle form(cid:218) do(cid:258)(cid:202) czytelnej dwuwymiarowej siatki. Sieci Kohonena do(cid:258)(cid:202) wyra(cid:283)nie odwzoruj(cid:200) popularny treningowy zbiór danych Iris: Na diagramie oddzielono od siebie poszczególne klasy i przedstawiono je w sposób przestrzenny. Kolor t(cid:239)a odzwierciedla zag(cid:218)szczenie grupowania. Niebieska i zielona klasa minimalnie si(cid:218) nak(cid:239)a- daj(cid:200). W przypadku zbioru danych Iris sieci Kohonena osi(cid:200)gn(cid:218)(cid:239)y zbie(cid:285)no(cid:258)(cid:202) (rozwi(cid:200)zanie) po 100 iteracjach. Poprawa po przeprowadzeniu 1000 iteracji by(cid:239)a niewielka. W przypadku bardziej z(cid:239)o(cid:285)onych zbiorów danych zawieraj(cid:200)cych klasy, które s(cid:200) trudniejsze do odseparowania, algorytm sieci Kohonena mo(cid:285)e wymaga(cid:202) wykonania dziesi(cid:200)tek tysi(cid:218)cy iteracji. To dziwne, ale pakiety Pythona takie jak scikit-learn nie zawieraj(cid:200) implementacji algorytmu tworz(cid:200)cego sieci Kohonena. W zwi(cid:200)zku z tym musimy korzysta(cid:202) z w(cid:239)asnej implementacji. 35 Poleć książkęKup książkę Zaawansowane uczenie maszynowe z j(cid:266)zykiem Python Kod algorytmu tworz(cid:200)cego sieci Kohonena, z którego korzystam, mo(cid:285)esz znale(cid:283)(cid:202) w do(cid:239)(cid:200)czonych do ksi(cid:200)(cid:285)ki skryptach. Przyjrzyjmy si(cid:218) skryptowi korzystaj(cid:200)cemu z tego algorytmu: import numpy as np from sklearn.datasets import load_digits from som import Som from pylab import plot,axis,show,pcolor,colorbar,bone digits = load_digits() data = digits.data labels = digits.target Jak na razie za(cid:239)adowali(cid:258)my zbiór danych digits i zidentyfikowali(cid:258)my etykiety (labels), które b(cid:218)dziemy traktowa(cid:202) jako oddzielny zbiór danych. Operacja ta pozwoli nam na obserwacj(cid:218) od- dzielania od siebie klas przez algorytm sieci Kohonena i przypisywania ich do obiektu mapy (map): som = Som(16,16,64,sigma=1.0,learning_rate=0.5) som.random_weights_init(data) print( Inicjowanie sieci Kohonena. ) som.train_random(data,10000) print( \n. Przetwarzanie zako(cid:241)czone. ) bone() pcolor(som.distance_map().T) colorbar() Teraz skorzystali(cid:258)my z klasy Som umieszczonej w drugim pliku (som.py) pobranym z serwera FTP wydawnictwa Helion. Klasa ta zawiera metody wymagane do zaimplementowania opisanego wcze(cid:258)niej algorytmu sieci Kohonena. Do funkcji w roli argumentów przekazujemy wymiary mapy (po przeanalizowaniu ró(cid:285)nych opcji doszed(cid:239)em do wniosku, (cid:285)e w przypadku analizowanego zbioru najlepiej jest zacz(cid:200)(cid:202) od siatki o wymiarach 16(cid:117)16 — b(cid:218)dzie ona mia(cid:239)a wystarczaj(cid:200)co du(cid:285)o miejsca, aby zmie(cid:258)ci(cid:239)y si(cid:218) w niej wszystkie grupy, a tak(cid:285)e cz(cid:218)(cid:258)(cid:202) przestrzeni grup, które na siebie zachodz(cid:200)) oraz wymiarowo(cid:258)(cid:202) danych wej(cid:258)ciowych (argument ten okre(cid:258)la d(cid:239)ugo(cid:258)(cid:202) wektora wag w(cid:218)z(cid:239)ów sieci Kohonena). Ponadto dostarczane s(cid:200) warto(cid:258)ci parametrów sigma i wspó(cid:239)czynnika nauki (ang. learning rate). Parametr sigma definiuje w tym przypadku rozk(cid:239)ad funkcji s(cid:200)siedztwa. Zgodnie z tym, co pisa(cid:239)em wcze(cid:258)niej, korzystamy z gaussowskiej funkcji s(cid:200)siedztwa. Warto(cid:258)(cid:202) parametru sigma powinna by(cid:202) dobrana do wielko(cid:258)ci siatki. W przypadku siatki 8(cid:117)8 parametr sigma przyjmuje zwykle warto(cid:258)(cid:202) równ(cid:200) 1,0. W przypadku siatki 16(cid:117)16 przyjmiemy parametr sigma równy 1,3. Je(cid:258)li zosta- nie wybrana zbyt niska warto(cid:258)(cid:202) parametru sigma, warto(cid:258)ci b(cid:218)d(cid:200) mia(cid:239)y tendencj(cid:218) do tworzenia grup w okolicy (cid:258)rodka siatki. Wybranie zbyt wysokiej warto(cid:258)ci sigma oznacza, (cid:285)e na (cid:258)rodku siatki pozostanie kilka du(cid:285)ych pustych miejsc. 36 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Nienadzorowane uczenie maszynowe Wspó(cid:239)czynnik nauki okre(cid:258)la pocz(cid:200)tkowe tempo uczenia si(cid:218) sieci Kohonena. Wraz z kolejnymi iteracjami mapy parametr ten b(cid:218)dzie zmienia(cid:239) swoj(cid:200) warto(cid:258)(cid:202) zgodnie z nast(cid:218)puj(cid:200)c(cid:200) funkcj(cid:200): wspó(cid:239)czynnik nauki(t) = wspó(cid:239)czynnik nauki/(1 + t/(0,5 · t)), w której t jest indeksem iteracji. Przedstawiony skrypt inicjuje nast(cid:218)pnie algorytm sieci Kohonena losowymi warto(cid:258)ciami wag. Podobnie jak to mia(cid:239)o miejsce w przypadku grupowania metod(cid:200) k-(cid:258)rednich, zastosowana metoda inicjowania jest wolniejsza od inicjowania opartego na przybli(cid:285)onym rozk(cid:239)adzie danych. Pro- ces przetwarzania wst(cid:218)pnego podobny do tego, który zastosowano w przypadku algorytmu k-means++, przyspieszy(cid:239)by dzia(cid:239)anie algorytmu sieci Kohonena, ale jak na razie nie korzy- stamy z tego rozwi(cid:200)zania, poniewa(cid:285) sieci Kohonena dzia(cid:239)aj(cid:200) wystarczaj(cid:200)co wydajnie podczas przetwarzania zbioru danych digits. Nast(cid:218)pnie musimy okre(cid:258)li(cid:202) etykiety i kolory poszczególnych klas, tak aby mo(cid:285)na je by(cid:239)o pó(cid:283)niej odró(cid:285)ni(cid:202) podczas analizy wykresu wygenerowanego przez sieci Kohonena. W dalszej kolejno(cid:258)ci nale(cid:285)y przeprowadzi(cid:202) iteracj(cid:218) przez ka(cid:285)dy punkt danych. Podczas ka(cid:285)dej iteracji zgodnie z wynikami oblicze(cid:241) przeprowadzonych przez algorytm sieci Kohonena tworzony jest znacznik jednostki najlepszego dopasowania w(cid:239)a(cid:258)ciwy dla danej klasy. Skrypt po zako(cid:241)czeniu iteracji algorytmu sieci Kohonena utworzy macierz u — pokolorowan(cid:200) macierz wzgl(cid:218)dnego zag(cid:218)szczenia obserwacji. B(cid:218)dzie ona mia(cid:239)a form(cid:218) monochromatycznego wykresu: labels[labels == 0 ] = 0 labels[labels == 1 ] = 1 labels[labels == 2 ] = 2 labels[labels == 3 ] = 3 labels[labels == 4 ] = 4 labels[labels == 5 ] = 5 labels[labels == 6 ] = 6 labels[labels == 7 ] = 7 labels[labels == 8 ] = 8 labels[labels == 9 ] = 9 markers = [ o , v , 1 , 3 , 8 , s , p , x , D , * ] colors = [ r , g , b , y , c , (0,0.1,0.8), (1,0.5,0), (1,1,0.3), m , (0.4,0.6,0)] for cnt,xx in enumerate(data): w = som.winner(xx) plot(w[0]+.5,w[1]+.5,markers[labels[cnt]], markerfacecolor= None , markeredgecolor=colors[labels[cnt]], markersize=12, markeredgewidth=2) axis([0,som.weights.shape[0],0,som.weights.shape[1]]) show() 37 Poleć książkęKup książkę Zaawansowane uczenie maszynowe z j(cid:266)zykiem Python Przedstawiony kod generuje wykres podobny do tego: Kod tworzy wykres sieci Kohonena maj(cid:200)cej 16(cid:117)16 w(cid:218)z(cid:239)ów. Jak wida(cid:202), mapa do(cid:258)(cid:202) dobrze rozdziela klasy, tworz(cid:200)c wyró(cid:285)nialne topologicznie obszary mapy. Niektóre klasy (g(cid:239)ównie cyfry 5 w niebie- skozielonych okr(cid:218)gach i 9 w zielonych gwiazdach) zosta(cid:239)y umieszczone w wielu miejscach przestrzeni sieci Kohonena. Jednak(cid:285)e wi(cid:218)kszo(cid:258)(cid:202) klas jest umieszczona tylko w jednym miejscu, a wi(cid:218)c sie(cid:202) Kohonena zadzia(cid:239)a(cid:239)a do(cid:258)(cid:202) efektywnie. Z macierzy ujednoliconych odleg(cid:239)o(cid:258)ci wynika, (cid:285)e obszary o du(cid:285)ym zag(cid:218)szczeniu punktów zawieraj(cid:200) obserwacje nale(cid:285)(cid:200)ce do wielu klas. To nic nowego — zaobserwowali(cid:258)my to ju(cid:285) w przypadku wykresów wygenerowanych w wyniku grupo- wania za pomoc(cid:200) metody k-(cid:258)rednich i metody analizy g(cid:239)ównych sk(cid:239)adowych. Dalsza lektura Na stronie http://setosa.io/ev/principal-component-analysis/ znajdziesz fantastyczne interaktywne, wizualne wyja(cid:258)nienie metody analizy g(cid:239)ównych sk(cid:239)adowych, stworzone przez Victora Powella i Lewisa Lehe. Stron(cid:218) t(cid:218) powinni odwiedzi(cid:202) czytelnicy, którzy nie znali wcze(cid:258)niej podstawo- wych poj(cid:218)(cid:202) zwi(cid:200)zanych z analiz(cid:200) g(cid:239)ównych sk(cid:239)adowych, i ci, którzy czuj(cid:200), (cid:285)e nie zrozumieli ich w pe(cid:239)ni. Na stronie http://arxiv.org/abs/1404.1100 znajdziesz d(cid:239)u(cid:285)sze wyja(cid:258)nienie metody analizy g(cid:239)ównych sk(cid:239)adowych, które jest przedstawione z punktu widzenia matematyki i porusza zagadnienia zwi(cid:200)zane z transformacjami macierzy. Autorem tego artyku(cid:239)u jest pracownik firmy Google — Jonathon Shlens. 38 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Nienadzorowane uczenie maszynowe Je(cid:285)eli szukasz dobrego przyk(cid:239)adu zwi(cid:200)zanego z artyku(cid:239)em Jonathona Shlensa, zajrzyj na stron(cid:218) http://sebastianraschka.com/Articles/2015_pca_in_3_steps.html — Sebastian Raschka opracowa(cid:239) kod Pythona przedstawiaj(cid:200)cy mo(cid:285)liwo(cid:258)ci analizy g(cid:239)ównych sk(cid:239)adowych na przyk(cid:239)adzie zbioru danych Iris. Wi(cid:218)cej informacji na temat argumentów obs(cid:239)ugiwanych przez klas(cid:218) PCA znajdziesz w dokumentacji pakietu sklearn znajduj(cid:200)cej si(cid:218) na stronie http://scikit-learn.org/stable/modules/generated/ sklearn.decomposition.PCA.html. David Robinson prowadzi fantastyczny blog
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Zaawansowane uczenie maszynowe z językiem Python
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: