概述
决策树分开两部分,是因为CART算法还是有些麻烦的,对于回归树我还是存在一些问题,希望后面整理的时候能够理清楚。
【学习思想】
决策树的学习思想还是很通俗易懂的。一般我们去买东西,我们会对这个东西的一些特征做一个衡量来决定是否购买,比如我们可能会看这个东西的大小是否合适,如果合适,我们可能会看这个东西的材质是否满意,满意的话我们会继续在意它的价格是否合理。这样一步一步下来,我们就能构造出一个树形模型。不过我们在构造树的时候,第一个选择什么特征作为我们的衡量标准,下一个选择什么特征来衡量,这是一个问题,因此我们要做出特征选择。当我们要买一个新东西(同功用)的时候,我们就可以根据以前生成的树形模型,来判断我们是否会购买。这里买与不买是一个二分类问题,多分类问题与其思想也是一样的,决策树模型可读性很高,且分类速度很快。
【学习步骤】
①特征选择:特征选择即我们用哪个特征来划分空间。我们常用信息增益、信息增益比或基尼系数来作为划分依据。
②决策树的生成:常用算法有ID3,C4.5,CART
②决策树的剪枝:常用方法有极小化决策树整体的损失函数、CART剪枝算法
【①特征选择】
选择最佳划分的度量通常是根据划分后子女节点不纯性的程度。不纯的程度越低,类分布就越倾斜。不纯性度量有熵、基尼、classification error。由于在ID3和C4.5中我们分别是用信息增益和信息增益比,在CART的分类树上是用基尼系数来做特征选择。因此我们要对信息增益、信息增益比以及基尼系数的计算有个了解。
信息增益
输入:训练数据集
D
D
、特征
输出:特征A对训练数据集D的信息增益
g(D,A)
g
(
D
,
A
)
1.数据集D的经验熵H(D)
1.
数
据
集
D
的
经
验
熵
H
(
D
)
H(D)=−∑k=1K|Ck||D|log2|Ck||D|
H
(
D
)
=
−
∑
k
=
1
K
|
C
k
|
|
D
|
l
o
g
2
|
C
k
|
|
D
|
|D|为训练样本总数,|Ck|为类Ck的个数
|
D
|
为
训
练
样
本
总
数
,
|
C
k
|
为
类
C
k
的
个
数
2.特征A对数据集D的经验条件熵H(D|A)
2.
特
征
A
对
数
据
集
D
的
经
验
条
件
熵
H
(
D
|
A
)
H(D|A)=∑i=1n|Di||D|H(Di)=−∑i=1n|Di||D|∑k=1K|Dik||Di|log2|Dik||Di|
H
(
D
|
A
)
=
∑
i
=
1
n
|
D
i
|
|
D
|
H
(
D
i
)
=
−
∑
i
=
1
n
|
D
i
|
|
D
|
∑
k
=
1
K
|
D
i
k
|
|
D
i
|
l
o
g
2
|
D
i
k
|
|
D
i
|
|Dik|为子集Di中类为Ck的个数,|Di|为特征A的第i种取值的个数
|
D
i
k
|
为
子
集
D
i
中
类
为
C
k
的
个
数
,
|
D
i
|
为
特
征
A
的
第
i
种
取
值
的
个
数
3.信息增益
3.
信
息
增
益
g(D,A)=H(D)−H(D|A)
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
|
A
)
信息增益比
输入:训练数据集
D
D
、特征
输出:特征A对训练数据集D的信息增益比
gR(D,A)
g
R
(
D
,
A
)
1.数据集D关于特征A的值的熵HA(D)
1.
数
据
集
D
关
于
特
征
A
的
值
的
熵
H
A
(
D
)
HA(D)=−∑i=1n|Di||D|log2|Di||D|
H
A
(
D
)
=
−
∑
i
=
1
n
|
D
i
|
|
D
|
l
o
g
2
|
D
i
|
|
D
|
2.信息增益比
2.
信
息
增
益
比
gR(D,A)=g(D,A)HA(D)
g
R
(
D
,
A
)
=
g
(
D
,
A
)
H
A
(
D
)
基尼指数
输入:训练数据集
D
D
、特征
输出:特征A对训练数据集D的基尼指数
Gini(D,A)
G
i
n
i
(
D
,
A
)
1.若样本点属于第一个类的概率是p,则概率分布的基尼指数为
1.
若
样
本
点
属
于
第
一
个
类
的
概
率
是
p
,
则
概
率
分
布
的
基
尼
指
数
为
Gini(p)=2p(1−p)
G
i
n
i
(
p
)
=
2
p
(
1
−
p
)
此处是二分类情况,CART算法中会将特征的多个取值变为一对多的形
此
处
是
二
分
类
情
况
,
C
A
R
T
算
法
中
会
将
特
征
的
多
个
取
值
变
为
一
对
多
的
形
式变成二分类,来计算某特征所有取值的Gini指数
式
变
成
二
分
类
,
来
计
算
某
特
征
所
有
取
值
的
G
i
n
i
指
数
2.特征A对数据集D的基尼指数Gini(D,A)
2.
特
征
A
对
数
据
集
D
的
基
尼
指
数
G
i
n
i
(
D
,
A
)
Gini(D,A)=|D1||D|Gini(D1)+|D2||D|Gini(D2)
G
i
n
i
(
D
,
A
)
=
|
D
1
|
|
D
|
G
i
n
i
(
D
1
)
+
|
D
2
|
|
D
|
G
i
n
i
(
D
2
)
【②决策树生成算法】
由于C4.5与ID3的区别只在于特征选择上,因此算法结构是一样的。
C4.5是ID3的改进,因为ID3采用信息增益的方式选择特征,会对某些可取类别(值)数目较多的属性有所偏好(如学号,学号取值很多,其信息增益很大,但实际分类意义不强,不具有泛化能力)
ID3 I D 3 /C4.5 / C 4.5 的生成算法:
输入:训练数据集
D
D
,特征集,阈值
ε
ε
输出:决策树
(1)若
D
D
中样本全属于同一类别,则将
node
n
o
d
e
标记为
Ck
C
k
类叶节点,返回T;
就拿《统计学习方法》上例5.1中的表来说(下面举例都是用这个),不管
就
拿
《
统
计
学
习
方
法
》
上
例
5.1
中
的
表
来
说
(
下
面
举
例
都
是
用
这
个
)
,
不
管
前面特征如何,最后的类别全是“是”或全是“否”的话,我们就没有必要
前
面
特
征
如
何
,
最
后
的
类
别
全
是
“
是
”
或
全
是
“
否
”
的
话
,
我
们
就
没
有
必
要
做分类了,所以我们会把这一类直接标记为叶节点后结束
做
分
类
了
,
所
以
我
们
会
把
这
一
类
直
接
标
记
为
叶
节
点
后
结
束
(2)若 D D 中样本在上取值相同或 A=∅ A = ∅ ,则将 node n o d e 标记为叶节点,其类别标记为 D D 中样本数量最多的类,返回;
对于年龄、有工作、有房子、信贷情况这四个特征来说,表中15条数据都相同,
对
于
年
龄
、
有
工
作
、
有
房
子
、
信
贷
情
况
这
四
个
特
征
来
说
,
表
中
15
条
数
据
都
相
同
,
唯独不同的只有类别。比如年龄都是“中年人”,工作和房子都为“是”,信贷情
唯
独
不
同
的
只
有
类
别
。
比
如
年
龄
都
是
“
中
年
人
”
,
工
作
和
房
子
都
为
“
是
”
,
信
贷
情
况都为“一般”,则这些特征对于分类也没有什么作用了,因此也就相当于没有
况
都
为
“
一
般
”
,
则
这
些
特
征
对
于
分
类
也
没
有
什
么
作
用
了
,
因
此
也
就
相
当
于
没
有
特征可以用于划分,与特征集A为空集的意义差不多,所以我们就数一数这些
特
征
可
以
用
于
划
分
,
与
特
征
集
A
为
空
集
的
意
义
差
不
多
,
所
以
我
们
就
数
一
数
这
些
数据中哪个类别最多,就将这个类别标记为叶节点后结束
数
据
中
哪
个
类
别
最
多
,
就
将
这
个
类
别
标
记
为
叶
节
点
后
结
束
(3)若是以上两种情况都未发生,那么计算 A A 中各特征对的信息增益 /信息增益比 / 信 息 增 益 比 ,选择信息增益 /信息增益比 / 信 息 增 益 比 最大的特征 Ag A g ,若 Ag A g 的信息增益 /信息增益比 / 信 息 增 益 比 小于阈值 ε ε ,则将标记为 D D 中样本数最多的类;
/信息增益比
/
信
息
增
益
比
最大,则这一子节点引出两个
最
大
,
则
这
一
子
节
点
引
出
两
个
子节点,分别对应“是”和“否”,对于“有房子”来说其类别全为“是”,则这个子
子
节
点
,
分
别
对
应
“
是
”
和
“
否
”
,
对
于
“
有
房
子
”
来
说
其
类
别
全
为
“
是
”
,
则
这
个
子
节点是一个叶节点,其类标记为“是”;对于“无房子来说”,我们继续从年龄、
节
点
是
一
个
叶
节
点
,
其
类
标
记
为
“
是
”
;
对
于
“
无
房
子
来
说
”
,
我
们
继
续
从
年
龄
、
工作、信贷情况来选择新的特征
工
作
、
信
贷
情
况
来
选
择
新
的
特
征
(4)否则对
Ag
A
g
的每一可能值
ai
a
i
,依
Ag=ai
A
g
=
a
i
将
D
D
分割为若干个非空的,将
Di
D
i
中样本数最多的类作为类别标记,构建子节点,由节点及其子节点构成树
T
T
,返回;
(5)对节点i,以
Di
D
i
为训练集,以
A−{Ag}
A
−
{
A
g
}
为特征集,递归调用(1)~(5),得到子树
Ti
T
i
,返回
Ti
T
i
。
【③决策树剪枝算法】
在了解决策树剪枝算法之前,我们先来看看决策树最显著的缺点,那就是容易过拟合。我们可能会学习了一个很复杂的树,它对于训练集有很好的拟合效果,但是对于新输入的数据来说,却无法给出好的分类。因此,为了让复杂的树简单些,提出了剪枝算法。
这这里先复习《统计学习方法》上给出的一种剪枝算法,即极小化决策树整体的损失函数。
决策树学习的损失函数
我们用
|T|
|
T
|
(树
T
T
的叶节点个数)来表示模型的复杂度。
经验熵:
Ht(T)是指叶节点t的经验熵,其中Nt是指叶节点t中的样本个数,
H
t
(
T
)
是
指
叶
节
点
t
的
经
验
熵
,
其
中
N
t
是
指
叶
节
点
t
中
的
样
本
个
数
,
Ntk是指这Nt个样本中k类样本的个数,K是指有多少类别
N
t
k
是
指
这
N
t
个
样
本
中
k
类
样
本
的
个
数
,
K
是
指
有
多
少
类
别
定义决策树学习的损失函数为:
Cα(T)=∑t=1|T|NtHt(T)+α|T|=−∑t=1|T|∑kKNtklog(NtkNt)+α|T|
C
α
(
T
)
=
∑
t
=
1
|
T
|
N
t
H
t
(
T
)
+
α
|
T
|
=
−
∑
t
=
1
|
T
|
∑
k
K
N
t
k
l
o
g
(
N
t
k
N
t
)
+
α
|
T
|
令
C(T)=−∑t=1|T|∑kKNtklog(NtkNt)
C
(
T
)
=
−
∑
t
=
1
|
T
|
∑
k
K
N
t
k
l
o
g
(
N
t
k
N
t
)
,用于表示模型对训练数据的误差,即模型与训练数据的拟合程度。
可以得到:
Cα(T)=C(T)+α|T|
C
α
(
T
)
=
C
(
T
)
+
α
|
T
|
α
α
是控制模型复杂度和模型误差之间比重的参数,若小,则选择较复杂的模型(即
|T|
|
T
|
较大);若
α
α
大,则选择较简单的模型(即较小)。这样能够很好地平衡过拟合(方差)与误差(偏差)
剪枝算法(基于极小化决策树整体的损失函数)
输入:由生成算法得到的整个树
T
T
,参数
输出:修剪后的子树
Tα
T
α
(1)计算每一个叶节点的经验熵;
(2)递归地从树的叶节点向上回缩;
(3)计算剪枝前整体树
Tbefore
T
b
e
f
o
r
e
和剪枝后
Tafter
T
a
f
t
e
r
的损失函数
Cα(Tbefore)
C
α
(
T
b
e
f
o
r
e
)
和
Cα(Tafter)
C
α
(
T
a
f
t
e
r
)
;
(4)若剪枝后的损失函数
Cα(Tafter)
C
α
(
T
a
f
t
e
r
)
小于剪枝前的损失函数
Cα(Tbefore)
C
α
(
T
b
e
f
o
r
e
)
,则进行剪枝,将父节点变为新的叶节点;
(5)返回(2),直至不能继续为止,得到损失函数最小的子树
Tα
T
α
通过对决策树的生成算法和剪枝算法的学习,我们可以看出决策树生成希望得到更好的拟合效果,而决策树剪枝通过优化损失函数还考虑了模型的复杂度。决策树生成学习局部的模型,决策树剪枝学习整体的模型。
决策树的计算确实不难,我觉得可以通过对例题,习题的计算来加快理解,在真正应用当中,决策树通常会被用到集成学习当中作为基函数,如随机森林,梯度提升树等(大多选择cart tree)
参考文献:《统计学习方法》、《数据挖掘导论》
最后
以上就是踏实雨为你收集整理的【机器学习】决策树(一)----学习步骤和常用算法ID3以及C4.5的全部内容,希望文章能够帮你解决【机器学习】决策树(一)----学习步骤和常用算法ID3以及C4.5所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复