CommencerCommencer gratuitement

Ajuster n_neighbors

n_neighbors est le paramètre le plus important de KNN. Lorsque vous ne connaissez pas le nombre d’anomalies dans le jeu de données (ce qui arrive souvent), vous ne pouvez pas utiliser la règle empirique qui recommande 20 voisins quand la contamination est inférieure à 10 %.

Dans ces cas, vous devrez ajuster n_neighbors. Entraînez-vous sur la version transformée du jeu de données females de l’exercice précédent. Elle a été chargée sous le nom females_transformed. L’estimateur KNN, ainsi que les fonctions evaluate_outlier_classifier et evaluate_regressor, sont également chargés.

Voici les définitions des fonctions à titre de rappel :

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)

Cet exercice fait partie du cours

Détection d’anomalies en Python

Afficher le cours

Instructions

  • Créez une liste de valeurs possibles pour n_neighbors dans cet ordre : 5, 10, 20
  • Instanciez un modèle KNN en fixant n_neighbors à la valeur de k courante dans la boucle.
  • Trouvez les inliers avec la fonction evaluate_outlier_classifier.
  • Calculez le RMSE avec evaluate_regressor et stockez le résultat dans scores en utilisant k comme clé et le RMSE comme valeur.

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

# 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)
Modifier et exécuter le code