I cluster come caratteristiche
Fa parte della sezione Apprendimento non supervisionato del percorso Machine Learning di Coddy. Lezione 40 di 51.
Un modello lineare non può curvarsi. Il segnale telefonico in tre villaggi si attenua con la distanza dal ripetitore di ciascun villaggio, una forma che la sola posizione non mostra:
k-means trova i villaggi. km.transform restituisce la distanza di ogni riga da ciascun centro e .min(axis=1) mantiene quella più vicina:
km = KMeans(n_clusters=3, n_init=10, random_state=0).fit(X_train)
near_train = km.transform(X_train).min(axis=1)
near_test = km.transform(X_test).min(axis=1)
X_train2 = np.column_stack([X_train, near_train])
X_test2 = np.column_stack([X_test, near_test])Con quell’unica colonna in più, il coefficiente R quadrato di test di un modello lineare sale da 0.000 a 0.886.
Adatta k-means solo alle righe di addestramento, come faresti con uno scaler, poi trasforma entrambi gli insiemi.
Sfida
MedioIl team audio di un festival vuole sapere quanto è alto il volume nei punti in cui si trovano le persone. Il codice iniziale suddivide crowd.csv, legge k e stampa il punteggio basato solo sulla posizione.
- Adatta k-means con
kcluster alle posizioni di training. - Aggiungi la distanza di ogni riga dal centro più vicino come terza colonna, in entrambi gli insiemi.
- Stampa il nuovo R quadrato sul test e il guadagno, con 3 decimali.
Per un altro festival e k = 4:
Position only: R squared 0.097
With the nearest of 4 centers: R squared 0.734
Gain: 0.637Provalo tu
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.cluster import KMeans
# 250 partecipanti al festival: dove si trovavano (m) e il livello sonoro in quel punto (dB)
crowd = pd.read_csv("crowd.csv")
X = crowd[["x_m", "y_m"]].to_numpy()
y = crowd["sound_db"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
k = int(input())
# Adatta una regressione lineare alle colonne di addestramento e restituisce il suo R al quadrato sulle colonne di test
def test_r2(A_train, A_test):
model = LinearRegression().fit(A_train, y_train)
return model.score(A_test, y_test)
before = test_r2(X_train, X_test)
print(f"Position only: R squared {before:.3f}")
# Scrivi il tuo codice qui sotto
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Apprendimento non supervisionato
1Trovare gruppi
Apprendimento senza etichetteMisurare la similaritàK-Means a manoK-Means in scikit-learnRiepilogo: iscritti alla palestra4Clustering gerarchico
Unire passo dopo passoModelli agglomerativiDendrogrammiRiepilogo: razze canine7PCA nella pratica
Vedere 64 dimensioniComponenti come schemiComprimere e ricostruirePCA prima di un modelloRiepilogo: scanner facciale10Progetto: Esplorare le cifre
Osserva le cifreRiduci con PCARaggruppa le cifreDai un nome ai gruppiTrova gli elementi insoliti2Scelta di k
InerziaIl metodo del gomitoPunteggi silhouetteScala prima del clusteringRiepilogo: zone di consegna3Interpretare i cluster
Caratterizzare i clusterCentri in unità realiCluster ed etichette noteQuando K-Means fallisceRiepilogo: degustazione del tè9Cluster al lavoro
Segmenti di clientelaI cluster come caratteristicheColori delle immaginiRipasso: stati d’animo delle playlistEsercitati da solo: Compilatore Python online