前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入机器学习系列之:支持向量机

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

作者头像
数据猿
发布2018-12-24 15:45:05
7330
发布2018-12-24 15:45:05
举报
文章被收录于专栏:数据猿

导读

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档