跨不同系统(机器)使用相同 random_state 的 Sklearn 不同结果
Posted
技术标签:
【中文标题】跨不同系统(机器)使用相同 random_state 的 Sklearn 不同结果【英文标题】:Sklearn different results with the same random_state across different systems (machines) 【发布时间】:2020-06-23 12:39:19 【问题描述】:我有一个 python 脚本,它使用 sklearn 随机森林和固定 random_state = 0 生成预测。它总是在一台计算机(系统)上产生确定性的结果,但是当我切换到另一台计算机时,结果是不同的。 有没有办法让它在不同系统之间具有确定性?如何在不同的机器上得到相同的结果,比如在第一台机器上?
脚本复杂且冗长,所以我不会分享代码,但我认为问题出在随机森林 random_state 中,因为当我尝试使用 KNN 而不是 RF 时,结果是相同的
【问题讨论】:
【参考方案1】:sklearn.neighbors.KNeighborsClassifier
使用来自您的训练数据的所有观察结果,而顾名思义,sklearn.ensemble.RandomForestClassifier
使用随机数据,因此您可以预期随机森林每次迭代的不同结果。现在谈到在不同系统上使用它的问题,这是一个棘手的问题,但您可以尝试以下方法(虽然我还没有测试过)。
1)。使用一些random_state
为您的数据拟合随机森林模型,比如说random_state = 0
2)。导入pickle
,创建一个pickle对象rf.pkl
,它会保存在你当前的工作目录中。
3)。将当前的 Random Forest 模型对象转储到 pickle 对象中。
import pickle
pkl = 'rf.pkl'
with open(pkl,'wb') as file:
pickle.dump(rf,file)
4)。将 pickle 对象文件共享给另一个用户/系统。
5)。将泡菜对象存储在某个位置并将其设置为工作目录。
6)。在那个系统上打开 Python,运行你的 Python 代码来读取数据。
7)。使用以下代码行加载腌制模型,而不是创建新模型:
with open(pkl,'rb') as file:
pkl_model = pickle.load(file)
8)。测试您的腌制模型是否工作并产生与在另一个系统上相同的结果。
我还没有测试过这种方法,但我认为你应该尝试一下,让我知道这是否有效。干杯!!
【讨论】:
嗨 manojk。感谢您的回答! RF 随机使用数据,但随机性始终与固定的random_state
相同,对吧?您的解决方案非常有趣,但就我而言,它不实用。在我的脚本中,RF 背后是一个优化 RF 和一些附加参数的遗传算法。有数十亿种不同的组合,将它们中的每一种都丢弃是没有意义的。此外,这个带有 RF 的 GA 是在机器云 (50-100) 上使用带有 pyspark 的 map-reduce 进行训练的。
是的,随机性可以用 random_state 来修复。这是我能想到的唯一解决方案,使用 pickle 存储多个对象可能不切实际,我提到要尝试以防你拟合单个随机森林模型。以上是关于跨不同系统(机器)使用相同 random_state 的 Sklearn 不同结果的主要内容,如果未能解决你的问题,请参考以下文章