一、决策树的基本原理:
决策树简而言之就是根据不同的分类标准(Classification criteria)对于节点类别判断的先后顺序进行选择,进而对于训练集、测试集进行分类。
决策树使用树模型分类很快(相对于knn一个点一个点去算要快多了), 但是树模型也存在两个问题: 过拟合,分类标准选择
过拟合
树模型都存在很严重的过拟合问题, 如果树的深度不加任何限制, 最终肯定是一个叶子节点一个样本, 这样再对于没有训练过的测试集而言效果就很差. 解决方法有两种, 前剪枝和后剪枝, 即在构建决策树的时候将一些叶子节点砍掉和在不限深度建完树之后再将一些叶子节点砍掉. 由于sklearn只支持前剪枝, 所以我们可以通过交叉验证的方法挑选出最合适的树深度, 当达到一定深度时我们就不再新增节点.
分类标准(Classification criteria):
通常有信息熵和基尼指数两种
信息熵:
其中,香农的信息论提出了该方法, ID3算法中我们使用了信息增益来选择特征,先计算不同类别的数据的信息增益,信息增益大的优先选择, 这里面会涉及大量的对数运算,效果一般而言没有下面这种利用基尼指数的方法好。
基尼指数:
其中,基尼指数的运算较信息增益简单,可以做为熵模型的一个近似替代。效果较好,这篇博客用于Kaggle竞赛的也是这种分类方法。
二、sklearn库的常用接口:
分类:sklearn.tree.DecisionTreeClassifier(criterion,max_depth)
回归:sklearn.tree.DecisionTreeRegressor(criterion,max_depth)
criterion就是分类标准的选择, 默认为信息熵, max_depth可以通过cv(cross validation)实现选择.
三、Kaggle实战代码
穷苦学生买不起显卡配不起服务器,只能薅羊毛用Google的免费GPU跑代码,所以这些代码导入数据和读出结果是在colab里面完成的。
https://colab.research.google.com/drive/1DFkVOsec-V0BQYbeGhwdLfI62ZQXjo8S
来源:CSDN
作者:sherpahu
链接:https://blog.csdn.net/sherpahu/article/details/84146133