Mettre les voisins à l’échelle
Fait partie de la section Apprentissage supervisé du Journey Machine Learning de Coddy. Leçon 9 sur 58.
k-NN mesure la distance, donc une caractéristique exprimée par de grands nombres prend le dessus sur les autres, comme l’avertissait la section 2. Ici, la distance à la rivière, en mètres, éclipse l’altitude :
Commence par mettre à l’échelle. Ajuste le transformateur uniquement sur les lignes d’entraînement, puis transforme les deux ensembles :
scaler = StandardScaler()
X_train_s = scaler.fit_transform(X_train)
X_test_s = scaler.transform(X_test)
model = KNeighborsClassifier()
model.fit(X_train_s, y_train)
print(model.score(X_test_s, y_test))Cette instruction affiche 0.925, contre 0.6 auparavant. Les lignes de test restent inconnues : le scaler n’en tire aucun apprentissage.
Défi
FacileUn compteur intelligent devine quel appareil est en marche à partir de sa puissance (watts) et de sa durée de fonctionnement (minutes), dans meter.csv. Le code de départ lit k et affiche l’exactitude de k-NN sur les caractéristiques brutes.
- Ajuste un
StandardScalersur les lignes d’entraînement et transforme les deux ensembles. - Ajuste un modèle k-NN avec le même k sur les lignes mises à l’échelle ; affiche son exactitude à 3 décimales.
- Affiche le gain.
Pour un autre foyer et k = 5 :
Unscaled accuracy: 0.65
Scaled accuracy: 0.875
Scaling gains 0.225Essayez vous-même
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
# Une ligne par utilisation d’un appareil : puissance en watts, durée de fonctionnement en minutes, appareil utilisé
meter = pd.read_csv("meter.csv")
X = meter[["watts", "minutes"]]
y = meter["appliance"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
k = int(input())
# k-NN sur les caractéristiques brutes
raw_model = KNeighborsClassifier(n_neighbors=k)
raw_model.fit(X_train, y_train)
raw = raw_model.score(X_test, y_test)
print(f"Unscaled accuracy: {round(raw, 3)}")
# É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 supervisé
1Votre premier modèle
Apprendre à partir d’exemplesJeux d’entraînement et de testAjuster et prédireÉvaluer un modèleRécapitulatif : trieur de graines4Régression logistique
Prédictions oui ou nonLe seuil de décisionLes poids comme indicesPlusieurs classesRécapitulatif : filtre anti-spam2Plus proches voisins
Comment k-NN prend ses décisionsChoisir kFrontières de décisionMettre les voisins à l’échelleRécapitulatif : voisins et vin5Évaluer les classificateurs
La matrice de confusionPrécision et rappelLe score F1Classes déséquilibréesCourbes ROCRécapitulatif : test de dépistage8Validation croisée
Validation K-foldComparer les modèles équitablementRecherche par grilleRécapitulatif : réparations de skateboard11Projet : espèces de manchots
À la rencontre des manchotsPréparer les donnéesChoisir un modèleOptimiser le modèle gagnantDéployer le modèle3Régression linéaire
Prédire des nombresPlusieurs caractéristiquesMesurer les erreursGraphiques des résidusRécapitulatif : locations de vélos6Arbres de décision
Les arbres posent des questionsLire un arbreProfondeur de l’arbreImportance des caractéristiquesRécapitulatif : décisions de prêtEntraînez-vous par vous-même : Compilateur Python en ligne