目录
统计学习基本概念
统计学习三要素
1 模型
在监督学习的过程中,模型就是所要学习的条件概率分布或者决策函数,模型的假设空间包含了所有可能的条件概率分布或决策函数。
2 策略(评价准则)
有了模型的假设空间,我们就要考虑按照什么样的准则学习或者选择最优的模型,这也是统计学习的目标——从假设空间中选取最优模型。
损失函数和风险函数
损失函数
损失函数是度量模型一次的好坏,风险函数是度量模型平均意义下的好坏。
假设我们在假设空间内选择模型
f
f
f,那么对于输入
X
X
X的预测结果为
f
(
X
)
f(X)
f(X),这个结果和真实值
Y
Y
Y可能一致也可能不一致,我们使用损失函数或者代价函数来度量预测的错误程度,记作
L
(
Y
,
f
(
X
)
)
L(Y,f(X))
L(Y,f(X)),常用的损失函数有以下几种。
- 0-1损失函数
L ( Y , f ( X ) ) = { 1 , Y ≠ f ( X ) 0 , Y = f ( X ) L(Y,f(X)) = \left\{\begin{matrix} 1,& Y \neq f(X)\\ 0,& Y = f(X) \end{matrix}\right. L(Y,f(X))={1,0,Y̸=f(X)Y=f(X)
- 平方损失函数
L ( Y , f ( X ) ) = ( Y − f ( X ) ) 2 L(Y,f(X)) = (Y-f(X))^2 L(Y,f(X))=(Y−f(X))2
-
绝对损失函数
L ( Y , f ( X ) ) = ∣ Y − f ( X ) ∣ L(Y,f(X)) = |Y-f(X)| L(Y,f(X))=∣Y−f(X)∣ -
对数损失函数或对数似然损失函数
L ( Y , P ( Y ∣ X ) ) = − l o g P ( Y ∣ X ) L(Y,P(Y|X)) =-logP(Y|X) L(Y,P(Y∣X))=−logP(Y∣X)
风险函数
由于输入输出(X,Y)是随机变量,遵循联合分布
P
(
X
,
Y
)
P(X,Y)
P(X,Y)所以损失函数的期望是
R
e
x
p
(
f
)
=
E
P
[
L
(
Y
,
f
(
X
)
)
]
=
∫
X
∗
Y
L
(
y
,
f
(
x
)
)
P
(
x
,
y
)
d
x
d
y
R_{exp}(f) = E_P[L(Y,f(X))] = \int_{X*Y}L(y,f(x))P(x,y)dxdy
Rexp(f)=EP[L(Y,f(X))]=∫X∗YL(y,f(x))P(x,y)dxdy
这就是理论上模型
f
(
X
)
f(X)
f(X)关于联合分布
f
(
X
,
Y
)
f(X,Y)
f(X,Y)的平均意义下的损失,也就是风险函数或者期望损失函数,但是由于数据的联合分布未知,所以风险函数是不能直接计算的,实际应用中我们定义了经验风险函数。
经验风险函数
给定训练集
T
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
T = {(x_1,y_1),(x_2,y_2),...,(x_N,y_N)}
T=(x1,y1),(x2,y2),...,(xN,yN)
模型
f
(
X
)
f(X)
f(X)关于训练数据集的平均损失为经验风险或者经验损失,记作
R
e
m
p
(
f
)
=
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
R_{emp}(f)= \frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i))
Remp(f)=N1i=1∑NL(yi,f(xi))
根据大数定理,当样本容量N趋向于无穷时,经验风险趋向于期望风险,所以我们在实际使用过程中使用经验风险来估计期望风险
经验风险最小化和结构风险最小化
经验风险最小化
在假设空间,损失函数和训练数据集确定的情况下,经验风险函数就可以确定。经验最小化的策略认为经验风险最小的模型就是最优的模型,所以求得最优模型就转化为求解经验风险最小化问题
m
i
n
f
∈
F
1
N
L
(
y
i
,
f
(
x
i
)
)
min_{f\in F} \frac{1}{N}L(y_i,f(x_i))
minf∈FN1L(yi,f(xi))
当样本容量很大时,经验风险最小化能够保证有很好的学习效果,例如极大似然估计,当模型为条件概率分布,损失函数是对数函数时,经验风险最小化就等价与极大似然估计。
但是当样本容量很小时,经验风险最小化就有可能造成“过拟合”现象,所以我们提出结构风险最小化。
结构风险最小化
结构风险最小化等价于正则化,在经验风险的基础上加上表示模型复杂度的正则化项,在假设空间、损失函数以及训练数据集确定的情况下,结构风险的定义为
R
s
r
m
(
f
)
=
1
N
L
(
y
i
,
f
(
x
i
)
)
+
λ
J
(
f
)
R_{srm}(f) = \frac{1}{N}L (y_i,f(x_i))+\lambda J(f)
Rsrm(f)=N1L(yi,f(xi))+λJ(f)
J
(
f
)
J(f)
J(f)为模型复杂度,可以是参数向量的
L
1
L_1
L1范数,也可以是参数向量的
L
2
L_2
L2范数,
λ
⩾
0
\lambda \geqslant 0
λ⩾0是系数,用来权衡经验风险和模型复杂度。只有经验风险和模型复杂度都很小的时候,结构风险才会很小,结构风险小的模型往往对训练数据和未知的测试数据都有很好的预测。结构风险最小化策略认为结构风险最小的模型是最优的模型,所以求最优化模型,也就是求最优化问题:
m
i
n
f
∈
F
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
+
λ
J
(
f
)
min_{f\in F}\frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i))+\lambda J(f)
minf∈FN1i=1∑NL(yi,f(xi))+λJ(f)
贝叶斯估计中的最大后验概率估计就是结构风险最小化的例子,当模型是条件概率分布、损失函数是对数函数、模型复杂度由模型的先验概率表示的时候,结构风险最小化就等价于最大后验概率估计。
一、分类
1.K近邻
1.1 算法概述
主要思想采用测量不同的特征值之间的距离方法来进行分类
工作原理: 存在一个样本数据集合,并且样本集中的每个数据都存在标签。输入新的没有标签的数据后,将新数据的每个特征值和样本集中数据对应的特征相比较,然后算法提取样本中最相似的(最近邻)数据分类标签。一般来说,我们只选择样本数据集中最相似的k个数据,所以叫k近邻算法。
优缺点:
- 数据适用范围:数值型和标称型
- 优点:精度高,对异常值不敏感,无数据输入假定
- 缺点:计算复杂度高,空间复杂度高。k近邻算法是基于实例的学习,所以我们在使用算法时必须有接近实际数据的训练样本数据;k近邻算法需要保存全部的数据集,如果数据集很大,会占用大量的存储空间;使用过程中必须对每个数据计算距离值,非常耗时;k近邻算法无法给出任何数据的基础结构信息,因此我们也无法知晓平均实例样本和典型实例样本有什么特征(概率算法可以解决这个问题)
1.2 算法一般流程:
- 收集数据
- 准备数据:把数据处理成可以进行距离计算的数值
- 分析数据
- 训练数据:不适用于k近邻算法
- 测试数据:计算错误率
- 使用算法:对新输入的样本进行数据处理,然后使用k近邻算法预测分类结果
实施KNN算法流程
- 计算样本数据集中的点与当前的点的距离
- 按照距离递增次序进行排列
- 选取与当前点距离最小的k个点
- 确定前k个点所在类别的出现频率
- 返回出现频率最高的点的类别作为当前点的预测分类结果
1.3 算法要素
1.3.1 距离度量
特征空间中的两个实例点的距离是两个实例点相似程度的反应。距离度量方法有很多种,最常见的是
L
p
L_p
Lp距离。使用不同的距离得到的最近邻的点是不一样的
L
p
(
x
i
,
x
j
)
=
(
∑
l
=
1
n
∣
x
i
(
l
)
−
x
j
(
l
)
∣
p
)
1
/
p
L_p(x_i,x_j) = (\sum_{l=1}^{n}{|x_i^{(l)}-x_j^{(l)}|^p})^{1/p}
Lp(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣p)1/p
- 当 p = 1 p=1 p=1时,为曼哈顿距离
- 当 p = 2 p=2 p=2时,为欧氏距离
- 当 p = ∞ p = \infty p=∞时,距离为各个坐标距离的最大值
1.3.2 k值的选择
k值的选择会对k近邻算法的结果造成重大的影响
- 如果k值选择过小,会使学习的近似误差减小(只有近距离很近的样本点才会被判别为相似),但学习的估计误差增大,预测结果会对近邻的实例点很敏感,如果正好是噪声就会出错。也就是k值减小会使模型变得复杂,容易造成过拟合。
- 如果k值选取的过大,就相当于用较大邻域中的训练实例进行预测。这样可以减少学习的估计误差,但是却增大了学习的近似误差,这时和实例距离较远(不相似)的点也会对预测结果起作用。k值变小意味着模型变简单。例如如果k=n,那么无论输入实例是什么,预测结果都是样本中属于最多的类,这时模型过于简单,忽略了样本中很多信息
在实际构建的时候,我们通常会选择一个较小的k值,通过交叉验证法来选取最优的k值
1.3.3 分类决策规则
一般采用多数表决的方式,使经验风险最小化
1.4 k近邻法的实现:kd树
由于普通的k近邻算法采用的是线性扫描的方式,当训练集很大时,计算非常耗时,所以我们考虑使用特殊的结构存储训练数据,以减少计算距离的次数,kd树就是其中的一种。
1.4.1 构造kd树
输入:k维空间数据集
T
=
{
x
1
,
x
2
,
.
.
.
x
N
}
T = \{x_1,x_2,...x_N\}
T={x1,x2,...xN},其中
x
i
=
(
x
i
(
1
)
,
x
i
(
2
)
,
.
.
.
,
x
i
(
k
)
)
T
,
i
=
1
,
2
,
.
.
.
,
N
;
x_i=(x_i^{(1)},x_i^{(2)},...,x_i^{(k)})^T, i=1,2,...,N;
xi=(xi(1),xi(2),...,xi(k))T,i=1,2,...,N;
输出:kd树
算法过程
- 开始: 构造根节点,根节点对应于包含所有实例点的k维空间的超矩形区域
选择 x ( 1 ) x^{(1)} x(1)为坐标轴,以T中所有实例的 x ( 1 ) x^{(1)} x(1)坐标的中位数为切分点(中位数会保证构造出的kd树是一颗平衡二叉树),将根节点对应的超矩形区域切分为两个子区域,由根节点生成深度为1的左右子节点,左子节点对应坐标 x ( 1 ) x^{(1)} x(1)小于切分点的子区域,右边是坐标 x ( 1 ) x^{(1)} x(1)大于切分点的子区域,落在切分平面上的点保存在根节点。 - 重复: 对子节点按照下一个属性进行切分,步骤和1相同
- 终止: 直到两个子区域没有实例存在时停止,从而形成kd树的区域划分
1.4.2 搜索kd树
输入:已经构造的kd树,目标点x
输出:x的最近邻
算法过程
- 在kd树中找到包含目标点的叶节点:从根节点出发,递归的向下访问kd树,若目标点x当前维度的值小于切分点的坐标,则移动到左子节点,否则移动到右子节点,直到子节点为叶节点为止
- 找到的叶节点为初始化的当前最近点
- 递归的向上回退,在每个节点上执行以下操作
(1)如果该节点保存的实例点比当前最近点离目标点更近,则该实例点更新为当然最近点
(2)当前最近点一定存在于该节点的一个子节点对应的区域。检查该子节点的父节点的另一子节点对应的区域是否含有更近的点。具体地,检查另一子节点对应的区域是否与以目标点为球心,以目标点与当前最近点的距离为半径的超球体香蕉。如果香蕉,则说明另一个子节点对应的区域内可能存在距离目标点更近的点,移动到另一个子节点,然后递归的进行最近邻搜索。如果不香蕉就向上回退。 - 回退到根节点时结束搜索,最后的当前最近点为x的最近邻点
如果实例点是随机分布的,那么kd树搜索的平均计算复杂度是 O ( l o g N ) O(logN) O(logN)。N为训练实例数,kd树适用于训练实例树远大于空间维数的k近邻搜索。当空间维数接近训练实例数时,其效率会迅速下降,几乎接近于线性扫描。
1.5 额外的
准备数据过程中的特征值归一化:
在计算样本特征之间的距离时,我们发现差值最大的属性对计算结果的影响最大,为了处理这种不同取值范围的特征值,我们需要对其进行归一化处理。经常使用的方法是将当前特征值除以(特征最大值和最小值的差),将特征值得范围缩小到0-1
2.决策树
2.1 算法概述
工作原理: 决策树解决了k近邻算法无法给出数据内部含义的问题,其数据形式非常好理解,他的一个重要任务就是为了理解数据中蕴含的知识信息,因此决策树可以使用不熟悉的数据集合,并从中提取一系列规则,这些机器根据数据集创建规则的过程就是机器学习的过程。
优缺点
- 优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以理解不相关特征数据
- 缺点:可能会产生过度匹配的问题
- 适用数据类型:数值型和标称型
2.2 算法流程
- 收集数据
- 准备数据:树构造算法只适用于标称型数据,因此数值必须要进行离散化
- 分析数据:可以使用任何方法,构造树完成之后,我们应该检查徒刑是否符合预期
- 训练算法:构造树的数据结构
- 测试算法:使用经验树计算错误率
- 使用算法:这个步骤可以适用于任何监督学习算法,而使用决策树可以更好地理解数据的内部含义
递归构建决策树流程
createBranch()伪代码
检测数据集中的每个子项是否属于同一分类:
if so return 类标签
else
寻找划分数据集的最好特征
划分数据集
创建分支节点
for 每个划分的子集
调用函数createBranch并增加返回结果到分支节点中
return 分支节点
使用算法流程:
使用决策树以及用于构造决策树的标签向量,程序比较测试数据与决策树上的数值,递归执行该过程直到进入叶子节点,最后将测试数据定义为叶子节点所属的类型。
2.3 特征选择
决策树学习本质上是从训练数据集中归纳出一组分类规则。与训练数据集不相矛盾的决策树(即能对训练数据进行正确分类的决策树)可能有多个,也可能一个都没有,我们需要的是一个与训练数据矛盾较小的决策树。从所有的决策树中选取最优的决策树是NP完全问题,所以现实中的决策树构建通常采用启发式的方法,近似求解这一最优化问题,这样得到的决策树是次最优的。所以决策树算法通常是一个递归的选择最优特征,并根据该特征对训练的数据进行分割,使得对各个子数据集有一个最好的分类过程,这一过程也对应着对特征空间的划分。
特征选择在于选取对训练数据具有分类能力的特征,这样可以提高决策树学习的效率。通常使用的准则是信息增益或者信息增益比
2.3.1 信息增益
根据信息增益准则的特征选择方法是:对训练数据集(或子集)D,计算每个特征的信息增益,并比较他们的大小,选择信息增益最大的特征作为划分。
先给出熵与条件熵的定义
熵表示随机变量的不确定性的度量,设X是一个取有限个值得离散随机变量,其概率分布为
P
(
X
=
x
i
)
=
p
i
,
i
=
1
,
2
,
.
.
.
n
P(X=x_i) = p_i, i = 1,2,...n
P(X=xi)=pi,i=1,2,...n
随机变量的熵为
H
(
X
)
=
−
∑
i
−
1
n
p
i
l
o
g
p
i
H(X) = -\sum_{i-1}^np_ilogp_i
H(X)=−i−1∑npilogpi
规定0log0 = 0,熵只依赖于X的分布,与X的取值无关,所以也可表示为
H
(
p
)
=
−
∑
i
−
1
n
p
i
l
o
g
p
i
H(p) = -\sum_{i-1}^np_ilogp_i
H(p)=−i−1∑npilogpi
设有随机变量
(
X
,
Y
)
(X,Y)
(X,Y),其联合概率分布为
P
(
X
=
x
i
,
Y
=
y
i
)
=
p
i
j
,
i
=
1
,
2
,
.
.
.
,
n
;
j
=
1
,
2
,
.
.
.
,
m
P(X = x_i,Y = y_i) = p_{ij},i = 1,2,...,n;j = 1,2,...,m
P(X=xi,Y=yi)=pij,i=1,2,...,n;j=1,2,...,m
条件熵表示在在已知随机变量X的条件下随机变量Y的不确定性。
H
(
Y
∣
X
)
=
∑
i
=
1
n
p
i
H
(
Y
∣
X
=
x
i
)
,
p
i
=
P
(
X
=
x
i
)
,
i
=
1
,
2
,
.
.
.
,
n
H(Y|X) = \sum_{i=1}^np_iH(Y|X = x_i),p_i = P(X = x_i),i = 1,2,...,n
H(Y∣X)=i=1∑npiH(Y∣X=xi),pi=P(X=xi),i=1,2,...,n
当熵和条件熵中的概率由数据统计(特别是极大似然估计)得到时,所对应的的熵与条件熵分别称为经验熵和经验条件熵。
信息增益: 特征A对训练数据集D的信息增益
g
(
D
,
A
)
g(D,A)
g(D,A)定义为集合D的经验熵
H
(
D
)
H(D)
H(D)与特征A给定条件下D的经验熵
H
(
D
∣
A
)
H(D|A)
H(D∣A)之差
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D,A) = H(D)-H(D|A)
g(D,A)=H(D)−H(D∣A)
信息增益的算法
设训练集为
D
D
D,
∣
D
∣
|D|
∣D∣表示其样本容量,也就是样本个数,设有K个类
C
k
C_k
Ck,
∣
C
k
∣
|C_k|
∣Ck∣为属于
C
k
C_k
Ck的样本个数,设特征A有n个不同的取值
a
1
,
a
2
,
.
.
.
a
n
{a_1,a_2,...a_n}
a1,a2,...an,根据特征A的取值将D划分为n个子集
D
1
,
D
2
,
.
.
.
D
n
D_1,D_2,...D_n
D1,D2,...Dn,
∣
D
i
∣
|D_i|
∣Di∣为
D
i
D_i
Di的样本个数,记子集
D
i
D_i
Di中属于类
C
k
C_k
Ck的样本集合为
D
i
k
D_ik
Dik,
∣
D
i
k
∣
|D_ik|
∣Dik∣为
D
i
k
D_ik
Dik的样本个数,那么信息增益的算法如下
输入:训练数据集
D
D
D和特征
A
A
A
输出:特征A对训练数据集D的信息增益
g
(
D
,
A
)
g(D,A)
g(D,A)
- 计算数据集D的经验熵
H
(
D
)
H(D)
H(D)
H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ l o g 2 ∣ C k ∣ ∣ D ∣ H(D) = -\sum_{k=1}^K\frac{|C_k|}{|D|}log_2\frac{|C_k|}{|D|} H(D)=−k=1∑K∣D∣∣Ck∣log2∣D∣∣Ck∣ - 计算特征A对数据集D的经验条件熵
H
(
D
∣
A
)
H(D|A)
H(D∣A)
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 ∣ H(D|A) = \sum_{i=1}^n\frac{|D_i|}{|D|}H(D_i) = -\sum_{i=1}^n\frac{|D_i|}{|D|}\sum_{k=1}^K\frac{|D_{ik}|}{|D_i|}log_2\frac{|D_{ik}|}{|D_i|} H(D∣A)=i=1∑n∣D∣∣Di∣H(Di)=−i=1∑n∣D∣∣Di∣k=1∑K∣Di∣∣Dik∣log2∣Di∣∣Dik∣ - 计算信息增益
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A) = H(D)-H(D|A) g(D,A)=H(D)−H(D∣A)
2.3.2 信息增益比
以信息增益作为划分数据集的特征,存在偏向于选择取值较多的特征的问题,使用信息增益比可以矫正这个问题
信息增益比: 特征A对训练数据集D的信息增益比
g
R
(
D
,
A
)
g_R(D,A)
gR(D,A)定义为信息增益
g
(
D
,
A
)
g(D,A)
g(D,A)与训练数据集关于特征A 的值的熵
H
A
(
D
)
H_A(D)
HA(D)之比
g
R
(
D
,
A
)
=
g
(
D
,
A
)
H
A
(
D
)
g_R(D,A) = \frac{g(D,A)}{H_A(D)}
gR(D,A)=HA(D)g(D,A)
H A ( D ) = − ∑ k = 1 K ∣ D i ∣ ∣ D i ∣ l o g 2 ∣ D i ∣ ∣ D i ∣ H_A(D) = -\sum_{k=1}^K\frac{|D_{i}|}{|D_i|}log_2\frac{|D_{i}|}{|D_i|} HA(D)=−k=1∑K∣Di∣∣Di∣log2∣Di∣∣Di∣
n是特征A的取值个数
2.3.3 基尼指数(在二分类中使用)
分类问题中,假设有k个类,样本点属于第k类的概率为
p
k
p_k
pk,则概率分布的基尼指数定义为
G
i
n
i
(
p
)
=
∑
k
=
1
K
p
k
(
1
=
p
k
)
=
1
−
∑
k
=
1
K
p
k
2
Gini(p) = \sum_{k=1}^Kp_k(1=p_k) = 1-\sum_{k=1}^Kp_k^2
Gini(p)=k=1∑Kpk(1=pk)=1−k=1∑Kpk2
对于二分类问题,若样本点属于第一个类的概率为p,那么概率分布的基尼指数为
G
i
n
i
(
p
)
=
2
p
(
1
−
p
)
Gini(p) = 2p(1-p)
Gini(p)=2p(1−p)
对于给定的样本集合,基尼指数为
G
i
n
i
(
D
)
=
1
−
∑
k
=
1
K
(
∣
C
k
∣
∣
D
∣
)
2
Gini(D) = 1-\sum_{k=1}^K( \frac {|C_k|} {|D|} )^2
Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
C
k
C_k
Ck是D中属于k类的样本子集,K是类的个数
如果样本集合D根据特征A是否可以取某一可能值a,分成
D
1
D_1
D1、
D
2
D_2
D2两部分,那么在特征A的条件下,集合D的基尼指数定义为
G
i
n
i
(
D
,
A
)
=
∣
D
1
∣
∣
D
∣
G
i
n
i
(
D
1
)
+
∣
D
2
∣
∣
D
∣
G
i
n
i
(
D
2
)
Gini(D,A) = \frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2)
Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
2.4 决策树的生成
2.4.1ID3算法
ID3算法的核心在于在决策树的各个节点上使用信息增益准则选择特征,递归地构建决策树。
具体方法:
- 从根节点开始,对节点计算所有可能的特征的信息增益,选择信息增益最大的特征作为该节点的特征,由该特征的不同取值建立子节点。
- 再对子节点递归的调用以上方法,构建决策树。
- 直到所有特征的信息增益都很小(小于固定的阈值)或者没有特征可以选择为止。
2.4.2 C4.5的生成算法
C4.5和C3很相似,对C3做了改进,在生成的过程中使用信息增益比来选择特征
2.4.3 CART算法
CART是分类与回归树的简称,既可以用于分类也可以用于回归,CART假设决策树是二叉树,内部节点特征的取值为是或否,这样的二叉树等价于递归的二分每个特征。构建的过程中对回归树采用平方误差最小化准则,对分类树采用基尼指数最小化准则进行特征选择,生成二叉树
使用 ∑ x i ∈ R m ( y i − f ( x i ) ) 2 \sum_{x_i\in{R_m}}(y_i-f(x_i))^2 ∑xi∈Rm(yi−f(xi))2来表示回归树对预测数据的预测误差,然后遍历所有特征的所有切分点,寻找最好的切分特征的最好切分点。
最小二乘回归树算法流程:
- 遍历变量j,对固定的切分变量扫描切分点s,选择最优切分变量j与切分点s。
- 用选定的对 ( j , s ) (j,s) (j,s)切分区域
- 继续对两个子区域调用步骤1,2,直至满足停止条件
- 将输入空间划分为M个区域,生成决策树
CART生成算法:
输入:训练数据集D,停止计算的条件
输出:CART决策树
根据训练数据集,从根节点开始,递归的对每个节点进行以下操作:
- 设节点的训练数据集为D,计算该节点的基尼指数,对每一个特征A的每一个可能渠道的值a,根据样本点对 A = a A=a A=a的是否将数据集切分为 D 1 D_1 D1和 D 2 D_2 D2两部分,计算划分后的基尼指数。
- 在所有可能的特征A以及他们所有可能的切分点a中,选择基尼指数最小的特征以及对应的切分点作为最优特征与最优切分点,按照切分点将数据集切分到两个子节点中去。
- 对两个子节点递归的调用1,2,直到满足停止条件(几点钟的样本个数小于阈值,或者样本集的基尼指数小于阈值,或者没有更多的特征)
- 生成CART决策树
2.5 决策树的剪枝
决策树算法会递归的生成决策树直到不能继续下去为止,这样产生的树对训练数据的分类很准确但对未知的数据分类却没有那么准确,即出现过拟合现象。解决这个问题的方法是对已经生成的抉择书进行简化,即剪枝。
剪枝算法: 极小化决策树整体的损失函数或者代价函数来实现。
设树
T
T
T的叶节点个数为
∣
T
∣
|T|
∣T∣,
t
t
t是树
T
T
T的叶节点,该叶节点有
N
t
N_t
Nt个样本点,其中k类的样本点有
N
t
k
N_tk
Ntk个,
k
=
1
,
2
,
.
.
.
,
n
k = 1,2,...,n
k=1,2,...,n,
H
t
(
T
)
H_t(T)
Ht(T)为点t上的经验熵,
α
≥
0
\alpha\geq0
α≥0为参数,则决策树的损失函数可以定义为
C
α
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
+
α
∣
T
∣
C_\alpha(T) = \sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T|
Cα(T)=t=1∑∣T∣NtHt(T)+α∣T∣
其中经验熵为
H
t
(
T
)
=
−
∑
k
N
t
k
N
t
l
o
g
2
N
t
k
N
t
H_t(T) = -\sum_{k}\frac{N_{tk}}{N_t}log_2\frac{N_{tk}}{N_t}
Ht(T)=−k∑NtNtklog2NtNtk
C
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
=
∑
t
=
1
∣
T
∣
∑
k
=
1
K
N
t
k
l
o
g
N
t
k
N
t
C(T) = \sum_{t=1}^{|T|}N_tH_t(T) = \sum_{t=1}^{|T|}\sum_{k=1}^{K}N_{tk}log\frac{N_{tk}}{N_t}
C(T)=t=1∑∣T∣NtHt(T)=t=1∑∣T∣k=1∑KNtklogNtNtk
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
C_{\alpha}(T) = C(T)+\alpha|T|
Cα(T)=C(T)+α∣T∣
C ( T ) C(T) C(T)表示模型对训练数据的拟合程度, ∣ T ∣ |T| ∣T∣表示模型的复杂程度,参数 α \alpha α控制两者之间的影响, α \alpha α越大,模型越简单, α \alpha α越小,模型越复杂
算法流程:(动态规划)
输入:生成算法产生的整个树
T
T
T,参数
α
\alpha
α
输出:修剪后的子树
T
α
T_{\alpha}
Tα
- 计算每个节点的经验熵
- 递归的从树的叶节点向上回缩(如果回缩后的树的损失函数值减小,那么就回缩)
- 返回2,直到不能继续为止,得到损失函数最小的子树
3.基于概率论的分类方法:朴素贝叶斯
3.1 算法概述
工作原理:
朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先及与特征条件独立假设输入输出的联合概率分布,然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率的最大输出y。
所以他给出的是分到每个类的条件概率,而不是一个确定的分类结果。它实际上学习到生成数据的机制,所以属于生成模型。
优缺点:
- 优点:在数据较少的情况下仍然有效,可以处理多个类别的问题
- 缺点:对于输入数据的准备方式较为敏感
- 适用数据类型:标称型数据
3.2 算法流程
- 收集数据
- 准备数据,需要数值型或者布尔型的数据
- 分析数据:有大量特征时绘制特征的作用不大,此时用直方图效果更好
- 训练算法:计算不用的独立特征的条件概率
- 测试算法:计算错误率
- 使用算法:常见的朴素贝叶斯应用时文档分类,当然也可以在任意的分类场景中使用。
使用流程:(以文本分类为例)
计算每个类别中的文档数目
对每篇训练文档
对每个类别
如果词条出现在文档中---->增加该词条的计数值
增加所有词条的计数值
对每个类别
对每个词条
将该词条的数目除以总词条数目得到条件概率(也就是每个特征每个值属于不同类别的条件概率)
返回每个类别的条件概率(计算测试样本的概率时使用)
3.3 算法要素
3.3.1 朴素贝叶斯
朴素贝叶斯算法对条件概率分布做了条件独立性的假设
P
(
X
=
x
,
Y
=
c
k
)
=
P
(
X
(
1
)
=
x
(
1
)
,
.
.
.
X
(
n
)
=
x
(
n
)
∣
Y
=
c
k
)
=
∏
j
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
P(X=x,Y=c_k)=P(X^{(1)} = x^{(1)},...X^{(n)} = x^{(n)}|Y = c_k)=\prod_{j=1}^nP(X^{(j)} = x^{(j)}|Y = c_k)
P(X=x,Y=ck)=P(X(1)=x(1),...X(n)=x(n)∣Y=ck)=j=1∏nP(X(j)=x(j)∣Y=ck)
后验概率的计算根据贝叶斯定理进行
P
(
Y
=
c
k
∣
X
=
x
)
=
P
(
X
=
x
∣
Y
=
c
k
)
∗
P
(
Y
=
c
k
)
∑
k
P
(
X
=
x
∣
Y
=
c
k
)
P
(
Y
=
c
k
)
P(Y = c_k|X=x) =\frac{ P(X=x|Y = c_k)*P(Y = c_k)}{\sum_kP(X=x|Y = c_k)P(Y = c_k)}
P(Y=ck∣X=x)=∑kP(X=x∣Y=ck)P(Y=ck)P(X=x∣Y=ck)∗P(Y=ck)
将独立性假设带入得到
P
(
Y
=
c
k
∣
X
=
x
)
=
∏
j
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
∗
P
(
Y
=
c
k
)
∑
k
∏
j
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
P
(
Y
=
c
k
)
P(Y = c_k|X=x) =\frac{ \prod_{j=1}^nP(X^{(j)} = x^{(j)}|Y = c_k)*P(Y = c_k)}{\sum_k\prod_{j=1}^nP(X^{(j)} = x^{(j)}|Y = c_k)P(Y = c_k)}
P(Y=ck∣X=x)=∑k∏j=1nP(X(j)=x(j)∣Y=ck)P(Y=ck)∏j=1nP(X(j)=x(j)∣Y=ck)∗P(Y=ck)
由于分母对所有的
c
k
c_k
ck都是相同的,并且我们是要得到后验概率的最大值,所以我们的朴素贝叶斯分类法的基本公式就变成了
y
=
a
r
g
m
a
x
c
k
∏
j
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
∗
P
(
Y
=
c
k
)
y = arg max_{c_k}\prod_{j=1}^nP(X^{(j)} = x^{(j)}|Y = c_k)*P(Y = c_k)
y=argmaxckj=1∏nP(X(j)=x(j)∣Y=ck)∗P(Y=ck)
我们在构建模型时要计算的就是先验概率
P
(
Y
=
c
k
)
P(Y = c_k)
P(Y=ck)和条件概率
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
P(X^{(j)} = x^{(j)}|Y = c_k)
P(X(j)=x(j)∣Y=ck)
P
(
Y
=
c
k
)
=
∑
i
=
1
n
I
(
y
i
=
c
k
)
N
,
K
=
1
,
2
,
.
.
.
,
K
P(Y =c_k) = \frac{\sum_{i=1}^nI(y_i = c_k)}{N},K = 1,2,...,K
P(Y=ck)=N∑i=1nI(yi=ck),K=1,2,...,K
P
(
X
(
j
)
=
a
j
l
∣
Y
=
c
k
)
=
∑
i
=
1
N
I
(
x
i
(
j
)
=
a
j
l
,
y
i
=
c
k
)
∑
i
=
1
N
I
(
y
i
=
c
k
)
P(X^{(j)} = a_{jl}|Y = c_k) = \frac{\sum_{i=1}^NI(x_i^{(j)} = a_{jl},y_i = c_k)}{\sum_{i=1}^NI(y_i = c_k)}
P(X(j)=ajl∣Y=ck)=∑i=1NI(yi=ck)∑i=1NI(xi(j)=ajl,yi=ck)
算法流程:
- 计算先验概率和条件概率
- 计算最大的后验概率,确定测试样本的分类
3.1.2 贝叶斯估计
使用极大似然估计可能会出现所要估计的概率值为0的情况,这时会影响到后验概率的计算结果,使分类产生偏差,解决这一问题的方法是采用贝叶斯估计。
P
λ
(
X
(
j
)
=
a
j
l
∣
Y
=
c
k
)
=
∑
i
=
1
N
I
(
x
i
(
j
)
=
a
j
l
,
y
i
=
c
k
)
+
λ
∑
i
=
1
N
I
(
y
i
=
c
k
)
+
S
j
λ
P_\lambda(X^{(j)} = a_{jl}|Y = c_k) = \frac{\sum_{i=1}^NI(x_i^{(j)} = a_{jl},y_i = c_k)+\lambda}{\sum_{i=1}^NI(y_i = c_k)+S_j\lambda}
Pλ(X(j)=ajl∣Y=ck)=∑i=1NI(yi=ck)+Sjλ∑i=1NI(xi(j)=ajl,yi=ck)+λ
等价于在随机变量的各个取值频数上赋予一个正数
λ
>
0
\lambda>0
λ>0,当
λ
=
0
\lambda=0
λ=0时就是极大似然估计,当
λ
=
1
\lambda=1
λ=1时为拉普拉斯平滑。
同样,先验概率的贝叶斯估计是
P
λ
(
Y
=
c
k
)
=
∑
i
=
1
n
I
(
y
i
=
c
k
)
+
λ
N
+
K
λ
,
K
=
1
,
2
,
.
.
.
,
K
P_\lambda(Y =c_k) = \frac{\sum_{i=1}^nI(y_i = c_k)+\lambda}{N+K\lambda},K = 1,2,...,K
Pλ(Y=ck)=N+Kλ∑i=1nI(yi=ck)+λ,K=1,2,...,K
4.Logistic回归
4.1 算法概述
工作原理: 根据现有数据对分类边界线建立回归公式,以此进行分类。训练分类器时的做法就是寻找最佳拟合参数,使用的是最优化的算法。输出为二值型。
优缺点:
- 优点:计算代价不高,易于理解和实现
- 缺点:容易过拟合,分类精度可能不高
- 适用数据类型:数值型和标称型数据
4.2 算法流程
- 收集数据
- 准备数据:由于需要进行距离计算,因此要求数据类型为数值型。结构化数据格式更佳
- 分析数据
- 训练算法:算法的大部分时间将用于训练,训练的目的是为了找到最佳的分类回归系数
- 测试算法:一旦训练的步骤完成,分类将会很快
- 使用算法:将输入数据转换成对应的结构化数值后,基于训练好的回归系数就可以对这些数值进行简单的回归计算,判定他们属于哪个类别
4.3 逻辑斯蒂回归模型
4.3.1 二项逻辑斯蒂回归模型
二项逻辑斯蒂回归模型是一种分类模型,由条件概率表示P(Y|X)来表示,我们通过监督学习的方法来估计模型参数
P ( Y = 1 ∣ X ) = e x p ( w ⋅ x + b ) 1 + e x p ( w ⋅ x + b ) P(Y=1|X) = \frac{exp(w\cdot x+b) }{1+exp(w\cdot x+b)} P(Y=1∣X)=1+exp(w⋅x+b)exp(w⋅x+b)
P ( Y = 0 ∣ X ) = 1 1 + e x p ( w ⋅ x + b ) P(Y=0|X) = \frac{1 }{1+exp(w\cdot x+b)} P(Y=0∣X)=1+exp(w⋅x+b)1
其中 w = ( w ( 1 ) , w ( 2 ) , . . . w ( n ) ) w =(w^{(1)},w^{(2)},...w^{(n)}) w=(w(1),w(2),...w(n)), x = ( x ( 1 ) , x ( 2 ) , . . . x ( n ) ) x =(x^{(1)},x^{(2)},...x^{(n)}) x=(x(1),x(2),...x(n)),线性函数的值越接近正无穷,概率值就越接近1,线性函数的值越接近负无穷,概率值就越接近0。
4.3.2 模型参数估计
对于给定的训练集
T
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
n
,
y
n
)
,
T = {(x_1,y_1),(x_2,y_2),...,(x_n,y_n),}
T=(x1,y1),(x2,y2),...,(xn,yn),,可以使用极大似然估计法估计模型的参数,从而得到逻辑斯蒂回归模型
设:
P
(
Y
=
1
∣
X
)
=
π
(
x
)
,
P
(
Y
=
0
∣
X
)
=
1
−
π
(
x
)
P(Y=1|X) =\pi (x),P(Y=0|X)=1-\pi (x)
P(Y=1∣X)=π(x),P(Y=0∣X)=1−π(x)
似然函数为
∏
i
=
1
N
[
(
π
(
x
i
)
]
y
i
[
(
1
−
π
(
x
i
)
]
1
−
y
i
\prod_{i=1}^N[(\pi(x_i)]^{y_i}[(1-\pi(x_i)]^{1-y_i}
i=1∏N[(π(xi)]yi[(1−π(xi)]1−yi
对数似然函数为
L
(
w
)
=
∑
i
=
1
N
[
(
y
i
l
o
g
π
(
x
i
)
+
(
1
−
y
i
)
l
o
g
(
1
−
π
(
x
i
)
]
L(w) = \sum_{i=1}^N[(y_ilog\pi(x_i)+(1-y_i)log(1-\pi(x_i)]
L(w)=i=1∑N[(yilogπ(xi)+(1−yi)log(1−π(xi)]
问题就转变为了以对数函数为目标函数的优化问题,逻辑斯蒂回归中通常采用的是梯度下降法以及拟牛顿法。
4.3.3 多项逻辑斯蒂回归
P
(
Y
=
k
∣
X
)
=
e
x
p
(
w
k
⋅
x
+
b
)
1
+
∑
k
=
1
K
−
1
e
x
p
(
w
k
⋅
x
+
b
)
,
k
=
1
,
2
,
.
.
.
,
K
−
1
P(Y=k|X) = \frac{exp(w_k\cdot x+b) }{1+\sum_{k=1}^{K-1}exp(w_k\cdot x+b)},k = 1,2,...,K-1
P(Y=k∣X)=1+∑k=1K−1exp(wk⋅x+b)exp(wk⋅x+b),k=1,2,...,K−1
P
(
Y
=
K
∣
X
)
=
1
1
+
∑
k
=
1
K
−
1
e
x
p
(
w
k
⋅
x
+
b
)
P(Y=K|X) = \frac{1}{1+\sum_{k=1}^{K-1}exp(w_k\cdot x+b)}
P(Y=K∣X)=1+∑k=1K−1exp(wk⋅x+b)1
4.4 基于最优化方法的最佳回归系数确定
4.4.1 梯度下降(梯度上升法)
每个回归系数初始化为1
重复R次(R是人为设定好的)
计算整个数据集的梯度
使用alpha*gradient更新回归系数的向量
返回回归系数
weights = ones((n,1)) #初始化
for k in range(cycleNum):
h = sigmoid(dataMatrix * weights)
error = (labelMat - h)
weights = weights- alpha * dataMatrix.transpose() * error
return weights
对于
L
(
w
)
=
−
1
N
∑
i
=
1
N
[
(
y
i
l
o
g
π
(
x
i
)
+
(
1
−
y
i
)
l
o
g
(
1
−
π
(
x
i
)
]
L(w) = -\frac{1}{N}\sum_{i=1}^N[(y_ilog\pi(x_i)+(1-y_i)log(1-\pi(x_i)]
L(w)=−N1i=1∑N[(yilogπ(xi)+(1−yi)log(1−π(xi)]
有
w
=
w
−
α
(
−
1
N
∑
i
=
1
N
(
π
(
x
i
)
−
y
i
)
x
i
)
w = w-\alpha(-\frac{1}{N}\sum_{i=1}^N(\pi(x_i)-y_i)x_i)
w=w−α(−N1i=1∑N(π(xi)−yi)xi)
4.4.2 随机梯度下降
梯度下降在每次使用的时候都需要遍历整个数据集,当数据集很大时需要的时间也很长,一种改进方法是一次仅使用一个样本点来更新回归系数,称为随机梯度下降法。由于可以在新样本到来时对分类器进行增量式更新,因此随机梯度下降法是一个在线学习算法,与在线学习对应的一次处理所有数据的是批处理。
所有回归系数初始化为1
对数据集中的每个样本
计算该样本的梯度
使用alpha * gradient 更新回归系数的值
返回回归系数值
使用样本随机选择和alpha动态减少机制的随机梯度下降算法,减少波动的同时,比原随机梯度下降法收敛更快。
4.4.3 拟牛顿法(还不会0.0)
会补的!!!!
5.支持向量机(统计学习方法)
5.1 算法概述
工作原理: 支持向量机是一种二分类模型,他的基本定义是在特征空间上的间隔最大的线性分类器,间隔最大是它有别于感知机。支持向量机的学习策略就是间隔最大化,可以形式化为一个求解凸二次规划的问题。
优缺点:
- 优点:泛化错误率低,计算开销不大,结果容易解释
- 缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅仅适用于处理二分类问题
- 适用数据类型:数值型和标称型
5.2 算法流程
- 收集数据
- 准备数据:需要使用数值型的数据
- 分析数据:有助于可视化分割超平面
- 训练算法:SVM大部分时间都用于训练,该过程主要是实现两个参数的调优
- 测试算法:简单的计算就可以实现
- 使用算法:几乎所有的分类问题都可以使用SVM,值得一提的是,SVM本身就是一个二类分类器,对多类问题应该修改一部分的代码。
5.3 线性可分支持向量机与硬间隔最大化
5.3.1 线性可分支持向量机
假设输入空间与特征空间是两个不同的空间。线性可分支持向量机假设这两个空间的原始一一对应,并将输入空间中的输入映射到特征空间中的特征向量。支持向量的学习是在特征空间进行的,再假设训练数据集是线性可分的。
学习的目标是在特征空间中找到一个分离超平面,能将实例分到不同的类,一般存在无穷多个这样的平面,线性可分支持向量机利用间隔最大化求最优分离超平面。
给定线性可分得训练数据集,通过间隔最大化或者等价的求解相应的凸二次规划问题得到的分离超平面为
w
∗
⋅
x
+
b
∗
=
0
w^*\cdot x+b^* = 0
w∗⋅x+b∗=0
相应的决策函数为,称为线性可分支持向量机
f
(
x
)
=
s
i
g
n
(
w
∗
⋅
x
+
b
∗
)
f(x) = sign(w^*\cdot x+b^* )
f(x)=sign(w∗⋅x+b∗)
5.3.2 函数间隔和几何间隔
一般来说一个点距离分离超平面的远近可以表示分类预测的确信程度。对于超平面 w ⋅ x + b = 0 w\cdot x+b = 0 w⋅x+b=0, ∣ w ⋅ x + b ∣ |w\cdot x+b| ∣w⋅x+b∣能够相对的表示点x距离超平面的远近。 w ⋅ x + b w\cdot x+b w⋅x+b的符号和类标记 y y y是否一致可以表示分类是否正确,综上所述,我们使用 y ( w ⋅ x + b ) y(w\cdot x+b) y(w⋅x+b)来表示分类的正确性和确信度,这就是函数间隔
对于给定的训练数据集T和超平面
(
w
,
b
)
(w,b)
(w,b),样本点的
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)的函数间隔为
r
i
^
=
y
i
(
w
⋅
x
i
+
b
)
\hat{r_i} = y_i(w\cdot x_i+b)
ri^=yi(w⋅xi+b)
定义超平面对训练数据集T的函数间隔为超平面
(
w
,
b
)
(w,b)
(w,b)关于T中所有样本点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)的函数间隔最小值
r
^
=
m
i
n
i
=
1
,
2
,
.
.
.
N
r
i
^
\hat{r} = min_{i = 1,2,...N}\hat{r_i}
r^=mini=1,2,...Nri^
函数间隔可以用来表示分类预测的正确性及确信度,但是成比例的改变w和b会使函数间隔发生变化,而实际上超平面没有发生变化,所以我们对分离超平面的法向量w加以约束, ∣ ∣ w ∣ ∣ = 1 ||w||=1 ∣∣w∣∣=1,使得间隔固定,这时函数间隔就变为几何间隔
对于给定的训练数据集T和超平面
(
w
,
b
)
(w,b)
(w,b),样本点的
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)的几何间隔为
r
i
=
y
i
(
w
∣
∣
w
∣
∣
⋅
x
i
+
b
∣
∣
w
∣
∣
)
r_i = y_i(\frac{w}{||w||}\cdot x_i+\frac{b}{||w||})
ri=yi(∣∣w∣∣w⋅xi+∣∣w∣∣b)
同样的,定义超平面对训练数据集T的几何间隔为超平面
(
w
,
b
)
(w,b)
(w,b)关于T中所有样本点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)的几何间隔最小值
r
=
m
i
n
i
=
1
,
2
,
.
.
.
N
r
i
{r} = min_{i = 1,2,...N}{r_i}
r=mini=1,2,...Nri
函数间隔和几何间隔之间的关系为
r
i
=
r
i
^
∣
∣
w
∣
∣
r_i = \frac{\hat{r_i}}{||w||}
ri=∣∣w∣∣ri^
r = r ^ ∣ ∣ w ∣ ∣ r= \frac{\hat{r}}{||w||} r=∣∣w∣∣r^
5.3.3 间隔最大化
要求几何间隔最大化的超平面,也就是最大间隔分离超平面,可以将问题转化为
m
a
x
w
,
b
r
max_{w,b} r
maxw,br
s
.
t
.
y
i
(
w
∣
∣
w
∣
∣
⋅
x
i
+
b
∣
∣
w
∣
∣
)
⩾
r
,
r
=
1
,
2
,
.
.
.
,
N
s.t. y_i(\frac{w}{||w||}\cdot x_i+\frac{b}{||w||}) \geqslant r ,r=1,2,...,N
s.t.yi(∣∣w∣∣w⋅xi+∣∣w∣∣b)⩾r,r=1,2,...,N
根据函数间隔和几何间隔之间的关系,我们可以将问题转化为
m
a
x
w
,
b
r
^
∣
∣
w
∣
∣
max_{w,b} \frac{\hat{r}}{||w||}
maxw,b∣∣w∣∣r^
s . t . y i ( w ⋅ x i + b ) ⩾ r , r = 1 , 2 , . . . , N s.t. y_i(w\cdot x_i+{b}) \geqslant r ,r=1,2,...,N s.t.yi(w⋅xi+b)⩾r,r=1,2,...,N
函数间隔的取值并不影响我们最优化问题的解,所以我们取
r
^
=
1
\hat{r} = 1
r^=1,带入后发现最大化
1
∣
∣
w
∣
∣
\frac{1}{||w||}
∣∣w∣∣1和最小化
1
2
∣
∣
w
∣
∣
2
\frac{1}{2}||w||^2
21∣∣w∣∣2是一样的,所以我们将问题转化为一个凸二次优化问题
m
i
n
w
,
b
1
2
∣
∣
w
∣
∣
2
min_{w,b} \frac{1}{2}||w||^2
minw,b21∣∣w∣∣2
s . t . y i ( w ⋅ x i + b ) − 1 ⩾ 0 , r = 1 , 2 , . . . , N s.t. y_i(w\cdot x_i+{b}) -1\geqslant 0 ,r=1,2,...,N s.t.yi(w⋅xi+b)−1⩾0,r=1,2,...,N
5.3.4 学习的对偶算法
为了求解线性可分支持向量机的最优化问题,我们将其作为原始问题,应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解,这就是线性可分支持向量机的对偶算法。这样做的原因一个是方便求解,另一个是自然引入核函数,进而推广到非线性分类问题。
首先构建拉格朗日函数,对每一个不等式约束引入拉格朗日乘子,定义拉格朗日函数
L
(
w
,
b
,
α
)
=
1
2
∣
∣
w
∣
∣
2
−
∑
i
=
1
N
α
i
y
i
(
w
⋅
x
i
+
b
)
+
∑
i
=
1
N
α
i
L(w,b,\alpha) = \frac{1}{2}||w||^2-\sum_{i=1}^N\alpha_iy_i(w\cdot x_i+b)+\sum_{i=1}^N\alpha_i
L(w,b,α)=21∣∣w∣∣2−i=1∑Nαiyi(w⋅xi+b)+i=1∑Nαi
原始问题是极小极大问题
m
i
n
w
,
b
m
a
x
α
L
(
w
,
b
,
α
)
min_{w,b}max_{\alpha}L(w,b,\alpha)
minw,bmaxαL(w,b,α)
原始问题的对偶问题是极大极小问题
m
a
x
α
m
i
n
w
,
b
L
(
w
,
b
,
α
)
max_{\alpha}min_{w,b}L(w,b,\alpha)
maxαminw,bL(w,b,α)
为了得到对偶问题的解,需要先求
L
(
w
,
b
,
α
)
L(w,b,\alpha)
L(w,b,α)对
w
,
b
w,b
w,b的极小,再求对
α
\alpha
α的极大
(1)求
m
i
n
w
,
b
L
(
w
,
b
,
α
)
min_{w,b}L(w,b,\alpha)
minw,bL(w,b,α)
∂
L
(
w
,
b
,
α
)
∂
w
=
w
−
∑
i
=
1
N
α
i
y
i
x
i
=
0
\frac{\partial L(w,b,\alpha)}{\partial w} = w-\sum_{i=1}^N\alpha_iy_ix_i = 0
∂w∂L(w,b,α)=w−i=1∑Nαiyixi=0
∂ L ( w , b , α ) ∂ b = − ∑ i = 1 N α i y i = 0 \frac{\partial L(w,b,\alpha)}{\partial b} = -\sum_{i=1}^N\alpha_iy_i= 0 ∂b∂L(w,b,α)=−i=1∑Nαiyi=0
可得
w
=
∑
i
=
1
N
α
i
y
i
x
i
w= \sum_{i=1}^N\alpha_iy_ix_i
w=i=1∑Nαiyixi
∑ i = 1 N α i y i = 0 \sum_{i=1}^N\alpha_iy_i = 0 i=1∑Nαiyi=0
带入拉格朗日函数可得
L
(
w
,
b
,
α
)
=
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
N
α
i
y
i
(
(
∑
j
=
1
N
α
j
y
j
x
j
)
⋅
x
i
+
b
)
+
∑
i
=
1
N
α
i
L(w,b,\alpha) = \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)-\sum_{i=1}^N\alpha_iy_i((\sum_{j=1}^N\alpha _jy_jx_j)\cdot x_i+b)+\sum_{i=1}^N\alpha_i
L(w,b,α)=21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαiyi((j=1∑Nαjyjxj)⋅xi+b)+i=1∑Nαi
也就是
m
i
n
w
,
b
L
(
w
,
b
,
α
)
=
−
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
+
∑
i
=
1
N
α
i
min_{w,b}L(w,b,\alpha) = -\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)+\sum_{i=1}^N\alpha_i
minw,bL(w,b,α)=−21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi
(2)求
m
i
n
w
,
b
L
(
w
,
b
,
α
)
min_{w,b}L(w,b,\alpha)
minw,bL(w,b,α)对
α
\alpha
α的极大
m
a
x
α
−
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
+
∑
i
=
1
N
α
i
max_\alpha -\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)+\sum_{i=1}^N\alpha_i
maxα−21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi
s . t . ∑ i = 1 N α i y i = 0 , α i ≥ 0 , i = 1 , 2 , . . . , N s.t. \sum_{i=1}^N\alpha_iy_i = 0, \alpha_i\geq0,i = 1,2,...,N s.t.i=1∑Nαiyi=0,αi≥0,i=1,2,...,N
也就是求
m
i
n
α
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
+
∑
i
=
1
N
α
i
min_\alpha \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)+\sum_{i=1}^N\alpha_i
minα21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi
s . t . ∑ i = 1 N α i y i = 0 , α i ≥ 0 , i = 1 , 2 , . . . , N s.t. \sum_{i=1}^N\alpha_iy_i = 0, \alpha_i\geq0,i = 1,2,...,N s.t.i=1∑Nαiyi=0,αi≥0,i=1,2,...,N
(3)在求出
α
∗
\alpha^*
α∗后,我们来求解
w
∗
w^*
w∗和
b
∗
b^*
b∗
设
α
∗
\alpha^*
α∗是对偶最优化问题的解,根据拉格朗日对偶性,原始问题是对偶问题的解的充分必要条件是KKT条件成立
即
∂
L
(
w
∗
,
b
∗
,
α
∗
)
∂
w
=
w
∗
−
∑
i
=
1
N
α
i
∗
y
i
x
i
=
0
\frac{\partial L(w^*,b^*,\alpha^*)}{\partial w} = w^*-\sum_{i=1}^N\alpha_i^*y_ix_i = 0
∂w∂L(w∗,b∗,α∗)=w∗−i=1∑Nαi∗yixi=0
∂
L
(
w
∗
,
b
∗
,
α
∗
)
∂
b
=
−
∑
i
=
1
N
α
i
∗
y
i
=
0
\frac{\partial L(w^*,b^*,\alpha^*)}{\partial b} = -\sum_{i=1}^N\alpha_i^*y_i= 0
∂b∂L(w∗,b∗,α∗)=−i=1∑Nαi∗yi=0
α
i
∗
(
y
i
(
w
⋅
x
i
+
b
∗
)
−
1
)
=
0
,
i
=
1
,
2
,
.
.
.
,
N
\alpha_i^*(y_i(w\cdot x_i+b^*)-1) = 0,i = 1,2,...,N
αi∗(yi(w⋅xi+b∗)−1)=0,i=1,2,...,N
y i ( w ⋅ x i + b ∗ ) − 1 ≥ 0 , i = 1 , 2 , . . . , N y_i(w\cdot x_i+b^*)-1 \geq0,i = 1,2,...,N yi(w⋅xi+b∗)−1≥0,i=1,2,...,N
α i ∗ ≥ 0 , i = 1 , 2 , . . . , N \alpha_i^*\geq 0,i = 1,2,...,N αi∗≥0,i=1,2,...,N
可得
w
∗
=
∑
i
=
1
N
α
i
∗
y
i
x
i
w^* =\sum_{i=1}^N\alpha_i^*y_ix_i
w∗=i=1∑Nαi∗yixi
其中至少一个
α
j
∗
>
0
\alpha _j^*>0
αj∗>0(反证法可以证明),对此j有
y
j
(
w
∗
⋅
x
j
+
b
∗
)
−
1
=
0
y_j(w^*\cdot x_j+b^*)-1 = 0
yj(w∗⋅xj+b∗)−1=0
将 w ∗ w^* w∗带入并且等式两边同乘 y j y_j yj可得
b ∗ = y j − ∑ i = 1 N α i ∗ y i ( x i ⋅ x j ) b^* = y_j-\sum_{i=1}^N\alpha_i^*y_i(x_i\cdot x_j) b∗=yj−i=1∑Nαi∗yi(xi⋅xj)
整体算法流程:
输入:线性可分训练集
输出:分离超平面和分类决策函数
- 构造并求解约束最优化问题求得最优解
α
∗
=
(
α
1
∗
,
α
2
∗
,
.
.
.
α
N
∗
)
\alpha^* = (\alpha_1^* ,\alpha_2^* ,...\alpha_N^* )
α∗=(α1∗,α2∗,...αN∗)
m i n α 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) + ∑ i = 1 N α i min_\alpha \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)+\sum_{i=1}^N\alpha_i minα21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi
s . t . ∑ i = 1 N α i y i = 0 , α i ≥ 0 , i = 1 , 2 , . . . , N s.t. \sum_{i=1}^N\alpha_iy_i = 0, \alpha_i\geq0,i = 1,2,...,N s.t.i=1∑Nαiyi=0,αi≥0,i=1,2,...,N
- 计算
w ∗ = ∑ i = 1 N α i ∗ y i x i w^* =\sum_{i=1}^N\alpha_i^*y_ix_i w∗=i=1∑Nαi∗yixi
并且选择
α
∗
\alpha^*
α∗的一个正分量
α
j
∗
>
0
\alpha_j^*>0
αj∗>0,计算
b
∗
=
y
j
−
∑
i
=
1
N
α
i
∗
y
i
(
x
i
⋅
x
j
)
b^* = y_j-\sum_{i=1}^N\alpha_i^*y_i(x_i\cdot x_j)
b∗=yj−i=1∑Nαi∗yi(xi⋅xj)
- 求得分离超平面以及分类决策函数
w ∗ ⋅ x + b ∗ = 0 w^*\cdot x+b^* = 0 w∗⋅x+b∗=0
f ( x ) = s i g n ( w ∗ ⋅ x + b ∗ ) f(x) = sign(w^*\cdot x+b^* ) f(x)=sign(w∗⋅x+b∗)
在线性可分支持向量机中, w ∗ w^* w∗和 b ∗ b^* b∗只依赖于训练数据中对应于 α i ∗ > 0 \alpha_i^*>0 αi∗>0的样本点,其他的样本点对 w ∗ w^* w∗和 b ∗ b^* b∗没有影响,我们将训练中对应于 α i ∗ > 0 \alpha_i^*>0 αi∗>0的样本点称为支持向量。
5.4 线性支持向量机与软间隔最大化
通常情况下,线性数据是不可分的,训练数据中存在一些特异点,将这些特异点去除之后,剩下的大部分样本点组成的集合线性可分,所以我们对每个样本点引入松弛变量,修改硬间隔最大化为软间隔最大化。
修改后的约束条件变为
y
i
(
w
⋅
x
i
+
b
)
⩾
1
−
ξ
i
y_i(w\cdot x_i+{b}) \geqslant 1-\xi_i
yi(w⋅xi+b)⩾1−ξi
对于每一个松弛变量都要支付一个代价,所以目标函数变为
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
N
ξ
i
\frac{1}{2}||w||^2+C\sum_{i=1}^N\xi_i
21∣∣w∣∣2+Ci=1∑Nξi
C
>
0
C>0
C>0称为惩罚参数,是由实际应用决定的,C值越大对误分类的惩罚越大。
凸二次规划问题就变为
m
i
n
w
,
b
,
ξ
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
N
ξ
i
min_{w,b,\xi} \frac{1}{2}||w||^2+C\sum_{i=1}^N\xi_i
minw,b,ξ21∣∣w∣∣2+Ci=1∑Nξi
s . t . y i ( w ⋅ x i + b ) ⩾ 1 − ξ i , ξ i ⩾ 0 , r = 1 , 2 , . . . , N , s.t. y_i(w\cdot x_i+{b}) \geqslant 1-\xi_i,\xi_i\geqslant 0,r=1,2,...,N, s.t.yi(w⋅xi+b)⩾1−ξi,ξi⩾0,r=1,2,...,N,
证明及计算过程同线性可分支持向量机
整体算法流程:
输入:训练数据集
输出:分离超平面和分类决策函数
- 选择惩罚参数C>0,构造并求解凸二次规划问题,求得最优解
α
∗
=
(
α
1
∗
,
α
2
∗
,
.
.
.
α
N
∗
)
\alpha^* = (\alpha_1^* ,\alpha_2^* ,...\alpha_N^* )
α∗=(α1∗,α2∗,...αN∗)
m i n α 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) + ∑ i = 1 N α i min_\alpha \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)+\sum_{i=1}^N\alpha_i minα21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi
s . t . ∑ i = 1 N α i y i = 0 , 0 ⩽ α i ⩽ C , i = 1 , 2 , . . . , N s.t. \sum_{i=1}^N\alpha_iy_i = 0, 0\leqslant\alpha_i\leqslant C,i = 1,2,...,N s.t.i=1∑Nαiyi=0,0⩽αi⩽C,i=1,2,...,N
- 计算
w ∗ = ∑ i = 1 N α i ∗ y i x i w^* =\sum_{i=1}^N\alpha_i^*y_ix_i w∗=i=1∑Nαi∗yixi
并且选择
α
∗
\alpha^*
α∗的一个正分量
<
0
α
j
∗
<
C
<0\alpha_j^*<C
<0αj∗<C,计算
b
∗
=
y
j
−
∑
i
=
1
N
α
i
∗
y
i
(
x
i
⋅
x
j
)
b^* = y_j-\sum_{i=1}^N\alpha_i^*y_i(x_i\cdot x_j)
b∗=yj−i=1∑Nαi∗yi(xi⋅xj)
- 求得分离超平面以及分类决策函数
w ∗ ⋅ x + b ∗ = 0 w^*\cdot x+b^* = 0 w∗⋅x+b∗=0
f ( x ) = s i g n ( w ∗ ⋅ x + b ∗ ) f(x) = sign(w^*\cdot x+b^* ) f(x)=sign(w∗⋅x+b∗)
软间隔的支持向量或者在间隔边界上,或者在间隔边界与分离超平面之间,或者在分离超平面误分一侧。
5.3 非线性支持向量机与核函数(未完)
对非线性可分得分类问题,我们使用和技巧构造非线性支持向量机。
5.3.1 核技巧
5.3.2 正定核
5.3.3常用核函数
5.4 序列最小最优化算法
6.利用AdaBoost元算法提高分类性能
部分参考https://blog.csdn.net/zwqjoy/article/details/80431496
元算法是对其他算法进行组合的一种方式。使用集成的时候有很多种形式:可以是不同算法的集成,也可以是同一算法在不同设置下的集成,还可以使数据集的不同部分分配给不同的分类器之后的集成。
优缺点:
- 优点:泛化错误率低,易于编码,可以用在大部分的分类器上,无参数调整
- 缺点:对离群点敏感
- 适用数据类型:数值型和标称型数据
引用https://blog.csdn.net/qq_33067361/article/details/88596707
bagging和boosting是集成学习的两种策略
- bagging:每个分类器都随机从原样本中做有放回的采样,然后分别在这些采样后的样本上训练分类器,然后再把这些分类器组合起来。一般使用简单的多数投票,代表算法是随机森林(随机森林还引入了随机属性选择,在每个节点的构建过程中,随机的从节点的属性集合中选取一个属性子集,然后在子集中选择最优的属性来划分)
- boosting:迭代的方式训练一系列的分类器,每个分类器采用的样本分布都和上一轮的学习结果有关,代表算法是adaboost,GBDT。
对于bagging算法来说,由于我们并行的训练很多不同的分类器,目的就是降低方差,所以在构建每个基分类器的时候我们的目的就是降低偏差,所以我们会采用深度很深或者不剪枝的决策树。
对于boosting算法来说,每一步我们都会在上一步的基础上更加拟合原数据,所以可以保证偏差,在构建每个基分类器时目的就是要降低偏差,选择偏差更小的分类器,也就是更简单的分类器,所以我们一般选择深度很浅的决策树。
6.1 bagging方法(减小方差)
减少一个估计方差的一种方式及时对多个估计进行平均。Bagging使用袋装采样来获取数据子集训练基础学习器,他直接基于自助采样法(有放回的随机抽取)获取到T个含m个样本的训练集,然后基于每个采样集训练处一个基学习器,再将这些基学习器进行结合。通常分类的任务使用投票的方式集成,而回归任务通过平均的方式集成。
算法流程:
- 从原始样本集中抽取训练集。每轮从原始样本中使用Bootstraping(有放回)的方法抽取m个训练样本(在训练集中,有些样本可能被多次抽到,有些样本可能一次都没被抽到)。共进行T轮抽取,得到T个采样集。(这里我们假设T个训练集之间是相互独立的,但实际上并不是)
- 每次使用一个采样集作为训练集得到一个模型,T个训练集可以得到T个模型,他们都是同一种模型。我们可以根据不同的问题选择不同的分类或者回归方法,例如决策树,感知机等。
- 将多个模型进行集成。对于分类问题使用简单投票的方式,如果票数一致可以简单随机选一个,或者进一步考察学习器投票的置信度。对于回归问题,可以计算模型的均值获得最终的结果。也就是说所有模型的重要性是一致的。
自主采样过程还给Bagging带来了另外一个优点:由于每个基学习器只使用了初始训练集中大约63.2%的样本,剩下的36.8%可以用来作为验证集提高泛化性能。例如使用包外样本来辅助剪枝,或用于估计决策树中各节点的后验概率以辅助对零训练样本节点的处理;当基学习器是神经网络时,可以使用保外样本来辅助早期停止,来降低过拟合的风险。
6.1.1 随机森林
随机森林是Bagging的一个扩展变体,RF在以决策树为基学习器构建Bagging的基础上,进一步在决策树的训练中加入了随机属性选择,具体地说,传统的决策树在选择划分属性时,是在当前节点的全部属性中选择一个最优的属性,而RF是对于决策树的每个节点,先从该节点的属性集合中随机选择一个包含k个属性的子集,然后再从子集中选择一个最优属性用于划分。一般情况下 k = l o g 2 d k = log_2d k=log2d
随机森林对bagging的改进:
- 训练效率高
- 泛化误差小
- 泛化性能高
- 但起始性能较低
6.2 boosting方法(减小偏差)
Boosting指的是通过算法集合将弱学习器转换为强学习器。工作机制为先从初始训练集中训练处一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多的关注,然后基于调整后的样本分布来训练下一个基学习器,重复进行,指导学习器的数目达到规定的值后对基学习器进行集成。如果是分类问题则按照权重进行投票,而对于回归任务则进行加权,然后再进行预测。
算法流程:
- 先从初始训练集中训练出一个基学习器
- 计算学习器的错误率,根据基学习器的表现对训练样本的分布进行调整,是的先前基学习器分类错误的样本在后续收到更多的关注
- 基于调整后的样本分布来训练下一个基学习器
- 重复上述步骤,直到基学习器的数量达到指定值T
- 将T个基学习器进行加权集成得到最终的结果。
6.2.1 Adaboost算法
算法流程:
输入:训练集D,基学习算法L,训练轮数T
输出:
H
(
x
)
=
s
i
g
n
(
∑
t
=
1
T
)
α
t
h
t
(
x
)
)
H(x) = sign(\sum_{t=1}^T)\alpha_th_t(x))
H(x)=sign(∑t=1T)αtht(x))
- 初始化样本权值分布 D 1 ( x ) = 1 / m D_1(x) = 1/m D1(x)=1/m
- 基于分布 D t D_t Dt从数据集 D D D中训练处分类器 h t h_t ht
- 计算出分类器的误差(计算分类器的错误率)
- 如果分类器的误差值高于随机猜测的误差,那么就丢失基分类器(为了使迭代次数达到T,一般会使用“重采样法”)
- 根据误差确定分类器的权重 α t = 1 2 l n ( 1 − e r r o r r a t e e r r o r r a t e ) \alpha_t = \frac{1}{2}ln(\frac{1-error_{rate}}{error_{rate}}) αt=21ln(errorrate1−errorrate)
- 更新样本分布。如果分类正确那么就乘以 e x p ( − α t ) exp(-\alpha_t) exp(−αt),错误就乘以 e x p ( α t ) exp(\alpha_t) exp(αt),同时都要除以规范化因子来保证 D t + 1 D_{t+1} Dt+1是一个分布。
- 训练T个基分类器,最后根据分类器的权重进行集成。
6.2.1 GBDT简介
参考https://blog.csdn.net/legendavid/article/details/78904353
GBDT主要由三个概念构成:回归决策树,梯度提升和缩减
- 回归树,基于回归树得到的数值进行加减是有道理的,GDBT运用了回归树的这个性质,在最后计算结果时将所有树的累加结果最为最终的结果。
(回归树和分类树的不同:回归树的每个节点得到的是一个预测值,也就是属于这个节点的所有人年龄的平均值,并且在节点的选择上,回归树采用了最小化均值方差来作为划分标准) - 梯度提升,基本思想为沿着梯度方向构造一系列的弱分类器函数,然后按照一定的权重组合起来,形成最终的强分类器。GDBT的核心在于每一棵树所学习的是之前所有树结论和的残差,也就是结论和和与真实值的差值(预测25岁,实际26岁,残差为1)
- 缩减,基本思想为没走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。也就是说不信任每一棵残差树,他认为每一颗残差树只学到了真理的一小部分,累加的时候也只累加一小部分,只有通过多学几棵树才能弥补不足。
优点
- 预测精度高
- 适合低维数据
- 能处理非线性数据
缺点 - 并行麻烦(因为上下两棵树有联系)
- 数据维度较高时会加大算法的计算复杂度
6.2.2 XGBoost
- GDBT是以CART为基分类器,XGBoost在这个基础上还支持线性分类器,并且XGBoot相当于带L1和L2正则化项的logistics回归问题
- XGBoost在目标函数中加入了正则项,用于控制模型的复杂度,正则项里面包含了树的叶子节点的个数和每棵树叶子节点上面输出分数的L2模平方,降低了模型的方差,防止过拟合。
- 树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以XGBoost采用了一种近似的算法。大致的思想是根据百分位法列举几个可能成为分割点的候选者,然后从候选者中根据上面求分割点的公式计算找出最佳的分割点
- Shrinkage(缩减),相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。(当然普通的GBDT实现也有学习速率)
- 特征列排序后以块的形式存储在内存中,在迭代中可以重复使用;虽然boosting算法迭代必须串行,但是在处理每个特征列时可以做到并行
- 列抽样(column subsampling):XGBoost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是XGBoost异于传统GBDT的一个特性
- 除此之外,XGBoost还考虑了当数据量比较大,内存不够时怎么有效的使用磁盘,主要是结合多线程、数据压缩、分片的方法,尽可能的提高算法效率