【问题标题】:How can I remove the randomness of a decision tree on sklearn?如何消除 sklearn 上决策树的随机性?
【发布时间】:2019-10-31 01:24:18
【问题描述】:

我正在尝试在 python 中创建一个确定性决策树,但我遇到了一些问题。

如果我运行 2 次我的脚本,我会得到不同的决策树,因为算法的 random_state。

我尝试修复 random_state(random_state=0) 但它仍然无法正常工作。

我想消除决策树的随机性,但找不到明确的解决方案。

【问题讨论】:

  • 您应该检查代码中的更多随机性,例如可能影响树的 train_test_split。
  • 你能random.seed生成器吗?
  • 感谢您的回复, - 我签入了我的代码,但火车测试拆分之间的拆分是固定的。 - random.seed 生成器是什么意思?
  • 谢谢,现在可以使用了
  • 注:删除我的评论以做出官方回答

标签: python scikit-learn decision-tree deterministic


【解决方案1】:

Sklearn 使用来自 numpy 的随机种子,因此您可以在脚本开头设置全局种子:

import numpy as np

np.random.seed(0)

【讨论】:

    【解决方案2】:

    random_state 参数应该有效,但这里有 2 个不同的选项

    选项 1:

    from sklearn.ensemble import RandomForestRegressor
    
    rf = RandomForestRegressor(n_estimators=1000, criterion='mse', min_samples_leaf=4, 
                               random_state= 0)
    

    这应该每次都返回相同的结果。


    Scikit-learn 不使用自己的全局随机状态;每当一个 RandomState 实例或整数随机种子不作为 参数,它依赖于 numpy 全局随机状态,可以设置 使用 numpy.random.seed


    选项 2:

    话虽如此,添加 np.random.seed() 之前 导入 RandomForestRegressor 也应该可以解决问题。

    import numpy as np
    np.random.seed(0)
    

    来源:http://scikit-learn.org/stable/faq.html#how-do-i-set-a-random-state-for-an-entire-execution

    【讨论】:

      猜你喜欢
      • 2018-05-24
      • 2014-03-12
      • 2021-12-25
      • 2023-04-08
      • 2020-07-26
      • 2018-09-06
      • 2020-08-03
      • 2019-08-31
      • 2019-03-04
      相关资源
      最近更新 更多