ComenzarEmpieza gratis

Ajustar n_neighbors

n_neighbors es el parámetro más importante de KNN. Cuando no tienes claro cuántos outliers hay en el conjunto de datos (algo muy habitual), no puedes usar la regla general que sugiere usar 20 vecinos cuando la contaminación es inferior al 10%.

En estos casos, tendrás que ajustar n_neighbors. Practica el proceso con la versión transformada del conjunto females del ejercicio anterior. Ya se ha cargado como females_transformed. También están cargados el estimador KNN y las funciones evaluate_outlier_classifier y evaluate_regressor.

Aquí tienes los cuerpos de las funciones como recordatorio:

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)

Este ejercicio forma parte del curso

Detección de anomalías en Python

Ver curso

Instrucciones del ejercicio

  • Crea una lista de valores posibles para n_neighbors en este orden: 5, 10, 20
  • Instancia un modelo KNN, estableciendo n_neighbors al valor actual de k en el bucle.
  • Encuentra los inliers usando la función evaluate_outlier_classifier.
  • Calcula el RMSE con evaluate_regressor y guarda el resultado en scores, usando k como clave y el RMSE como valor.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

# 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)
Editar y ejecutar código