Menu
CoddyTech

Klastry a znane etykiety

Część sekcji Uczenie nienadzorowane ścieżki Machine Learning w Coddy. Lekcja 13 z 51.

Gdy etykiety istnieją, ale algorytm k-średnich nigdy ich nie widział, sprawdź, co znalazł: pd.crosstab zlicza każdą parę klastra i etykiety.

labels = KMeans(n_clusters=3, n_init=10, random_state=0).fit_predict(X)
print(pd.crosstab(labels, kind))

Dla 150 ziaren kawy 3 rodzajów, pogrupowanych według długości i zawartości kofeiny: jeden wiersz na klaster, jedna kolumna na rodzaj:

Tabela 3 na 3 z liczbą ziaren: klastry w wierszach, rodzaje kawy w kolumnach: arabica, liberica, robusta. Klaster 0 zawiera 49 ziaren robusty; klaster 1 zawiera 48 ziaren arabiki, 3 ziarna liberiki i 1 ziarno robusty; klaster 2 zawiera 47 ziaren liberiki i 2 ziarna arabiki

Każdy klaster składa się głównie z jednego rodzaju; tylko 6 ziarenek fasoli znalazło się w innym klastrze. A k-means nigdy nie widział etykiety.

Klastry nie są jednak klasami. Bliskie dopasowanie oznacza, że klasy różnią się danymi. Słabe dopasowanie to wynik analizy, a nie błąd.

challenge icon

Wyzwanie

Średni

Czy klastry k-means pozwalają rozpoznać gatunki irysów? Kod startowy skaluje kwiaty, przechowuje ich nazwy w species, odczytuje k i tworzy klastry.

  1. Utwórz tabelę krzyżową klastrów i gatunków.
  2. Dla każdego gatunku wypisz jego największą liczebność w jednym klastrze, spośród wszystkich osobników tego gatunku.
  3. Policz klastry zawierające tylko jeden gatunek.

Dla innego ogrodu i k = 3:

setosa: 48 of 50 share a cluster
versicolor: 41 of 50 share a cluster
virginica: 33 of 50 share a cluster
Clusters with one species: 0 of 3

Spróbuj swoich sił

import pandas as pd
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans

# 150 kwiatów irysa po przeskalowaniu oraz nazwa gatunku każdego z nich, ukryta przed k-means
iris = load_iris()
X = StandardScaler().fit_transform(iris.data)
species = iris.target_names[iris.target]

k = int(input())
labels = KMeans(n_clusters=k, n_init=10, random_state=0).fit_predict(X)

# Napisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nienadzorowane

Poćwicz samodzielnie: Kompilator Python online