决策树产生不同的输出

时间:2016-03-13 19:08:46

标签: machine-learning scikit-learn data-mining decision-tree

我目前正在使用决策树(使用Scikit Learn)来预测某些值。我面临的问题是算法的输出不一致。这是决策树的属性吗?在多次运行(没有更改数据/算法)时,我得到不同的结果。

我使用了Scikit的决策树类而没有改变任何东西以

开头
svr = DecisionTreeRegressor()

然后,要删除任何'随机性,我将其更改为

svr = DecisionTreeRegressor(splitter='best', random_state=None)

导致不同结果的原因是什么?我该如何预防呢?

其中两个结果(为简单而绘制) 红色是DTR结果。蓝色是测试集。

Image One

Image Two

2 个答案:

答案 0 :(得分:1)

The documentation显示以下内容:

random_state:int,RandomState instance or None,optional(default = None) 如果是int,则random_state是随机数生成器使用的种子 如果是RandomState实例,则random_state是随机数生成器 如果为None,则随机数生成器是np.random使用的RandomState实例。

每次调用DecisionTreeRegressor时,numpy可能会生成一个新的RandomState吗?

答案 1 :(得分:1)

来自docs

  

random_state :int,RandomState实例或None,可选   (缺省值=无)

     

如果是int,则random_state是随机数使用的种子    发电机;如果是RandomState实例,则random_state是随机数   发电机;如果为None,则随机数生成器是RandomState   np.random使用的实例。

对于None,它会使用np.random,这也是随机的。要制作可重现的示例,您需要在int中指定random_state个数字。例如:

svr = DecisionTreeRegressor(random_state=1)

对于您的情况:

svr = DecisionTreeRegressor(splitter='best', random_state=None)

默认情况下random_state的行为与<{1}}相同。