Estado aleatorio (número pseudoaleatorio) en Scikit learn

Quiero implementar un algoritmo de aprendizaje automático en scikit learn, pero no entiendo qué hace este parámetro random_state . ¿Por qué debería usarlo?

Tampoco pude entender qué es un número pseudoaleatorio.

train_test_split divide matrices o matrices en conjuntos aleatorios de prueba y tren. Eso significa que cada vez que lo ejecute sin especificar random_state , obtendrá un resultado diferente, este es el comportamiento esperado. Por ejemplo:

Ejecutar 1:

 >>> a, b = np.arange(10).reshape((5, 2)), range(5) >>> train_test_split(a, b) [array([[6, 7], [8, 9], [4, 5]]), array([[2, 3], [0, 1]]), [3, 4, 2], [1, 0]] 

Ejecutar 2

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

Cambia. Por otro lado, si usa random_state=some_number , entonces puede garantizar que la salida de la ejecución 1 será igual a la salida de la ejecución 2 , es decir, su división será siempre la misma. No importa cuál sea el número real de random_state 42, 0, 21, … Lo importante es que cada vez que use 42, siempre obtendrá la misma salida la primera vez que realice la división. Esto es útil si desea resultados reproducibles, por ejemplo en la documentación, para que todos puedan ver constantemente los mismos números cuando ejecutan los ejemplos. En la práctica, diría que debe establecer el random_state en un número fijo mientras prueba cosas, pero luego eliminarlo en producción si realmente necesita una división aleatoria (y no una fija).

Con respecto a la segunda pregunta, un generador de números pseudoaleatorios es un generador de números que genera números casi verdaderamente aleatorios. Por qué no son realmente aleatorios está fuera del scope de esta pregunta y probablemente no importa en su caso, puede echar un vistazo aquí para obtener más detalles.

Si no especifica el estado random_state en su código, cada vez que ejecute (ejecute) su código, se generará un nuevo valor aleatorio y los conjuntos de datos de prueba y de tren tendrán valores diferentes cada vez.

Sin embargo, si se asigna un valor fijo como random_state = 42 , no importa cuántas veces ejecute su código, el resultado sería el mismo .ie, los mismos valores en los conjuntos de datos de tren y de prueba.

Si no menciona el random_state en el código, entonces, cada vez que ejecute su código, se generará un nuevo valor aleatorio y los conjuntos de datos de prueba y tren 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 tren y de prueba. Consulte el siguiente código:

 import pandas as pd from sklearn.model_selection import train_test_split test_series = pd.Series(range(100)) size30split = train_test_split(test_series,random_state = 1,test_size = .3) size25split = train_test_split(test_series,random_state = 1,test_size = .25) common = [element for element in size25split[0] if element in size30split[0]] print(len(common)) 

No importa cuántas veces ejecute el código, la salida será 70.

 70 

Intenta eliminar el random_state y ejecuta el código.

 import pandas as pd from sklearn.model_selection import train_test_split test_series = pd.Series(range(100)) size30split = train_test_split(test_series,test_size = .3) size25split = train_test_split(test_series,test_size = .25) common = [element for element in size25split[0] if element in size30split[0]] print(len(common)) 

Ahora aquí la salida será diferente cada vez que ejecute el código.

random_state number divide los conjuntos de datos de prueba y entrenamiento de manera aleatoria. Además de lo que se explica aquí, es importante recordar que el valor de random_state puede tener un efecto significativo en la calidad de su modelo (por calidad, esencialmente, me refiero a la precisión para predecir). Por ejemplo, si toma un determinado conjunto de datos y entrena un modelo de regresión con él, sin especificar el valor de random_state, existe la posibilidad de que cada vez, obtenga un resultado de precisión diferente para su modelo entrenado en los datos de prueba. Por lo tanto, es importante encontrar el mejor valor de random_state para brindarle el modelo más preciso. Y luego, ese número se utilizará para reproducir su modelo en otra ocasión, como otro experimento de investigación. Para hacerlo, es posible dividir y entrenar el modelo en un bucle for asignando números aleatorios al parámetro random_state:

`para j en rango (1000):

  X_train, X_test, y_train, y_test = train_test_split(X, y , random_state =j, test_size=0.35) lr = LarsCV().fit(X_train, y_train) tr_score.append(lr.score(X_train, y_train)) ts_score.append(lr.score(X_test, y_test)) J = ts_score.index(np.max(ts_score)) X_train, X_test, y_train, y_test = train_test_split(X, y , random_state =J, test_size=0.35) M = LarsCV().fit(X_train, y_train) y_pred = M.predict(X_test)` 
 sklearn.model_selection.train_test_split(*arrays, **options)[source] 

Dividir matrices o matrices en subgrupos de prueba y tren al azar

 Parameters: ... random_state : int, RandomState instance or None, optional (default=None) 

Si int, random_state es la semilla utilizada por el generador de números aleatorios; Si la instancia de RandomState, random_state es el generador de números aleatorios; Si Ninguno, el generador de números aleatorios es la instancia de RandomState utilizada por np.random. fuente: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

” ‘Con respecto al estado aleatorio, se usa en muchos algoritmos aleatorios en sklearn para determinar la semilla aleatoria pasada al generador de números pseudoaleatorios. Por lo tanto, no gobierna ningún aspecto del comportamiento del algoritmo. Como consecuencia, los valores de estado aleatorios que se desempeñaron bien en el conjunto de validación no se corresponden con aquellos que se realizarían bien en un conjunto de pruebas nuevo e invisible. De hecho, dependiendo del algoritmo, puede ver resultados completamente diferentes simplemente cambiando el orden de las muestras de entrenamiento. ” ‘Fuente: https://stats.stackexchange.com/questions/263999/is-random-state-a-parameter sintonizar