¿Cómo sembrar el generador de números aleatorios para scikit-learn?

Estoy tratando de escribir una prueba de unidad para algunos de mis códigos que usan scikit-learn. Sin embargo, mis pruebas de unidad parecen ser no deterministas.

AFAIK, los únicos lugares en mi código donde scikit-learn utiliza cualquier aleatoriedad están en su modelo LogisticRegression y train_test_split , así que tengo los siguientes

 RANDOM_SEED = 5 self.lr = LogisticRegression(random_state=RANDOM_SEED) X_train, X_test, y_train, test_labels = train_test_split(docs, labels, test_size=TEST_SET_PROPORTION, random_state=RANDOM_SEED) 

Pero esto no parece funcionar, incluso cuando paso una docs fija y una labels fija, las probabilidades de predicción en un conjunto de validación fija varían de una ejecución a otra.

También intenté agregar una numpy.random.seed(RANDOM_SEED) en la parte superior de mi código, pero eso tampoco pareció funcionar.

¿Hay algo que me falta? ¿Hay una manera de pasar una semilla para aprender a jugar en un solo lugar, de modo que esa semilla se use en todas las invocaciones de aprendizaje de scikit?

 from sklearn import datasets, linear_model iris = datasets.load_iris() (X, y) = iris.data, iris.target RANDOM_SEED = 5 lr = linear_model.LogisticRegression(random_state=RANDOM_SEED) X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, random_state=RANDOM_SEED) lr.fit(X_train, y_train) lr.score(X_test, y_test) 

producido 0.93333333333333335 varias veces ahora. La forma en que lo hiciste parece estar bien. Otra forma es establecer np.random.seed() o usar Sagrado para la aleatoriedad documentada. Usar random_state es lo que describen los documentos :

Si su código se basa en un generador de números aleatorios, nunca debe usar funciones como numpy.random.random o numpy.random.normal . Este enfoque puede llevar a problemas de repetibilidad en pruebas unitarias. En su lugar, se debe usar un objeto numpy.random.RandomState , que se random_state partir de un argumento random_state que se pasa a la clase o función.