====== Peter Flach: Machine Learning, repetytorium 1 ====== ===== - Co składa się na uczenie maszynowe ===== //The ingredients of machine learning// ''S010'' * każde **zadanie** (//task//) uczenia maszynowego polega na wypracowaniu pewnego rozwiązania przy pomocy odpowiedniego **modelu** matematycznego (którego parametrów na początku nie znamy) * na wejściu **modelu** mamy dane (//data//) będące konkretnymi wartościami pewnych **cech**, atrybutów (//features//), na wyjściu modelu otrzymujemy rozwiązanie zadania * zadania wiążą się z pewnymi **obiektami** (//domain objects//), indywiduami, przykładami, egzemplarzami, pomiarami w świecie * **problem** uczenia maszynowego (//learning problem//) polega na automatycznym, maszynowym zbudowaniu **modelu** przy pomocy odpowiedniego algorytmu ==== - Zadania: czyli typy problemów które rozwiązujemy ==== //Tasks: the problems that can be solved with machine learning// ''S010'' Najistotniejsze klasy **zadań** to m.in: * klasyfikacja * regresja * klasteryzacja (grupowanie) * identyfikacja struktur Mogą się różnić tym co otrzymujemy na wyjściu modelu (w wyniku jego użycia). ''S016'' Możemy mówić o modelach: - **predykcyjnych**, kiedy wiemy jakich zmiennych wyjściowych oczekiwać, np. w zadaniu klasyfikacji, gdy znamy klasy do których chcemy przyporządkować obiekty - **deskryptywnych**, kiedy to sam algorytm ma wypracować, odkryć, zaproponować w.w. zmienne Ponadto modele dla zadań ML można budować w sposób: - **nadzorowany** (z nauczycielem) (//supervised//) - **nienadzorowany** (//unsupervised//) Istotną kwestią jest możliwość oceny jakości pracy algorytmu uczenia. W procesie uczenia wypracowywany model powinien być //ulepszany// (wg pewnej przyjętej miary). ==== - Modele: czyli to co budujemy w procesie uczenia ==== //Models: the output of machine learning// ''S018'' Celem algorytmu uczenia jest wypracowanie parametrów odpowiedniego modelu. Modele te mogą być rożnego typu, należeć do różnych klas. Trzy podstawowe klasy modeli wskazane w podręczniku to modele: - **logiczne**, formalizowane przy pomocy pojęć logiki matematycznej, np. pojęcie reguły, - **geometryczne**, wykorzystujące pojęcia geometrii, w tym analitycznej i algebry, np. pojęcie odległości, - **probabilistyczne**, wykorzystujące rachunek prawdopodobieństwa i statystykę, np. pojęcie prawdopodobieństwa zdarzenia. Ze względu na sposób działania, modele mogą mieć charakter * **grupowania**, lub * **oceniania** obiektów. Na slajdach ''S019-27'' omówiono wstępnie przykłady modeli z poszczególnych klas. A ich wzajemne relacje i klasyfikację pokazano na ''S028,9''. ==== - Cechy: to bez czego modele nie mogłyby się obejść ==== //Features: the workhorses of machine learning// **Cechy** (//features//) stanowią mechanizm pojęciowy dzięki któremu jesteśmy w stanie opisać obiekty. Z matematycznego punktu widzenia cecha będzie funkcją, która przyporządkowuje obiektowi wartości z pewnej **dziedziny**. Np. chcemy sklasyfikować różne jabłka ze względu na ich kolor. 'Kolor' jest cechą, jego konkretna wartość, np. 'jasnoczerwony' jest tym, co pojawi się jako dana na wejściu modelu (tu klasyfikatora). Na wyjściu pojawi się klasa do której można przypisać konkretne jabłko, np. 'dojrzałe'. Na ''S033-6'' pokazane są różne przykłady doboru cech, pojęć, w zależności od których możemy lepiej użyć pewnych modeli. Np. dzięki użyciu przekształcenia danych przy użyciu funkcji **kernel** możliwym staje się użycie klasyfikatora liniowego tam, gdzie na oryginalnych danych nie byłby w stanie zadziałać. Funkcja **k** dostarcza niejako nowego, innego pojęcia (innej przestrzeni). -------------------- ===== - Klasyfikacja binarna ===== //Binary classification and related tasks// Klasyfikacja jest jednym z najważniejszych - najczęściej występujących - zadań ML, a klasyfikacja binarna jej najważniejszym przypadkiem. Między innymi dlatego, że klasyfikacje wieloklasową przeprowadzamy w oparciu o przypadek binarny. Do opisu zadań klasyfikacji używamy odpowiednich pojęć. * **instancja**, (//instance//) egzemplarz, przypadek, dotyczy pojedynczego wystąpienia tego czegoś co klasyfikujemy np. jabłka, oznaczmy go **x** * **przestrzeń instancji** (//instance space//) jest zbiorem wszystkich możliwych przypadków, oznaczmy ją kreślonym dużym **X** * **etykiety** (//label//) należą do przestrzeni etykiet (//label space//) oznaczmy je odpowiednio kreślonymi **l** i **L**. Etykiety są używane do oznaczania przykładów w zbiorze uczącym, treningowym (//training set//) Tr={tr: (x,l(x))} * wyjście klasyfikatora **y**, należy do pewnej przestrzeni **Y** W ogólnym przypadku modele (w tym klasyfikatory) będą więc pewnymi funkcjami. Różne scenariusze opisane są na ''S038''. Należy też pamiętać o kłopotach z jakością danych, określanych technicznie jako **szum** (//noise//). Zaszumione może być zarówno etykietowanie (ktoś źle opisał zbiór treningowy) jak i dane wejściowe, dostajemy nietypowe jabłka albo śliwki. ==== - Klasyfikacja ==== //Classification// **Klasyfikator** to funkcja X -> C. W klasyfikacji binarnej zbiór C ma dwa elementy, najczęściej oznaczane jako pozytywne i negatywne, p/n, +/-, +1/-1. Budowany klasyfikator jest tylko pewną aproksymacją, przybliżeniem, potencjalnego klasyfikatora idealnego. W procesie uczenia poprawiamy tę aproksymację. ''S040'' pokazuje jak w prosty sposób przejść od drzewa pokazującego liczbę przypadków w danej klasie zależności od kombinacji cech, do drzewa decyzyjnego stanowiącego klasyfikator (czy też jego przybliżenie). ''S041'' Żeby móc poprawić aproksymację, jaką jest klasyfikator musimy być wstanie ocenić jego jakość (//performance//). Może do tego służyć **tablica krzyżowa** (//[[wp>Contingency table]]//). Ważne pojęcia to //true/false positives/negatives// W tablicy na ''S040'' mamy: * TP = 30 * TN = 40 * FP = 20 * FN = 10 Trues oznaczono na niebiesko, falses na czerwono. Idealny klasyfikator powinien prawidłowo sklasyfikować wszystkie Pos = 50 i Neg = 50, podczas gdy nasza aproksymacja zidentyfikowała 40 jako p i 60 jako n. W tym przypadku liczność obu klas jest jednakowa (50/50). Kłopoty pojawiają się, gdy jedna z klas jest nadreprezentowana, vide ''S041'' wtedy trzeba wziąć pod uwagę tę proporcję. === Metryki === W celu precyzyjnej oceny jakości klasyfikatora używamy szeregu metryk. * //class ratio// (**stosunek klas**) clr = Pos/Neg * //accuracy// (**dokładność**) acc = (TP+TN)/(Pos+Neg) -- stosunek przykładów sklasyfikowanych poprawnie sklasyfikowanych do wszystkich * //error rate// err=1-acc * //recall//, //sensitivity//, //true positive rate// tpr=Tp/Pos (**wrażliwość**) * //specificity//, //true negative rate// tnr=TN/Neg (**swoistość**) * //precision//, //confidence// prec=TP/(TP+FP) (**precyzja**) * //F-measure// F=2*(precision*recall)/(precision+recall) Patrz też: * [[wp>Receiver_operating_characteristic#Basic_concept]] * [[wp>Binary_classification#Evaluation_of_binary_classifiers]] === Wizualizacja metryk === W celu lepszego porównywania klasyfikatorów z użyciem metryk używamy wizualizacji. Najprostsza to wykres pokrycia, //coverage plot// bezpośrednio wizualizujący tablicę krzyżową. Patrz ''S043''. ''S044'' Bardziej zaawansowaną metodą wizualizacji jest wykres ROC [[wp>Receiver_operating_characteristic]] Pozwala na porównanie klasyfikatorów które są normalizowane do tej samej przestrzeni. ''S050'' Obszar poniżej krzywej ROC odpowiada dokładności klasyfikatora, związanej z ilością poprawnie sklasyfikowanych par tp/fp. Obszar ten czasem nazywa się //AUC// -- //area under the (ROC) curve//. ==== - Ocenianie ==== //Scoring and ranking// Osobną metodą budowania klasyfikatorów jest użycie funkcji oceniającej, przypisującej pewnym kombinacjom wartości cech współczynniki. Współczynniki są wyliczane w zależności od tego, ile przykładów z danej klasy opisują. ''S047-9'' To które kombinacje cech przesądzają o przynależności do konkretnej klasy zależy od porównania dokładności ''S054,5'' ==== - Prawdopodobieństwo przynależności do klas ==== //Class probability estimation// ''S057,8'' Pokrewną grupą klasyfikatorów są takie, które oceniają prawdopodobieństwo przynależności danej instancji do klasy. Służą do przewidywania przynależność instancji. Na wyjściu takiego klasyfikatora dostajemy wartość prawdopodobieństwa przynależności instancji do klasy. -------------------- ===== - Coś więcej niż klasyfikacja binarna ===== //Beyond binary classification// ==== - Klasyfikacja wieloklasowa ==== //Handling more than two classes// ''S062,3'' Mając klasyfikator kilkuklasowy możemy wyliczyć jego dokładność w poszczególnych klasach. Zakładając, że w procesie uczenia mamy tylko przykłady pozwalające na uczenie klasyfikatorów binarnych, tzn. odróżniających od siebie tylko 2 klasy, mamy dwie podstawowe metody budowania klasyfikatora wieloklasowego: * 1-do-wiele (//one-versus-rest//) w którym uczymy k klasyfikatorów binarnych gdzie w uczeniu C_k pozostałe klasy są uznawane za przykłady negatywne, oraz * 1-do-1 (//one-versus-one//) w którym uczymy uczymy klasyfikatory dla każdej pary klas a następnie odpowiednio łączymy ich wyniki w procesie klasyfikacji. ==== - Regresja ==== //Regression// ''S069'' Obok klasyfikacji regresja jest jednym z ważniejszych przypadków ML. Aby uniknąć **przeuczenia** (//overfitting//) liczba parametrów które dopasowujemy w procesie uczenia powinna być istotnie mniejsza niż liczba znany punktów/danych/przykładów. ''S069'' **bias** vs. **variance** Ilustracja dobrze ilustruje intuicję pozwalającą odróżnić odchylenie wyników od ich wariancji. ==== - Uczenie nienadzorowane i deskryptywne ==== //Unsupervised and descriptive learning// ''S072'' W uczeniu nienadzorowanym (klasteryzacja i uczenie deskryptywne) zadania uczenia maszynowego i problem uczenia się pokrywają. Nie mamy do dyspozycji zbioru uczącego. Nie mamy modelu, którego parametry poprawiamy, ile - w procesie uczenia - budujemy taki model, np. określamy ile istnieje klas i jak do nich przypisywać przykłady. Na uczenie nienadzworowane możemy najczęściej spojrzeć jako na **odkrywanie wiedzy** (//knowledge discovery//). ''S073-6'' Istotne przypadki uczenia nienadzworowanego to: * klasteryzacja (predykacja klastrów i grupowanie), //[[wp>Cluster analysis]]// inaczej **[[http://pl.wikipedia.org/wiki/Analiza_skupie%C5%84|Analiza skupień]]** * odkrywanie reguł asocjacyjnych //Association rule discovery// -------------------