决策树产生不同的输出
Posted
技术标签:
【中文标题】决策树产生不同的输出【英文标题】:Decision Tree produces different outputs 【发布时间】:2016-06-28 17:20:39 【问题描述】:我目前正在使用决策树(使用 Scikit Learn)来预测某些值。我面临的问题是算法的输出不一致。这是决策树的属性吗?在多次运行(不改变数据/算法)我得到不同的结果。
我使用了 Scikit 的决策树类,一开始没有做任何更改
svr = DecisionTreeRegressor()
然后,为了消除任何“随机性”,我将其更改为
svr = DecisionTreeRegressor(splitter='best', random_state=None)
是什么导致了不同的结果?我该如何预防?
其中两个结果(为简单起见绘制) 红色是 DTR 结果。蓝色是测试集。
【问题讨论】:
任何训练/测试集拆分?实际上什么是红/蓝曲线? @CAFEBABE 抱歉,已编辑。 【参考方案1】:来自docs:
random_state :int,RandomState 实例或无,可选 (默认=无)
如果是int,random_state是随机数使用的种子 发电机;如果是 RandomState 实例,则 random_state 是随机数 发电机;如果没有,随机数生成器是 RandomState np.random 使用的实例。
对于None
,它将使用np.random
,这也是随机的。要制作可重现的示例,您需要在 random_state
中指定 int
数字。例如:
svr = DecisionTreeRegressor(random_state=1)
你的情况是:
svr = DecisionTreeRegressor(splitter='best', random_state=None)
random_state
的默认行为与默认情况相同。
【讨论】:
谢谢。这解决了它。如果我能给您带来更多麻烦,我在哪里可以找到有关随机状态以及它如何影响 DT 的更多信息(除了 Numpy 文档)? @user3653438 我觉得random_state
和np.random.RandomState
是一样的【参考方案2】:
The documentation 显示如下:
random_state : int,RandomState 实例或无,可选(默认=无) 如果是 int,则 random_state 是随机数生成器使用的种子 如果是 RandomState 实例,则 random_state 是随机数生成器 如果为 None,则随机数生成器是 np.random 使用的 RandomState 实例。
也许 numpy 每次调用 DecisionTreeRegressor 时都会生成一个新的 RandomState ?
【讨论】:
谢谢你,这就是问题所在。以上是关于决策树产生不同的输出的主要内容,如果未能解决你的问题,请参考以下文章