我正在尝试为一些使用 scikit-learn 的代码编写单元测试。然而,我的单元测试似乎是不确定的。
AFAIK,我的代码中 scikit-learn 使用随机性的唯一地方是它的LogisticRegression
模型及其train_test_split
,所以我有以下内容:
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)
但这似乎不起作用——即使我通过了一个固定的docs
和一个固定的labels
,固定验证集上的预测概率因运行而异。
我也尝试添加numpy.random.seed(RANDOM_SEED)
在我的代码顶部调用,但这似乎也不起作用。
我有什么遗漏的吗?有没有办法在一个地方将种子传递给 scikit-learn,以便在 scikit-learn 的所有调用中使用该种子?
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)
产生的0.93333333333333335
现在好几次了。你的做法看起来没问题。另一种方法是set np.random.seed() or use Sacred用于记录随机性。使用random_state
是什么文档描述了:
如果您的代码依赖于随机数生成器,则它永远不应该使用类似的函数numpy.random.random
or numpy.random.normal
。这种方法可能会导致单元测试中的重复性问题。相反,一个numpy.random.RandomState
应该使用对象,它是从random_state
传递给类或函数的参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)