如何为scikit学习种子随机数生成器?

2024-04-26 10:50:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为我的一些代码编写一个使用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的所有调用中使用种子?


Tags: 代码模型testlabels地方trainrandom单元测试
1条回答
网友
1楼 · 发布于 2024-04-26 10:50:59
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 ^{}或使用Sacred来记录随机性。使用random_state就是the docs describe

If your code relies on a random number generator, it should never use functions like numpy.random.random or numpy.random.normal. This approach can lead to repeatability issues in unit tests. Instead, a numpy.random.RandomState object should be used, which is built from a random_state argument passed to the class or function.

相关问题 更多 >