Les clusters comme caractéristiques
Fait partie de la section Apprentissage non supervisé du Journey Machine Learning de Coddy. Leçon 40 sur 51.
Un modèle linéaire ne peut pas se courber. Le signal téléphonique dans trois villages s’affaiblit à mesure que l’on s’éloigne du relais de chaque village, une forme que la position seule ne permet pas de représenter :
k-means trouve les villages. km.transform donne la distance de chaque ligne à chaque centre, et .min(axis=1) conserve le plus proche :
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])Avec cette colonne supplémentaire, le R carré de test d’un modèle linéaire passe de 0.000 à 0.886.
Ajuste k-means uniquement sur les lignes d’entraînement, comme un scaler, puis transformez les deux ensembles.
Défi
MoyenL’équipe son d’un festival veut savoir quel est le niveau sonore là où les gens se tiennent. Le code de départ sépare crowd.csv, lit k et affiche le score obtenu en utilisant uniquement la position.
- Ajuste un modèle k-means avec
kclusters sur les positions d’entraînement. - Ajoute la distance de chaque ligne à son centre le plus proche comme troisième colonne, dans les deux ensembles.
- Affiche le nouveau R² de test et le gain, avec 3 décimales.
Pour un autre festival et k = 4 :
Position only: R squared 0.097
With the nearest of 4 centers: R squared 0.734
Gain: 0.637Essayez vous-même
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 festivaliers : leur position (m) et le niveau sonore à cet endroit (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())
# Ajuste une régression linéaire sur les colonnes d’entraînement et renvoie son R carré sur les colonnes de 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}")
# Écrivez votre code ci-dessous
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Apprentissage non supervisé
1Découvrir des groupes
Apprendre sans étiquettesMesurer la similaritéK-Means à la mainK-Means avec scikit-learnRécapitulatif : les membres de la salle de sport4Classification hiérarchique
Fusion étape par étapeModèles agglomératifsDendrogrammesRécapitulatif : races de chiens7L’ACP en pratique
Visualiser 64 dimensionsLes composantes comme motifsCompresser et reconstruireL’ACP avant un modèleRécapitulatif : scanner de visages10Projet : Explorateur de chiffres
Observer les chiffresRéduire avec la PCARegrouper les chiffresNommer les groupesRepérer les intrus2Choisir k
InertieLa méthode du coudeScores de silhouetteMettre à l’échelle avant le clusteringRécapitulatif : zones de livraison3Interpréter les clusters
Caractériser les clustersCentres dans les unités réellesClusters et étiquettes connuesQuand K-Means échoueRécapitulatif : dégustation de thé6Moins de dimensions
Trop de caractéristiquesProjectionsPCAVariance expliquéeRécapitulatif : chants d’oiseaux9Les clusters en action
Segments de clientèleLes clusters comme caractéristiquesCouleurs des imagesRécapitulatif : ambiances des playlistsEntraînez-vous par vous-même : Compilateur Python en ligne