写在最前:
- 之前在新浪开个博客写东西,总有些不方便,后来看了优快云,内置Markdown,写起来突感一见如故,十分感动。
- 工作中由于经常需要做一些可视化和算法类的研究,所以开个优快云总结和记录一下。
下面主要讲的是近几个月来的一些研究成果,通过构建增强式的快速迭代logistics判别分类器,就是通过组合随机梯度(SGD),提升算法(adaboost),logistics模型。
具体地:通过利用SGD估计每个logistics弱分类器参数,同时基于每个弱分类器,通过adaboost更新样本的权重以及计算每个分类器权重,最后组合多个弱分类器,构成一个强分类输出判别。
理论概述
1. 随机梯度算法概述
梯度算法在机器学习常被用于参数的迭代估计,当维度与样本数大幅上升时,其表现出的估计性能与速度也十分可观。
假设如下方程 hθ(x) :
hθ(x)=θ0+θ1x1+θ2x2+⋅⋅⋅
其中 θi(0⩽i⩽n,n为样本维度) 为变量 xi 对应参数,为简化上述式子,通过将 x0=1 加入 hθ(x) ,可以得到:
hθ(x)=∑i=onθixi=θTX (1)
其中 θT和X 为系数和变量对应向量表达式。
再定义如下损失函数 J(θ) :
J(θ)=12∑j=1m(hθ(x(j))−y(j))2 (2)
其中 hθ(x(j)) 为对应第j个样本 x(j) 代入 hθ(x) 得到的结果,m为样本个数,需要注意的是,梯度算法一般用于有监督或半监督式机器学习,而常量 y(j) 的存在是为了训练样本得到更加准确的 θ 参数。另外,系数0.5是为了求导方便而乘上的,对结果并无影响。
据此,为最小化上述 J(θ) 损失函数,我们通过 θ 自适迭代,达到一个理想的估计值,使得:
J(θ)⩽ϵ
其中 ϵ 为误差率,为方便理解,我们从Batch gradient descent(批梯度下降说起),有如下式子:
θi=θi−α∂∂θiJ(θ) (3)
其中 α 为梯度步长,也称为学习因子,其大小决定了梯度下降的速度,越大的步长则学习速度也越快,但同时振荡往返也会加剧,有时反而使得速度变慢,同时若梯度步长太小,也会使得速度变慢,而容易陷入局部极小。
结合(2)式和(3)式,假设只有一个样本,则可以得到:
θi =θi−α∂∂θiJ(θ)=θi−α∂∂θiJ(12(hθ(x)−y)2)=θi−α(2⋅12(hθ(x)−y)⋅∂∂θi(hθ(x)−y))=θi−α(hθ(x)−y)xi
其中i表示样本维度i,当样本数为m时,则:
θi=θi−α∂∂θi=θi−α(∑j=1m(hθ(x(j))−y(j)))⋅∂∂θi(∑j=1m(hθ(x(j))−y(j)))=θi−α(∑j=1m(hθ(x(j))−y(j)))⋅(∑j=1mx(j)i)
其中j表示样本j。
可以看出,每次迭代都要遍历m个样本,当样本数量太大时,其复杂度 O(m) 也成线性上升,这在一定程度上制约了迭代的速度,所以,基于此,Stochastic gradient desent(随机梯度)应运而生,其在一定程度降低了批梯度的遍历量,复杂度从 O(m) 降为 O(1) ,但同时也带来了其他问题–迭代次数和局部最小值,由于随机性的存在,随机梯度将在随机样本点的周围四处扩散,并最终步入“谷底”,但是过程会稍微曲则,且改“谷底”可能是局部而不是全局。
其表达式如下:
θi=θi−α(hθ(x(j))−y(j))x(j)i (5)
需要说明的是,当用于判别分类算法中时,其中 x(j)i 表示误判点的第i维。
其中如上文所述,由于随机路径梯度下降,所以容易陷入局部最优,一个较好的解决办法是赋予多次不同的初始值,同时结合判别误差率作为跳出条件。
为更形象理解批梯度和随机梯度,下图3、4为批梯度下降路径和随机梯度下降路径:
可以看出,批梯度下降在每次迭代时都会朝最优方向前进,而随机梯度通常经过多次“峰回路转”最终达到“谷底”,所以随机梯度算法对初始值要求比较高,通常一个好的初始值能尽最大程度优化过程,而对于初始值取法将在下文实证部分进一步说明。
2.logistic判别算法概述
为更好阐述logistic算法细节,有必要先引入OLS模型(最小二乘回归法),假设二分类回归方程 y :
其中 e 为残差项,其分布满足均值为0,且相互之间相互独立,
y={
1,0,对应类别为是对应类别为非
由于 y 的取值只有0和1,则其均值为: