决策树
目录
1.1 决策树模型
案例:修猫分类器;有一组包含猫和狗的图片数据集,根据耳朵形状(ear shape),脸的形状(face shape),胡子(whiskers)的特征判断图片上的是不是猫。
如果耳朵形状是尖尖的,脸的形状是圆的,那么判断为猫;
如果耳朵形状是尖尖的,脸的形状是不圆,那么判断为非猫;
如果耳朵形状是松软的,有胡子,那么判断为猫;
如果耳朵形状是松软的,无胡子,那么判断为非猫。
决策树如下图:
术语:
根节点(root node):最顶端的节点;
决策节点(decision nodes):所有决定下一步走向的节点,包括根节点;图中所有椭圆节点;
叶子结点(leaf nodes):树最底端的节点,给出预测结果的节点;图中所有矩形节点。
1.2 学习过程
决策1:如何在每个节点处选择合适的特征/属性(How to choose what feature to split on at each node)?
纯度最大化/最小化(Maximize or minimize purity):比如第一个节点,有三种可能的特征,但只有选择耳朵形状时,节点所分出的两个分类中,猫的占比分别最大和最小;因此选耳朵形状作为该节点的特征。
决策2:什么时候停止划分(When do you stop splitting)?
- 当节点获得了100%的分类结果(When a node is 100% one class);
- 当划分节点会导致超过树的最大深度(When splitting a node will result in the tree exceeding a maximum depth);
- 当纯度值的增长低于一定阈值(When improvements in purity score are below a threshold);
- 当节点中案例数量低于一定阈值(When number of examples in a node is below a threshold)。
2.1 纯度(Measuring purity)
熵——衡量纯度的概念(Entropy
as a measure of impurity)
如图,p1指代一组分类结果中猫的占比(剩下的是狗);H(p1)是熵;图中为熵与p1的关系;可见熵随着纯度的增大呈现先增大后减小的趋势;在p1=0.5时(如,3个猫3个狗)熵达到最大值1,在p1分别为0(6个狗)和1(6个猫)两个端点时,熵最小,值为0。
图中熵函数的公式:
首先定义集合中除了猫之外的小动物占比:
p
0
=
1
−
p
1
{p_0} = 1 - {p_1}
p0=1−p1
熵函数:
H
(
p
1
)
=
−
p
1
log
2
(
p
1
)
−
p
0
log
2
(
p
0
)
H\left( {{p_1}} \right) = - {p_1}{\log _2}\left( {{p_1}} \right) - {p_0}{\log _2}\left( {{p_0}} \right)
H(p1)=−p1log2(p1)−p0log2(p0)
也可记为:
H
(
p
1
)
=
−
p
1
log
2
(
p
1
)
−
(
1
−
p
1
)
log
2
(
1
−
p
1
)
H\left( {{p_1}} \right) = - {p_1}{\log _2}\left( {{p_1}} \right) - \left( {1 - {p_1}} \right){\log _2}\left( {1 - {p_1}} \right)
H(p1)=−p1log2(p1)−(1−p1)log2(1−p1)
- 为了计算,这里设定:
0 log 2 ( 0 ) = 0 0{\log _2}\left( 0 \right) = 0 0log2(0)=0- 选用2为底数而非e或者10,是为了让极大值为1,换成其它底数相当于现有函数图像上下等比例伸缩。
- Gini函数也可以用作熵函数,但本课简单起见使用这里介绍的
entropy criteria
函数。
2.2 如何在节点选择特征:信息增益(Choosing a split: information gain)
信息增益(information gain):衡量从上一节点分裂出两个节点后,这种分裂方法对应的熵的减少量(the reduction in entropy that you get in your tree resulting from making a split)。
在本例中,对三种可能的分类方式分别计算信息增益:将分成的两个类别的熵值通过公式整合成一个标准,并与分类前的熵值相减,获得该步分类使数据的熵降低的相对值(reduction in entropy);最终取降低熵最大的分类方法特征,即耳朵形状(分类后熵降低了0.28)。
计算信息增益的用处,除了判断该节点的特征如何选择;还可以用于判断是否终止继续分类(split),因为如果分类前后的信息增益过小,这意味着再分下去只是徒增决策树的规模,已经失去了分类的意义,既可以停止分类了。
信息增益的计算公式:
I
n
f
o
r
m
a
t
i
o
n
G
a
i
n
=
H
(
p
1
r
o
o
t
)
−
(
w
l
e
f
t
H
(
p
1
l
e
f
t
)
+
w
r
i
g
h
t
H
(
p
1
r
i
g
h
t
)
)
InformationGain=H\left( {p_1^{root}} \right) - \left( {{w^{left}}H\left( {p_1^{left}} \right) + {w^{right}}H\left( {p_1^{right}} \right)} \right)
InformationGain=H(p1root)−(wleftH(p1left)+wrightH(p1right))
2.3 整合(putting it together)
- Start with all examples at the root node.
- Calculate information gain for all possible features, and pick the one with the highest information gain.
- Split dataset according to selected feature, and create left and right branches of the tree.
- Keep repeating splitting process until stopping criteria is met:
- When a node is 100% one class
- When splitting a node will result in the tree exceeding a maximum depth
- Information gain from additional splits is less than threshold
- When number of examples in a node is below a threshold
根据决策树的特征,其实现应该使用递归算法(recursive algorithms)。
2.4 独热编码(Using one-hot encoding of categorical features)
动机:上例中的特征均分为两个离散值(两种类别),如果某特征需要两个以上分类离散值怎么办?(What if you have features that can take on more than two discrete values)
案例:如果修猫分类器中,耳朵类型有三种:尖尖的(pointy ears)、松软的(floppy ears)和圆润的(oval ears);一种直接处理方法是,在一个节点类型耳朵形状
下按照上述三个特征,分出三个节点的分支;另一种one-hot处理方法则是,将尖尖耳朵
、松软耳朵
和圆润耳朵
分别作为单独的特征,其分类的结果为1(是尖尖耳朵)和0(非尖尖耳朵),将这三个特征与脸的形状
和胡子
等特征并列放在一起进行分析。
观察上表发现,pointy ears
、floppy ears
和oval ears
对应的每行必有一个为1剩下几个为0,因此叫做one-hot encoding。
因为所有特征现在均可以获得二分的分类值,one-hot encoding也可以用于逻辑回归模型中。
2.5 连续值特征(Continuous valued features)
动机:如果特征中有一项不是二分类,而知连续数值,决策树如何处理?
How do you decide how to split on the weight feature?
首先根据重量(weight)获得分布图,选择一个重量阈值,比如8,以阈值为分隔获得左右两个类别,并计算该分类方式的信息增益。
接着根据案例的分布,对剩余8个阈值进行同样的处理,最终选择信息增益最高的一种分类方式。
分类结果:
2.6 回归树(Regression Trees)
输出不是二分类的结果,而是连续值;通过计算方差。