svm随机次梯度下降算法-pegasos
来源:互联网 发布:vmware mac os x 优化 编辑:程序博客网 时间:2024/05/16 07:34
基本思想
使用随机梯度下降直接解SVM的原始问题。
摘要
本文研究和分析了基于随机梯度下降的SVM优化算法,简单且高效。(Ο是渐进上界,Ω是渐进下界)本文证明为获得一定准确率精度
引言
SVM是一种高效流行的分类器、SVM是一种典型的受限二次规划问题。然而,基于基本形式,SVM实际上是一个附带惩罚因子的无限制经验损失最小化问题。
定义目标函数为
其中:
使用随机梯度下降解目标函数的算法称作pegasos。在每一次的迭代中,随机挑选一个训练样本计算目标函数的梯度,然后在在相反的方向走一个预订好的步长。根据上述算法,整体算法的运行时间满足
- Interior Point (IP) methods:可以使用拟牛顿法对目标函数进行优化,但算法因为使用了如海森矩阵等便需
m2 的空间复杂度, 其中m是样本数。 - Decomposition methods: 使用类似SMO的算法解SVM的对偶优化问题,但是这会导致相对比较慢的收敛速率。
- Primal optimization:SVM大部分的求解方法都在解决对偶问题,尤其是在非线性核问题上。因为,即使SVM使用了非线性核,我们也可以将
ω 替换为∑αiyixi ,从而将解决原目标函数的受约束优化问题转化为没有约束条件的优化问题。其实,直接解决原问题也有人研究过,比如使用smooth loss functions代替 hinge loss,这样将问题变成一个平滑的不受限制的优化问题,然后使用梯度下降和牛顿法来求解。本文采取了类似方法,针对hinge loss的不可微性,直接使用sub-gradients(子梯度)代替梯度。 - 尽管随机梯度下降算法是最差的优化算法,但是可以产生最好的泛化性能。
- 有一种基于随机子梯度下降的算法和pegasos比较类似,但是其非常重要的一部分是学习步长的设置,收敛速率最坏的上界是
Ω(1(λϵ)2) 。欧几里得距离的平方可以被优化到0,但是收敛速率决定于步长参数的设置。pegasos调参简单。 - online methods:在线学习算法一般与随机梯度下降算法结合,如每一次迭代只使用一个样本。在线学习算法被提出为SVM的快速替代方案。在线算法可以使用在线到批量转换方案来获得具有低泛化误差的预测器,但是这种方法不一定能够解决原问题的
ϵ 精度要求,并且它们的性能通常低于直接批量优化器。如上所述,Pegasos共享了在线学习算法的简单性和速度,但它保证融合到最优的SVM解决方案。
pegasos 算法
基于上述提到的方法,pegasos在原始目标函数上通过精致挑选的步长使用随机梯度下降求解。将在本部分详细描述pegasos的过程并提供伪代码。同时也阐述基本算法的一系列变种,并讨论几个实际问题。
基本算法
随机选取一个训练样本
得到近似的目标函数:
计算次梯度得:
其中,
伪代码如下:
输入数据集S,正则化因子
进一步推倒得:
如果指示函数为真,则:
如果为假,则
迭代T后,输出
类似的mini-batch pegasos算法伪代码如下:
稀疏特征
当训练集样本是稀疏的时候,可以把
核函数解决非线性分类问题
SVM的主要优势是可以使用核方法直接在特征空间分类。可以如此做关键是表示定理( Representer Theorem ),根据表示定理可以通过训练数据的线性组合求得原目标函数的最优解。即在训练SVM的时候可以不直接使用训练数据,通过指定核操作的训练数据的内积结果训练。也就是说,不考虑训练样本x本身的线性函数的预测变量,我们考虑训练样本的隐式映射φ(x)后的线性函数的预测变量。
推导过程如下:
如求解线性不可分的
其中:
为使用核函数将内积
设:
则迭代式重写为:
根据迭代式的递推可得:
设
则:
带回到
根据输出
映射φ(·)并不明确指定,而是训练样本通过映射φ(·)之后通过核计算K(x,x’)=φ(x),φ(x’)得到内积结果。本文中,无需将目标函数转换为对偶函数,直接最小化原始问题,同时仍然使用核方法。Pegasos算法可以仅使用内核来实现求解,而不需要直接访问特征向量
因为需要遍历m个样本,故时间复杂度为
结合偏置项b
当正负样本比例不均衡的时候,偏置项比较重要。
在算法的外部加一层找寻b的外循环,即对于不同的b值,均使用pegasos求解出各自的
因为b是固定值,在内层循环求解时,仍然可以使用pegasos算法,且这种方法的时间复杂度仍然保持在
实验比对
pegasos算法与SDCA,SVM_LIGHT,LASVM比较
线性核
第一行是原目标函数的收敛曲线,第二行是分类误差率。横坐标是运行时间。
高斯核(非线性核)
第一行是原目标函数的收敛曲线,第二行是log归约后的目标函数收敛曲线,第三行是分类误差率。横坐标是运行时间。
python实现:
https://github.com/changtingwai/pegasos
- svm随机次梯度下降算法-pegasos
- 随机梯度下降算法
- 随机梯度下降算法
- 随机梯度下降算法
- 随机梯度下降算法
- 梯度下降算法与随机梯度下降
- 随机梯度下降求解svm(MATLAB)
- 随机梯度下降算法 matlab
- 随机梯度下降算法学习心得
- 梯度下降算法、随机梯度下降算法scala实现
- 神经网络算法学习---梯度下降和随机梯度下降
- 梯度算法之批量梯度下降,随机梯度下降和小批量梯度下降
- 并行随机梯度下降算法 PSGD
- 感知机2 -- 随机梯度下降算法
- SparkMLlib---SGD随机梯度下降算法
- spark mlib中的随机梯度下降算法
- 随机梯度下降法求解SVM(附matlab代码)
- 【stanford】梯度、梯度下降,随机梯度下降
- FZU2088-最长队名
- POJ 2318 叉积 + 枚举
- 大整数模拟加(字符串)
- RESTful服务最佳实践——(十一)
- 关于安卓导航栏
- svm随机次梯度下降算法-pegasos
- 最大公约数和真分数
- 异步任务神器 Celery
- 从源码角度分析java 的 sleep()和wait()究竟有什么区别?
- NoSQL 发展,数据库发展MySQL瓶颈
- Linux命令之vi(vim类似)
- FZU2089-数字游戏
- 记录几个非常实用的js函数
- Property or field 'siteUrl' cannot be found on object of type 'xx'