Implementatie van k-NN
KNeighborsClassifier
Het implementeren van k-Nearest Neighbors is vrij eenvoudig. Het enige wat nodig is, is het importeren en gebruiken van de KNeighborsClassifier klasse.
Nadat de klasse is geïmporteerd en een klasse-object is aangemaakt zoals hieronder:
# Importing the class
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=3)
Moet de trainingsdata worden aangeboden met de .fit() methode:
knn.fit(X_scaled, y)
Dat is alles. Nu kunnen nieuwe waarden worden voorspeld.
y_pred = knn.predict(X_new_scaled)
Schalen van de data
Houd er echter rekening mee dat de data geschaald moet worden. StandardScaler wordt hiervoor vaak gebruikt:
Je dient xˉ (gemiddelde) en s (standaardafwijking) te berekenen op de trainingsset met behulp van de .fit() of .fit_transform() methode. Deze stap zorgt ervoor dat de schaalparameters worden afgeleid van de trainingsgegevens.
Wanneer je een testset hebt om te voorspellen, moet je dezelfde xˉ en s gebruiken om deze gegevens voor te bewerken met .transform(). Deze consistentie is cruciaal omdat het ervoor zorgt dat de testgegevens op dezelfde manier als de trainingsgegevens worden geschaald, waardoor de integriteit van de voorspellingen van het model behouden blijft.
# Importing the class
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
# Calculating x̄ and s and scaling `X_train`
X_train_scaled = scaler.fit_transform(X_train)
# Scaling `X_test` with x̄ and s calculated in the previous line
X_test_scaled = scaler.transform(X_test)
Als je verschillende xˉ en s gebruikt voor de trainingsset en de testset, zullen je voorspellingen waarschijnlijk slechter zijn.
Voorbeeld
Laten we een eenvoudig voorbeeld bekijken waarin we willen voorspellen of een persoon Star Wars VI leuk zal vinden op basis van hun beoordelingen voor Star Wars IV en V. De gegevens zijn afkomstig uit The Movies Dataset met extra voorbewerking. Een persoon wordt geacht Star Wars VI leuk te vinden als hij deze film hoger dan 4 (uit 5) beoordeelt.
Na het trainen van ons model doen we voorspellingen voor twee individuen uit de testset. De eerste persoon beoordeelt Star Wars IV en V met respectievelijk 5 en 5, terwijl de tweede persoon deze beoordeelt met 4.5 en 4.
123456789101112131415161718192021222324252627from 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') # Dropping the target column and leaving only features as `X_train` X_train = df.drop('StarWars6', axis=1) # Storing target column as `y_train`, which contains 1 (liked SW 6) or 0 (didn't like SW 6) y_train = df['StarWars6'] # Test set of two people X_test = np.array([[5, 5], [4.5, 4]]) # Scaling the data scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) # Building a model and predict new instances knn = KNeighborsClassifier(n_neighbors=13).fit(X_train, y_train) y_pred = knn.predict(X_test) print(y_pred)
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Can you explain what the output of the code means?
How do I choose the best value for n_neighbors in KNeighborsClassifier?
Why is it important to scale the data before using KNeighborsClassifier?
Awesome!
Completion rate improved to 4.17
Implementatie van k-NN
Veeg om het menu te tonen
KNeighborsClassifier
Het implementeren van k-Nearest Neighbors is vrij eenvoudig. Het enige wat nodig is, is het importeren en gebruiken van de KNeighborsClassifier klasse.
Nadat de klasse is geïmporteerd en een klasse-object is aangemaakt zoals hieronder:
# Importing the class
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=3)
Moet de trainingsdata worden aangeboden met de .fit() methode:
knn.fit(X_scaled, y)
Dat is alles. Nu kunnen nieuwe waarden worden voorspeld.
y_pred = knn.predict(X_new_scaled)
Schalen van de data
Houd er echter rekening mee dat de data geschaald moet worden. StandardScaler wordt hiervoor vaak gebruikt:
Je dient xˉ (gemiddelde) en s (standaardafwijking) te berekenen op de trainingsset met behulp van de .fit() of .fit_transform() methode. Deze stap zorgt ervoor dat de schaalparameters worden afgeleid van de trainingsgegevens.
Wanneer je een testset hebt om te voorspellen, moet je dezelfde xˉ en s gebruiken om deze gegevens voor te bewerken met .transform(). Deze consistentie is cruciaal omdat het ervoor zorgt dat de testgegevens op dezelfde manier als de trainingsgegevens worden geschaald, waardoor de integriteit van de voorspellingen van het model behouden blijft.
# Importing the class
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
# Calculating x̄ and s and scaling `X_train`
X_train_scaled = scaler.fit_transform(X_train)
# Scaling `X_test` with x̄ and s calculated in the previous line
X_test_scaled = scaler.transform(X_test)
Als je verschillende xˉ en s gebruikt voor de trainingsset en de testset, zullen je voorspellingen waarschijnlijk slechter zijn.
Voorbeeld
Laten we een eenvoudig voorbeeld bekijken waarin we willen voorspellen of een persoon Star Wars VI leuk zal vinden op basis van hun beoordelingen voor Star Wars IV en V. De gegevens zijn afkomstig uit The Movies Dataset met extra voorbewerking. Een persoon wordt geacht Star Wars VI leuk te vinden als hij deze film hoger dan 4 (uit 5) beoordeelt.
Na het trainen van ons model doen we voorspellingen voor twee individuen uit de testset. De eerste persoon beoordeelt Star Wars IV en V met respectievelijk 5 en 5, terwijl de tweede persoon deze beoordeelt met 4.5 en 4.
123456789101112131415161718192021222324252627from 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') # Dropping the target column and leaving only features as `X_train` X_train = df.drop('StarWars6', axis=1) # Storing target column as `y_train`, which contains 1 (liked SW 6) or 0 (didn't like SW 6) y_train = df['StarWars6'] # Test set of two people X_test = np.array([[5, 5], [4.5, 4]]) # Scaling the data scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) # Building a model and predict new instances knn = KNeighborsClassifier(n_neighbors=13).fit(X_train, y_train) y_pred = knn.predict(X_test) print(y_pred)
Bedankt voor je feedback!