LoslegenKostenlos loslegen

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

Kurs anzeigen

Anleitung zur Übung

  • Erstelle eine Liste möglicher Werte für n_neighbors in genau dieser Reihenfolge: 5, 10, 20.
  • Instanziiere ein KNN-Modell und setze n_neighbors im Loop auf den aktuellen Wert k.
  • Finde die Inlier mit der Funktion evaluate_outlier_classifier.
  • Berechne den RMSE mit evaluate_regressor und speichere das Ergebnis in scores, wobei k der 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)
Code bearbeiten und ausführen