Diferencia entre cross_val_score y cross_val_predict

Quiero evaluar una construcción de modelo de regresión con scikitlearn usando validación cruzada y confundiéndome, ¿cuál de las dos funcionescross_val_score ycross_val_predict Debería usar Una opción sería:

cvs = DecisionTreeRegressor(max_depth = depth)
scores = cross_val_score(cvs, predictors, target, cv=cvfolds, scoring='r2')
print("R2-Score: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))

Otro, para usar las predicciones cv con el estándarr2_score:

cvp = DecisionTreeRegressor(max_depth = depth)
predictions = cross_val_predict(cvp, predictors, target, cv=cvfolds)
print ("CV R^2-Score: {}".format(r2_score(df[target], predictions_cv)))

Supongo que ambos métodos son válidos y dan resultados similares. Pero ese es solo el caso con pequeños pliegues en k. Mientras que r ^ 2 es aproximadamente el mismo para 10-cv-cv, se vuelve cada vez más bajo para valores k más altos en el caso de la primera versión que usa "cross_vall_score". La segunda versión no se ve afectada principalmente por el cambio de números de pliegues.

¿Es de esperar este comportamiento? ¿Me falta algo de comprensión sobre el CV en SKLearn?

Respuestas a la pregunta(2)

Su respuesta a la pregunta