决策树是一种有监督的分类和预测方法,以树状图为基础。就是一系列的if-then语句。既可以用于分类问题也可以用于回归问题。
损失函数最小化原则
决策树原理:在特征空间上执行递归的二元分割,由节点和有向边组成。根节点是所有样本的集合。内部节点表示一个特征或者属性(比如天气,体重等等),叶子节点表示一个分类(根据特征选择今天做什么,看电影,去运动等)。
在叶子节点Si处有Ni个样本点,但是整个单元都属于Ck类,看那个分类占优,则整个单元都属于该类。
构建决策树的三个步骤:
(1)特征选择
(2)决策树生成
(3)决策树剪枝
构建决策树的算法通常是递归地选择最优特征,并根据该特征对数据进行数据分割,步骤如下:
(1)构建根节点,所有的数据样本都位于根节点
(2)选择一个最优特征,通过该特征将数据分割成子集(如何选择最优特征下面会讲),确保各个子集有最好的分类。若是子集已经较好的分类,则构建叶节点;不能较好的分类,则对该子集继续进行分类。
(3)递归至所有的样本都能被较好的分类,或者是没有合适的特征。是否被较好的分类有指标为证。
生成的决策树对训练样本有很好的分类作用,但是需要的是对未知样本的分类能力,因此通常需要剪枝(防止过拟合),使decision tree具有更好的泛化能力。
特征选择
特征选择就是选取有较强分类能力的特征,分类能力通过信息增益或信息增益比刻画。特征选择就是选取局部最优特征作为判断进行划分,取决于划分后的数据的纯度,越纯则划分越合理。衡量节点的纯度指标有:熵、基尼系数和方差,前两者是针对分类的,方差是针对回归的。
公式不好打我就不打了。
条件熵H(Y/X),已知随机变量X的条件下随机变量Y的不确定性。
信息增益
g(D,A)=H(D)-H(D/A)
信息增益刻画的是由于特征A使得数据集D的分类不确定性减少的程度,当然不确定性减少的越多越好,也就是信息增益越多越好。构建决策树选择信息增益大的特征来划分数据集。
信息增益的算法:
训练集D,训练样本数据容量N。K个类别Ck,k=1,2,…,K。|Ck|为属于类Ck的样本个数
设特征A有n个不同的取值:{a1,a2,…,an},根据特征A将样本N划分为n个子集:D1,D2,…Dn。Ni为样本Di中样本的数量。
设集合Di中属于类Ck的样本集合为:Dik,数量为Nik,信息增益的算法如下:
输入:训练数据集D,特征A
输出:信息增益g(D,A)
算法步骤(这个公式好难打,下次继续写)
根据下面的公式计算数据 D的经验熵
根据下式计算特征A对于数据D的经验条件熵H(D/A)
根据下式计算信息增益
以信息增益作为划分数据集的特征选取方案存在偏向于选取值较多的特征的问题。举个例子,在极限的情况下,将特征A中的每个样本一一对应到对应的节点当中去的时候(即每个节点中有且仅有一个样本),此时Nik/Ni=1,条件熵为0,信息增益最大,但是这个特征A显然不是最佳选择。可以通过信息增益比来解决。
决策树生成
决策树生成算法有ID3算法和C4.5生成算法。ID3采用的是信息增益,C4.5采用的是信息增益比。
算法描述如下:
输入:训练数据集D、特征集A,特征信息增益阀值(不设置增益得下线,可能会导致分得太细,每个叶子节点只有一个数据)
简单来说就是依次计算g(D,Ai),选择信息增益最大的特征Ag,完成这一轮的划分。对下一个节点,以Di为训练集,A-Ag为特征集,重复步骤。
树剪枝
决策树需要剪枝的原因是因为在构造数的过程中是针对训练集的,构建的树的模型可能过于复杂,导致over-fitting,对于新的数据集,拟合效果可能很差。解决过拟合的方法是控制模型的复杂度,对于decission tree来说就是简化模型,俗称剪枝。
剪枝目的是提高泛化能力。
决策树剪枝过程是从已生成的决策树上剪掉一些子树或者是叶子节点。
目标是通过极小化决策树的整体损失函数或代价函数来实现的。
剪枝算法的描述如下:
输入:生成树T,参数a(a类似于正则化中的参数lambda)
输出:剪枝树Ta
算法步骤如下:
(1)计算每个节点的经验熵
(2)递归地从树的叶节点向上回退
设一组叶节点回退到父节点之前与之后的整棵树分别为Tt和Tt’,对应的损失函数数值分别为C(Tt)和C(Tt’),若C(Tt)≥C(Tt’),则进行剪枝,将父节点变成新的叶节点。
CART算法
分类与回归树(Classification And Regression Tree,CART)模型也是一种决策树模型,可以用于分类也可以用于回归。其学习算法分为两步。
(1)决策树生成:用训练数据生成决策树,生成树尽可能大;
(2)决策树剪枝:基于损失函数最小化的标准,用验证数据对生成的决策树剪枝
CART回归生成树用平方误差最小化策略
CART分类生成树用基尼指数最小化策略
CART回归树(平法误差最小)
https://www.cnblogs.com/gczr/p/7191426.html
训练集为:D={(x1,y1), (x2,y2), …, (xn,yn)}。
输出Y为连续变量,将输入划分为M个区域,分别为R1,R2,…,RM,每个区域的输出值分别为:c1,c2,…,cm则回归树模型可表示为:
则平方误差为:
假如使用特征j的取值s(比如特征j体重取值s=100)来将输入空间划分为两个区域,分别为:
然后寻求最优切分变量(特征)j和最优切分点s,即求解:
其中c1,c2分别为R1,R2区间内的输出平均值。
具体操作:首先遍历所有的维度(特征),找到最优的切分维度j,然后对该维度找到最优切分点s,构成一个(j,s)对,将输入空间划分为两个区域。然后在子区域中重复该划分过程。
通常停止的条件时下列条件之一:(1)节点中样本数小于预定值(2)样本集的平方误差小于预定值(3)没有更多的特征
CART分类树(基尼指数)
基尼指数:假如总共有K类,样本属于第k类的概率为:pk,则该概率分布的基尼指数为:
**基尼值代表了从D中随机选择两个样本,其类别不一致的概率。**基尼指数越大,说明不确定性就越大。
使用特征A=a,将D划分为两部分,即D1(满足A=a的样本集合),D2(不满足A=a的样本集合)。则在特征A=a的条件下D的基尼指数为:
基尼系数与熵一样,也是用于确定不确定性的,基尼指数越小说明样本越是同一类。
CART分类树算法
输入:训练集D,停止计算条件
输出:CART决策树
算法步骤:
(1)对于每个特征值A及其可能的取值a,计算Gini(D,A)。
(2)选取最优特征和最优切分点:最小的Gini(D,A)即使最优特征和最优切分点。根据最优特征和切分点将数据分为两个子节点。
(3)对两个子节点递归的调用上面两步,直到满足条件为止。
CART剪枝
过程
(1)从T0开始不断地剪枝,直到剪成一颗单节点的树。这些剪枝树形成一个剪枝树序列{T0,T1,…,Tn};
(2)从这个剪枝树序列中挑选出最优剪枝树,方法是通过交叉验证法使用验证数据集对剪枝树进行调试
计算决策树的损失函数:
C(T)为决策树对训练数据的预测误差;|T|为决策树的叶节点个数。
CART通过验证数据集来测试剪枝树序列T0,T1,…,Tn}。
对于回归树,考察剪枝树的平方误差,平方误差最小的被认为是最优决策树。
对于分类树,考察剪枝树的基尼指数,基尼指数最小的决策树被认为是最优决策树。