决策树产生不同的输出

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_statenp.random.RandomState是一样的【参考方案2】:

The documentation 显示如下:

random_state : int,RandomState 实例或无,可选(默认=无) 如果是 int,则 random_state 是随机数生成器使用的种子 如果是 RandomState 实例,则 random_state 是随机数生成器 如果为 None,则随机数生成器是 np.random 使用的 RandomState 实例。

也许 numpy 每次调用 DecisionTreeRegressor 时都会生成一个新的 RandomState ?

【讨论】:

谢谢你,这就是问题所在。

以上是关于决策树产生不同的输出的主要内容,如果未能解决你的问题,请参考以下文章

决策树算法

决策树与随机森林算法

第三章 决策树

机器学习之决策树算法

基于决策树的简单验证码识别

基于决策树的简单验证码识别