本小菜鸡在努力找工作中,基础不扎实努力啃书恶补,如有不严谨描述,还请大佬指正!
一、什么是决策树
根据数据特征(if-else形式)划分数据集,进而进行分类。
比如:
if (特征A的值为“是”):
if (特征B的值为“是”):
if (特征C的值为“是”):
类别 = 正类
else:
类别=负类
else:
类别 = 负类
else:
类别 = 负类
二、为什么要用决策树
为了理解数据中所蕴涵的知识信息
三、怎么样用决策树
总流程:
选择纯度度量指标-->选取能让纯度最大的那个特征作为该次的决策条件-->以该特征切分数据集,同时将该特征从切分后的子集中剔除--->重复第二第三步直至停止条件
停止条件有以下三种:
1. 完成分类
2. 特征维度已经全部用上,就以占比最大的类别作为当前节点的归属类别
3.纯度一样,无法继续分裂
1.决策条件
找到好的决策条件--->什么叫好的决策条件--->“纯度”高的--->决策后,二叉树的一个分支几乎都是正类,另一个分支几乎都是负类(希望这个决策条件可以一锤定音)
纯度的三个特点:
1) 当一个分支下的所有样本都为一类时,纯度最高
2)当一个分支下样本所属类别一半为正类,一半为负类时,纯度最低
3)纯度的考察与正类或者负类无关
纯度的计算指标:
用信息熵来衡量纯度,信息熵在通信里用于衡量不确定性:信息熵越小,系统越稳定(可以一锤定音),则意味着纯度越大。p为概率,在二元分类中,若p=1.则H为0;若p=0.5,H = 1,分类情况最不确定,最混乱。
纯度计算算法:
1)ID3算法:信息增益
2) C4.5算法:信息增益比
3) CART算法:基尼系数
例:用Gini系数选择特征,建立决策树
下面是一个上班是否需要带雨伞的问题,特征为天气和驾驶:
step1:选择使用决策特征(用驾驶or用天气)
首先计算天气的基尼系数,可见有三种天气:晴、多云、下雨
则:
天气_Gini = P(晴)× 晴_Gini + P(多云)×多云_Gini +P(下雨)×下雨_Gini
晴天样本数为2,晴天需要打伞的个数为0,晴天不打伞的个数为2,所以:
晴_Gini = 1-(0^2+1^2) = 0
多云的样本数为4,需要打伞的个数为2,不打伞的个数为2,所以:
多云_Gini = 1-(2/4)^2-(2/4)^2 = 0.5
下雨的样本数为3,需要打伞的个数为1,不打伞的个数为2:所以:
下雨_Gini = 1-(1/3)^2-(2/3)^2 = 0.444
天气_Gini = 2/9 × 0 + 4/9 ×0.5 +3/9 ×0.444 = 0.3689
然后计算驾驶的基尼系数,同理可得,驾驶_Gini = 0.444.
因为天气_Gini 比驾驶_Gini 小,说明“天气”这个特征更能一步到位,所以使用天气作为第一个决策节点。
2. 解决过拟合
1)预剪枝:在分支划分前就进行剪枝判断
2)后剪枝: 在分支划分之后就进行剪枝判断
未完待续
参考书籍:《机器学习算法的数学解析和python实现》