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

Vij*_*r J 6 python machine-learning python-3.x scikit-learn

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

小智 7

简短的回答:

RandomSplitter 对每个选定的特征发起**随机分割,而 BestSplitter 则对**每个选定的特征进行所有可能的分割**。


更长的解释:

当你浏览 _splitter.pyx 时,这一点很清楚。

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

    Nic*_* M. 6

    如果选择/保持"最佳",则随机树将拆分最相关的特征.

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

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

    在此输入图像描述

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

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

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

    如果您使用最好,您可以直接根据重量进行分类.

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

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

    我希望它有所帮助,

    • 这个答案似乎是错误的。随机分配器遍历所有功能。对于每个功能,它仅在该功能的最小值和最大值之间随机进行一次测试。 (5认同)