模式识别——第9章 决策树

本文介绍了决策树作为监督学习的一种,包括其结构、优点。详细阐述了信息熵、属性熵、信息增益和信息增益比等属性选择度量标准,并提及基尼指数在CART算法中的应用。此外,提供了MATLAB代码示例来建立和评估决策树。
摘要由CSDN通过智能技术生成

9.1 什么是决策树

决策树是一种监督学习。一棵决策树由分支结点、分支和叶结点构成。

每个内部结点表示一个属性上的测试,每个分支代表一个测试输出,每个叶结点代表一种类别或类的分布。

decision tree

优点:可读性好,具有描述性,有助于人工分析;

​ 效率高。一次构建,重复使用,每次预测的最大计算次数不超过树的深度。

9.2 属性选择的几个度量

1. 期望信息或信息熵

表示任意样本集的纯度,样本内部的混乱程度与熵值成正比。

D D D 为数据集合(含有 s = ∣ D ∣ s=|D| s=D 个样本),类别属性具有 m m m 个不同值 v i ( i = 1 , 2 , ⋅ ⋅ ⋅ , m ) v_i(i=1,2,···,m) vi(i=1,2,,m),即分为 m m m 个类: ω i ( i = 1 , 2 , ⋅ ⋅ ⋅ , m ) \omega_i(i=1,2,···,m) ωi(i=1,2,,m) s i s_i si ω i \omega_i ωi 类中的样本数, s i = ∣ ω i ∣ s_i=|\omega_i| si=ωi p i p_i pi 是任意样本属于类 ω i \omega_i ωi 的概率, p i p_i pi s i / s s_i/s si/s 估计,即 p i = s i / s , s = s 1 + s 2 + ⋅ ⋅ ⋅ + s m p_i=s_i/s,s=s_1+s_2+···+s_m pi=si/s,s=s1+s2++sm,则样本分类的期望信息为:
I n f o ( D ) = I ( s 1 , s 2 , ⋅ ⋅ ⋅ , s m ) = E ( p 1 , p 2 , ⋅ ⋅ ⋅ , p m ) = − ∑ i = 1 m p i log ⁡ 2 p i = − ∑ i = 1 m s i s log ⁡ 2 s i s Info(D)=I(s_1,s_2,···,s_m)=E(p_1,p_2,···,p_m)=-\sum\limits_{i=1}^{m}p_i{\log}_2p_i=-\sum\limits_{i=1}^{m}\frac{s_i}{s}{\log}_2\frac{s_i}{s} Info(D)=I(s1,s2,,sm)=E(p1,p2,,pm)=i=1mpilog2pi=i=1mssilog2ssi
其中,定义 log ⁡ 2 0 = 0 {\log}_20=0 log20=0

E E E 满足下列特性:

1)非负性
E ( p 1 , p 2 , ⋅ ⋅ ⋅ , p m ) ≥ 0 E(p_1,p_2,···,p_m)\ge 0 E(p1,p2,,pm)0
2)确定性
E ( 1 , 0 ) = E ( 0 , 1 ) = E ( 0 , 1 , 0 , ⋅ ⋅ ⋅ ) = 0 E(1,0)=E(0,1)=E(0,1,0,···)=0 E(1,0)=E(0,1)=E(0,1,0,)=0
3)上凸性
E ( λ p + ( 1 − λ ) q ) > λ E ( p ) + ( 1 − λ ) E ( q ) 其 中 0 < λ < 1 E(\lambda p+(1-\lambda)q)>\lambda E(p)+(1-\lambda)E(q)\\ 其中0<\lambda<1 E(λp+(1λ)q)>λE(p)+(1λ)E(q)0<λ<1

2. 属性熵

属性熵是指该属性为非类别属性情况下划分数据集为子集而计算的一种度量。

设非类别属性 A A A 具有 v v v 个不同值 { a 1 , a 2 , ⋅ ⋅ ⋅ , a v } \{a_1,a_2,···,a_v\} {a1,a2,,av}。利用 A A A 将数据集合 D D D 划分为 v v v 个子集: S 1 , S 2 , ⋅ ⋅ ⋅ , S v S_1,S_2,···,S_v S1,S2,,Sv,其中 S j S_j Sj 包含 D D D 中在属性 A A A 上取值为 a j a_j aj 的样本。记 s i j s_{ij} sij 是子集 S j S_j Sj 中属于类 ω j \omega_j ωj 的样本数,即 s i j = ∣ { x ∣ x ∈ S j ⋀ x ∈ ω i } ∣ , s = ∣ D ∣ s_{ij}=|\{ x|x\in S_j \bigwedge x\in \omega_i\}|,s=|D| sij={xxSjxωi},s=D。非类别属性 A A A 的熵:
E ( A , D ) = ∑ j = 1 v s 1 j + s 2 j + ⋅ ⋅ ⋅ + s m j s I ( s 1 j , s 2 j , ⋅ ⋅ ⋅ , s m j ) I ( s 1 j , s 2 j , ⋅ ⋅ ⋅ , s m j ) = − ∑ i = 1 m s i j s j log ⁡ 2 s i j s j E(A,D)=\sum\limits_{j=1}^{v}\frac{s_{1j}+s_{2j}+···+s_{mj}}{s}I(s_{1j},s_{2j},···,s_{mj})\\ I(s_{1j},s_{2j},···,s_{mj})=-\sum\limits_{i=1}^{m}\frac{s_{ij}}{s_j}{\log}_2\frac{s_{ij}}{s_j} E(A,D)=j=1vss1j+s2j++smjI(s1j,s2j,,smj)I(s1j,s2j,,smj)=i=1msjsijlog2sjsij

3. 信息增益

信息增益是定义属性分类训练数据效力的度量标准。简单地说,一个属性的信息增益就是由于使用这个属性分割样例而导致的期望熵降低(样本按照某属性划分时造成熵减少的期望)。

一个属性 A A A 相对样例集合 D D D 的信息增益 G a i n ( A ) Gain(A) Gain(A) 被定义为
G a i n ( A , D ) = I n f o ( D ) − E ( A , D ) = I ( s 1 , s 2 , ⋅ ⋅ ⋅ , s m ) − E ( A , D ) Gain(A,D)=Info(D)-E(A,D)=I(s_1,s_2,···,s_m)-E(A,D) Gain(A,D)=Info(D)E(A,D)=I(s1,s2,,sm)E(A,D)

4. 信息增益比

信息增益比是衡量属性分裂数据的广度和均匀性。

一个属性的分裂信息定义为:
S p l i t I n f o ( A , D ) = − ∑ i = 1 v ∣ S i ∣ ∣ D ∣ log ⁡ 2 ∣ S i ∣ D SplitInfo(A,D)=-\sum\limits_{i=1}^{v}\frac{|S_i|}{|D|}{\log}_2\frac{|S_i|}{D} SplitInfo(A,D)=i=1vDSilog2DSi
其中, S 1 , S 2 , ⋅ ⋅ ⋅ , S v S_1,S_2,···,S_v S1,S2,,Sv 是属性 A A A v v v 个值)分割 D D D 而形成的 v v v 个子集。实际上,分裂信息是 D D D 关于属性 A A A 的各值的熵。

一个属性的信息增益比定义为:
G a i n R a t i o ( A , D ) = G a i n ( A , D ) S p l i t I n f o ( A , D ) GainRatio(A,D)=\frac{Gain(A,D)}{SplitInfo(A,D)} GainRatio(A,D)=SplitInfo(A,D)Gain(A,D)

5. 基尼指标

定义为:
G i n i ( D ) = ∑ j = 1 m p j ( 1 − p j ) = 1 − ∑ j = 1 m p j 2 Gini(D)=\sum\limits_{j=1}^{m}p_j(1-p_j)=1-\sum\limits_{j=1}^{m}{p_j}^2 Gini(D)=j=1mpj(1pj)=1j=1mpj2
其中, p j p_j pj 为类 j j j 出现的频率,通常有 p j = ∣ S j ∣ ∣ D ∣ p_j=\frac{|S_j|}{|D|} pj=DSj

基尼指标主要在 C A R T CART CART 算法中使用。用于二分情况的选择。

如果按属性 A A A 将数据集 D D D 划分成两个子集 S 1 , S 2 S_1,S_2 S1,S2,则分割后的 G i n i s p l i t {Gini}_{split} Ginisplit
G i n i s p l i t ( D ) = N 1 N G i n i ( S 1 ) + N 2 N G i n i ( S 2 ) {Gini}_{split}(D)=\frac{N_1}{N}Gini(S_1)+\frac{N_2}{N}Gini(S_2) Ginisplit(D)=NN1Gini(S1)+NN2Gini(S2)
其中, N 1 = ∣ S 1 ∣ , N 2 = ∣ S 2 ∣ , N = ∣ D ∣ N_1=|S_1|,N_2=|S_2|,N=|D| N1=S1,N2=S2,N=D

9.3 matlab代码

%旧版本
function [result]=DecisionTree(X,Y,Z)
%X为二维矩阵,每行代表一个样本
%Y为单元矩阵,每个元素为单字符型,如y={'1','1','2','2'}
%Z为待识样本,为行向量,其长度与X每行的长度相同
t=classregtree(x,y);	%建立决策树
result=treeval(t,Z)		%对Z进行分类
sfit=t.classname(result);	
result=str2num(sfit{1,1})	%获得分类结果
treedisp(t);	%显示分类结果
%新版本
function [result]=DecisionTree(X,Y,Z)
%X为二维矩阵,每行代表一个样本
%Y为单元矩阵,每个元素为单字符型,如y={'1','1','2','2'}
%Z为待识样本,为行向量,其长度与X每行的长度相同
t=fitctree(X,Y);
result=predict(t,Z);
view(t)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值