Python sklearn随机分类器不可再现的结果

Python sklearn随机分类器不可再现的结果,python,random,random-forest,reproducible-research,Python,Random,Random Forest,Reproducible Research,我一直在使用sklearn的随机森林,并尝试比较几种模型。然后我注意到,随机森林给出了不同的结果,即使是使用相同的种子。我尝试了两种方法:random.seed(1234)和使用随机林内置的random_state=1234 在这两种情况下,我都会得到不可重复的结果。我错过了什么 # 1 random.seed(1234) RandomForestClassifier(max_depth=5, max_features=5, criterion='gini', min_samples_leaf

我一直在使用sklearn的随机森林,并尝试比较几种模型。然后我注意到,随机森林给出了不同的结果,即使是使用相同的种子。我尝试了两种方法:random.seed(1234)和使用随机林内置的random_state=1234 在这两种情况下,我都会得到不可重复的结果。我错过了什么

# 1
random.seed(1234)
RandomForestClassifier(max_depth=5, max_features=5, criterion='gini', min_samples_leaf = 10)
# or 2
RandomForestClassifier(max_depth=5, max_features=5, criterion='gini', min_samples_leaf = 10, random_state=1234)
有什么想法吗?谢谢

编辑: 添加我的代码的更完整版本

clf = RandomForestClassifier(max_depth=60, max_features=60, \
                        criterion='entropy', \
                        min_samples_leaf = 3, random_state=seed)
# As describe, I tried random_state in several ways, still diff results
clf = clf.fit(X_train, y_train)

predicted = clf.predict(X_test)
predicted_prob = clf.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = metrics.roc_curve(np.array(y_test), predicted_prob)
auc = metrics.auc(fpr,tpr)
print (auc)

编辑:已经有一段时间了,但我认为使用可能会解决问题。我自己还没有测试过,但如果你正在阅读,那值得一试。此外,通常最好使用RandomState而不是random.seed()。

首先确保您拥有所需模块的最新版本(例如,scipy、numpy等)键入
random.seed(1234)
时,使用
numpy
生成器


当您在
RandomForestClassifier
内使用
random\u state
参数时,有几个选项:intRandomState实例


从文档中:

  • 如果int,则random_state是随机数生成器使用的种子

  • 如果为RandomState实例,则random_state为随机数生成器

  • 如果没有,则随机数生成器是np.random使用的RandomState实例


在两种情况下使用相同的生成器的方法如下。我在两种情况下使用相同的(numpy)生成器,我得到了可重复的结果(两种情况下的结果相同)

检查结果是否相同:

all(clf.predict(X) == clf2.predict(X))
#True
True
True
True
True
True

运行相同代码5次后检查: 结果:

all(clf.predict(X) == clf2.predict(X))
#True
True
True
True
True
True

好的,最终解决这个问题的是重新安装conda环境。我仍然不确定为什么会出现不同的结果。谢谢

在第二次调用随机林分类器之前,您是否也调用了相同的随机种子?你能展示你的不同结果吗?请让我知道我的回答是否符合你的问题,我第一次跑了几次(1),并计算了预测和ROC/AUC。每次的结果都不一样。然后我用方法(2)做了同样的事情,结果仍然是不可复制的。然后我使用了第三种方法,正如@sera所建议的,仍然没有乐趣。对于所有其他方法(逻辑回归、LDA、朴素贝叶斯),我得到了完全相同的结果。一些例子:在相同的种子下,AUC为:0.779396,0.794945,我尝试了上面列出的两种方法。此外,我还尝试了您使用random_state=random_seed(1234)编写的一个。所有方法对随机林和决策树都给出了不可重复的结果。每次我用同一个种子运行它,结果都是不同的。我已经运行了我发布的代码100次,当我使用:
all(clf.predict(X)=clf2.predict(X))
Yes检查时,我总是得到
True
。过了很长时间,我再次检查了这个问题,发现了我的错误(与使用RandomState()有关)。做了那件事之后,一切都很正常。请考虑一下我的回答,问题可能是因为老的Python库(例如Nupyy Scpyy等)。