9.1 什么是决策树

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

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

decision tree

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

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

9.2 属性选择的几个度量

1. 期望信息或信息熵

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

DDD 为数据集合(含有 s=∣D∣s=|D|s=D 个样本),类别属性具有 mmm 个不同值 vi(i=1,2,⋅⋅⋅,m)v_i(i=1,2,···,m)vi(i=1,2,,m),即分为 mmm 个类:ωi(i=1,2,⋅⋅⋅,m)\omega_i(i=1,2,···,m)ωi(i=1,2,,m)sis_isiωi\omega_iωi 类中的样本数,si=∣ωi∣s_i=|\omega_i|si=ωipip_ipi 是任意样本属于类 ωi\omega_iωi 的概率,pip_ipisi/ss_i/ssi/s 估计,即 pi=si/s,s=s1+s2+⋅⋅⋅+smp_i=s_i/s,s=s_1+s_2+···+s_mpi=si/s,s=s1+s2++sm,则样本分类的期望信息为:
Info(D)=I(s1,s2,⋅⋅⋅,sm)=E(p1,p2,⋅⋅⋅,pm)=−∑i=1mpilog⁡2pi=−∑i=1msislog⁡2sis 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⁡20=0{\log}_20=0log20=0

EEE 满足下列特性:

1)非负性
E(p1,p2,⋅⋅⋅,pm)≥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. 属性熵

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

设非类别属性 AAA 具有 vvv 个不同值 {a1,a2,⋅⋅⋅,av}\{a_1,a_2,···,a_v\}{a1,a2,,av}。利用 AAA 将数据集合 DDD 划分为 vvv 个子集:S1,S2,⋅⋅⋅,SvS_1,S_2,···,S_vS1,S2,,Sv,其中 SjS_jSj 包含 DDD 中在属性 AAA 上取值为 aja_jaj 的样本。记 sijs_{ij}sij 是子集 SjS_jSj 中属于类 ωj\omega_jωj 的样本数,即 sij=∣{x∣x∈Sj⋀x∈ωi}∣,s=∣D∣s_{ij}=|\{ x|x\in S_j \bigwedge x\in \omega_i\}|,s=|D|sij={xxSjxωi},s=D。非类别属性 AAA 的熵:
E(A,D)=∑j=1vs1j+s2j+⋅⋅⋅+smjsI(s1j,s2j,⋅⋅⋅,smj)I(s1j,s2j,⋅⋅⋅,smj)=−∑i=1msijsjlog⁡2sijsj 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. 信息增益

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

一个属性 AAA 相对样例集合 DDD 的信息增益 Gain(A)Gain(A)Gain(A) 被定义为
Gain(A,D)=Info(D)−E(A,D)=I(s1,s2,⋅⋅⋅,sm)−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. 信息增益比

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

一个属性的分裂信息定义为:
SplitInfo(A,D)=−∑i=1v∣Si∣∣D∣log⁡2∣Si∣D SplitInfo(A,D)=-\sum\limits_{i=1}^{v}\frac{|S_i|}{|D|}{\log}_2\frac{|S_i|}{D} SplitInfo(A,D)=i=1vDSilog2DSi
其中,S1,S2,⋅⋅⋅,SvS_1,S_2,···,S_vS1,S2,,Sv 是属性 AAAvvv 个值)分割 DDD 而形成的 vvv 个子集。实际上,分裂信息是 DDD 关于属性 AAA 的各值的熵。

一个属性的信息增益比定义为:
GainRatio(A,D)=Gain(A,D)SplitInfo(A,D) GainRatio(A,D)=\frac{Gain(A,D)}{SplitInfo(A,D)} GainRatio(A,D)=SplitInfo(A,D)Gain(A,D)

5. 基尼指标

定义为:
Gini(D)=∑j=1mpj(1−pj)=1−∑j=1mpj2 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
其中,pjp_jpj 为类 jjj 出现的频率,通常有 pj=∣Sj∣∣D∣p_j=\frac{|S_j|}{|D|}pj=DSj

基尼指标主要在 CARTCARTCART 算法中使用。用于二分情况的选择。

如果按属性 AAA 将数据集 DDD 划分成两个子集 S1,S2S_1,S_2S1,S2,则分割后的 Ginisplit{Gini}_{split}Ginisplit
Ginisplit(D)=N1NGini(S1)+N2NGini(S2) {Gini}_{split}(D)=\frac{N_1}{N}Gini(S_1)+\frac{N_2}{N}Gini(S_2) Ginisplit(D)=NN1Gini(S1)+NN2Gini(S2)
其中, N1=∣S1∣,N2=∣S2∣,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)
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐