Contenu du cours
Classification Avec Python
Classification Avec Python
Implémentation de k-NN
KNeighborsClassifier
La mise en œuvre des k-Nearest Neighbors est assez simple. Nous avons seulement besoin d'importer et d'utiliser la classe KNeighborsClassifier
.
Une fois que vous avez importé la classe et créé un objet de classe comme ceci :
Vous devez lui fournir les données d'entraînement en utilisant la méthode .fit()
:
Et c'est tout ! Vous pouvez maintenant prédire de nouvelles valeurs.
Mise à l'échelle des données
Cependant, rappelez-vous que les données doivent être mises à l'échelle. Regardons de plus près le StandardScaler
couramment utilisé pour mettre à l'échelle les données.
StandardScaler
soustrait simplement la moyenne de l'échantillon puis divise le résultat par l'écart-type de l'échantillon.
Remarque
Si les termes moyenne de l'échantillon et écart-type de l'échantillon vous sont inconnus, vous pouvez consulter notre Apprendre les statistiques avec Python. Mais il n'est pas obligatoire de comprendre à quoi servent ces chiffres, vous pouvez donc simplement ignorer les significations de x̄ et s et continuer :)
Vous devez calculer x̄ et s sur l'ensemble d'entraînement (en utilisant soit .fit()
soit .fit_transform()
) et utiliser les mêmes x̄ et s pour prétraiter les données que vous prédisez (en utilisant .transform()
). Voici un exemple :
Si vous utilisez différents x̄ et s pour l'ensemble d'entraînement et les nouvelles instances, vos prédictions seront probablement moins précises.
Exemple
Pour effectuer une classification k-NN en Python, vous devez utiliser KNeighborsClassifier
et StandardScaler
. Votre code ressemblera à ceci :
Voici un exemple simple où nous essayons de prédire si une personne aimera Star Wars VI en fonction de ses évaluations pour Star Wars IV et V. Nous lirons les données à partir de l'URL.
from sklearn.neighbors import KNeighborsClassifier from sklearn.preprocessing import StandardScaler import numpy as np import pandas as pd import warnings warnings.filterwarnings('ignore') df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/starwars_binary.csv') X = df[['StarWars4_rate', 'StarWars5_rate']] # Store feature columns as X y = df['StarWars6'] # Store target column as y (contains 1(liked SW 6) or 0(didn't like SW 6) X_new = np.array([[5, 5], [4.5, 4]]) # 2 insances to predict, ratings [5, 5] and [4.5 for Star Wars IV and 4 for V] # Scale the data scaler = StandardScaler() X_scaled = scaler.fit_transform(X) X_new_scaled = scaler.transform(X_new) # Build a model and predict new instances knn = KNeighborsClassifier(n_neighbors=13).fit(X_scaled, y) y_pred = knn.predict(X_new_scaled) print(y_pred)
Les données sont tirées de The Movies Dataset avec un prétraitement supplémentaire. Une personne est considérée comme aimant Star Wars VI si elle l'a noté plus de 4/5.
Merci pour vos commentaires !