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
Oefeninstructies
- Maak een lijst met mogelijke waarden voor
n_neighborsin deze volgorde: 5, 10, 20 - Instantieer een
KNN-model en steln_neighborsin op de huidigekin de lus. - Vind de inliers met de functie
evaluate_outlier_classifier. - Bereken de RMSE met
evaluate_regressoren sla het resultaat op inscores, metkals 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)