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.