首页 文章

为什么scikit的RandomForestClassifier在显式设置中学习不确定?

提问于
浏览
0

我想知道为什么我使用scikit-learn在Python中创建的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,因此创建的模型可能与该算法创建的其他模型不同

谁能提供可靠的信息?

1 回答

  • 1

    不,这种设置不能保证可重复的结果 . 您已经详细说明了大多数RF实现的情况:随机拆分取决于种子到随机数函数 .

    要控制它,请查看文档以查找ML算法使用的随机数字包 . 您可以导入该包并强制使用 seed 方法的值 . 如果您想尝试快速解决方案,请尝试

    import random
    random.seed(<value>)
    

    ......你选择的任何可用恒定的地方 . 我推荐你喜欢的整数或字符串 . 我建议这是因为我怀疑你的RF软件包使用的是Python random 软件包 - 尝试一下这可能会省去你仔细研究文档的麻烦 .

    大多数软件包都会使用系统时间作为默认种子;这是为了确保你获得不同的结果 .

相关问题