一、简介
决策树,英文名为Decision Tree,是一种有监督分类算法。在决策树算法中,需要先构建一个树形结构,其中每个结点都代表某一特征值的一种结果,故命名为决策树。决策树是机器学习中的一个重要分类方法。
二、原理
首先看一个例子,根据一个人的年龄、信用等级、收入、是否是学生,来判断他是否会买电脑:
RID | Age | Credit_Rating | Income | Student | Buy_Computer |
---|---|---|---|---|---|
1 | youth | fair | high | no | no |
2 | youth | excellent | high | no | no |
3 | middle_aged | fair | high | no | yes |
4 | senior | fair | medium | no | yes |
5 | senior | fair | low | yes | yes |
6 | senior | excellent | low | yes | no |
7 | middle_aged | excellent | low | yes | yes |
8 | youth | fair | medium | no | no |
9 | youth | fair | low | yes | yes |
10 | senior | fair | medium | yes | yes |
11 | youth | excellent | medium | yes | yes |
12 | middle_aged | excellent | medium | no | yes |
13 | middle_aged | fair | high | yes | yes |
14 | senior | excellent | medium | no | no |
15 | youth | excellent | high | yes | yes |
将上述表格中的前14组数据作为训练集,第15组作为测试集,将Age、Credit_Rating、Income、Student作为特征,将Buy_Computer作为标记,利用决策树算法,我们可以构建出如下树结构:
根据这个树,我们就可以根据已知特征值一步步推出标记值。例如对于第15组数据,我们就可以根据生成的决策树按照False → False → True → False的顺序推出,这个人会购买电脑。
那么我们该如何生成决策树呢?生成决策树时,最关键的一步就是选择让哪个特征的哪个值作为根节点。在此之前,我们需要了解什么是信息熵(Information Entropy)。
在高中的化学课上,我们知道了熵表示混乱程度,信息熵类似,它表示的是事件的不确定性:信息熵越大,事件的不确定性就越大,那么确定它所需要的信息量就越大。例如对于Age = middle_aged
的实例,其信息熵为0,因为其是否会购买电脑的不确定性为0,即所有Age = middle_aged
的实例都会购买电脑。
那么怎么计算信息熵呢?信息熵的计算公式为:
Entropy(X)=−∑i=1nP(xi)log2P(xi)
{Entropy(X)=-\sum_{i=1}^{n}{P(x_i)\log{_2P(x_i)}}}
Entropy(X)=−i=1∑nP(xi)log2P(xi)
由该公式可知,信息熵的取值区间为[0,log2n]{[0,\log{_2n}]}[0,log2n]。
举个例子,假如要预测世界杯的32支球队中哪一支会夺冠,假设每支球队夺冠的概率相同,均为132{\frac{1}{32}}321,则根据公式可以算出,信息熵为5,恰好为最大值,这说明当所有事件发生的概率均相同时,我们从中获得的信息量最少,不确定性最大。
让我们回到根节点的选择。根节点的选择有多种算法,常见的有ID3、C4.5、CART等,这里主要讲解ID3算法。ID3算法是通过计算每个特征的信息增益(Information Gain),选择其中最大的作为根节点。公式如下:
IG(a)=Entropy(D)−Entropya(D)
{IG(a)=Entropy(D)-Entropy_a(D)}
IG(a)=Entropy(D)−Entropya(D)
IG(a){IG(a)}IG(a)为某特征的信息增益,Entropy(D){Entropy(D)}Entropy(D)为原始的信息熵,Entropya(D){Entropy_a(D)}Entropya(D)为按特征a{a}a划分的信息熵,其中Entropya(D){Entropy_a(D)}Entropya(D)为:
Entropya(D)=∑tSvSEntropy(Sv)
{Entropy_a(D)=\sum_{t}\frac{S_v}{S}{Entropy(S_v)}}
Entropya(D)=t∑SSvEntropy(Sv)
其中t{t}t为特征a{a}a取值的种数,S{S}S为实例总数,v{v}v为特征a{a}a的某种取值,Sv{S_v}Sv为在所有实例中该种取值的个数。
继续之前的例子,我们来计算特征Age的信息增益。
Entropy(D)=−(914log2(914)+514log2(514))=0.940bits
{Entropy(D)=-(\frac{9}{14}\log_2(\frac{9}{14})+\frac{5}{14}\log_2(\frac{5}{14}))=0.940bits}
Entropy(D)=−(149log2(149)+145log2(145))=0.940bits
EntropyAge(D)=−514×(25log2(25)+35log2(35))−414×(44log2(44)+04log2(04))−514×(35log2(35)+25log2(25))
{Entropy_{Age}(D)=-\frac{5}{14}×(\frac{2}{5}\log_2(\frac{2}{5})+\frac{3}{5}\log_2(\frac{3}{5}))-\frac{4}{14}×(\frac{4}{4}\log_2(\frac{4}{4})+\frac{0}{4}\log_2(\frac{0}{4}))-\frac{5}{14}×(\frac{3}{5}\log_2(\frac{3}{5})+\frac{2}{5}\log_2(\frac{2}{5}))}
EntropyAge(D)=−145×(52log2(52)+53log2(53))−144×(44log2(44)+40log2(40))−145×(53log2(53)+52log2(52))
=0.694bits
{=0.694bits}
=0.694bits
IG(Age)=Entropy(D)−EntropyAge(D)=0.940−0.694=0.246bits
{IG(Age)=Entropy(D)-Entropy_{Age}(D)=0.940-0.694=0.246bits}
IG(Age)=Entropy(D)−EntropyAge(D)=0.940−0.694=0.246bits
同理可得:
IG(Credit‾Rating)=Entropy(D)−EntropyCredit‾Rating(D)=0.048bits
{IG(Credit\underline{\hspace{0.5em}}Rating)=Entropy(D)-Entropy_{Credit\underline{\hspace{0.35em}}Rating}(D)=0.048bits}
IG(CreditRating)=Entropy(D)−EntropyCreditRating(D)=0.048bits
IG(Income)=Entropy(D)−EntropyIncome(D)=0.029bits
{IG(Income)=Entropy(D)-Entropy_{Income}(D)=0.029bits}
IG(Income)=Entropy(D)−EntropyIncome(D)=0.029bits
IG(Student)=Entropy(D)−EntropyStudent(D)=0.151bits
{IG(Student)=Entropy(D)-Entropy_{Student}(D)=0.151bits}
IG(Student)=Entropy(D)−EntropyStudent(D)=0.151bits
由此可见,IG(Age)>IG(Credit‾Rating)>IG(Income)>IG(Student){IG(Age)>IG(Credit\underline{\hspace{0.5em}}Rating)>IG(Income)>IG(Student)}IG(Age)>IG(CreditRating)>IG(Income)>IG(Student),故应选择特征Age{Age}Age作为根节点。