深入机器学习系列之:支持向量机

2018 年 12 月 5 日 数据猿

导读

Support Vector Machine 支持向量机是一种机器学习算法。


来源:星环科技丨作者:  智子AI

数据猿官网 | www.datayuan.cn

今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看点丨百度百家丨博客中国丨趣头条丨腾讯云·云+社区

写在前面的:


SVM算法是在深度学习大火之前最受欢迎的机器学习算法,也是广大机器学习爱好者的入门算法。请大家系好安全带,当心老司机一言不合就甩你一脸代码!


1 SVM


1.1 介绍


Support Vector Machine 支持向量机是一种机器学习算法。

所以优化问题可以写成:

这等价于最小化

subject to



Figure1: SVM


事实上,它可以被看作一个带有惩罚项的最小化损失问题。最终,我们希望找到以下问题的最小解



对于这一最优化问题,我们可以使用梯度下降算法来达到最小值。


目标函数为:



所以,迭代 t 时的梯度为:



1.2 SGD


从上一节我们可以看到每次迭代我们都需要所有的数据点来计算梯度。而当数据集变大后,无疑会耗费大量的计算时间。 这就是为什么在大规模梯度下降算法中,我们总会使用 SGD(随机梯度下降)。SDG 在每次迭代时只使用一部分数据而不是全部, 从而降低了计算量。


所以,现在目标函数变成了:

1.3 Pegasos and MLlib implementation


Pegasos 是 SVM 使用梯度下降算法的一种实现。Spark MLlib 也提供了 SVM 的梯度下降实现,于 Pegasos 稍有不同。 主要是梯度的更新速度不同。



2 SGD in Spark


2.1 treeAggregate


Spark 来计算 SGD 的主要优势使可以分布式地计算梯度,然后将它们累加起来。 在 Spark 中,这一任务是通过 RDD 的 treeAggregate 方法来完成的。 Aggregate 可被视为泛化的 Map 和 Reduce 的组合。 treeAggregate 的定义

在此方法中有三个参数,其中前两个对我们更重要:


  • seqOp: 计算每隔 partition 中的子梯度

  • combOp: 将 seqOp 或上层 combOp 的值合并

  • depth: 控制 tree 的深度



Figure 2: tree aggregate


2.2 实现(提示:代码块部分可以左右滑动来完整查看哦~)


SGD 是一个求最优化的算法,许多机器学习算法都可以用 SGD 来求解。所以 Spark 对其做了抽象。

可以看到 SVMWithSGD 继承了 GeneralizedLinearAlgorithm ,并定义 optimizer 来确定如何获得优化解。 而 optimizer 即是 SGD 算法的实现。正如上节所述,线性 SVM 实际上是使用 hinge 损失函数和一个 L2 惩罚项的线性模型,因此这里使用了 HingeGradient 和 SquaredL2Updater 作为 GradientDescent 的参数。

此节中, Code 1展示了 GradientDescent 的主要执行逻辑。 重复执行 numIterations 次以获得最终的 W。


首先, data.sample 通过 miniBatchFraction 取一部分样本. 然后使用 treeAggregate 。 在seqOp 中, gradientSum 会通过 axpy(y, b_x, c._1) 更新,如果 y⟨w,x⟩<1
,即分类错误。 在 combOp 中, gradientSum 通过 c1._1 += c2._1 被集合起来。 当获得gradientSum 后, 我们就可以计算 step 和 gradient 了。 最后, 我们使用 axpy(-step, gradient, weights) 更新 weights 。

Code 1: GradientDescent 代码片断


3 实验和性能


3.1 正确性验证


我们模拟了一些简单的 2D 和 3D 数据来验证正确性。

Figure 3: 2D linear

Figure 4: 3D linear


3.2 收敛速度


我们比较两种实现的收敛速度差异。这里,我们使用 5GB 带有 1000 个特征的模拟数据。使用 4 个 executors 并迭代 100 次。

Figure 5: before aligning Y axis

Figure 6: after aligning Y axis


4 参考文献


1:Zaharia, Matei, et al. "Resilient distributed datasets: A fault-tolerant abstraction for in-memory cluster computing." Proceedings of the 9th USENIX conference on Networked Systems Design and Implementation. USENIX Association, 2012


2:Zaharia, Matei, et al. "Spark: cluster computing with working sets." Proceedings of the 2nd USENIX conference on Hot topics in cloud computing. Vol. 10. 2010


3:Shalev-Shwartz, Shai, et al. "Pegasos: Primal estimated sub-gradient solver for svm." Mathematical programming 127.1 (2011): 3-30



▲向上滑动


采访/报道/投稿

yaphet.zhang@datayuan.cn


商务合作

18600591561(微信)



长按右方二维码

关注我们ˉ►


登录查看更多
2

相关内容

在机器学习中,支持向量机(SVM,也称为支持向量网络)是带有相关学习算法的监督学习模型,该算法分析用于分类和回归分析的数据。支持向量机(SVM)算法是一种流行的机器学习工具,可为分类和回归问题提供解决方案。给定一组训练示例,每个训练示例都标记为属于两个类别中的一个或另一个,则SVM训练算法会构建一个模型,该模型将新示例分配给一个类别或另一个类别,使其成为非概率二进制线性分类器(尽管方法存在诸如Platt缩放的问题,以便在概率分类设置中使用SVM)。SVM模型是将示例表示为空间中的点,并进行了映射,以使各个类别的示例被尽可能宽的明显间隙分开。然后,将新示例映射到相同的空间,并根据它们落入的间隙的侧面来预测属于一个类别。

知识荟萃

精品入门和进阶教程、论文和代码整理等

更多

查看相关VIP内容、论文、资讯等
专知会员服务
139+阅读 · 2020年5月19日
斯坦福2020硬课《分布式算法与优化》
专知会员服务
118+阅读 · 2020年5月6日
Sklearn 与 TensorFlow 机器学习实用指南,385页pdf
专知会员服务
129+阅读 · 2020年3月15日
专知会员服务
159+阅读 · 2020年1月16日
深入机器学习系列之:高斯混合模型
数据猿
8+阅读 · 2019年1月10日
已删除
将门创投
10+阅读 · 2018年5月2日
【机器学习理论】我所理解的 SVM(支持向量机)- 1
机器学习研究会
5+阅读 · 2018年3月16日
免费|机器学习算法Python实现
全球人工智能
5+阅读 · 2018年1月2日
动手写机器学习算法:SVM支持向量机(附代码)
七月在线实验室
12+阅读 · 2017年12月5日
【直观详解】支持向量机SVM
机器学习研究会
18+阅读 · 2017年11月8日
机器学习算法实践:Platt SMO 和遗传算法优化 SVM
Python开发者
7+阅读 · 2017年10月21日
支持向量机分类实战
全球人工智能
4+阅读 · 2017年10月18日
机器学习(16)之支持向量机原理(二)软间隔最大化
机器学习算法与Python学习
6+阅读 · 2017年9月8日
机器学习(15)之支持向量机原理(一)线性支持向量机
机器学习算法与Python学习
6+阅读 · 2017年9月1日
Bivariate Beta LSTM
Arxiv
5+阅读 · 2019年10月7日
Meta-Learning with Implicit Gradients
Arxiv
13+阅读 · 2019年9月10日
One-Shot Federated Learning
Arxiv
9+阅读 · 2019年3月5日
VIP会员
相关VIP内容
相关资讯
深入机器学习系列之:高斯混合模型
数据猿
8+阅读 · 2019年1月10日
已删除
将门创投
10+阅读 · 2018年5月2日
【机器学习理论】我所理解的 SVM(支持向量机)- 1
机器学习研究会
5+阅读 · 2018年3月16日
免费|机器学习算法Python实现
全球人工智能
5+阅读 · 2018年1月2日
动手写机器学习算法:SVM支持向量机(附代码)
七月在线实验室
12+阅读 · 2017年12月5日
【直观详解】支持向量机SVM
机器学习研究会
18+阅读 · 2017年11月8日
机器学习算法实践:Platt SMO 和遗传算法优化 SVM
Python开发者
7+阅读 · 2017年10月21日
支持向量机分类实战
全球人工智能
4+阅读 · 2017年10月18日
机器学习(16)之支持向量机原理(二)软间隔最大化
机器学习算法与Python学习
6+阅读 · 2017年9月8日
机器学习(15)之支持向量机原理(一)线性支持向量机
机器学习算法与Python学习
6+阅读 · 2017年9月1日
Top
微信扫码咨询专知VIP会员