您的位置:首页 > 其它

[机器学习算法详解]决策树——以隐形眼镜分类问题为例

2015-03-24 20:58 232 查看

[机器学习算法详解]决策树——以隐形眼镜分类问题为例

一、 问题背景

决策树是概念学习的一种模型和学习算法,所谓概念学习可以看成是一个搜索过程,搜索的范围是假设定义的空间,搜索的目标是寻找能更好得拟合训练样例的假设。决策树希望通过构造一种IF-THEN的规则的集合,来对离散值数据进行分类。决策树模型是一种监督学习,训练样例是包含特征和类别,每个特征的取值是离散的,类别也是离散的。例如隐形眼镜分类问题,隐形眼镜的数据集合中,有四个特征分别为患者年龄、眼睛处方、是否散光、眼泪分泌率,三个类别分别为硬型、软型和不适合佩戴。决策树模型是判别模型,通过直接生成后验概率分布作为判别条件进行分类。

决策树是一棵多叉树,树的叶子节点表示分类信息,即应该被分到的类别。树的中间节点表示用于分枝的特征属性,即在该层使用特定的属性进行分类,中间节点的分枝个数等于该特征的离散值取值个数。树从树顶到叶子节点的路径表示某一个样例根据其每个特征的取值会被分到的类别。决策树的归纳偏置是优先选择更矮的树并且优先选择对分类更好的特征使其离树根更近。决策树分为特征选择、决策树生成和剪枝三个步骤。

二、算法详解

1. 特征选择

特征选择主要解决找出哪些特征是对分类最有帮助的特征,将这些特征尽量安排到离树的根节点更近的位置,这样使得分类更加准确。通过定量的方法如何判断一个属性更适合分类,这里引入熵、条件熵、信息增益和信息增益比概念进行定量判断。

熵是指信息的不确定性程度。如果对于观测变量Y(以隐形眼镜的类别为硬、软两类),观测100次,100次都是硬,那么说明这个观测变量Y的不确定性很小,如果50次是硬,50次是软,那么说明这个观测变量Y的不确定性很大。对于一个观测变量,如果每个观测值的概率都非常小或者非常大,那么确定性很大,如果观测值的概率都非常接近,那么确定性很小。熵的计算公式为H(X)=∑ipilogpiH(X)=\sum_ip_i \log p_i当二分类时,即i只有两个取值时,对熵求导得ddp(plogp+(1−p)log(1−p))=log(11−p−1)\frac{d}{dp}(p\log p+(1-p)\log (1-p))=\log(\frac{1}{1-p}-1)分析得知,熵随着概率从0~1的取值,从0增加到1又减少到0,和我们要求的熵的特性相同。

条件熵是指在一个特征属性的不同取值的分类下,信息的不确定性程度。如果对于特征属性取特定值时,观测变量的不确定性发生的变化说明了该特征对熵的影响程度,条件熵的公式如下H(Y∣Xt)=∑jNjN∑iNj,iNjlogNj,iNjH(Y \mid X_t)=\sum_j \frac{N_j}{N}\sum_i\frac{N_{j,i}}{N_j}\log\frac{N_{j,i}}{N_j}其中,XtX_t表示第t个特征属性,NN表示所有样例的个数,NjN_j表示特征属性取值j的样例的个数,Nj,iN_{j,i}表示特征属性取值为j的样例被分到第i类的样例的个数,其中第二个求和表示特征属性取值为j时的所有样例的熵,表明该属性取值的分类的不确定性程度。第一个求和表示这个特征属性在取每个特征值时熵的加权和,权重是当特征取值j时的样例个数所占比例,如果某个特征值的样本更多,那么它的熵的贡献率也就越高。这样,条件熵就表示对应的特征属性对分类的熵的影响程度。

信息增益是用来衡量一个特征属性是否适合分类的定性评判标准之一。信息增益的公式如下g(Y,Xt)=H(Y)−H(Y∣Xt)g(Y,X_t)=H(Y)-H(Y \mid X_t)信息增益是分类观测变量的熵与在特征属性t的条件下分类观测变量的条件熵的差,前者代表了训练数据分类不确定性程度,后者表现了在特征属性t的前提下训练数据分类的不确定性,那么,信息增益就表示由于特征属性t对训练数据分类的不确定性的减少程度。对于一个特征属性,如果使训练数据分类的不确定性减少得更大,说明其提高了分类的确定性,具有更强的分类能力,应该使这个特征属性距离树的根节点越接近。

信息增益比是另外一种衡量特征属性是否适合分类的定性评判标准,是对信息增益的改进。如果只用信息增益来衡量,对于一个特征具有很多特征值,但是每个特征值只出现一次的情况,那么这样必然导致每个特征取值对训练数据的划分的分类只有一种(因为训练数据只有一种),这样每个特征值的熵都为0,该属性的条件熵也必然为0,那么信息增益也必然很大,但是这个属性并不是利于分类的属性,因此引入信息增益比作为对信息增益的优化。信息增益比的公式如下gA(Y,Xt)=g(Y,Xt)H(Xt)g_A(Y,X_t)=\frac{g(Y,X_t)}{H(X_t)}其中分母为特征属性的熵值,如果特征属性的取值较多,那么特征属性的不确定性更大,熵值也越大,因此会使信息增益比减小。可以理解为特征属性的熵是对信息增益比的惩罚因子,这样利于选出信息增益高并且特征属性熵更小的特征作为特征分类能力的定量表示。

2. 决策树生成

决策树的归纳偏置希望让分类能力更强的特征属性优先进行分类,也就是这样的特征距离树的根节点更近。分类能力判断的标准不同有不同的决策树算法,ID3决策树使用信息增益进行建树,C4.5决策树使用信息增益比进行建树,这里主要介绍ID3树,其他决策树只需稍作修改(修改信息增益为其他判别准则即可)。ID3决策树代码使用递归方法进行编写,步骤如下。

递归出口:

1. 如果训练样本的观测变量YiY_i只有一个取值,创建这个值为节点,并返回这棵单节点树。

2. 如果训练样本的自变量XiX_i特征属性的个数为0,创建观测变量YiY_i中比例最大的类别值为节点,并返回这棵单节点树。

递归过程:

3. 计算特征属性集合AiA_i中每个特征属性的信息增益,找出信息增益最大的特征属性AmA_m,根据这个特征的不同取值划分训练数据为XiX_i,将该属性作为节点并对每个训练数据作为子树。

4. 对每个训练数据XiX_i,其特征属性集合为Ai−{Am}A_i-\{A_m\},并递归调用1~4步骤。

写者的python代码中使用了字典数据结构来维护这棵决策树,对隐形眼镜分类问题的解如下。其中字典的键表示从节点向下分枝的对应的特征取值,字典的值表示一棵子树。


决策树用来进行分类,根据测试样例的特征属性的取值,找出对应的路径,到达的叶子节点即为测试样例的预测值。每一条路径可以理解为对假设空间的一个划分,而每一个划分相当于是条件概率函数(离散)的每个取值点(自变量),一棵决策树建立完成相当于这个条件概率分布被学习到,即后验概率分布。这样可以通过这个后验概率分布进行分类,通过这里也可以看出在联合概率分布未知的情况下直接求条件概率分布(后验概率分布),因此决策树模型是一种判别模型而非生成模型。

3. 剪枝

由于决策树是根据训练样例生成的,决策树很好的拟合了训练样例的假设空间,但是对于未知的测试样例可能表现的不好,这就说明如果不对决策树模型进行模型泛化,很有可能出现“过拟合”的问题,因此通过剪枝的方法来对决策树进行泛化。决策树学习的损失函数定义为Cα(T)=∑t=1TNtHt(T)+α|T|C_{\alpha}(T)=\sum_{t=1}^{T}N_tH_t(T)+\alpha|T|其中,T表示这棵子树的叶子节点,Ht(T)H_t(T)表示第t个叶子的熵,NtN_t表示该叶子所含的训练样例的个数,α\alpha是惩罚系数,|T|表示子树的叶子节点的个数。损失函数认为对于每个分类终点(叶子节点)的不确定性程度就是分类的损失因子,而叶子节点的个数是模型的复杂程度,作为惩罚项,损失函数的第一项是样本的训练误差,第二项是模型的复杂度。如果一棵子树的损失函数值越大,说明这棵子树越差,因此我们希望让每一棵子树的损失函数值尽可能得小,损失函数最小化就是用正则化的极大似然估计进行模型选择的过程。决策树的剪枝过程(泛化过程)就是从叶子节点开始递归,记其父节点将所有子节点回缩后的子树为Tb(分类值取类别比例最大的特征值),未回缩的子树为Ta,如果Cα(Ta)≥Cα(Tb)C_{\alpha}(T_a) \geq C_{\alpha}(T_b)说明回缩后使得损失函数减小了,那么应该使这棵子树回缩,递归直到无法回缩为止,这样使用“贪心”的思想进行剪枝可以降低损失函数值,也使决策树得到泛化。

三、实验

使用隐形眼镜分类问题测试集进行ID3和C4.5决策树的实验,最终构造的决策树如下。python代码在这里
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐