Menu
CoddyTech

Cluster ed etichette note

Fa parte della sezione Apprendimento non supervisionato del percorso Machine Learning di Coddy. Lezione 13 di 51.

Quando le etichette esistono ma k-means non le ha mai viste, controlla cosa ha trovato: pd.crosstab conta ogni coppia di cluster ed etichetta.

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

Per 150 chicchi di caffè di 3 tipi, raggruppati in base alla lunghezza e al contenuto di caffeina: una riga per gruppo, una colonna per tipo:

Tabella 3 per 3 dei conteggi, con i gruppi in verticale e i tipi di caffè in orizzontale: arabica, liberica, robusta. Il gruppo 0 contiene 49 chicchi di robusta; il gruppo 1 contiene 48 chicchi di arabica, 3 di liberica e 1 di robusta; il gruppo 2 contiene 47 chicchi di liberica e 2 di arabica

Ogni cluster è composto per lo più da un solo tipo; solo 6 fagioli sono finiti fuori posto. E k-means non ha mai visto un'etichetta.

I cluster, però, non sono classi. Una corrispondenza stretta significa che le classi differiscono nei dati. Una corrispondenza scarsa è un risultato, non un bug.

challenge icon

Sfida

Medio

I cluster di k-means individuano le specie di iris? Il codice iniziale normalizza i fiori, conserva i loro nomi in species, legge k e li raggruppa in cluster.

  1. Crea una tabella incrociata dei cluster rispetto alle specie.
  2. Per ogni specie, stampa il conteggio più alto in un cluster, sul totale.
  3. Conta i cluster che contengono una sola specie.

Per un altro giardino e 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

Provalo tu

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

# 150 fiori di iris, con dati riscalati, e il nome della specie di ciascuno, nascosto a 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)

# Scrivi il tuo codice qui sotto
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento non supervisionato

Esercitati da solo: Compilatore Python online