【机器学习】决策树特征选择准则 信息增益、信息增益率、基尼系数的计算及其python实现

索引

1.问题引入

首先,我们引入需进行决策树算法学习的数据集 D D D,如下,

特征 A = [ ′ 年 龄 ′ , ′ 有 工 作 ′ , ′ 有 自 己 的 房 子 ′ , ′ 信 贷 情 况 ′ ] A = [‘年龄’,’有工作’, ‘有自己的房子’, ‘信贷情况’] A=[,,]

类别 Y = [ ′ 类 别 ′ ] Y = [‘类别’] Y=[]

《【机器学习】决策树特征选择准则 信息增益、信息增益率、基尼系数的计算及其python实现》
接着摆在我们面前的是首先选择哪个特征,其次选择哪个特征,…,最后选择哪个特征。(就是先选择好的特征,再选择坏的特征)

问题引入:  怎么知道特征的好坏呢?
如果一个特征A能使得数据分出来的类别最好,那么他就是最好的特征。
(就是提供的信息最为准确),因此我们引入信息增益来衡量提供的信息准确度。

2.信息增益

1.计算公式:

G ( D , A ) = H ( D ) − H ( D ∣ A ) G(D,A) = H(D) – H(D|A) G(DA)=H(D)H(DA)

解释: G ( D , A ) G(D,A) G(DA)指的是特征 A A A对数据集 D D D的信息增益;

H ( D ) H(D) H(D)指数据集 D D D的(经验)熵;

那么问题来了,什么是熵呢?
熵表示的是随机变量不确定性的度量。熵越大,表示这个系统越紊乱,越难确定一个东西。

H ( D ∣ A ) H(D|A) H(DA)指的是 A A A条件下,数据集 D D D的(经验)条件熵。

经验条件熵是什么呢?
例如:H(D|A)指的是特征A条件下,数据集D的不确定性。
换句话说,就是只知道特征A来确定数据D的类别,同样的,熵越大,越紊乱,越难确定类别。

注:
1. H ( D ) = − ∑ i = 0 n p i l o g 2 p i H(D) = -\sum_{i=0}^{n}p_{i}log_{2}p_{i} H(D)=i=0npilog2pi

i = 1 , . . . n ( n 为 类 别 Y 的 数 量 ) i=1,…n (n为类别Y的数量) i=1...n(nY)

p i 是 每 一 类 出 现 的 概 率 , 例 如 p ′ 是 ′ = 是 出 现 的 次 数 总 数 = 9 15 p_{i}是每一类出现的概率,例如p_{‘是’}= \frac{是出现的次数} {总数}= \frac{9} {15} pip==159

2. H ( D ∣ A ) = ∑ i = 0 n p i H ( Y ∣ X = x i ) H(D|A) = \sum_{i=0}^{n}p_{i}H(Y|X = x_{i}) H(DA)=i=0npiH(YX=xi)

i = 1 , . . . n ( n 为 特 征 A 取 值 的 个 数 ) i=1,…n (n为特征A取值的个数) i=1...n(nA)

2.实例计算:

我们拿上述数据集D的特征A=’年龄’为例计算其信息增益:

1.
H ( D ) = − ∑ i = 0 n p i l o g 2 p i = − 6 15 l o g 2 6 15 − 9 15 l o g 2 9 15 = 0.971 H(D) = -\sum_{i=0}^{n}p_{i}log_{2}p_{i}=-\frac{6}{15}log_{2}\frac{6}{15} -\frac{9}{15}log_{2}\frac{9}{15}=0.971 H(D)=i=0npilog2pi=156log2156159log2159=0.971

此处类别’否’为6个样本,类别’是’为9个样本;

2.
H ( D ∣ ′ 年 龄 ′ ) = ∑ i = 0 n p i H ( Y ∣ X = x i ) = p ′ 青 年 ′ H ( Y ∣ X = x ′ 青 年 ′ ) + p ′ 中 年 ′ H ( Y ∣ X = x ′ 中 年 ′ ) + p ′ 老 年 ′ H ( Y ∣ X = x ′ 老 年 ′ ) = 5 15 ∗ ( − 2 5 l o g 2 2 5 − 3 5 l o g 2 3 5 ) + 5 15 ∗ ( − 2 5 l o g 2 2 5 − 3 5 l o g 2 3 5 ) + 5 15 ∗ ( − 1 5 l o g 2 1 5 − 4 5 l o g 2 4 5 ) = 0.888 H(D|’年龄’)=\sum_{i=0}^{n}p_{i}H(Y|X = x_{i})=p_{‘青年’}H(Y|X = x_{‘青年’})+p_{‘中年’}H(Y|X = x_{‘中年’})+ p_{‘老年’}H(Y|X = x_{‘老年’})=\frac{5}{15}*(-\frac{2}{5}log_{2}\frac{2}{5} -\frac{3}{5}log_{2}\frac{3}{5})+\frac{5}{15}*(-\frac{2}{5}log_{2}\frac{2}{5} -\frac{3}{5}log_{2}\frac{3}{5})+\frac{5}{15}*(-\frac{1} {5}log_{2}\frac{1}{5} -\frac{4}{5}log_{2}\frac{4}{5})=0.888 H(D)=i=0npiH(YX=xi)=pH(YX=x)+pH(YX=x)+pH(YX=x)=155(52log25253log253)+155(52log25253log253)+155(51log25154log254)=0.888

3.
G ( D , ′ 年 龄 ′ ) = H ( D ) − H ( D ∣ ′ 年 龄 ′ ) = 0.971 − 0.888 = 0.083 G(D,’年龄’) = H(D) – H(D|’年龄’) =0.971-0.888=0.083 G(D)=H(D)H(D)=0.9710.888=0.083

同理: G ( D , ′ 有 工 作 ′ ) = 0.324 , G ( D , ′ 有 自 己 的 房 子 ′ ) = 0.420 , G ( D , ′ 信 贷 情 况 ′ ) = 0.363 G(D,’有工作’)=0.324, G(D,’有自己的房子’)=0.420,G(D,’信贷情况’)=0.363 G(D)=0.324G(D)=0.420G(D)=0.363

比较各个特征的信息增益值,发现 G ( D , ′ 有 自 己 的 房 子 ′ ) = 0.420 G(D,’有自己的房子’)=0.420 G(D)=0.420最大,即选择特征’有自己的房子’作为最优特征。

信息增益准则偏向选择对数目较多的特征,因此引入信息增益率准则

3.信息增益率

1.计算公式:

g R ( D , A ) = ( H ( D ) − H ( D ∣ A ) ) / H A ( D ) g_{R}(D,A) =(H(D) – H(D|A))/H_{A}(D) gR(DA)=(H(D)H(DA))/HA(D)

注: H A ( D ) = − ∑ i = 0 n p i l o g 2 p i , i = 1 , . . . n ( n 为 特 征 A 取 值 的 个 数 ) H_{A}(D)= -\sum_{i=0}^{n}p_{i}log_{2}p_{i},i=1,…n (n为特征A取值的个数) HA(D)=i=0npilog2pii=1...n(nA)

2.实例计算:

我们还是拿上述数据集D的特征A=’年龄’为例计算其信息增益率:
1.
H ′ 年 龄 ′ ( D ) = ( − 5 15 l o g 2 5 15 − 5 15 l o g 2 5 15 − 5 15 l o g 2 5 15 ) = 1.58 H_{‘年龄’}(D)=(-\frac{5} {15}log_{2}\frac{5}{15} -\frac{5} {15}log_{2}\frac{5}{15}-\frac{5} {15}log_{2}\frac{5}{15})=1.58 H(D)=(155log2155155log2155155log2155)=1.58

2.
g R ( D , ′ 年 龄 ′ ) = ( H ( D ) − H ( D ∣ ′ 年 龄 ′ ) ) / H ′ 年 龄 ′ ( D ) = 0.083 / 1.585 = 0.052 g_{R}(D,’年龄’) =(H(D) – H(D|’年龄’))/H_{‘年龄’}(D)=0.083/1.585=0.052 gR(D)=(H(D)H(D))/H(D)=0.083/1.585=0.052

同理: g R ( D , ′ 有 工 作 ′ ) = 0.352 , g R ( D , ′ 有 自 己 的 房 子 ′ ) = 0.433 , g R ( D , ′ 信 贷 情 况 ′ ) = 0.232 g_{R}(D,’有工作’) =0.352,g_{R}(D,’有自己的房子’) =0.433,g_{R}(D,’信贷情况’) =0.232 gR(D)=0.352gR(D)=0.433gR(D)=0.232

比较各个特征的信息增益率值,发现 G ( D , ′ 有 自 己 的 房 子 ′ ) = 0.433 G(D,’有自己的房子’)=0.433 G(D)=0.433最大,即选择特征’有自己的房子’作为最优特征。

4.基尼系数

1.计算公式:

1.数据集D的纯度:

G i n i ( D i ) = ∑ i = 1 n p i ( 1 − p i ) = 1 − ∑ i = 1 n p i 2 Gini(D^{i})=\sum_{i=1}^{n}p_{i}(1-p_{i})=1-\sum_{i=1}^{n}p_{i}^{2} Gini(Di)=i=1npi(1pi)=1i=1npi2

n 为 样 本 的 类 别 数 n为样本的类别数 n
可以得出 G i n i ( p ) Gini(p) Gini(p)反应了在数据集中抽取两个样本,其类别不一样的概率;
随机抽取两个样本,如果他们根据某个特征分类,其分类类别一样,即该特征非常适合分类,(换句话说我们的目的是使同一个分支的类别一致),因此 G i n i ( p ) Gini(p) Gini(p)越小越好。

2.特征A的基尼系数:
G i n i ( D , A ) = ∑ i = 1 n p i G i n i ( D i ) Gini(D, A)=\sum_{i=1}^{n}p_{i}Gini(D^{i}) Gini(DA)=i=1npiGini(Di)

n 为 样 本 的 类 别 数 n为样本的类别数 n

2.实例计算:

我们还是拿上述数据集D的特征A=’年龄’为例计算其基尼系数:

G i n i ( D , ′ 年 龄 ′ ) = ∑ i = 1 n p i G i n i ( D i ) = p 青 年 ∗ ( 1 − ( 2 5 ) 2 − ( 3 5 ) 2 ) + p 中 年 ( 1 − ( 2 5 ) 2 − ( 3 5 ) 2 ) + p 老 年 ∗ ( 1 − ( 1 5 ) 2 − ( 4 5 ) 2 ) = 0.427 Gini(D, ‘年龄’)=\sum_{i=1}^{n}p_{i}Gini(D^{i})=p_{青年}*(1-(\frac{2}{5})^{2}-(\frac{3}{5})^{2})+p_{中年}(1-(\frac{2}{5})^{2}-(\frac{3}{5})^{2})+p_{老年}*(1-(\frac{1}{5})^{2}-(\frac{4}{5})^{2})=0.427 Gini(D)=i=1npiGini(Di)=p(1(52)2(53)2)+p(1(52)2(53)2)+p(1(51)2(54)2)=0.427

同理: G i n i ( D , ′ 有 工 作 ′ ) = 0.320 , G i n i ( D , ′ 有 自 己 的 房 子 ′ ) = 0.267 , G i n i ( D , ′ 信 贷 情 况 ′ ) = 0.284 Gini(D,’有工作’) =0.320,Gini(D,’有自己的房子’) =0.267,Gini(D,’信贷情况’) =0.284 Gini(D)=0.320Gini(D)=0.267Gini(D)=0.284

5.参考文献

[1]李航.统计学习方法(第二版)[M].清华大学出版社:北京,2019:67.

[2]周志华.机器学习[M].清华大学出版社:北京,2016:73.

6.python代码

在这里插入代码片
    原文作者:kt4ngw
    原文地址: https://blog.csdn.net/t4ngw/article/details/111244340
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞