Ottimizzare n_neighbors
n_neighbors è il parametro più importante di KNN. Quando non sei sicuro del numero di outlier nel dataset (cosa che capita spesso), non puoi usare la regola pratica che suggerisce 20 vicini quando la contaminazione è sotto il 10%.
In questi casi, dovrai ottimizzare n_neighbors. Esercitati sul dataset females trasformato dell’esercizio precedente, caricato come females_transformed. Sono già caricati anche l’estimatore KNN e le funzioni evaluate_outlier_classifier ed evaluate_regressor.
Ecco i corpi delle funzioni come promemoria:
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)
Questo esercizio fa parte del corso
Rilevamento delle anomalie in Python
Istruzioni dell'esercizio
- Crea una lista di possibili valori per
n_neighborsin questo ordine: 5, 10, 20 - Istanzia un modello
KNN, impostandon_neighborsal valore corrente diknel loop. - Trova gli inliers usando la funzione
evaluate_outlier_classifier. - Calcola l’RMSE con
evaluate_regressore salva il risultato inscores, usandokcome chiave e l’RMSE come valore.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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)