4 votos

¿Cómo usar cross_val_score en Scikit-Learn?

He estado usando cross_val_score en el paquete Scikit-Learn, junto con dataframes de Pandas y Numpy para encontrar un error de validación cruzada de 5 folds para entrenar un modelo de Regresión Lineal en datos de muestra. Sin embargo, también se me requiere ejecutar esto en combinación con la selección de mejor subconjunto de características para regresión lineal utilizando selección hacia atrás (que he implementado manualmente, simplemente usando bucles). Mi principal preocupación surgió cuando tuve que evaluar el error de validación cruzada para cada modelo obtenido en cada ronda (es decir, cada modelo tiene un número reducido de características).

Sé que generalmente, puedo encontrar el error de validación cruzada para un conjunto de datos de la siguiente manera:

seed = 7
np.random.seed(seed)
kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=seed)
linreg = LinearRegression()
models[p-1]["model"] = linreg.fit(X,y)
models[p-1]["error"] = cross_val_score(models[p-1]["model"], X, y, cv = kfold)

Sin embargo, si redujera el conjunto de características y entrenara mi modelo en consecuencia de esta manera:

models[p-1]["model"] = linreg.fit(X.ix[:,0:1],y)

Entonces, ¿cuál debería ser el dato que proporciono a cross_val? ¿Debería hacer esto?

models[p-1]["error"] = cross_val_score(models[p-1]["model"], X.ix[:,0:1], y, cv = kfold)

o esto:

models[p-1]["error"] = cross_val_score(models[p-1]["model"], X, y, cv = kfold)

Porque me dan diferentes errores de validación cruzada. El primero me da un error de 0.590917074397, mientras que el segundo me da 0.910187691851. Parece que no entiendo por qué la diferencia es tan grande. Además, no entiendo si cross_val_score está seleccionando las atributos adecuados de los datos cuando proporciono el conjunto completo X a cross_val_score después de entrenarlo en el subconjunto de características.

5voto

hyeomans Puntos 726

"fit" ajusta un modelo contra algunos datos de entrenamiento para que luego puedas hacer una predicción con datos diferentes.

"cross_val_score" divide los datos en, digamos, 5 pliegues. Luego, para cada pliegue ajusta los datos en 4 pliegues y evalúa el quinto pliegue. Luego te da los 5 puntajes con los que puedes calcular una media y una varianza para el puntaje. Haces validación cruzada para ajustar parámetros y obtener una estimación del puntaje. ¡Esto incluye ajustes, de hecho incluye 5 ajustes!

En tu caso, el ajuste no se utiliza. La primera validación cruzada es solo sobre 2 características. La segunda validación cruzada es sobre todas las características. El puntaje alto podría significar que más características es un mejor modelo; o podría significar sobreajuste.

0 votos

Gracias por la respuesta Simon. De hecho, más tarde descubrí el problema: resulta que el parámetro "modelo" en cross_val_score es simplemente un objeto del clasificador/modelo, y nada más, independientemente de si se ha utilizado para el ajuste o no. Así que todo lo que necesitaba hacer era pasar un objeto del clasificador, el conjunto de datos deseado y los valores objetivo a la función para obtener mi puntaje de validación cruzada.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X