sklearn的DecisionTreeClassifier中的“splitter”属性有什么作用?

时间:2017-10-15 15:18:02

标签: python python-3.x machine-learning scikit-learn

sklearn DecisionTreeClassifier有一个名为“splitter”的属性,默认设置为“best”,将其设置为“best”或“random”是什么?我从官方文档中找不到足够的信息。

4 个答案:

答案 0 :(得分:6)

如果选择/保持“最佳”,则随机树将拆分最相关的功能。

如果选择“随机”,树将采用随机特征并将其拆分。因此,您的树可能会以更深的深度或更低的精度结束。

您可以进行一些试验并生成graphviz以查看差异。例如,在下面的图片中,您分为X 1和X [0]。但是如果你颠倒了它,你最终可能会被X [0]分割,然后是X 1并再次准确X [0]

enter image description here

编辑:例如,您可以考虑人的身高/体重。

让我们考虑一下人口高度平均为1m70,女性通常为1m65,男性为1m75。两个重新分配都是重叠的。 对于体重,它更加分离,女性约为65公斤,男性为85公斤(曲线从不重叠)。

如果您随机拆分,则可以从要素高度开始。这意味着你将在高度分割> 1m70。你将最终得到两组男女。所以你必须按重量分开来说出它是男人还是女人。

如果你使用最好,你可以直接根据体重进行分类。

编辑2 :如果您的数据集具有百分之一的功能,“最佳”也将采用最相关的功能。想象一下,您仍然希望对男性和女性进行分类,并且您的数据集中还有眼睛颜色,瞳孔大小等......这些并不是很相关,使用随机可能会先选择它们。

对我来说,只有当你知道你所有的功能都与相同的强度相关并且你想节省一些计算时间(在某些情况下找到最好的分割可能需要时间)时,这个选项才有意义。

我希望它有所帮助,

答案 1 :(得分:3)

“随机”设置随机选择一个要素,然后随机拆分并计算基尼。它重复了很多次,比较了所有的分裂,然后是最好的分裂。

这有一些优点:

  1. 与计算每个叶子上每个特征的最佳分割相比,它的计算密集度更低。
  2. 应该不太容易过度拟合。
  3. 如果您的决策树是整体方法的一个组成部分,则额外的随机性非常有用。

答案 2 :(得分:1)

实际上,“random”参数用于在sklearn中实现额外的随机树。简而言之,这个参数意味着分裂算法将遍历所有特征,但只随机选择最大特征值和最小特征值之间的分裂点。如果你对算法的细节感兴趣,你可以参考这篇论文[1]。此外,如果您对该算法的详细实现感兴趣,you can refer to this page

[1]。 P. Geurts、D. Ernst. 和 L. Wehenkel,“极度随机化的树”,机器学习,63(1),3-42,2006 年。

答案 3 :(得分:0)

简短回答:

RandomSplitter对每个选定功能启动**随机分割**,而BestSplitter对所有选定功能进行所有可能的分割**。


更长的解释:

当您通过_splitter.pyx时,这一点很明显。

  • RandomSplitter仅在随机启动的阈值上计算改善(参考行761和801)。 BestSplitter在while循环中遍历所有可能的分割(请参考第436行(循环从此处开始)和462)。 [注意:行与版本0.21.2有关。]
  • 与2017年10月15日和2018年2月1日的早期回复相反, RandomSplitter和BestSplitter都遍历了所有相关功能。在_splitter.pyx中也很明显。