决策树
一、 基本介绍
1.1 树模型
- 决策树:从根节点开始一步步走到叶子节点(决策)
- 所有的数据最终都会落到叶子节点,既可以做分类也可以做回归
1.2 树的组成
- 根节点:第一个选择点
- 非叶子节点与分支:中间过程
- 叶子节点:最终的决策结果
1.3 决策树的训练与测试
- 训练阶段:从给定的训练集构造出来一棵树(从根节点开始选择特征,如何进行特征切分)
- 测试阶段:根据构造出来的树模型从上到下去走一遍就好了
- 一旦构造好了决策树,那么分类或者预测任务就很简单了,只需要走一遍就可以了,那么难点就在于如何构造出来一颗树,这就没那么容易了,需要考虑的问题还有很多的!
二、如何切分特征(选择节点)
- 问题:根节点的选择该用哪个特征呢?接下来呢?如何切分呢?
- 想象一下:我们的目标应该是根节点就像一个老大似的能更好的切分数据(分类的效果更好),根节点下面的节点自然就是二当家了
- 目标:通过一种衡量标准,来计算通过不同特征进行分支选择后的分类情况,找出来最好的那个当成根节点,以此类推
2.1 衡量标准-熵
实例:
数据 14天打球情况 特征 4种环境变化 目标 构造决策树
- 划分方式:4种
- 问题:谁当根节点呢?
- 依据:信息增益
在历史数据中(14天)有9天打球,5天不打球,所以此时的熵应为:
4个特征逐一分析,先从outlook特征开始:
Outlook = sunny时,熵值为0.971
Outlook = overcast时,熵值为0
Outlook = rainy时,熵值为0.971
- 根据数据统计,outlook取值分别为sunny,overcast,rainy的概率分别为:5/14, 4/14, 5/14
- 熵值计算:5/14 * 0.971 + 4/14 * 0 + 5/14 * 0.971 = 0.693
(gain(temperature)=0.029 gain(humidity)=0.152 gain(windy)=0.048)- 信息增益:系统的熵值从原始的0.940下降到了0.693,增益为0.247
- 同样的方式可以计算出其他特征的信息增益,那么我们选择最大的那个就可以啦,相当于是遍历了一遍特征,找出来了大当家,然后再其余的中继续通过信息增益找二当家!
三、决策树算法
ID3:信息增益(有什么问题呢?)
C4.5:信息增益率(解决ID3问题,考虑自身熵)
CART:使用GINI系数来当做衡量标准
GINI系数:(和熵的衡量标准类似,计算方式不相同)
四、分类回归树
就懒懒这一下,截图说明好了~~~
4.1 在CART算法中主要分为两个步骤
- 将样本递归划分进行建树
损失最小- 用验证数据进行剪枝
正则:减小模型复杂度 (节点数目)
4.2 决策树剪枝策略
为什么要剪枝:决策树过拟合风险很大,理论上可以完全分得开数据(想象一下,如果树足够庞大,每个叶子节点不就一个数据了嘛)
剪枝策略:预剪枝,后剪枝
预剪枝:边建立决策树边进行剪枝的操作,限制深度,叶子节点个数叶子节点样本数,信息增益量等
后剪枝:当建立完决策树后来进行剪枝操作,通过一定的衡量标准
(叶子节点越多,损失越大)
五、树模型的特征
5.1 优点
- 容易解释
- 不要求对特征做预处理
1. 能处理离散值和连续值混合的输入
2. 对特征的单调变换不敏感 (只与数据的排序有关)
3. 能自动进行特征选择
4. 可处理缺失数据- 可扩展到大数据规模
5.2 缺点
- 正确率不高:建树过程过于贪心,但是可作为Boosting的弱学习器(深度不太深)
- 模型不稳定(方差大):输入数据小的变化会带来树结构的变化
1. Bagging:随机森林- 当特征数目相对样本数目太多时,容易过拟合
分类回归树总结
- 模型:树(非参数模型)
- 参数:分裂的特征及阈值
- 目标函数
1. 损失函数:L2损失/GINI指数
2. 正则项:树的节点数目(L0/L1)、叶子结点分数平方和(L2)- 优化
1. 建树
2. 剪枝
Scikit-learn中的Tree
CART算法的优化实现
- 建树:穷举搜索所有特征所有可能取值
- 没有实现剪枝(采用交叉验证选择最佳的树的参数)
- 分类树: DecisionTreeClassifier
- 回归树: DecisionTreeRegressor
DecisionTreeClassifier
sklearn.tree.DecisionTreeClassifier(criterion=‘gini’, splitter=‘best’,max_depth=None, min_samples_split=2, min_samples_leaf=1,min_weight_fraction_leaf=0.0, max_features=None, random_state=None,max_leaf_nodes=None, min_impurity_split=1e-07, class_weight=None,presort=False)
- 决策树算法特有的参数:criterion 、 splitter 、 max_depth 、
min_samples_split 、 min_samples_leaf 、 min_weight_fraction_leaf 、
max_features 、 max_leaf_nodes 、 min_impurity_split
DecisionTreeRegressor
sklearn.tree.DecisionTreeRegressor(criterion=‘mse’,splitter=‘best’,max_depth=None,min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0,max_features=None,random_state=None,max_leaf_nodes=None, min_impurity_split=1e-07,presort=False)
- 与分类树的参数基本相同,criterion的缺省值为‘mse’ , mean squared error, 即残差平方和的均值(L2损失)
feature_importances_
- 特征重要性亦被称为Gini重要性,即增加该特征对Gini指标的(归一化的)减少量。
- 可以做特征选择…