====== LAB: Uczenie nienadzorowane ====== Laboratorium kontynuuje poprzednie zajęcia rozszerzając wiedzę dotyczącą sposobów nabywania wiedzy przez inteligentnych agentów o wybrane metody uczenia nienadzorowanego. Laboratorium zostało przygotowane w oparciu o materiały z kursów: [[https://www.cs.waikato.ac.nz/ml/weka/courses.html|Data Mining with Weka]], [[https://www.cs.waikato.ac.nz/ml/weka/courses.html|More Data Mining with Weka]] i [[https://www.coursera.org/learn/machine-learning|Machine Learning]] oraz w oparciu o materiały udostępniane z podręcznikiem [[http://artint.info/|Artificial Intelligence: Foundations of Computational Agents]]. ===== - Do przygotowania ===== * **[ArtInt]** [[https://artint.info/2e/html/ArtInt2e.Ch10.S2.html|Section 10.2 Unsupervised Learning]] (i podsekcje) * **[AIMA]** Section 20.3.1: Unsupervised clustering: Learning mixtures of Gaussians //(a.k.a. EM)// * Reguły asocjacyjne i algorytm Apriori: {{https://www.mimuw.edu.pl/~son/datamining/materials/w2-w3.pdf|slajdy 1-19 z pdfa}} * {{http://84.89.132.1/~michael/stanford/maeb7.pdf|Hierarchiczna klasteryzacja}} ===== - Reguły asocjacyjne ===== //Reguły asocjacyjne przypominają reguły decyzyjne omawiane na jednym z poprzednich laboratoriów. Tym razem jednak decyzja (prawa strona implikacji) nie jest z góry określona, tzn. nie wiemy, na którym atrybucie ma się opierać. Jest to przykład nauki bez nauczyciela: algorytm nie ma określonej z góry prawidłowej odpowiedzi, zamiast tego ma opisać wewnętrzne zależności między atrybutami.// ==== Analiza koszykowa [15 minut] ==== === Dane === Mamy dane następujące informacje o transakcjach w jednym z hipermarketów: ^Numer paragonu ^ Kupione produkty ^ |1000 | Ananas, Chleb, Drożdże | |2000 | Banan, Chleb, Eukaliptus | |3000 | Ananas, Eukaliptus, Chleb, Banan | |4000 | Banan, Eukaliptus | Zadaniem algorytmu odkrywającego reguły asocjacyjne będzie odpowiedź napytanie: //Jakie są zależności pomiędzy kupowanymi produktami?// **Pytanie** Patrząc na zbiór uczący w tabeli powyżej wypisz reguły które będą określać jakie produkty są kupowane najczęściej razem. === Support i Confidence === Z powyższego zbioru uczącego możemy łatwo wywnioskować następujące reguły: if Banan then Eukaliptus if Eukaliptus then Banan if Ananas then Chleb if Chleb then Ananas Pozostałe reguły intuicyjnie odrzuciliśmy ponieważ ich //częstotliwość// w zbiorze uczącym jest niewielka, i w związku z tym mamy małą //pewność// co do ich prawdziwości. W celu automatycznego określenia tych parametrów stosuje się dwa wskaźniki: **support** (wsparcie) i **confidence** (wiarygodność) ==Support== Wskaźnik ten określa częstotliwość (prawdopodobieństwo) danej reguły w stosunku do wszystkich transakcji. Innymi słowy jest to stosunek ilości transakcji zawierających dane elementy wchodzące w skład reguły do wszystkich transakcji. Dla przykładu z tabeli powyżej, //support// reguły if Banan then Eukaliptus jest równy $\frac{3}{4}=75\%$, ponieważ 3 transakcje zawierają Banan i Eukaliptus, natomiast ilość wszystkich transakcji jest równa 4. **Pytanie** Jaki jest //support// dla reguły poniżej? if Ananas then Chleb ==Confidence== Wskaźnik ten określa siłę implikacji w regule. Innymi słowy jest on definiowany jako stosunek ilości transakcji zawierających wszystkie elementy wchodzące w skład reguły do transakcji zawierających elementy z części warunkowej reguły. Dla przykładu z tabeli powyżej, //confidence// reguły If Banan then Eukaliptus jest równy $\frac{3}{3}=100\%$, ponieważ 3 transakcje zawierają Banan i Eukaliptus, natomiast ilość transakcji zawierających elementy z części warunkowej tej reguły (czyli w tym wypadku Banan) jest także równa 3. **Pytanie** Jaki jest //confidence// dla reguł poniżej? if Chleb then Ananas if Ananas then Chleb === Frequent Itemsets === Patrząc na przykłady powyżej odnalezienie dobrych reguł asocjacyjnych sprowadza się tak naprawdę do wykonania dwóch kroków * wyszukania zbiorów elementów które mają //support// większy lub równy jakiemuś zadanemu //supportowi progowemu// - są tak zwanymi zbiorami częstymi (//frequent itemsets//) * wybrania spośród nich tych konfiguracji, których //confidence// przekracza jakiś zadany //confidence progowy//. W przypadku reguł asocjacyjnych, zbiory które zawierają //k// elementów nazywane są k-zbiorami (//k-itemsets//). **Pytanie** Zakładając, ze bazujemy na danych z tabeli na początku sekcji [[#dane|Analiza koszykowa]], wyznacz wszystkie //1-zbiory// i policz dla nich //support//.\\ Przyjmując, że //support progowy// jest równy 50%, wyznacz 1-zbiór częsty. ==== Algorytm Apriori [10 minut] ==== Na zasadzie opisanej powyżej działa najpopularniejszy algorytm wyszukujący reguły asocjacyjne - algorytm Apriori. Wykonuje on następujące krok: - znajdź wszystkie 1-zbiory (//1-itemsets//) - znajdź pośród wygenerowanych //1-zbiorów//, //częste 1-zbiory// (//frequent 1-itemsets// $L_1$) - czyli takie, których support jest $\geq \epsilon$ - bazując na $L_1$ wygeneruj //2-zbiory// (//2-itemsets//) - znajdź pośród wygenerowanych //2-zbiorów//, //częste 2-zbiory// $L_2$ - Powtarzaj proces, do momentu aż ostatni wygenerowany zbiór $L_{k-1}=\o$ Poniżej znajduje się bardziej formalny opis algorytmu: $$\begin{align} & \mathrm{Apriori}(T,\epsilon)\\ &\qquad L_1 \gets \{ \mathrm{1-item sets} \} \\ &\qquad k \gets 2\\ &\qquad\qquad \mathrm{\textbf{while}}~ L_{k-1} \neq \ \emptyset \\ &\qquad\qquad\qquad C_k \gets \{ a \cup \{b\} \mid a \in L_{k-1} \land b \in \bigcup L_{k-1} \land b \not \in a \}\\ &\qquad\qquad\qquad L_k \gets \{ c \mid c \in C_k \land ~ \mathit{support}[c] \geq \epsilon \}\\ &\qquad\qquad\qquad k \gets k+1\\ &\qquad\qquad \mathrm{\textbf{return}}~\bigcup_k L_k \end{align}$$ Dla ułatwienia, poniżej znajduje się rysunek pokazujący jak powinien działać algorytm na danych z tabeli na początku sekcji [[#dane|Analiza koszykowa]]((A - Ananas, B - Banan, C - Chleb, D - Drożdże, E - Eukaliptus))\\ **Uwaga 1:** Na rysunku nie są przedstawione wszystkie //k-zbiory częste//.\\ **Uwaga 2:** Algorytm przedstawiony na rysunku poniżej zawiera pewną optymalizację polegająca na obserwacji, że zbiór 3-elementowy nie może być częsty jeśli zawiera w sobie zbiór dwuelementowy, który nie jest częsty. {{.:apriori.png?500|}} === Apriori i Weka === Weka zawiera implementację algorytmu Apriori, którą teraz przetestujemy na następującym zestawie transakcji: ^ Paragon ^ Zakupy ^ | 1 | A,B,C,D,G,H | | 2 | A,B,C,D,E,F,H | | 3 | B,C,D,E,H | | 4 | B,E,G,H | | 5 | A,B,D,E,G,H | | 6 | A,C,F,G,H | | 7 | B,D,E,G,H | | 8 | A,C,D,E,G,H | | 9 | B,C,D,E,H | | 10 | A,C,E,F,H | | 11 | C,E,H | | 12 | A,D,E,F,H | | 13 | B,C,E,F,H | | 14 | A,B,C,F,H | | 15 | A,B,E,F,H | **Zadania:** - Na początek należy przygotować odpowiedni plik Weki - jak myślisz, w jaki sposób najlepiej zakodować informacje? - możesz wzorować się na plikach z poprzedniego laboratorium {{:pl:dydaktyka:psi:data.tar.gz}} - Możesz skorzystać z gotowego pliku umieszczonego tutaj: {{:pl:dydaktyka:psi:apriori-zakupy.arff.zip}} - Wczytaj plik do Weki, przejdź do zakładki **Associate** i uruchom algorytm z domyślnymi ustawieniami. Jakie wyniki się pojawiły? - Pobaw się ustawieniami algorytmu (aby wejść w ustawienia kliknij w wiersz z nazwą algorytmu i jego parametrami): Czy wiesz jak wyświetlić informację o znalezionych //k-zbiorach//? Czy wiesz jak zmienić oczekiwany poziom //supportu// i //confidence//? Czy rozumiesz pozostałe parametry? Sprawdź jak one wpływają na otrzymywane wyniki. ==== Duży przykład [15 minut] ==== W zestawie danych {{:pl:dydaktyka:psi:data.tar.gz}} znajduje się plik ''supermarket.arff'' -- zawiera informacje o prawdziwych zakupach z jednego z supermarketów w Nowej Zelandii. Otwórz go w Wece i odpowiedz na następujące **pytania**: - Ile jest atrybutów i co one reprezentują? - Ile jest instancji i co one reprezentują? - W zakładce **Preprocess** kliknij **Edit...** i przyjrzyj się danym: jakie wartości przyjmują atrybuty? Czy wszystkie wartości są uzupełnione? - Jakie są 3 produkty najczęściej kupowane w tym sklepie? Jak to sprawdzić w zakładce **Preprocess**, a jak to sprawdzić za pomocą algorytmu **Apriori** wbudowanego w Wekę? - Uruchom algorytm Apriori przy domyślnych ustawieniach. Następnie uruchom algorytm Apriori przy domyślnych ustawieniach dla tego samego zbioru danych, w którym zamiast brakujących wartości są wartości ''n'': {{.:supermarket-nonmiss.arff.zip|}}. Porównaj otrzymane wyniki. - Następnie zrób takie samo porównanie dla danych z tabeli w sekcji [[#apriori_i_weka|Apriori i Weka]]. Jeden plik został przygotowany przez Ciebie już wcześniej - do porównania należy przygotować jeszcze drugi plik tak, aby jeden z nich zawierał wartości nie/fałsz, a drugi nieokreślone. Porównaj otrzymane wyniki. - Po zapoznaniu się z wynikami, podaj co najmniej jeden argument za stosowaniem wartości nieokreślonej i co najmniej jeden za stosowaniem wartości nie/fałsz. **Pytania:** - W ramach laboratorium rozważaliśmy tworzenie reguł asocjacyjnych w analizie koszykowej, czyli ustalaliśmy jakie produkty są ze sobą najczęściej łączone w trakcie zakupów. Do czego może się przydać taka wiedza? Wymyśl dwa zastosowania. - Do czego innego może przydać się tworzenie reguł asocjacyjnych? Wymyśl dwa problemy / pytania (niezwiązane z zakupami), na które można znaleźć dzięki nim odpowiedź. ===== - Klasteryzacja ===== //Klasteryzacja to przykład klasyfikacji. Podobnie jak w drzewach decyzyjnych z poprzedniego laboratorium, podejmujemy decyzję o określeniu przynależności elementu do jednej z grup. Tutaj jednak nie mamy z góry określonych kategorii, a są one tworzone na podstawie dostępnego zbioru danych uczących.// //Istnieją różne rodzaje klastrów:// - //Klastry rozłączne (np. algorytm K-Means/X-Means w dalszej części laboratorium):// \\ {{.:clusters-disjoint.png?300|}} - //Klastry nachodzące na siebie (np. algorytm EM w dalszej części laboratorium):// \\ {{.:clusters-overlap.png?300|}} - //Klastry probabilistyczne (np. algorytm EM w dalszej części laboratorium):// \\ {{.:clusters-prob.png?300|}} - //Klastry hierarchiczne:// \\ {{.:clusters-hierarchy.png?300|}} ==== Algorytm K-Means [20 minut] ==== Algorytm K-Means to prosty algorytm bez nauczyciela dzielący zbiór uczący na K klastrów zawierających podobne elementy (podobieństwo jest tutaj określone jako bliskość w przestrzeni elementów). Każdy z klastrów reprezentowany jest przez punkt (centroid) określający położenie środka klastra. Wyznaczanie centroidów przebiega zgodnie z następującymi krokami: - Wylosuj K punktów (centroidów) w przestrzeni elementów. - Oblicz odległość każdego z elementów od centroidów i przypisz ten element do najbliższego z nich. - Zaktualizuj położenie każdego centroidu ustawiając go jako średnią wszystkich punktów, które są do niego przypisane. - Powtarzaj kroki 2-3 aż do uzyskania zbieżności (przesunięcie centroidów w kroku 3 będzie mniejsze od ustalonego progu). Nie ma tutaj zewnętrznego nauczyciela, wobec tego należy przyjąć inną strategię oceny poprawności rozwiązania -- jedną z najprostszych możliwości jest tutaj policzenie sumy kwadratów odległości pomiędzy elementami i ich centroidami. W ten sposób promowane są rozwiązania, w których odległości są mniejsze, a co za tym idzie -- elementy rzeczywiście są (względnie) blisko siebie. Działanie algorytmu zaobserwuj w praktyce przy użyciu narzędzia [[http://krzysztof.kutt.pl/didactics/psi/kmeans/]]. Dokonaj klasteryzacji kilka razy (//losowanie nowych danych za pomocą ''New points'', losowanie nowych centroidów za pomocą ''New centroids'', kolejne kroki za pomocą przycisku ''Find closest centroid''/''Update centroid''//) w różnych warunkach: * ilość centroidów = ilość klastrów\\ ilość centroidów < ilość klastrów\\ ilość centroidów > ilość klastrów * dane zgrupowane (suwak w lewej połowie)\\ dane losowe (suwak w prawej połowie) **Pytania:** * Jak szybko algorytm osiąga zbieżność? * Jak algorytm działa w przypadku losowych danych? * Co dzieje się w sytuacji gdy ilość centroidów nie zgadza się z ilością klastrów ukrytych w danych? * Jaka jest skuteczność tego algorytmu w wykrywaniu klastrów ukrytych w danych? Jeżeli dane układają się w n klastrów i zadajemy n centroidów to czy zawsze udaje się dobrze dopasować dane? Porównaj poniższe dwa rysunki: \\ {{.:kmeans-ex1.png?400|}} {{.:kmeans-ex2.png?400|}} Jeżeli chcesz się jeszcze pobawić algorytmem K-Means, możesz skorzystać z apletu [[http://www.naftaliharris.com/blog/visualizing-k-means-clustering/|]], który pozwala między innymi na ręczne zaznaczanie początkowych położeń centroidów. Have fun :-) === K-Means i Weka === Otwórz w Wece plik ''iris.arff'' z zestawu danych {{:pl:dydaktyka:psi:data.tar.gz|}}. Wykorzystywaliśmy już ten plik na poprzednim laboratorium - opisuje on parametry kwiatów należących do trzech gatunków Irysów: \\ {{.:weka-iris-imgs.png?700|}} \\ **Zadania:** - Przypomnij sobie jak zbudowany jest ten plik: ile jest atrybutów, jakich są typów, ile jest instancji. Zapoznaj się z budową zboru uczącego: kliknij ''Edit...'' w zakładce **Preprocess**. Zauważ, że dane są podzielone względem klas: najpierw 50 instancji jednej klasy, następnie 50 instancji drugiej i na końcu 50 instancji trzeciej klasy. - Przejdź na zakładkę **Visualize** i zapoznaj się z rozkładem danych: * Są to trójwymiarowe wykresy bazujące na trzech wybranych atrybutach ze zbioru danych: oś X, oś Y i różne kolory - upewnij się, że kolorem oznaczony jest atrybut class (domyślnie). * Kliknięcie na wykres pozwala na jego powiększenie (na powiększeniu można manipulować atrybutami położonymi na osiach). - Wyobraź sobie sytuację, w której znika atrybut ''class'' (znikają kolory) -- czy jesteś w stanie ponownie pogrupować te dane w pierwotne klasy? - Spróbujmy to zrobić za pomocą algorytmu K-Means zaimplementowanego w Wece: - Przejdź do zakładki **Cluster**. - Zostaw domyślną wartość ''Cluster mode'' = ''Use training set'' - Wybierz algorytm **SimpleKMeans**, w ustawieniach zmień liczbę klastrów na 3 i uruchom go. - Zapoznaj się z wynikami: * Z wyświetlonym raportem * Z wizualizacją: kliknij prawym na wynik klasteryzacji w ''Result list'' i z menu wybierz ''Visualize cluster assignments'' * Przede wszystkim zapoznaj się z wizualizacją: X = Class, Y = Cluster. Możesz jeszcze pobawić się suwakiem ''Jitter'', który rozrzuca dane (bo wiele punktów znajduje się w tym samym miejscu). * Czy dane zostały poprawnie zaklasyfikowane? Jaki błąd popełniliśmy? - Spróbujmy to zrobić po raz kolejny: - Kliknij przycisk ''Ignore attributes'', zaznacz odpowiedni atrybut (który?) i kliknij ''Select''. Uruchom ponownie klasteryzację. - Zapoznaj się z wynikami i porównaj je z uzyskanymi wcześniej. Jaka teraz była skuteczność klasyfikacji? - Czy wiesz który z trzech gatunków Irysów został w 100% poprawnie zaklasyfikowany przez ten algorytm? Możesz to odczytać z wykresu wizualizującego wyniki klasyfikacji, jak również możesz w ''Cluster mode'' zaznaczyć opcję ''Classes to clusters evaluation''. Po wybraniu tej opcji i wyświetleniu wizualizacji możesz zobaczyć na wykresie krzyżyki (poprawne trafienia) i kwadraty (niepoprawne klasyfikacje). - Przeprowadź klasteryzację po raz trzeci. Tym razem nie zmieniaj żadnych ustawień. Czy pojawiły się dokładnie takie same wyniki? * Jak to było wcześniej powiedziane, algorytm K-Means losuje początkowe położenie centroidów, więc wyniki powinny się od siebie różnić. Tutaj jednak są takie same... * W jaki sposób sprawić aby wylosowały się inne wyniki? ==== Inne algorytmy klasteryzacji [10 minut] ==== === Algorytm X-Means === Algorytm K-Means jest bardzo popularny, ale ma kilka wad, m.in. nie jest w pełni automatyczny -- użytkownik musi samodzielnie określić liczbę klastrów. Co jednak w sytuacji kiedy nie chcemy albo nie możemy tego zrobić (po prostu nie wiemy ile takich klastrów będzie)? Przygotowane zostało rozszerzenie algorytmu K-Means o m.in. automatyczne wyznaczanie ilości klastrów (w przedziale określonym przez użytkownika). Algorytm ten to X-Means i działa on wykonując następujące kroki: - Rozpoczęcie algorytmu z najmniejszym dozwolonym przez użytkownika K. - Ulepszanie parametrów -- wykonywanie algorytmu K-Means dla aktualnego K aż do uzyskania zbieżności. - Ulepszanie struktury -- podzielenie wybranego centroidu na dwa centroidy i wykonanie kroku 2 aż do uzyskania zbieżności. Jeżeli wynik jest lepszy (zgodnie z przyjętą metryką) to go akceptujemy i zwiększamy K o 1. Jeśli nie -- próbujemy podzielić inny centroid. - Wykonujemy kroki 2-3 aż do momentu kiedy podział nie ulepsza rozwiązania / K osiągnie maksymalną dozwoloną wartość. **Zadania:** - Wczytaj ponownie plik ''iris.arff'' do Weki. - W zakładce **Cluster** wybierz algorytm ''XMeans'' i uruchom go na domyślnych ustawieniach. * Algorytm XMeans operuje tylko i wyłącznie na atrybutach numerycznych. Dlatego aby go włączyć należy: (a) albo w ''Ignore attributes'' wybrać ''class'', (b) albo wybrać opcję ''Classes to clusters evalutaion''. - Zapoznaj się z otrzymanymi wynikami: * Ile klastrów pojawiło się w wynikowym modelu? * Przeanalizuj wizualizację wyników. * Porównaj otrzymane wyniki z wynikami z K-Means. - Zapoznaj się z dostępnymi opcjami i ich znaczeniem. Poeksperymentuj z różnymi ustawieniami. === Algorytm EM === Algorytmy K-Means i X-Means jednoznacznie dzielą przestrzeń przykładów na odpowiednią liczbę klastrów. Każdy z klastrów reprezentowany jest przez położenie centroidu, a element należy do tego klastru, którego centroid znajduje się najbliżej. W algorytmie EM (Expectation-Maximization) klastry reprezentowane są przez średnie (będące odpowiednikami centroidów) oraz odchylenia standardowe. Dzięki temu możliwe jest określenie prawdopodobieństwa przynależności elementu do każdego klastru i wybranie tego o największej wartości (nie jest to więc "sztywny" jednoznaczny podział jak w K-Means tylko "miękki"). Działanie algorytmu może być różne w zależności od implementacji, ale w ogólnym wypadku wygląda analogicznie jak w przypadku algorytmu K-Means i zostało zobrazowane na poniższym gifie: \\ {{.:em_cluster_wikipedia.gif|}} **Zadania:** - Wczytaj ponownie plik ''iris.arff'' do Weki. - W zakładce **Cluster** wybierz algorytm ''EM'' i uruchom go na domyślnych ustawieniach. - Zapoznaj się z otrzymanymi wynikami: * Ile klastrów pojawiło się w wynikowym modelu? Na domyślnych ustawieniach algorytm EM sam ustala optymalną liczbę klastrów - czy wiesz jak to zmienić? * Przeanalizuj wizualizację wyników. * Porównaj otrzymane wyniki z wynikami z K-Means i X-Means. - Zapoznaj się z dostępnymi opcjami i ich znaczeniem. Poeksperymentuj z różnymi ustawieniami. ===== - Poprawność klasyfikacji [10 minut] ===== **Pytania:** - Załaduj plik ''credit-g.arff'' do Weki. Zawiera on dane uczące dla systemu, który na podstawie atrybutów zawartych w pliku powinien określać czy dany zestaw wartości atrybutów wskazuje na wiarygodnego klienta banku, czy też nie - czy można przyznać mu kredyt, czy jest to ryzykowne. - Przejdź do zakładki **Classify** i wybierz algorytm J48. - W obszarze //Test options// wybierz opcje //Percentage split// z wartością 66% Oznacza to, ze 66% danych posłuży do uczenia, a 34% do walidacji. Jakie to ma znaczenie? - Uruchom algorytm. Ile procent przypadków zostało poprawnie zaklasyfikowanych? Czy to dobry wynik? - Zmień klasyfikator na //ZeroR// z gałęzi //rules//. Jakie są wyniki? - Wybierz trzy inne klasyfikatory i je wypróbuj. Jakie dają wyniki? - Przejdź do zakładki **Preprocess** i zobacz jak wygląda rozkład atrybutu określającego czy danych zestaw jest //dobry// czy //zły//. Jaka byłaby skuteczność algorytmu który niezależnie od wartości atrybutów "strzelałby" że użytkownik jest wiarygodny? - Dlaczego przed przystąpieniem do klasyfikacji, warto wcześniej przyjrzeć się danym? :-P ===== - Większy zbiór danych [10 minut] (o ile wystarczy czasu) ===== Wybierz jeden zbiór danych: * {{.:wine.arff.zip|}} -- dane dotyczące win otrzymywanych w jednym regionie Włoch z trzech różnych odmian winorośli (13 atrybutów, 178 instancji, 3 klastry) * {{.:vehicle.arff.zip|}} -- parametry pojazdów wyciągnięte ze zrobionych zdjęć (18 atrybutów, 846 instancji, 4 klastry) * {{.:spambase.arff.zip|}} -- dane opisujące wiadomości e-mail z klasyfikacją spam/nie spam (57 atrybutów, 4 601 instancji, 2 klastry) * {{.:letter.arff.zip|}} -- parametry opisujące wielkie litery napisane różnymi czcionkami (16 atrybutów, 20 000 instancji, 26 klastrów) Ściągnij go i pobaw się nim z użyciem metod, które pojawiły się na aktualnym i poprzednim laboratorium, np.: * sprawdź skuteczność klasteryzacji, * poszukaj ukrytych zależności między różnymi parametrami (z wykorzystaniem reguł asocjacyjnych), * ustal czy da się stworzyć dobre drzewo decyzyjne dla danego przykładu, * spróbuj wyznaczyć model liniowy, który najlepiej opisuje zadany problem. [[https://xkcd.com/1838/|{{https://imgs.xkcd.com/comics/machine_learning.png}}]] ===== Chcesz wiedzieć więcej? ===== * [[http://en.wikipedia.org/wiki/K-means%2B%2B|K-Means++]] -- inne ulepszenie algorytmu K-Means niż przedstawione X-Means {{section>lab_ml-supervised#machine_learning_ogolnie}}