非线性分类器(SVM,Boosting算法,决策树)
1. 支持向量机(SVM,Support Vector Machine)
1.1 引言
-
支持向量,简单来说,就是支持或支撑平面上把两类类别划分开的向量点
-
支持向量正好在间隔边界上
-
使等号成立的样本 = 离分类面最近的样(决定最优超平面的位置)

-
“机”(machine,机器)便是一个算法。在机器学习领域,常把一些算法看作是一个机器,如分类机(分类器),而支持向量机本身便是一种监督式学习的方法,它广泛的应用于统计分类以及回归分析中
-
支持向量机,一种线性和非线性数据有前途的新划分类方法巧妙利用向量内积的回旋,通过引人非线性核函数将问题变为高维特征空间与低维输入空间的相互转换,解决了数据挖掘中的维数灾难。
-
由于计算问题最终转化为凸二次规划问题,因此挖掘算法是无解或有全局最优解
1.2 解决方法
- 目标:找到一个超平面,使得它能尽可能多地将两类数据点正确的分开,同时使分开的两类数据点距离分类面最远
- 构造一个在约束条件下的优化问题,具体地说是一个约束二次规划问题(constrained quadratic programing),求解该问题,得到分类器
1.3 SVM的三个主要内容
-
硬间隔SVM

-
软间隔SVM(线性不可分)
-
核方法(线性不可分)
1.4 线性支持向量机SVM

1.4.1 如何选择出最优的一个解
-
解决方法:采用最大间隔准则(选择使得训练集D对于线性函数$ (\omega*x) + b $ 的几何间隔取最大值的参数对$ (\omega, b),$并由此构造决策函数)
-
最大间隔能获得最大稳定性与区分的准确度,从而获得良好的推广能力

1.4.2 最优分类超平面
-
训练样本集 $ (x_{1}, y_{1}), (x_{2}, y_{2}), ……, (x_{N}, y_{N}), x_{i} \epsilon R^{d}$
-
线性可分性:存在超平面 $ g(x) = (\omega*x) + b = 0$ 把所有N个样本都没有错误地分开
-
最优超平面:一个超平面,如果它能够将训练样本没有错误地分开,并且两类训练样本中离超平面最近的样本与超平面之间的距离是最大的,则我们把这个超平面称作最优分类超平面(Optimal Seperating Hyperplane),简称最优超平面(Optimal Hyperplane)。两类样本中离分类面最近的样本到分类面的距离称作分类间隔(margin),最优超平面也称作最大间隔超平面
尺度调整

1.5 硬间隔SVM


1.6 线性不可分
- 使用软间隔SVM和核方法
1.6.1 软间隔支持向量机
1.6.1.1 引言
-
非线性可分:有时并不是因为数据本身是非线性结构的,而只是因为数据有噪音

-
对于这种偏离正常位置很远的数据点,我们称之为离群点Outlier
-
离群点的存在有可能造成很大的影响
-
超平面本身只有少数几个支持向量组成的,如果这些支持向量里又存在离群点的话,其影响就很大
1.6.1.2 算法实现
- 原来的约束条件:$ y_{i}((\omega ^{T} ) x_{i} + b) \geq 1, i = 1, 2, ……, n$
- 考虑到离群点,约束条件为:\(y_{i}((\omega)^{T}x_{i} + b) \geq 1 - \zeta_{i}, i = 1, 2, ……, n\)
其中$ \zeta_{i},i = 1, 2, ……, n$成为松弛变量Slack Variable,对应数据点x_{i}允许偏离的函数间隔的量 - 新的优化目标

\(其中\zeta_{i}是需要优化的变量(之一),而C是一个事先确定好的常量\)

1.6.2 核方法
- 低维空间线性不可分转换到高维空间线性可分
1.6.2.1 特征映射(Feature Mapping)
-
关键点:把\(x_{i}变换到高维的特征空间\)
-
为什么要变换(映射)?
用过加入一个新的变换,使得样本变成线性可分的,此时特征空间维数变高

-
考虑样本x = {\(x_{1}, ……, x_{n}\)} 的特征映射\(\phi\):
\(\phi\): x \(\rightarrow\) {\({x_{1} ^{2},x_{2} ^{2}, ……, x_{n} ^{2}, x_{1}x_{2}, x_{1}x_{3}, ……, x_{1}x_{n},……}\)}
这是一个二次映射:每一个新特征都是原两个特征的乘积(共\(n^{2}\)特征)
- 问题:映射会导致新特征数量的爆炸
- 映射本身的计算效率较低,尤其在新特征空间维数较高时
- 后续存储和使用这些映射的代价较高(比如,在高维空间计算内积)
- 使用映射后的表示也可能效率较低
所以可以使用kernels核方法帮助使映射不需要显示计算出来,映射后特征的计算依然是高效的
1.6.2.2 核方法:高维空间的特征映射
- Mercer 定理表明,如果 K(x,y)满足Mercer条件,那么它可以表示为上述特征值和特征函数的级数展开形式。这意味着K(x,y)可以表示为某个高维特征空间中的内积
- Mercy定理不是核函数必要条件,只是一个充分条件,不满足Mercy定理的函数也可以是核函数


1.6.2.3 核函数选择
- 目前最常用的核函数有三类:

1.6.2.4 例子


2. Boosting 算法
2.1 人脸检测技术
-
人脸检测的转折点:基于Haar-like特征的Adaboost级联分类器:
- Haar-like特征提取及快速实现
- 使用boosting算法训练区分人脸和非人脸的强分类器
- 设计级联分类器,提高分类准确率
2.2 基于Haar-like特征及Adaboost的人脸检测技术
2.2.1 Haar-like特征
2.2.1.1 Haar-like特征提取原理
- Haar-like是一种非常经典的特征提取算法,尤其是它与AdaBoost组合使用时对人脸检测有着不错的效果。OpenCV也对AdaBoost与Haar-like组成的级联人脸检测做了封装,所以一般提及Haar-like的时候,一般都会和AdaBoost,级联分类器,人脸检测,积分图等等一同出现。但是Haar-like本质上只是一种特征提取算法
- Haar-like特征提取过程就是利用定义的窗口在图像中滑动,滑动到一个位置的时候,将窗口覆盖住的区域中的白色位置对应的像素值的和减去黑色位置对应的像素值的和,得到的一个数值就是haar特征中一个维度。
2.2.1.2 Haar-like特征计算
2.2.1.2.1 求出每个待检测窗口中的特征个数
-
子窗口内满足条件的矩形:条件矩形:(s,t)条件
-
(s,t)条件:
1. x方向边长必须能被自然数s整除(长为s) 2. y方向边长必须能被自然数t整除(长为t); 3.这个矩形的最小尺寸为s x t 或 t x s,最大尺寸为,[m/s]· s x [m/t]·t 或 [m/t] · t x [m/s] · s;其中门[ ]为取整运算符




2.2.1.2.2 求出每个特征的特征值

2.2.1.3 Haar-like特征的快速实现

- 首先根据图像计算出积分图像:积分图像中任意一点的值都是原图像中该点左上方所有点的值的累加和

- 利用积分图可以快速计算图像中任意区域像素值的累加和,进而更快地求得矩阵特征的特征值


2.2.1.4 Haar-like特征提取的缺点
-
特征表示简单,特征维数大,训练时间长
-
改进方法:
- 增大穷举步长,但不宜太大,一般取步长为2
- 利用先验知识,提前筛选出部分矩形特征
- 使用更有效的特征提取方式
-
提升方法(Boosting):
-
Boosting是一种把若干个弱分类器结合到一个强分类器中,从而大大提高检测性能的方法,强分类器对数据进行分类,是通过弱分类器的多数投票机制进行的
-
Boosting算法的思想是学习一系列的分类器,在这个系列中,每个分类器对其前一个分类器产生的错误给予更大的重视,并增加导致错误分类的样本权值,重新对样本训练分类器后,再学习下一个分类器。该训练过程重复到设定的次数后停止,最终分类器从这一系列的分类器中得出
-
2.2.2 Adaboost分类器
- Boosting 并不是一种具体的算法,而是一类算法的总称。许多不同的 Boosting 算法基于这个框架,例如 AdaBoost、Gradient Boosting、XGBoost 等
2.2.2.1 Adaboost 算法原理
-
Adaboost算法是一种迭代的算法,对于一组训练集,通过改变其中每个样本的分布概率,而得到不同的训练集Si,对于每一个Si进行训练从而得到一个弱分类器Hi,再将这些弱分类器根据不同的权值组合起来,就得到了强分类器
-
初始的时候,每个样本都是均匀分布,通过训练得到分类器H0,在该训练集中,分类正确的,就降低其分布概率;分类错误的,就提高其分布概率,这样得到的新的训练集S1就主要是针对不太好分类的样本。再使用S1进行训练,得到分类器H1,依次迭代下去,设迭代次数为T,则得到T个分类器
-
对于每个分类器的权值,其分类准确性越高,权值越高
2.2.2.2 弱分离器(weaker classifier)
- 在Adaboost算法中,弱分类器可以是任意的一种分类器,比如决策树、神经网络、马尔科夫模型等。对于这个“弱”在这里代表的是分类器性能不是很优良,在二分类问题中,只要求它稍高于50%就行。


2.2.2.3 强分类器
-
算法的训练过程,其实是特征的“贪婪”选取过程。基本思路:
- 选择对正负样本区分最好的T个矩形特征,并训练成对应的弱分类器,把所有弱分类器组合成高性能的强分类器
- 在训练每个弱分类器时,对正负样本给予不同的权重。在每一轮分类器的训练过程中,针对上一轮中没有被正确分类的样本,下一轮的分类器就会更加“关注”它们。每一轮分类器的循环训练是靠样本权值的更新来实现。权值改变的作用是在被误分的样本上设置更大的权值,在分类正确的样本上减小其权值,凸显分类错误的样本,使其得到重视。
- 通过训练的T个弱分类器的加权投票建立最终的强分类器
2.2.2.4 级联(cascade)分类器
-
在实际应用中,由于Adaboost算法存在退化现象,导致随着弱分类器个数的增加,强分类器的分类能力反而会降低,所以需要对传统Adaboost算法进行改进
-
Adaboost 在待检测图像检测过程中,要对每一个位置的每一种尺寸的窗口进行检测,检测量极大,同时,在实际图片中,人脸区域只占整张图片的较小比例,检测时也会花大量的时间在这些无人脸区域上
-
基于此,人们提出了级联分类器的思想:联合多个强分类器,对非人脸采取“先重后轻”的策略,从而快速、高效地检测出人脸
-
“先重后轻”即是在级联分类器的前几级构造小型、高效的强分类器用来滤除大量的负样本(非人脸),这样待检测的窗口会越来越少,再调用后面相对复杂的强分类器,达到较低的误检率


2.3.1 人脸检测的实现

3. 决策树
3.1 从LR到决策树
- 思考一个分类问题:母亲给女儿介绍男朋友,女儿是否去相亲


3.2 决策树
- 决策树(Decision Tree)模型是一个模拟人类决策过程思想的模型
- 决策树基于“树”结构进行决策:
- 每个“内部结点”对应于某个属性上的“测试”
- 每个分支对应于该测试的一种可能结果(即属性的某个取值);
- 每个叶节点对应于一个预测结果
- 学习过程:通过对训练样本的分析,来确定“划分属性”
3.3 决策树学习
决策树学习通常分为三个部分
- 特征选择
- 决策树生成
- 决策树剪枝
3.3.1 决策树生成总体流程
-
总体流程:分而治之
- 自根至叶的递归过程
- 在每个中间结点寻找一个划分属性
-
三种停止条件
- 当前结点包含的样本全属于同一类别,无需划分;
- 当前属性集为空,或所有样本在所有属性上取值相同,无法划分;
- 当前结点包含的样本集合为空,不能划分。
-
决策树算法的核心:如何选择最优划分属性?
3.3.2 典型决策树算法
- ID3(Iterative Dichotomiser 3 迭代二叉树3代,Ross Quinlan提出,1986)(核心:信息熵)
- C4.5(Ross Quinlan,1993)(核心:信息增益比)
- CART (Classification and regression tree,L.Breiman,J.Friedman,R.Olshen和C.Stone于1984年提出)(核心:基尼指数)
3.3.3 ID3
3.3.3.1 ID3 算法
- 最佳划分属性选择:信息增益(information gain)


- 一般而言,信息增益越大,则表示使用特征a对数据集划分所获得的“纯度提升”越大。因此可以采用信息增益来划分属性
3.3.3.2 ID3 实例




3.3.3.3 ID3 问题
- 采用信息增益的问题:对可取值数目较多的属性有所偏好。
- 如:西瓜数据集中,考虑将编号作为一个属性。可以计算出它的信息增益为0.998,远远大于其他的候选属性,因为“编号”有17个可取的数值,产生17个分支,每个分支结点仅包含一个样本,显然这些分支结点的纯度最大。但是,这样的决策树不具有任何泛化能力
3.3.4 C4.5
3.3.4.1 C4.5 算法
- 最佳划分属性选择:信息增益率

3.3.4.2 C4.5 优点
- 相比ID3,C4.5可以处理连续属性值
- 把需要处理的样本(对应根节点)或样本子集(对应子树)按照连续变量的大小从小到大进行排序
- 假设该属性对应的不同的属性值一共有N个,那么总共有N−1个可能的候选分割阈值点,每个候选的分割阈值点的值为上述排序后的属性值中两两前后连续元素的中点,根据这个分割点把原来连续的属性分成bool属性.
- C4.5还可对缺失值进行处理
- 赋上该属性最常见的值
- 根据节点的样例上该属性值出现的情况赋一个概率,比如该节点上有10个样本,其中属性A的取值有6个为是,4个为否.那么对改节点上缺失的属性A,以0.6的概率设为是,0.4的概率设为否
- 丢弃有缺失值的样本
3.3.4 CART
- 最佳划分属性选择:基尼指数(gini index)

3.3.5 三种不同地决策树算法
- ID3:
- 取值多的属性,更容易使数据更纯,其信息增益更大
- 训练得到的是一棵庞大且深度浅的树:不合理;
- 容易产生过拟合
- C4.5
- 采用信息增益率替代信息增益;
- 避免过拟合,提供剪枝功能;
- 能够处理连续值与缺失值,
- CART
- 以基尼系数代替熵
- 最小化不纯度,而不是最大化信息增益
- 提供剪枝功能
3.4 决策树过拟合问题
3.4.1 决策树产生过拟合的原因
- 样本问题
- 样本里噪声数据干扰过大,大到模型过分记住了噪声特征,忽略了真实的输入输出间的关系
- 样本抽取错误,如样本数量太少、抽样方法错误、抽样没有考虑业务场景
特点等,导致抽取的样本数据不能有效代表业务场景 - 建模时使用了样本太多无关特征
- 构建决策树的方法问题
- 对决策树的生长没有合理的限制和修剪,决策树的自由生长有可能每片叶子里只包含单纯的事件数据或非事件数据。如此,这样的决策树可以完美匹配训练数据,但一旦应用到新的测试数据时,效果是一塌糊涂。
3.4.2 如何解决过拟合问题
-
针对原因1:合理、有效地抽样,用相对能够反映业务场景逻辑的训练集去生成决策树;
-
针对原因2:
剪枝:提前停止树的增长,或者对已经生成的树按照一定的规则进行剪枝。
--预剪枝(pre-pruning)
--后剪枝(post-pruning)
3.4.2.1 预剪枝
-
通过提前停止树的构造进行剪枝:
就是在构造决策树的过程中,先对每个结点在划分前进行估计,若果当前结点的划分不能带来决策树模型泛化性能的提升,则不对当前结点进行划分并且将当前结点标记为叶结点。 -
树到达一定高度
-
节点下包含的样本点小于一定数目
-
信息增益小于一定的阈值等
-
节点下所有样本都属于同一个类别
3.4.2.2 后剪枝
- 后剪枝就是先把整颗决策树构造完毕,然后自底向上的对非叶结点进行考察,若将那些置信度不达标的节点子树用叶子结点代替,能够带来泛化性能的提升,该叶子结点的类标号用该节点子树中频率最高的类标记。
- 常用算法
- 错误率降低剪枝(Reduced error pruning, REP)
- 悲观错误剪枝(Pesimistic Error Pruning,PEP)
- 基于错误剪枝 (Error Based Pruning,EBP)
- 代价复杂度剪枝(Cost Complexity Pruning,CCP)
- 最小错误剪枝 (Minimum Error Pruning,MEP)
3.5 决策树优缺点
- 优点:
- 模型特别容易解释,甚至比线性模型有更好的解释性
- 决策过程跟人的思维习惯特别接近
- 能很清楚的图形化显示模型
- 能很方便的处理一些定性的Feature
- 缺点:
- 不支持在线学习,有新样本来的时候,需要重建决策树
- 很容易产生过拟合
1. 定义


纯度
熵的定义:衡量一组数据是否不纯的指标

选择拆分信息增益


One hot
上述都是基于特征只有两类可区分,若是多类


决策树与连续特征值

决策树作为分类算法
回归树
决策树作为回归算法
使用加权平方均差决定用什么特征进行分枝

最大程度减少方差的特征
决策树集合
使用单个决策树的缺点之一是该决策树可能对数据中的微小变化而敏感
可以通过构建多个决策树加以解决

多个决策树投票决定结果,使得算法更加健壮
生成树的集合
生成树样例
B次(常为100左右)放回抽样不断产生新数据集,然后构造新的决策树

随机化特征
适用于n较大的时候

XGBoost增强决策树算法
查看到目前为止已经训练过的决策树,更多关注尚未做好的示例,不同于随机森林,XGBoost不是查看所有训练示例,而是将更多注意力集中在尚未表现良好的示例子集上并获得新的决策树


何时选择决策树和神经网络
决策树适用于:大型的类似于电子表格,结构化数据
神经网络适用于:非结构化


浙公网安备 33010602011771号