我目前正在使用决策树(使用Scikit Learn)来预测某些值。我遇到的问题是算法的输出不一致。这是决策树的特性吗?在多次运行中(数据和算法没有变化),我得到了不同的结果。
我开始时使用了Scikit的决策树类,没有做任何更改
svr = DecisionTreeRegressor()
然后,为了消除任何“随机性”,我将其更改为
svr = DecisionTreeRegressor(splitter='best', random_state=None)
是什么导致了不同的结果?如何防止这种情况发生?
以下是两个结果(为了简单起见进行了绘制),红色是决策树回归的结果,蓝色是测试集。
回答:
来自文档:
random_state : int, RandomState实例或None,可选(默认=None)
如果是int,random_state是随机数生成器使用的种子;如果是RandomState实例,random_state是随机数生成器;如果是None,随机数生成器是np.random使用的RandomState实例。
对于None
,它将使用np.random
,这也是随机的。要制作可重现的示例,您需要在random_state
中指定int
数字。例如:
svr = DecisionTreeRegressor(random_state=1)
在您的案例中,您正在做:
svr = DecisionTreeRegressor(splitter='best', random_state=None)
这与random_state
的默认行为相同。