- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Spark-MLlib-SVM源码实现分析
Spark-MLlib-SVM源码实现分析 注:MLlib中的SVM只实现了线性二分类。没有非线性(核函数),也没有多分类和回归。线性二分类的优化过程类似于逻辑回归。以下从三个方面进行分析:(一)SVM的目标函数、损失函数和最优化方法。(二)从MLlib实现的源码分析模型创建以及优化的过程。(三)参考ML中NaiveBayes的实现,探索SVM-Pipeline的实现思路。 一、SVM 公式 1.1 目标函数 目标函数: y = wx (注:w是超平面的法向量) 1.2 损失函数 损失函数:HingeGradient 公式: avg( max(0, 1 - (2 y - 1) f_w(x))) ) (注:0 1分类label,在svm中要转为 -1,1 - (2y -1)) 1.3 优化函数(随机梯度下降) 梯度: -(2y - 1) * x 正则项: L2 = (1/2) * w^2 梯度更新方法: weight = weight - lambda (gradient + regParam * weight) 二、MLlib源码实现分析?下图是SVMWithSGD的类图,SVMWithSGD继承了GeneralizdLinearAlgorithm。run()方法会调用optimitor:GradientDescent(gradient, updater)优化得到模型的权值参数weights,并调用createModel(weights)方法new一个SVMModel,返回SVMModel。 2.1 创建SVM模型入口 2.1.1 SVMWithSGD 伴生对象(单例对象)?org.apache.spark.mllib.classification.SVMWithSGD?线性SVM伴生对象是SVMWithSGD,是建立SVM分类模型的入口。它定义了训练SVM分类模型的train方法。 2.1.2 GeneralizdLinearAlgorithm的run执行模型训练?org.apache.spark.mllib.regression.GeneralizdLinearAlgorithm 2.2 SVMWithSGD 类设置损失函数-最优化方法?org.apache.spark.mllib.classification.SVMWithSGD?分别创建 梯度下降方法HingeGradient 和 L2正则化权重更新方法SquaredL2Updater,两者封装在GradientDescent中,作为优化器optimizer。 2.2.1 HingeGradient?org.apache.spark.mllib.optimization.HingeGradient?损失函数:max(0, 1 - (2 y - 1) f_w(x)))?梯度:-(2y - 1) * x 2.2.2 SquaredL2Updater?org.apache.spark.mllib.optimization.SquaredL2Updater?梯度更新方法: weight = weight - lambda (gradient + regParam * weight) 2.3 优化过程的入口:GradientDescent org.apache.spark.mllib.optimization.GradientDescent 迭代优化的过程如下: while( 未收敛 并且 小于迭代次数 ) {?计算本次迭代抽样样本的梯度和,以及损失和(调用HingeGradient)?记录本次迭代的平均误差(loss)?更新权重(调用SquaredL2Updater)?判断是否收敛 } 三、Pipeline实现探索?Spark MLlib的Pipeline,是指将多个机器学习的算法串联到一个工作链中,依次执行各种算法;其出现旨在向用户提供基于 DataFrame 之上的更加高层次的 API 库,以便构建复杂的机器学习工作流式应用。?一个 Pipeline 在结构上会包含一个或多个 PipelineStage,每一个 PipelineStage 都会完成一个任务,如数据集处理转化,模型训练,参数设置或数据预测等。 3.1 参考NaiveBayes 3.1.1 R-pkg-R-mllib.R?mllib.R中将NaiveBayesWrapper封装为sparkR中的naiveBayes方法 3.1.2 NaiveBayesWrapper生成一个Pipeline?org.apache.spark.ml.r.NaiveBayesWrapper 3.1.3 NaiveBayes?org.apache.spark.ml.classification.NaiveBayes?将dataset
文档评论(0)