一. 从逻辑回归到决策树
LR模型是利用线性回归的预测值,通过sigmoid映射为概率,来对数据做预测,有非常友好的数据预处理特性,工业界应用很丰富。
LR是从数学角度出发,给不同的特征乘以不同的权重来得到是否相亲的概率。
决策树的处理方式:
二. 什么是决策树
-
决策树是一种解决分类问题的算法,当然CART也可以用来解决回归问题,但是决策树主要是用来解决分类问题。
-
决策树算法采用树形结构,使用层层推理来实现最终的分类。决策树由下面几种元素构成:
根节点:包含样本的全集
内部节点:对应特征属性测试
叶节点:代表决策的结果
预测时,在树的内部节点处用某一属性值进行判断,根据判断结果决定进入哪个分支节点,直到到达叶节点处,得到分类结果。 -
决策树通常有三个步骤:
- 特征选择:特征选择决定了使用哪些特征来做判断。在训练数据集中,每个样本的属性可能有很多个,不同属性的作用有大有小。因而特征选择的作用就是筛选出跟分类结果相关性较高的特征,也就是分类能力较强的特征。在特征选择中通常使用的准则是:信息增益。
- 决策树的生成:选择好特征后,就从根节点触发,对节点计算所有特征的信息增益,选择信息增益最大的特征作为节点特征,根据该特征的不同取值建立子节点;对每个子节点使用相同的方式生成新的子节点,直到信息增益很小或者没有特征可以选择为止。
- 决策树的修剪:剪枝的主要目的是对抗「过拟合」,通过主动去掉部分分支来降低过拟合的风险。
- 决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得各个子数据集有一个最好的分类的过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。
决策树算法的核心:从属性集中选择最优的划分属性
三. 如何选择最优的划分属性-----熵
熵是度量样本不纯度的指标,样本不纯度越大,熵越大,越无序。
熵是度量信息的期望值。
信息: l ( x i ) = − l o g 2 p ( x i ) l(x_i)=−log_2p(x_i) l(xi)=−log2p(xi)
熵:
H
=
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
2
p
(
x
i
)
H=−\sum_{i=1}^n{p(x_i)log_2p(x_i)}
H=−∑i=1np(xi)log2p(xi)
熵越小,样本的纯度越高,所以决策树的生长过程也是不断的将数据的不纯度降低的过程,希望最后得到的分类结果纯的很高,也就是准确性很高。
四. 三种典型的决策树算法
1. 信息增益:ID3
机器学习的过程是希望将样本的不纯度往下降的过程,希望熵下降的过程,那么最优属性的划分可以参考那个属性对当前样本的熵降低的最多。
因为是将一个集合划分为多个子集了,所以计算划分后的信息熵是将各个子集的熵分别求出来,然后利用比例权重求和,作为所有子集的最终信息熵。
举个具体的实例:
信息增益存在的问题:假如我们用“学号”作为特征,也就是每个人一个学号,将45个人分到45个桶里,此时的纯度最高,但是对新来的特征没有任何意义,即分叉越多,越肯定,纯度越高,所带来的增益很大,但是这个特征可能没有任何意义,换句话说可能对于新的数据就不能很好的划分了。所以我们选用相对值来衡量信息的增益,也就是信息增益率。
ID3算法缺点:只能处理离散型属性,并且对倾向于选择取值较多的属性
2. 信息增益率:C4.5
C4.5 克服了 ID3 仅仅能够处理离散属性的问题,以及信息增益偏向选择取值较多特征的问题。
- C4.5处理ID3偏向取值较多特征的问题
在ID3中: G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a)=Ent(D)-\sum_{v=1}^V \frac{|D^v|}{|D|} Ent(D^v) Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
这样就限制了a的取值,不会只取分支多的那个属性了,会权衡一下。 - C4.5 处理连续特征
C4.5 处理连续特征是先将特征取值排序,以连续两个值中间值作为划分标准。尝试每一种划分,并计算修正后的信息增益,选择信息增益最大的分裂点作为该属性的分裂点。但是,对连续属性值需要扫描排序,会使C4.5性能下降。
如何处理连续值:
因为连续属性的可取值数目不再有限,因此不能像前面处理离散属性枚举离散属性取值来对结点进行划分。因此需要连续属性离散化,常用的离散化策略是二分法,这个技术也是C4.5中采用的策略。
ID3为什么不能处理连续特征,因为如果你也按照C4.5的处理方式处理连续特征,那么特征就会像学号一样,分叉很多ID3会偏向取值较多的特征,就会选择了连续的这个特征作为划分依据,但是这并不合适,所以ID3不能处理连续型变量。
ID3和C4.5都是分类树,CART(Classification and regression tree)可以是分类/回归树。
3. CART(Classification and Regression Tree)
CART参考博客
这种算法即可以用于分类,也可以用于回归问题。
- 如果待预测分类是离散型数据,则CART生成分类决策树。
- 如果待预测分类是连续性数据,则CART生成回归决策树。
3.1 分类决策树
CART 算法使用了基尼系数取代了信息熵模型。
- 基尼系数的理解:
假如现在有一个袋中有黑、白两种球:
① 摸出一个球颜色为 C 1 C1 C1,放回之后再摸出一个球 C 2 C2 C2,如果 C 1 = C 2 C1=C2 C1=C2,则说明两种颜色个数差比较大,即样本的纯度较高,有序,熵越小。
② 如果 C 1 ≠ C 2 C1≠C2 C1=C2,则说明两种球颜色数量比较接近,袋子中样本的熵比较大。
总结: C 1 = C 2 C1=C2 C1=C2概率越大,说明熵越小,不纯度越小,所以我们希望树朝着 C 1 = C 2 C1=C2 C1=C2概率增大的方向发展。
随机抽取两个样例,类别标记不一致的概率越大,表示纯度越低。我们需要纯度高,所以向基尼指数小的方向发展。
基尼指数的意义:1-(两次摸出球颜色相同的概率)=两次摸出颜色不同的概率
颜色不同,表示熵越小,则gini指数表示了往熵减小的方向发展。
- 基尼指数 vs 熵:
熵=基尼指数 - 具体例子:
针对上述离散型数据,按照体温为恒温和非恒温进行划分。其中恒温时包括哺乳类5个、鸟类2个,非恒温时包括爬行类3个、鱼类3个、两栖类2个,如下所示我们计算D1,D2的基尼指数。
然后计算得到特征体温下数据集的Gini指数,最后我们选择Gain_Gini最小的特征和相应的划分。
3.2 回归决策树
参考博客
回归树整体流程类似,不过在每个结点(不一定是叶子结点)都会得到一个预测值,该预测值等于属于该节点的所有人年龄的平均值,分支时穷举每一个feature的每个阈值作为最好的分割点,但衡量最好的标准不再是最大熵,而是最小化均方误差(真实年龄-预测年龄)^2的和/N,被预测出错的人数越多,错的越离谱,均方差就越大,通过最小化均方差能够找到最靠谱的分枝依据。分枝直到每个叶子节点上人的年龄都唯一(这太难了)或者达到预设的终止条件(如叶子个数上限),若最终叶子节点上人的年龄不唯一,则以该节点上所有人的平均年龄做为该叶子节点的预测年龄。
具体例子:
选择最优特征:
(1)按特征"面积" = 20 划分数据集,
y1 均值为
40.1
40.1
40.1,
y2 均值为
(
40.3
+
70.4
+
70.2
)
/
3
=
60.3
(40.3 + 70.4 + 70.2) / 3 = 60.3
(40.3+70.4+70.2)/3=60.3,
则平方误差为:
0
+
(
40.3
–
60.3
)
2
+
(
70.4
–
60.3
)
2
+
(
70.2
–
60.3
)
2
=
600.02
0 + (40.3 – 60.3)^2 + (70.4 – 60.3)^2 +(70.2 – 60.3)^2= 600.02
0+(40.3–60.3)2+(70.4–60.3)2+(70.2–60.3)2=600.02
(2)按特征"面积" = 21 划分数据集,则平方误差为:
y1 均值为
(
40.1
+
40.3
)
/
2
=
40.2
(40.1 + 40.3)/ 2 = 40.2
(40.1+40.3)/2=40.2,
y2 均值为
(
70.4
+
70.2
)
/
2
=
70.3
(70.4 + 70.2) / 2 = 70.3
(70.4+70.2)/2=70.3,
则平方误差为:
(
40.1
–
40.2
)
2
+
(
40.3
–
40.2
)
2
+
(
70.4
–
70.3
)
2
+
(
70.2
–
70.3
)
2
=
0.04
(40.1 –40.2)^2 + (40.3 –40.2)^2 + (70.4 –70.3)^2 +(70.2 –70.3)^2= 0.04
(40.1–40.2)2+(40.3–40.2)2+(70.4–70.3)2+(70.2–70.3)2=0.04
(3)按特征"面积" = 35 划分数据集,则平方误差为:
y1 均值为
(
40.1
+
40.3
+
70.4
)
/
3
=
50.27
(40.1 + 40.3 + 70.4) / 3 = 50.27
(40.1+40.3+70.4)/3=50.27,
y2 均值为
70.2
70.2
70.2,
则平方误差为:
(
40.1
–
50.27
)
2
+
(
40.3
–
50.27
)
2
+
(
70.4
–
50.27
)
2
+
0
=
608.05
(40.1 –50.27)^2 + (40.3 –50.27)^2 +(70.4 –50.27)^2 + 0= 608.05
(40.1–50.27)2+(40.3–50.27)2+(70.4–50.27)2+0=608.05
综上所述,由于按特征"面积" = 21 比特征"面积" = 20、“面积” = 35 划分的平方误差小,所以特征"面积" = 21 为切分点。
按最优特征划分数据集
以特征"面积" = 21 为切分点,将数据切分为
面
积
=
20
,
价
格
=
40.1
;
面
积
=
21
,
价
格
=
40.3
{面积 = 20,价格 = 40.1; 面积 = 21, 价格 = 40.3}
面积=20,价格=40.1;面积=21,价格=40.3,
面
积
=
35
,
价
格
=
70.4
;
面
积
=
36
,
价
格
=
70.2
{面积 = 35,价格 = 70.4; 面积 = 36, 价格 = 70.2}
面积=35,价格=70.4;面积=36,价格=70.2两个子集。
其中子集
面
积
=
20
,
价
格
=
40.1
;
面
积
=
21
,
价
格
=
40.3
{面积 = 20,价格 = 40.1; 面积 = 21, 价格 = 40.3}
面积=20,价格=40.1;面积=21,价格=40.3的目标变量非常接近,故不继续划分,得叶节点值
(
40.1
+
40.3
)
/
2
=
40.2
(40.1 + 40.3) / 2 = 40.2
(40.1+40.3)/2=40.2;
同理得子集
面
积
=
35
,
价
格
=
70.4
;
面
积
=
36
,
价
格
=
70.2
{面积 = 35,价格 = 70.4; 面积 = 36, 价格 = 70.2}
面积=35,价格=70.4;面积=36,价格=70.2 的叶节点值为
(
70.4
+
70.2
)
/
2
=
70.3
(70.4 + 70.2) /2=70.3
(70.4+70.2)/2=70.3。
五. 决策树的剪枝
参考:决策树的剪枝的例子
剪枝是要用到验证集的。
首先剪枝(pruning)的目的是为了避免决策树模型的过拟合。因为决策树算法在学习的过程中为了尽可能的正确的分类训练样本,不停地对结点进行划分,因此这会导致整棵树的分支过多,也就导致了过拟合。决策树的剪枝策略最基本的有两种:预剪枝(pre-pruning)和后剪枝(post-pruning):
- 预剪枝(pre-pruning):预剪枝就是在构造决策树的过程中,先对每个结点在划分前进行估计,若果当前结点的划分不能带来决策树模型泛华性能的提升,则不对当前结点进行划分并且将当前结点标记为叶结点。
- 后剪枝(post-pruning):后剪枝就是先把整颗决策树构造完毕,然后自底向上的对非叶结点进行考察,若将该结点对应的子树换为叶结点能够带来泛华性能的提升,则把该子树替换为叶结点。
六. 决策树是如何对对连续属性和对缺失属性的处理
参考:决策树处理连续值,缺失值
决策树(decision tree)(三)——连续值处理
决策树(decision tree)(四)——缺失值处理
- 对于连续值,连续值a在D上出现了n个不同的取值,也就是连续值离散化处理。
C4.5 处理连续特征是先将特征取值排序,以连续两个值中间值作为划分标准。
CART:遍历所有输入变量j 和切分点s,根据最小化平方误差准则选取;
- 对于缺失值,通过修改信息增益的公式,在原始计算前添加了占比系数作为权重,为每个样本赋予一个权重。