为什么Scikit-Learn的RandomForestClassifier在显式设置中不确定性



我想知道为什么我在python中使用scikit-learn创建的RandomForestClassifiers当我重复在同一数据集上学习时会产生不同的结果。有人可以向我解释吗?

我代码的相关部分是:

from sklearn.ensemble import RandomForestClassifier as RFC
RFC(n_estimators=100, max_features=None, criterion="entropy", bootstrap=False)

此设置实际上应该防止任何随机性,对吗?它应迫使该算法使用相同数量的数据实例(这是完整的数据集),以使每个基础学习者都成长并考虑每个分裂的每个功能。

我得到的一个解释是:也许该算法在如何将功能从所有功能中取出的集合(例如:

)中删除了一些随机性。
  • 给定的是功能F1和F2
  • 对于节点1中的拆分,算法选择F1,然后考虑F2来考虑此拆分
  • 这两个功能可能具有相同的拆分质量,并且首先选择F1,因为它是首先绘制的
  • 对于节点2中的拆分,算法可能首先选择F2,然后选择F1,因此创建的模型可能与该算法创建的其他模型
  • 有所不同。

任何人都可以提供可靠的信息吗?

否,该设置无法保证可重现的结果。您已经详细介绍了大多数RF实现发生的情况:随机拆分取决于种子到随机数函数。

为了控制它,请查看文档以查找ML算法使用的随机数字包。您可能可以导入该软件包并将值强制为种子方法。如果您想尝试快速解决方案,请尝试

import random
random.seed(<value>)

...其中是您选择的任何近距离常数。我建议您喜欢的整数或字符串。我建议这样做,因为我怀疑您的RF软件包使用Python Random 软件包 - 尝试一下可能会节省您浏览文档的麻烦。

大多数软件包将使用系统时间作为默认种子;那是为了使确定您会得到不同的结果。

相关内容

  • 没有找到相关文章

最新更新