1. 决策树模型与学习
1.1 决策树模型
由结点和有向边组成. 结点包括内部结点(表示一个特征or属性)和叶结点(表示一个类).
1.2 决策树与if-then规则
(1) 内部结点的特征对应着规则的条件. (2) 叶结点的类对应着规则的结论. (3) 规则具有互 斥性和完备性.
1.3 决策树与条件概率分布
决策树可以表示给定特征条件下类的条件概率分布. 如下图所示, (a)中特征空间被划分成了4个单元, (b)给出的条件概率分布对应于(a)的划分, 当某个单元c的条件概率满足P(Y=+1|X=c)>0.5P(Y=+1|X=c)>0.5时, 则认为这个单元属于正类, 否则属于负类.
1.4 决策树学习
本质: 从训练数据集中归纳出一组分类规则 OR 由训练数据集估计条件概率模型.
目标: 得到一个与训练数据矛盾较小的决策树, 同时有比较好的泛化能力.
达到目标的方式: 让损失函数(正则化的极大似然函数)最小化. 即在损失函数意义下选择最优决策树.
做法: 递归地选择最优特征.
- 构建根结点(将所有训练数据都放在根结点)
- 选择一个最优特征, 按这一特征将训练集分割成子集
- 如果这些子集能正确分类, 则构建叶结点, 否则重复2步骤
上述做法可能会出现过拟合的问题. 解决方式: 自下而上进行剪枝, 将树变得简单(即将父结点或更高的结点改为新的叶结点).
综上, 决策树算法包括: 特征选择, 决策树的生成, 决策树的剪枝. 决策树的生成只考虑了局部最优, 决策树的剪枝则考虑了全局最优.
2. 特征选择
加入给定一个训练样本数据:
2.1 特征选择问题
特征选择是决定用哪个特征来划分特征空间.
准则: 这个特征能将训练数据集分割成子集, 使得各个子集在当前条件下有最好的分类. 可以用信息增益来表示这个准则.
2.2 信息增益
2.2.1 定义熵和条件熵
熵(entropy)是随机变量不确定性的度量. 设X是一个有有限值的离散随机变量: P(X=xi)=piP(X=xi)=pi, X的熵可以记为H(p)=−∑i=1npilogpiH(p)=−∑i=1npilogpi (如果有0概率, 则令0log0=00log0=0).
条件熵H(Y|X)定义为X给定条件下Y的条件概率分布的熵对X的数学期望: H(Y|X)=∑i=1npiH(Y|X=xi)H(Y|X)=∑i=1npiH(Y|X=xi)
如果熵和条件熵中的概率由数据估计得到时, 所对应的熵与条件熵分别称为经验熵和经验条件熵.
2.2.2 定义信息增益
信息增益的意义: 特征X确定后使类Y的不确定性减少的程度.
定义: 特征A对训练数据集D的信息增益g(D, A), 定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差.
g(D,A)=H(D)−H(D|A)g(D,A)=H(D)−H(D|A)
根据信息增益准则的特征选择方法: 对训练集D, 计算其每个特征的信息增益, 并比较他们的大小, 选择信息增益最大的特征.
2.3 信息增益比
定义式: gR(D,A)=g(D,A)H(D)gR(D,A)=g(D,A)H(D)
3. 决策树的生成
3.1 ID3算法
核心: 决策树在各个结点上应用信息增益准则选择特征, 递归的创建决策树.
算法描述
输入: 训练数据集D, 特征集A, 阈值ε.
输出: 决策树T
(1) 计算A中各特征对D的信息增益, 选择信息增益最大的特征AgAg.
(2) 如果AgAg的信息增益小于阈值ε, 则置T为单节点树.
(3) 否则, 对AgAg的每一可能值aiai将D分割为若干非空子集DiDi, 构建子结点.
(4) 对第i个子节点, 以DiDi为训练集, 以A-{AgAg}为特征集, 重复(1)~(3).
3.2 C4.5的生成算法
同ID3, 只是把信息增益准则变为了信息增益比准则.
4. 决策树的剪枝
将已生成的树进行简化的过程称为剪枝(pruning). 目的是防止过拟合现象.
4.1 损失函数
设叶节点的个数为|T|, t是树T的叶节点, 该节点上有NtNt个样本点, 其中k类的样本点有NtkNtk个(k=1, …, K). H(T)为叶结点t上的经验熵, α≥0是正则化项的参数. 损失函数可以定义如下
Cα(T)=∑t=1|T|NtHt(T)+α|T|Cα(T)=∑t=1|T|NtHt(T)+α|T| , 其中经验熵为: Ht(T)=−∑kNtkNtlogNtkNtHt(T)=−∑kNtkNtlogNtkNt
把上式右端第一项记为C(T): Cα(T)=C(T)+α|T|Cα(T)=C(T)+α|T|, 其中C(T)表示模型对训练数据的预测误差. |T|(叶结点的个数)表示模型的复杂度.
4.2 剪枝算法
输入: 生成算法产生的树T, 参数α;
输出: 修剪后的子树Tα;
(1) 计算每个结点的经验熵.
(2) 递归地从树的叶结点向上回缩. 设回缩前与回缩后的整体树分别为TBTB与TATA, 对应的损失函数分别为Cα(TB)Cα(TB)与Cα(TA)Cα(TA). 如果Cα(TB)>=Cα(TA)Cα(TB)>=Cα(TA), 则进行剪枝.
(3) 返回(2), 直到不能继续为止, 得到损失函数最小的子树TαTα.
5. CART算法
CART = classification and regression tree = 分类与回归树(既可用于分类又可用于回归)
算法简述:
(1) 决策树生成: 用训练数据集生成尽量大的决策树.
(2) 决策树剪枝: 利用验证数据集, 以损失函数为标准进行剪枝.
5.1 CART生成算法
5.1.1 回归树的生成
给定训练数据集D={(x1,y1),...,(xN,yN)}D={(x1,y1),...,(xN,yN)}(X与Y分别为输入和输出变量, 注意Y是连续变量)
将输入空间划分为M个单元R1,R2,...,RMR1,R2,...,RM, 每个单元有个固定的输出值cmcm, 则回归树模型可表示为:
f(x)=∑m=1McmI(x∈Rm)f(x)=∑m=1McmI(x∈Rm)
明显, cmcm的最优值是RmRm上的所有输入实例xixi对应的yiyi的均值:
cm^=ave(yi|xi∈Rm)cm^=ave(yi|xi∈Rm)
最小二乘回归树生成算法
输入: 训练数据集D={(x1,y1),...,(xN,yN)}D={(x1,y1),...,(xN,yN)}
输出: 回归树f(x)
思想: 在输入空间中, 递归地将每个区域划分为两个子区域并决定每个子区域上的输出值, 构建二叉决策树.
(1) 选择最优切分变量 j 和切分点 s, 这里采用的是启发式的方法, 先随便找一个x(j)x(j)作为切分变量, 它对应的取值 s 作为切分点, 进而可以定义两个区域:
R1(j,s)={x|x(j)≤s}R1(j,s)={x|x(j)≤s} 和 R2(j,s)={x|x(j)>s}R2(j,s)={x|x(j)>s}
做如下优化即可得出最优的 j 和 s:
minj,s[minc,1∑xi∈R1(j,s)(yi−c1)2+minc,2∑xi∈R2(j,s)(yi−c2)2]minj,s[minc,1∑xi∈R1(j,s)(yi−c1)2+minc,2∑xi∈R2(j,s)(yi−c2)2]
(2) 用选定的(j,s)划分区域并决定相应的输出值
R1(j,s)={x|x(j)≤s}R1(j,s)={x|x(j)≤s} 和 R2(j,s)={x|x(j)>s}R2(j,s)={x|x(j)>s}
cm^=ave(yi|xi∈Rm)cm^=ave(yi|xi∈Rm) , m=1,2m=1,2
(3) 对划分出来的两个区域调用(1)(2), 直到满足停止条件
(4) 生成决策树
5.2 分类树的生成
定义基尼指数: 分类问题中, 假设有K个类, 样本点属于第k类的概率为pk, 则基尼指数可以定义为:
Gini(p)=∑k=1Kpk(1−pk)=1−∑k=1Kp2kGini(p)=∑k=1Kpk(1−pk)=1−∑k=1Kpk2
对于给定的样本集合D, 基尼指数可以表示为:
Gini(D)=1−∑k=1K(|Ck||D|)2Gini(D)=1−∑k=1K(|Ck||D|)2 , 其中K是类的个数, CkCk是D中属于第k类的样本子集.
如果样本集合D根据特征A是否取某一可能值a被分割成D1和D2两部分, 则在特征A的条件下, 集合D的基尼指数定义为:
Gini(D,A)=|D1||D|Gini(D1)+|D2||D|Gini(D2)Gini(D,A)=|D1||D|Gini(D1)+|D2||D|Gini(D2)
Gini(D)表示集合D的不确定性, 基尼指数Gini(D,A)表示经A=a分割后集合D的不确定性.
5.2.1 CART生成算法
输入: 训练数据集D, 停止计算条件(样本个数小于预定阈值or样本集的基尼指数小于预定阈值or没有更多特征)
输出: CART决策树
(1) 对每个特征的每个可能取值计算它们对应的基尼系数.
(2) 选择基尼指数最小的特征及其对应的切分点作为最优特征和最优切分点. 现生成了两个子节点, 将训练数据集依特征分配到两个子结点中去.
(3) 对两个子结点递归调用(1)(2), 直到满足停止条件.
(4) 生成CART决策树
5.2.2 基尼指数和熵之半都可以近似地代表分类误差率
5.3 CART剪枝算法
5.3.1 剪枝, 形成一个子树序列
子树损失函数的表达式为: Cα(T)=C(T)+α|T|Cα(T)=C(T)+α|T| , 其中T为任意子树, C(T)为对训练数据的预测误差(比如基尼系数), |T|表示模型的复杂度, α的功能是衡量预测误差和模型复杂度, 可以通过极端情况来理解, α=0时, 整体树是最优的, α=∞时, 由根结点组成的单节点树是最优的.
对一个整体树T0T0开始剪枝, 对于T0T0的任意内部结点 t , 以 t 为单节点树的损失函数是: Cα(t)=C(t)+αCα(t)=C(t)+α
以 t 为根结点的子树TtTt的损失函数为: Cα(Tt)=C(Tt)+α|Tt|Cα(Tt)=C(Tt)+α|Tt|
当α很小的时候有: Cα(Tt)<Cα(t)Cα(Tt)<Cα(t) (不考虑模型复杂度时, 树越”大”误差函数的值越小)
所以如果α增大, 则必有一个α, 使 Cα(Tt)=Cα(t)Cα(Tt)=Cα(t)
对T0T0中每一内部结点, 定义g(t), 表示剪枝后整体函数损失的程度:
g(t)=C(t)−C(Tt)|Tt|−1g(t)=C(t)−C(Tt)|Tt|−1
在T0T0中减去g(t)最小的T1T1, 得到子树T1T1. 如此剪枝下去, 直至得到根结点, 在此过程中也得到了一个子树序列T0,...,TnT0,...,Tn.
5.3.2 在剪枝得到的子树序列中通过交叉验证选取最优子树TαTα
利用独立的验证数据集, 测试子树序列中各棵子树的平方误差和基尼系数, 选取最小的.
CART剪枝算法
输入: CART算法生成的决策树T0T0.
输出: 最优决策树TαTα.
1. 设k=0,T=T0k=0,T=T0
2. 设α=+∞α=+∞
3. 自下而上地对内部结点 t 计算C(Tt)C(Tt), |Tt||Tt|以及g(t)=C(t)−C(Tt)|Tt|−1g(t)=C(t)−C(Tt)|Tt|−1 , α=min(α,g(t))α=min(α,g(t))
4. 自上而下地访问内部结点 t , 如果有g(t)=α, 进行剪枝, 并对结点t以多数表决法决定其类, 得到树 T.
5. 设k=k+1,αk=α,Tk=Tk=k+1,αk=α,Tk=T
6. 如果T不是由根结点单独构成的树, 则回到步骤(4)
7. 用交叉验证法在子树序列中选取最优子树TαTα.