Aan de slagBegin gratis

n_neighbors afstemmen

n_neighbors is de belangrijkste parameter van KNN. Als je niet zeker weet hoeveel uitschieters er in de gegevensset zitten (wat vaak voorkomt), kun je de vuistregel niet gebruiken die 20 buren aanraadt wanneer de contaminatie onder 10% ligt.

In zulke gevallen moet je n_neighbors afstemmen. Oefen dit proces op de getransformeerde versie van de females-gegevensset uit de vorige oefening. Deze is geladen als females_transformed. De KNN-schatter en de functies evaluate_outlier_classifier en evaluate_regressor zijn ook geladen.

Hier zijn de functie-implementaties ter herinnering:

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)

Deze oefening maakt deel uit van de cursus

Anomaly Detection in Python

Bekijk cursus

Oefeninstructies

  • Maak een lijst met mogelijke waarden voor n_neighbors in deze volgorde: 5, 10, 20
  • Instantieer een KNN-model en stel n_neighbors in op de huidige k in de lus.
  • Vind de inliers met de functie evaluate_outlier_classifier.
  • Bereken de RMSE met evaluate_regressor en sla het resultaat op in scores, met k als sleutel en de RMSE als waarde.

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

# 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 bewerken en uitvoeren