IniziaInizia gratis

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

Visualizza il corso

Istruzioni dell'esercizio

  • Crea una lista di possibili valori per n_neighbors in questo ordine: 5, 10, 20
  • Istanzia un modello KNN, impostando n_neighbors al valore corrente di k nel loop.
  • Trova gli inliers usando la funzione evaluate_outlier_classifier.
  • Calcola l’RMSE con evaluate_regressor e salva il risultato in scores, usando k come 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)
Modifica ed esegui il codice