决策树算法

1.先举一个简单的栗子

如果想要判断一个人是否去打篮球,假设我们可以从天气情况温度高低此人心情三个方面去判断此人是否去打篮球,我们该如何做?

我们已知历史数据如下表,通过这些数据,我们可以预测出某个给定数据的结果。

 

数据编号

Feature1(weather)

Feature2(temp)

Feature3(pleasure)

label

01

s

h

g

y

02

s

h

b

n

03

s

m

g

y

04

r

h

b

n

05

c

m

g

y

06

r

l

g

n

07

c

l

b

n

 

 

假设判断是否去打篮球的流程如下:

决策树算法

那么,对于天气情况温度高低、此人心情的优先顺序怎样确定呢?(引入问题:①如何选取最优特征?②如何构造这样一颗树?此时,我们就应该引入的概念----香农熵:表示的是事物的混合程度。

2.了解基本概念

(1)熵---描述事物的混乱程度

熵表示的是事物的混乱程度,例如在某一堆事物中,其种类越多就越混乱,其种类越单一,其混乱程度就越低(熵值越低)。

了解熵的概念以后,下来了解一下熵如何计算?

决策树算法

(其中:N表示当前数据集标签个数,q表示当前标签的所占总个数的比率)

对于当前栗子而言:决策树算法 (Py = 3/7   Pn = 4/7)

(2)条件熵--经过某一个特征划分后,数据集的混乱程度

了解熵之后,我们来了解一下条件熵。

我对条件熵的理解是,在经过某一个特征划分之后,当前数据集的熵,表示的也是一种混乱程度。假设一个数据集经过特征F1划分过后的成为两个数据集D1和D2,D1和D2分别占比P(d1)和P(d2)

H(D|F1) = p(d1)*H(D1)+p(d2)*H(D2)

决策树算法

决策树算法

(3)信息增益

顾名思义,信息增益就是熵的改变量。在此就是H(D)-H(D|F1)

ID3决策树是通过信息增益来选择最优特征的,选择原则为信息增益最大的(即混乱程度改变最大的)就是最优特征。

但是其存在一个缺陷,对于特征值较多但每个特征值对应样本数量相对较少的特征,用其作为特征进行划分时,会出现信息增益特别大的情况,会出现误差。所以通过改进,产生了C4.5决策树---通过增益率来选取最优特征。

(4)信息增益率

在计算信息增益率之前,先了解特征熵的概念,很简单,就是当前所选特征列所对应的熵值,就拿前面的栗子来说:

决策树算法

 

3.算法基本流程

3.1选择最优特征:划分数据集

对每个特征,计算其对应的信息增益率,选取增益率最大的特征为最优特征。

对于某个数据集,我们应该做如下统计:

     1)统计每个类别标签所对应的LabelCount<label,Count>; ------>初始熵

     2)统计某个特征所含特征值的FeatureCount<feature,count>-->特征熵

     3)根据某个特征的不同特征值划分数据集,统计出每个特征值对应的数据集,求取该数据集的LabelCount<label,Count>--------->条件熵

    4)根据1),2),3)所求的数据,可得某个特征的信息增益率======>计算每个特征所对应的信息增益率=======>最优特征

3.2构造决策树:递归选择最优特征,递归构造。

(1)递归出口

1)当前节点所包含的数据集全部属于同一类===>节点类型

2)特征集合已经遍历完(无可用特征),当前节点数据集还未完全分类=======>统计出当前节点数据集的分类LabelCount,投票得出分类====>投票结果为节点类型

(2)递归过程

如果节点类型还未全部确定并且特征集合中还存在未使用特征,则递归选取剩余特征集合中的最优特征,并对未分类节点进行递归划分。

3.3测试决策树算法:输入测试数据进行测试,输出正确率。