决策树
提炼步骤:
1、原始数据标签的熵值(根据两类概率计算出)
2、特征分类(如:天气特征分类为晴朗,多云等)后对应的熵值×此类在特征中的统计概率=特征分类后的熵值
3、根据最大差值来决定谁是根节点
决策树的惩罚项:即限制树的深度,叶子节点的个数等。惩罚项的具体表达式如下:
这与Xgboost的损失函数项是相同的
既可以做分类也可以做回归,如下图的分类树
先拿年龄再拿性别来分类,说明年龄的分类效果更好
节点越多数据被切的次数越多
数据输入后按照决策树一步步往下走
问题来了,如何构造决策树
在众多特征中选哪个特征作为根节点?必须有个衡量标准,即熵/不确定性
集合中,不同数越多,熵值越大,取到的数也就越不稳定。
从公式log函数也可以看出,不同数越多,取出某个数的概率越小,log出来的值越大,熵越大
理想情况下,熵值为0。概率与熵值对应图像如下:
横轴概率为0.5可以拿抛硬币来类比,不知道抛出的结果,最终的熵值(不确定性越大)肯定是越大的
信息增益:表示熵值下降多少
10个特征遍历看那个特征使信息增益最大,就将此特征选为根节点
实例说明:
接下来就要开始构造决策树了
拿那个特征作为根节点?选择过程如下:
没有分类时的熵值(原始熵的计算)
Outlook分类后对应的熵值乘此类在Outlook的统计概率,将三部分相加后才得到最后的熵值
如果ID也是一个特征,拿ID作为根节点,在分类时就会被分为14类
优缺点:因为每类只有一个数据(取此数据概率为1,相当于全是yes或者全是no),所以每个叶子节点的熵值均为0,结果会导致分类后叶子节点的熵值总和为0,这与原熵值的差肯定是最大的(信息增益最大),于是我们就会错误认为ID作为根节点是最好的。但实际情况用ID作为样本的分类毫无意义的
像ID这类特征:特征很稀疏,各种值都不同的情况下容易被选出来作为根节点
为了解决ID3的问题,提出其他分类方法
C4.5:信息增益率,信息增益比自身熵值(每个数的对应熵值,求和)。由于信息增益很大时,信息增益率的结果就会很小
公式:信息增益/自身的熵值
CART不是用熵值做的,用的GINI系数来衡量
GINI系数:1-概率的平方
如果分类后各类取到的概率很大(概率很大,说明节点处的数据越纯),GINI系数会变为0。所以gini系数越小越好,gini系数越小最终分类效果越好,节点数据越纯
打球的例子中,特征都是离散值,按照特征的属性进行分类
如果是连续值,就需要在连续值中找出一个点,通过这个点来进行分枝
如果特征很多,最终构造的决策树就会很庞大(每个个节点对应一个特征,按照特征的属性范围条件分枝)。如果加上一些参数后,能限制决策树的分枝。分枝过多会出现过拟合(在测试集上模型效果表现的很好,在测试集上很差)
决策树优点便于可视化展示
预剪枝:提前限制树的深度(可以理解为限制特征的数量),叶子节点的个数,叶子节点样本数(当叶子节点满足要求值后停止分枝)
限制叶子节点的个数示意图如下:同样可以简化树模型,当达到限制叶子节点个数后就不会向下分裂了
后减枝:因为已经有分枝了,所以根据前后值来决定
分裂前有一个Cα(T)值,分裂后有一个Cα(T)值
T表示叶子节点个数
C(T)表示:叶子节点的样本数(T)×gini系数C/熵值
①式表示分裂前的Cα(T)值,②式表示分类后的Cα(T)值,若②的值比①小,说明可以分离,反之,不去分裂