with train_test_split sklearn machine learning example cross code python scipy scikit-learn

python - train_test_split - ¿Cuál es la diferencia entre KFold y ShuffleSplit CV?



sklearn model selection (1)

Diferencia en la salida de KFold y ShuffleSplit

KFold dividirá su conjunto de datos en un número preestablecido de pliegues , y cada muestra debe estar en un solo pliegue. Un pliegue es un subconjunto de su conjunto de datos.

ShuffleSplit muestreará aleatoriamente su conjunto de datos completo durante cada iteración para generar un conjunto de entrenamiento y un conjunto de prueba. Los parámetros test_size y train_size controlan el tamaño del test y el conjunto de pruebas de entrenamiento para cada iteración. Ya que está muestreando todo el conjunto de datos durante cada iteración, los valores seleccionados durante una iteración, podrían seleccionarse nuevamente durante otra iteración.

Resumen: ShuffleSplit funciona de manera iterativa, KFold simplemente divide el conjunto de datos en k pliegues.

Diferencia al hacer la validación.

En KFold, durante cada ronda utilizará un pliegue como conjunto de prueba y todos los pliegues restantes como su conjunto de entrenamiento. Sin embargo, en ShuffleSplit, durante cada ronda n solo debe usar el conjunto de entrenamiento y prueba de la iteración n . A medida que su conjunto de datos crece, el tiempo de validación cruzada aumenta, haciendo de shufflesplits una alternativa más atractiva. Si puede entrenar su algoritmo, con un cierto porcentaje de sus datos en lugar de usar todos los pliegues k-1, ShuffleSplit es una opción atractiva.

Parece que KFold genera los mismos valores cada vez que el objeto se itera, mientras que Shuffle Split genera índices diferentes cada vez. ¿Es esto correcto? Si es así, ¿cuáles son los usos de uno sobre el otro?

cv = cross_validation.KFold(10, n_folds=2,shuffle=True,random_state=None) cv2 = cross_validation.ShuffleSplit(10,n_iter=2,test_size=0.5) print(list(iter(cv))) print(list(iter(cv))) print(list(iter(cv2))) print(list(iter(cv2)))

Produce la siguiente salida:

[(array([1, 3, 5, 8, 9]), array([0, 2, 4, 6, 7])), (array([0, 2, 4, 6, 7]), array([1, 3, 5, 8, 9]))] [(array([1, 3, 5, 8, 9]), array([0, 2, 4, 6, 7])), (array([0, 2, 4, 6, 7]), array([1, 3, 5, 8, 9]))] [(array([4, 6, 3, 2, 7]), array([8, 1, 9, 0, 5])), (array([3, 6, 7, 0, 5]), array([9, 1, 8, 4, 2]))] [(array([3, 0, 2, 1, 7]), array([5, 6, 9, 4, 8])), (array([0, 7, 1, 3, 8]), array([6, 2, 5, 4, 9]))]