Scikit learn在美国测试中似乎不尊重全球/本地随机美国

2024-06-07 14:04:41 发布

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

我正在尝试编写一个集成测试,它使用模型预测(model.predict(X))结果的描述性统计(.describe().to_list())。但是,尽管我设置了np.random.seed(###),但是在控制台中运行测试后,与在Pycharm创建的环境中运行测试后,描述性统计数据是不同的:

以下是本地的MRE:

from sklearn.linear_model import ElasticNet
from sklearn.datasets import make_regression
import numpy as np
import pandas as pd

np.random.seed(42)

X, y = make_regression(n_features=2, random_state=42)
regr = ElasticNet(random_state=42)
regr.fit(X, y)

pred = regr.predict(X)

# Theory: This result should be the same from the result in a class
pd.Series(pred).describe().to_list()

以及一个示例测试文件:

from unittest import TestCase
from sklearn.linear_model import ElasticNet
from sklearn.datasets import make_regression
import numpy as np
import pandas as pd

np.random.seed(42)

class TestPD(TestCase):
    def testExpectedPrediction(self):
        np.random.seed(42)
        X, y = make_regression(n_features=2, random_state=42)
        regr = ElasticNet(random_state=42)
        regr.fit(X, y)

        pred = pd.Series(regr.predict(X))

        for i in pred.describe().to_list():
            print(i)

        # here we would have a self.assertTrue/Equals f.e. element

当我在Python控制台中运行这个测试时,会得到一个结果。但是当我使用PyCharm的unittests对文件夹运行它时,我得到了另一个结果。现在,重要的是,在PyCharm中,项目解释器用于为控制台创建一个应该与测试环境相同的环境。这让我相信我遗漏了一些关于随机状态传递方式的东西。我的期望是,鉴于我已经播下了种子,结果将是可复制的。但事实似乎并非如此,我想了解:

  1. 为什么他们不平等?你知道吗
  2. 我能做些什么使他们平等?你知道吗

我还没有找到很多关于测试预期模型结果的最佳实践。因此,这方面的评论也会有所帮助。你知道吗


Tags: fromimportmakemodelasnprandomsklearn

热门问题