关于try_split函数中的v

来源:12-3 使用信息熵寻找最优划分

讲武德的年轻人

2021-08-10

请问老师,try_split中的v用的是两个数据点之间的平均值。请问sklearn也是这么操作的吗?采样更多的点会不会更好一点?

写回答

1回答

liuyubobobo

2021-08-10

如果你的意思是 2 和 3 之间把 2.1,2.2,2.3.... 都试一遍,没有必要。


因为对于训练数据集来说,其实这个划分点在两个数据点之间的哪里,都不会影响划分结果,也不会影响信息熵,也不会影响最终对训练数据集的分类结果;


而对测试数据集来说,在两点的中间是最好的假设。这有点儿像 SVM,margin 离中间的决策边界的距离是相等的。


再比如说,假设某一个身体指标,2 是不健康,3 是健康,只有这两个数据点,你认为健康和不健康的分界线在哪里?最好的假设就是 2.5。没有其他数据支撑这个假设点放在 2.2 或者 2,8 是更好的。


我不很确定 sklearn 是如何操作的,不排除其最终决定的分类点依据某些权值又做了一些调整。但中间值是一种很标准的做法。这里是一个相关的讨论,你也可以参考:https://datascience.stackexchange.com/questions/24339/how-is-a-splitting-point-chosen-for-continuous-variables-in-decision-trees


不过这一小节的代码有一个问题,就是计算信息熵确实不应该用均值,而应该用加权均值。可以参考这里:http://coding.imooc.com/learn/questiondetail/68117.html 


继续加油!:)

0
0

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5839 学习 · 2437 问题

查看课程