Cuando variamos las características que se utilizan en el modelo, estamos afectando a los datos que utiliza el modelo, por otro lado, variar el valor de k afecta al comportamiento del modelo independientemente de los datos reales que se utilizan al hacer las predicciones, en otras palabras, estamos afectando al rendimiento del modelo sin intentar cambiar los datos que se utilizan.
Los valores que afectan al comportamiento y al rendimiento de un modelo y que no están relacionados con los datos utilizados se denominan hiperparámetros, el proceso de encontrar el valor óptimo de los hiperparámetros se conoce como optimización de hiperparámetros; una técnica de optimización de hiperparámetros sencilla pero común se conoce como búsqueda en cuadrícula, que consiste en:
La búsqueda en la cuadrícula se reduce esencialmente a evaluar el rendimiento del modelo con diferentes valores de k y a seleccionar el valor de k que dé lugar al menor error, mientras que la búsqueda en cuadrícula puede llevar mucho tiempo cuando se
trabaja con grandes conjuntos de datos, los datos con los que estamos trabajando en esta misión son pequeños y este proceso es relativamente rápido.
Confirmemos que la búsqueda en cuadrícula funcionará rápidamente para el conjunto de datos con el que estamos trabajando, observando primero cómo cambia el rendimiento del modelo a medida que aumentamos el valor de k de 1 a 5, si recuerdas, establecimos
5 como valor de k para las dos últimas misiones. Utilicemos las características de la última misión que dieron lugar a la mejor precisión del modelo:
|
|
from sklearn.neighbors import KNeighborsRegressor from sklearn.metrics import mean_squared_error features = ['accommodates', 'bedrooms', 'bathrooms', 'number_of_reviews"] hyper_params = [1, 2, 3, 4, 5] mse_values = list() for hp in hyper_params: knn = KNeighborsRegressor (n_neighbors=hp, algorithm='brute') knn.fit(train_df[features], train_df['price']) predictions = knn.predict(test_df[features]) mse = mean_squared_error(test_df['price'], predictions) mse_values.append(mse) print(mse_values) |