n_neighbors abstimmen
n_neighbors ist der wichtigste Parameter von KNN. Wenn du die Anzahl der Ausreißer im Datensatz nicht kennst (was oft vorkommt), kannst du die Faustregel nicht anwenden, die bei einer Kontamination unter 10 % 20 Nachbarn empfiehlt.
In solchen Fällen musst du n_neighbors abstimmen. Übe den Prozess an der transformierten Version des females-Datensatzes aus der letzten Übung. Er wurde als females_transformed geladen. Der KNN-Estimator sowie die Funktionen evaluate_outlier_classifier und evaluate_regressor sind ebenfalls geladen.
Hier zur Erinnerung die Funktionskörper:
def evaluate_outlier_classifier(model, data, threshold=.75):
model.fit(data)
probs = model.predict_proba(data)
inliers = data[probs[:, 1] <= threshold]
return inliers
def evaluate_regressor(inliers):
X, y = inliers.drop("weightkg", axis=1), inliers[['weightkg']]
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=10, train_size=0.8)
lr = LinearRegression()
lr.fit(X_train, y_train)
preds = lr.predict(X_test)
rmse = root_mean_squared_error(y_test, preds)
return round(rmse, 3)
Diese Übung ist Teil des Kurses
Anomalieerkennung mit Python
Anleitung zur Übung
- Erstelle eine Liste möglicher Werte für
n_neighborsin genau dieser Reihenfolge: 5, 10, 20. - Instanziiere ein
KNN-Modell und setzen_neighborsim Loop auf den aktuellen Wertk. - Finde die Inlier mit der Funktion
evaluate_outlier_classifier. - Berechne den RMSE mit
evaluate_regressorund speichere das Ergebnis inscores, wobeikder Schlüssel und der RMSE der Wert ist.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# Create a list of values for n_neigbors
n_neighbors = [____, ____, ____]
scores = dict()
for k in n_neighbors:
# Instantiate KNN with the current k
knn = ____(____, n_jobs=-1)
# Find the inliers with the current KNN
inliers = ____(____, ____, .50)
# Calculate and store RMSE into scores
scores[____] = ____
print(scores)