Lab 12 - Uczenie nienadzorowane
Lab 11 - Uczenie nienadzorowane (część 2)
Dataset
Na zajęciach wykorzystywany będzie dość popularny zbiór zawierający informację o cechach morfologicznych 3 różnych gatunków irysów (setosa, versicolor, virginica), dla których mierzone były 4 cechy: szerokość i wysokość pręcików i płatków .
Więcej na ten temat możesz znaleźć w wiki
Plik z bazą można pobrać tutaj: iris.csv
import pandas as pd
= pd.read_csv('./iris.csv')
iris = iris[['sepal.length', 'sepal.width', 'petal.length', 'petal.width']]
X = iris['variety'] y
Metoda K-Średnich
Metoda K średnich umożliwia nienadzorowane grupowanie elementów wielowymiarowego zbioru w klastry. W wyniku działania algorytmu K-Means dla każdego elementu zwracana jest etykieta zbioru (estimator.labels_
), wyznaczona na podstawie minimalizacji rozproszenia elementów względem środka zbioru.
from sklearn.cluster import KMeans
= 3
n = KMeans(n_clusters=n)
estimator
estimator.fit(X)'cluster'] = estimator.labels_
iris[print(iris)
Ponadto dla każdego zbioru wyznaczane są parametry:
- położenie środka zbioru (centroidu)
estimator.cluster_centers_
- rozproszenie elementów względem środka swojego klastra (liczona jako suma kwadratów odległości elementów od środka odpowiedniego klastra)
estimator.inertia_
Poniższy kod wizualizuje podział na zbiory dla wybranych 2 osi (cech)
import seaborn as sns
import matplotlib.pyplot as plt
= pd.DataFrame(estimator.cluster_centers_, columns=['sepal.length', 'sepal.width', 'petal.length', 'petal.width'])
centers
= plt.subplots(figsize=(4, 4))
fig, ax = sns.scatterplot(x='sepal.length', y='petal.length', hue='variety', style='cluster', ax=ax, data=iris)
ax
='sepal.length', y='petal.length', ax=ax, s=50, color='black')
centers.plot.scatter(x
plt.tight_layout() plt.show()
Spróbuj wygenerować serię wykresów na której wyświetlone zostaną wykresy dla pozostałych par współrzędnych
Wyznaczanie liczby klastrów
Elbow method
Liczbę klastrów można oszacować na podstawie analizy rozproszenia elementów. Analizując parametr inertia_
wybiera się taką wartość, przy której zmienia się szybkość spadku wartości parametru, może to sugerować pewne nasycenie.
= range(1,10)
k_range = [KMeans(k).fit(X) for k in k_range]
KM = [v.inertia_ for v in KM]
inertia
True)
plt.grid('Number of clusters')
plt.xlabel('Within-cluster sum of squares')
plt.ylabel('Elbow for KMeans clustering')
plt.title(
'b*-') plt.plot(K, inertia,
Czy bez wiedzy na temat liczby gatunków można wskazać liczbę klastrów? Ile będzie ona wynosić?
Metoda Silhouette
Metoda silhouette określa spójność poszczególnych klastrów, analizując odległość elementów od granicy podziału między klastrami. Wartość funkcji Silhouette wynosi: 1, gdy próbka leży blisko środka, 0, gdy leży na linii podziału dwóch klastrów.
Przeanalizuj kod i dostosuj go do wykorzystania w programie. Czy jesteś w stanie dla liczebności 2, 3, 4, 5 klastrów, które z nich mają największą spójność?
Metoda tSNE
Jest to metoda nienadzorowana i nieparametryczna służąca do redukcji wymiarowości. Efektem jest wyodrębnienie w zredukowanej przestrzeni zbiorów, które są spójne (dla których prawdopodobieństwo przynależności elementów do danej grupy jest największe)
Przeanalizuj przykład i spróbuj go zastosować do redukcji wymiarowości analizowanego datasetu.
- Przeanalizuj różne wartości parametru
perplexity
i wybierz najbardziej odpowiednią, tzn. taką która umożliwia separacje zbiorów. - Używając kodu z zajęć poprzednich sprawdź jaka byłaby dokładność klasyfikacji, gdyby do klasyfikacji wykorzystać zredukowaną przestrzeń złożoną z 2 składowych wyznaczonych za pomocą algorytmu tSNE?
Autorzy: Piotr Kaczmarek i Jakub Tomczyński