Estoy tratando de entender el uso de la validación cruzada de kfolds del módulo sklearn python.
Entiendo el flujo básico:
model = LogisticRegression()
model.fit(xtrain, ytrain)
model.predict(ytest)
Donde estoy confundido es usar sklearn kfolds con puntaje de val cruzado. Según tengo entendido, la función cross_val_score se ajustará al modelo y predecirá en los kfolds, lo que le dará una puntuación de precisión para cada pliegue.
por ejemplo, usando un código como este:
kf = KFold(n=data.shape[0], n_folds=5, shuffle=True, random_state=8) lr = linear_model.LogisticRegression() accuracies = cross_val_score(lr, X_train,y_train, scoring='accuracy', cv = kf)
Entonces, si tengo un conjunto de datos con datos de entrenamiento y prueba, y uso la función cross_val_score
con kfolds para determinar la precisión del algoritmo en mis datos de entrenamiento para cada pliegue, ¿el model
ahora está ajustado y listo para la predicción en los datos de prueba? Entonces, en el caso anterior usando lr.predict
No, el modelo no está ajustado. Mirando el código fuente de cross_val_score
:
scores=parallel(delayed(_fit_and_score)(clone(estimator),X,y,scorer, train,test,verbose,None,fit_params)
Como puede ver, cross_val_score
clona el estimador antes de ajustarle los datos de entrenamiento de plegado. cross_val_score
le dará una serie de puntuaciones que puede analizar para saber cómo se desempeña el estimador para diferentes pliegues de los datos para verificar si se ajusta demasiado a los datos o no. Puedes saber más al respecto aquí
Debe ajustar todos los datos de entrenamiento al estimador una vez que esté satisfecho con los resultados de cross_val_score
, antes de poder usarlos para predecir los datos de prueba.