机器学习算法——决策树——学习总结

决策树是一种基本的分类和回归方法。本次主要学习其中分类方法的应用。

决策树是一种树结构,包含内部结点、叶子结点。可以认为是if-then规则的集合。内部结点表示一个特征或属性,每个内部结点的分支代表其具体的特征值或属性值。叶子结点表示一个具体的类。

在讲解决策树构建之前,先讲一下熵的概念。熵用来描述一个集合的混乱程度(就和我们在化学中提到的一样)。在信息论与概率统计中,熵表示随机变量不确定性的度量。给定一个取有限个值的离散随机变量X,则X的熵为H(X)。
H ( X ) = − ∑ i = 1 n p i l o g 2 p i n 表 示 X 有 n 种 取 值 可 能 , p i 表 示 X 取 第 i 种 值 得 概 率 , 令 0 l o g 0 = 0 , l o g 以 2 为 底 H(X) = - \sum_{i=1}^{n}p_{i}log_{2}p_{i} \\ n表示X有n种取值可能,p_{i}表示X取第i种值得概率,令0log0 = 0,log以2为底 H(X)=i=1npilog2pinXnpiXi0log0=0log2
例:
集合X = {a,a,b,b,b}
p 1 = 2 / 5 = 0.4 , p 2 = 3 / 5 = 0.6 , H ( X ) = − 0.4 l o g 2 0.4 − 0.6 l o g 2 0.6 p_{1} = 2/5=0.4,p_{2} = 3/5=0.6,H(X) = -0.4log_{2}0.4 - 0.6log_{2}0.6 p1=2/5=0.4,p2=3/5=0.6,H(X)=0.4log20.40.6log20.6

在实际应用中,针对某个数据集D,H(D)的中D通常表示D中的分类结果
熵越大,代表随机变量不确定性越大,集合混乱程度越高。

条件熵

条件熵H(Y|X)表示已知随机变量X的条件下,随机变量Y的不确定性。
H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) p i = P ( X = x i ) , i = 1 , 2 , . . . , n H(Y|X) = \sum_{i=1}^{n}p_{i}H(Y|X = x_{i}) \\ p_{i} = P(X=x_{i}), i=1,2,...,n H(YX)=i=1npiH(YX=xi)pi=P(X=xi),i=1,2,...,n
在实际任务中,根据一个特征的不同特征值,可将原始训练集D切割成若干子集。

决策树构建

应用一个已经构建完成的决策树很容易,如何根据一个数据集构建其决策树呢?决策树中的内部结点放置顺序是否有什么规则要求呢?什么样的特征能作为根节点呢?

显然,如果某个特征对分类结果的影响因素(分类能力)较大,则将其放置在根结点或靠前的内部结点。 选取具有分类能力特征的过程称作特征选择

如何量化一个特征的分类能力呢?具体方法有信息增益、信息增益比、基尼指数

信息增益

特征A对训练集D的信息增益g(D,A),定义为集合的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即:
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A) = H(D) - H(D|A) g(D,A)=H(D)H(DA)
某个特征的信息增益越大,代表其分类能力越强。信息增益对应于ID3决策树生成算法

信息增益比

特征A对训练集D的信息增益比 g R ( D , A ) g_{R}(D,A) gR(D,A)定义为其信息增益 g ( D , A ) g(D,A) g(D,A)与训练集D关于特征A的值的熵 H A ( D ) H_{A}(D) HA(D)之比,即
g R ( D , A ) = g ( D , A ) H A ( D ) H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ ∣ D ∣ 、 ∣ D i ∣ 表 示 集 和 的 元 素 个 数 , n 表 示 特 征 A 取 值 的 个 数 , D i 表 示 特 征 A 取 第 i 个 特 征 时 的 样 本 子 集 。 g_{R}(D,A) = \frac{g(D,A)}{H_{A}(D)} \\ H_{A}(D) = - \sum_{i=1}^{n}\frac{|D_{i}|}{|D|}log_{2}\frac{|D_{i}|}{|D|} \\ |D|、|D_{i}|表示集和的元素个数,n表示特征A取值的个数,D_{i}表示特征A取第i个特征时的样本子集。 gR(D,A)=HA(D)g(D,A)HA(D)=i=1nDDilog2DDiDDinADiAi
注意 H ( D ) 、 H ( D ∣ A ) 、 H A ( D ) H(D)、H(D|A)、H_{A}(D) H(D)H(DA)HA(D)的区别。
同理,某个特征的信息增益比越大代表其分类能力越强。
信息增益比对应于C4.5生成算法

基尼指数

对于给定样本集D,其基尼指数为:
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 C k 是 D 中 属 于 第 k 类 的 样 本 子 集 , K 是 类 的 个 数 Gini(D) = 1 - \sum_{k=1}^{K}(\frac{|C_{k}|}{|D|})^{2} \\ C_{k}是D中属于第k类的样本子集,K是类的个数 Gini(D)=1k=1K(DCk)2CkDkK
对于样本集D,已知其中一个特征A的具体值情况下,集合D的基尼指数定义为
G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) D 1 和 D 2 表 示 A 是 否 取 某 一 可 能 值 a 被 分 割 成 的 两 部 分 。 当 A 的 可 能 取 值 种 类 大 于 n > 2 时 , 则 G i n i ( D , A ) 要 计 算 n 次 , 取 其 中 最 小 值 代 表 整 个 G ( D , A ) Gini(D,A) = \frac{|D_{1}|}{|D|}Gini(D_{1}) + \frac{|D_{2}|}{|D|}Gini(D_{2}) \\ D_{1}和D_{2}表示A是否取某一可能值a被分割成的两部分。 \\ 当A的可能取值种类大于n>2时,则Gini(D,A)要计算n次, \\ 取其中最小值代表整个G(D,A) Gini(D,A)=DD1Gini(D1)+DD2Gini(D2)D1D2AaAn>2Gini(D,A)n,G(D,A)
例:
假设特征A可取特征值a1,a2,a3;
则要计算:
G i n i ( D , A = a 1 ) G i n i ( D , A = a 2 ) G i n i ( D , A = a 3 ) Gini(D,A = a1) \\ Gini(D,A = a2) \\ Gini(D, A = a3) Gini(D,A=a1)Gini(D,A=a2)Gini(D,A=a3)
其中Gini最小值为时的a为特征A的最优切分点。

在一个集合D中 ,若一个特征的基尼指数越小,表示其分类能力越强。

具体生成算法过程

ID3和C4.5的区别为,前者使用信息增益、后者采用信息增益比。
C4.5生成算法
cart生成算法

剪枝

由于生成的决策树可能发生过拟合问题,所以需要对其进行优化剪枝。往往是从已生成的树上减掉一些叶结点或叶结点以上的子树,并将其父节点作为新的叶结点,从而简化生成的决策树。具体剪枝算法过程… …

代码实践

主要通过机器学习库scikt-learn来实现。

from sklearn import tree  ##决策树相关包
X = [[0,0],[1,1]]  #训练集中的特征集   shape = (n_samples, n_features)
Y = [0,1]      #对应特征的标签结合  len(Y) = n_samples    
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X,Y)    #根据训练集构建决策树

print(clf.predict([[2., 2.]]))  #利用构建完成的决策树进行数据预测
###输出:[1]

当构建多值输出时,Y的shape为(n_samples,n_outputs),n_outputs表示每条样本对应n_outputs个输出值。
DecisionTreeClassifier类初始化参数意义

参考文献

1.李航《统计学习方法》第二版,第五章-------决策树。

猜你喜欢

转载自blog.csdn.net/qq_35268841/article/details/108198473