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

Python Scikit learn在美国测试中似乎不尊重全球/本地随机_州,python,pandas,scikit-learn,pycharm,Python,Pandas,Scikit Learn,Pycharm,我正在尝试编写一个集成测试,它使用模型预测(model.predict(X))结果的描述性统计(.descripe().to_list())。但是,即使我设置了np.random.seed(######)在控制台中运行测试后,与在Pycharm创建的环境中运行测试后,描述性统计数据是不同的: 以下是本地的MRE: from sklearn.linear_model import ElasticNet from sklearn.datasets import make_regression imp

我正在尝试编写一个集成测试,它使用模型预测(
model.predict(X)
)结果的描述性统计(
.descripe().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中,项目解释器用于为控制台创建一个应该与测试环境相同的环境。这让我相信我在随机状态的传递方式上遗漏了一些东西。我的期望是,考虑到我已经播下了种子,结果将是可重复的。但事实并非如此,我想了解:

  • 为什么他们不平等
  • 我能做些什么使他们平等

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

    那么,您可以检查控制台和pycharm环境中的依赖项/库是否完全相同谢谢Vivek。在Pycharm中,可以为项目设置Python解释器。在本例中,我使用docker compose而不进行重建。因此,如果使用相同的解释器,并且没有重建docker容器,则可以保证测试环境依赖项与控制台相同。scikit-learn算法似乎基于numpy随机生成器。设置Python内置的随机种子是否也会改变某些东西(
    import random;random.seed(42))
    ?谢谢你,Eskapp,我也尝试过这种变体,但似乎没有效果。好吧,你可以检查控制台和pycharm环境中的依赖项/库是否完全相同谢谢你Vivek。在pycharm中,你可以为项目设置Python解释器。在这种情况下,我使用docker compose而不进行重建。所以如果使用相同的解释器,并且没有重建docker容器,那么可以保证测试环境依赖项与控制台相同。scikit-learn算法似乎基于numpy随机生成器。设置Python内置随机种子是否也会改变某些事情(
    import random;random.seed(42)
    ?谢谢你,Eskapp,我也尝试过这种变化,但似乎没有效果。