11 votos

¿Por qué es una gran elección de K bajar mi cruz de validación de puntuación?

Jugando con la Vivienda de Boston conjunto de datos y RandomForestRegressor (w/ parámetros por defecto) en scikit-learn, me di cuenta de algo extraño: la media de la validación cruzada puntuación disminuyó a medida que aumentó el número de pliegues más allá de 10. Mi cruz-la validación de la estrategia fue la siguiente:

cv_met = ShuffleSplit(n_splits=k, test_size=1/k)
scores = cross_val_score(est, X, y, cv=cv_met)

... donde num_cvs fue variado. Me puse test_size a 1/num_cvs a espejo el tren de prueba/tamaño de división de comportamiento de k-fold CV. Básicamente, quería algo como k-fold CV, pero también necesitaba aleatoriedad (de ahí ShuffleSplit).

Este ensayo se repitió varias veces, y promedio de las puntuaciones y las desviaciones estándar fueron graficados.

Area of circle ~ K in K-fold cross-validation

(Tenga en cuenta que el tamaño de k está indicado por el área del círculo; la desviación estándar está en el eje Y.)

Constantemente, aumentando k (de 2 a 44) daría lugar a un breve aumento de la puntuación, seguido por una disminución constante como k mayor (más allá de ~10 pliegues)! En todo caso, yo esperaría más datos de entrenamiento para llevar a un menor aumento en la puntuación!

Actualización

El cambio de los criterios de calificación a error absoluto promedio de los resultados en el comportamiento que se esperaba: la puntuación mejora con un aumento en el número de subconjuntos de K-fold CV, en lugar de acercarse a 0 (como con el valor predeterminado, 'r2'). La pregunta sigue siendo ¿por qué el valor predeterminado de puntuación métrica resulta en un rendimiento deficiente en ambos significan y SEXUAL, las métricas para un creciente número de pliegues.

1voto

Phylum Puntos 48

r^2 puntuación es indefinido cuando se aplica a una sola muestra (por ejemplo, dejar-uno-fuera CV).

r^2 no es bueno para la evaluación de pequeños conjuntos de la prueba: cuando se utiliza para evaluar suficientemente pequeño conjunto de pruebas, la puntuación puede ser mucho en los negativos, a pesar de las buenas predicciones.

Dado una sola muestra, una buena predicción para un dominio dado, puede parecer terrible:

from sklearn.metrics import r2_score
true = [1]
predicted = [1.01] # prediction of a single value, off by 1%
print(r2_score(true, predicted))
# 0.0

Aumentar el tamaño de la prueba de conjunto (manteniendo la precisión de las predicciones de la misma), y de repente el r^2 puntuación aparece casi perfecto:

true = [1, 2, 3]
predicted = [1.01, 2.02, 3.03]
print(r2_score(true, predicted))
# 0.9993

Toma el otro extremo, si el tamaño de la prueba es de 2 muestras, y que sucede para la evaluación de 2 muestras que están cerca unos de otros por casualidad, esto tendrá un impacto sustancial en la r^2 puntuación, incluso si las predicciones son bastante buenas:

true = [20.2, 20.1] # actual target values from the Boston Housing dataset
predicted = [19, 21]
print(r2_score(true, predicted))
# -449.0

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