我目前正在使用决策树(使用Scikit Learn)来预测某些值。我面临的问题是算法的输出不一致。这是决策树的属性吗?在多次运行(没有更改数据/算法)时,我得到不同的结果。
我使用了Scikit的决策树类而没有改变任何东西以
开头svr = DecisionTreeRegressor()
然后,要删除任何'随机性,我将其更改为
svr = DecisionTreeRegressor(splitter='best', random_state=None)
导致不同结果的原因是什么?我该如何预防呢?
其中两个结果(为简单而绘制) 红色是DTR结果。蓝色是测试集。
答案 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}}相同。