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
Instrucciones del ejercicio
- Crea una lista de valores posibles para
n_neighborsen este orden: 5, 10, 20 - Instancia un modelo
KNN, estableciendon_neighborsal valor actual deken el bucle. - Encuentra los inliers usando la función
evaluate_outlier_classifier. - Calcula el RMSE con
evaluate_regressory guarda el resultado enscores, usandokcomo 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)