¿Alguien puede decirme por qué establecemos el estado aleatorio en cero al dividir el tren y el conjunto de prueba?
X_train, X_test, y_train, y_test = \ train_test_split(X, y, test_size=0.30, random_state=0)¡He visto situaciones como esta en las que el estado aleatorio se establece en 1!
X_train, X_test, y_train, y_test = \ train_test_split(X, y, test_size=0.30, random_state=1)¿Cuál es la consecuencia de este estado aleatorio también en la validación cruzada?
No importa si random_state es 0 o 1 o cualquier otro número entero. Lo que importa es que se debe establecer el mismo valor, si desea validar su procesamiento en varias ejecuciones del código. Por cierto, he visto el uso de random_state=42 en muchos ejemplos oficiales de scikit, así como también en otros lugares.
random_state como sugiere el nombre, se usa para inicializar el generador interno de números aleatorios, que decidirá la división de datos en índices de entrenamiento y prueba en su caso. En la documentación , se afirma que:
Si random_state es None o np.random, se devuelve un objeto RandomState inicializado aleatoriamente.
Si random_state es un número entero, se usa para generar un nuevo objeto RandomState.
Si random_state es un objeto RandomState, entonces se pasa.
Esto es para verificar y validar los datos cuando se ejecuta el código varias veces. Establecer random_state en un valor fijo garantizará que se genere la misma secuencia de números aleatorios cada vez que ejecute el código. Y a menos que haya alguna otra aleatoriedad presente en el proceso, los resultados producidos serán los mismos de siempre. Esto ayuda a verificar la salida.
Si no menciona el estado aleatorio en el código, cada vez que ejecute su código se generará un nuevo valor aleatorio y los conjuntos de datos de entrenamiento y prueba tendrán valores diferentes cada vez.
Sin embargo, si usa un valor particular para random_state (random_state = 1 o cualquier otro valor) cada vez que el resultado sea el mismo, es decir, los mismos valores en los conjuntos de datos de prueba y entrenamiento.
cuando random_state se establece en un número entero , train_test_split devolverá los mismos resultados para cada ejecución.
cuando random_state se establece en None , train_test_split devolverá resultados diferentes para cada ejecución.
ver el siguiente ejemplo:
from sklearn.model_selection import train_test_split X_data = range(10) y_data = range(10) for i in range(5): X_train, X_test, y_train, y_test = train_test_split(X_data, y_data, test_size = 0.3,random_state = 0) # zero or any other integer print(y_test) print("*"*30) for i in range(5): X_train, X_test, y_train, y_test = train_test_split(X_data, y_data, test_size = 0.3,random_state = None) print(y_test)Salida :
[2, 8, 4]
[2, 8, 4]
[2, 8, 4]
[2, 8, 4]
[2, 8, 4]
[4, 7, 6]
[4, 3, 7]
[8, 1, 4]
[9, 5, 8]
[6, 4, 5]