Uczenie nienadzorowane

Uczenie nienadzorowane w Pythonie

Benjamin Wilson

Director of Research at lateral.io

Uczenie nienadzorowane

  • Uczenie nienadzorowane odkrywa wzorce w danych
  • Np. klasteryzacja klientów według zakupów
  • Kompresja danych z użyciem wzorców zakupów (redukcja wymiarowości)
Uczenie nienadzorowane w Pythonie

Uczenie nadzorowane a nienadzorowane

  • Uczenie nadzorowane odkrywa wzorce do zadań predykcyjnych
  • Np. klasyfikacja guzów jako łagodne lub złośliwe (etykiety)
  • Uczenie nienadzorowane odkrywa wzorce w danych
  • ... ale bez konkretnego zadania predykcyjnego
Uczenie nienadzorowane w Pythonie

Zbiór danych iris

  • Pomiary wielu roślin irysa
  • Trzy gatunki irysa:
    • setosa
    • versicolor
    • virginica
  • Długość i szerokość płatka, długość i szerokość działki (the features of the dataset)

Irys

1 https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html
Uczenie nienadzorowane w Pythonie

Tablice, cechy i próbki

  • Dwuwymiarowa tablica NumPy
  • Kolumny to pomiary (cechy)
  • Wiersze reprezentują rośliny irysa (próbki)
Uczenie nienadzorowane w Pythonie

Dane iris są 4-wymiarowe

  • Próbki irysów to punkty w przestrzeni 4-wymiarowej
  • Wymiar = liczba cech
  • Zbyt wiele wymiarów do wizualizacji!
  • ... ale uczenie nienadzorowane daje wgląd w dane
Uczenie nienadzorowane w Pythonie

Klasteryzacja k-means

  • Znajduje klastry próbek
  • Liczba klastrów musi być określona
  • Zaimplementowane w sklearn ("scikit-learn")
Uczenie nienadzorowane w Pythonie
print(samples)
[[ 5.   3.3  1.4  0.2]
 [ 5.   3.5  1.3  0.3]
 ...
 [ 7.2  3.2  6.   1.8]]
from sklearn.cluster import KMeans

model = KMeans(n_clusters=3)
model.fit(samples)
KMeans(n_clusters=3)
labels = model.predict(samples)

print(labels)
[0 0 1 1 0 1 2 1 0 1 ...]
Uczenie nienadzorowane w Pythonie

Etykiety klastrów dla nowych próbek

  • Nowe próbki można przypisać do istniejących klastrów
  • k-means zapamiętuje średnią każdego klastra ("centroidy")
  • Znajduje najbliższy centroid dla każdej nowej próbki
Uczenie nienadzorowane w Pythonie

Etykiety klastrów dla nowych próbek

print(new_samples)
[[ 5.7  4.4  1.5  0.4]
 [ 6.5  3.   5.5  1.8]
 [ 5.8  2.7  5.1  1.9]]
new_labels = model.predict(new_samples)

print(new_labels)
[0 2 1]
Uczenie nienadzorowane w Pythonie

Wykresy rozproszenia

  • Wykres rozproszenia: długość działki vs. długość płatka
  • Każdy punkt reprezentuje próbkę irysa
  • Punkty zabarwione według etykiet klastrów
  • PyPlot (matplotlib.pyplot)

Wykres rozproszenia

Uczenie nienadzorowane w Pythonie

Wykresy rozproszenia

import matplotlib.pyplot as plt

xs = samples[:,0] ys = samples[:,2]
plt.scatter(xs, ys, c=labels)
plt.show()
Uczenie nienadzorowane w Pythonie

Czas na ćwiczenia!

Uczenie nienadzorowane w Pythonie

Preparing Video For Download...