Spark Mllib逻辑回归算法分析
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3816289.html
本文以spark 1.0.0版本MLlib算法为准进行分析
一、代码结构
逻辑回归代码主要包含三个部分
1、classfication:逻辑回归分类器
2、optimization:优化方法,包含了随机梯度、LBFGS两种算法
3、evaluation:算法效果评估计算
二、逻辑回归分类器
1、LogisticRegressionModel类
(1) 根据训练数据集得到的weights来预测新的数据点的分类
(2)预测新数据分类
采用
其中w为权重向量weightMatrix,X表示预测数据dataMatrix,a表示intercept,intercept默认为0.0。
threshold变量用来控制分类的阈值,默认值为0.5。表示如果预测值<threshold则为分类0.0,否则为1.0
如果threshold设置为空,这会输出实际值
2、LogisticRegressionWithSGD类
此类主要接收外部数据集、算法参数等输入进行训练得到一个逻辑回归模型LogisticRegressionModel
接收的输入参数包括:
input:输入数据集合,分类标签lable只能是1.0和0.0两种,feature为double类型
numIterations:迭代次数,默认为100
stepSize:迭代步伐大小,默认为1.0
miniBatchFraction:每次迭代参与计算的样本比例,默认为1.0
initialWeights:weight向量初始值,默认为0向量
regParam:regularization正则化控制参数,默认值为0.0
在LogisticRegressionWithSGD中可以看出它使用了GradientDescent(梯度下降)来优化weight参数的
3、GeneralizedLinearModel类
LogisticRegressionWithSGD中的run方法会调用GeneralizedLinearModel中的run方法来训练训练数据
在run方法中最关键的就是optimize方法,正是通过它来求得weightMatrix的最优解
三、优化方法
逻辑回归采用了梯度下降算法来寻找weight的最优解
逻辑回归cost function
其中:
对J(Θ)求导数后得到梯度为:
1、GradientDescent类
负责梯度下降算法的执行,分为Gradient梯度计算与weight update两个步骤来计算
2、Gradient类
负责算法梯度计算,包含了LogisticGradient、LeastSquaresGradient、HingeGradient三种梯度计算实现,本文主要介绍LogisticGradient的实现:
其中data为公式中的x,label为公式中的y,weights为公式中的Θ
gradient就是对J(Θ)求导的计算结果, loss为J(Θ)的计算结果
3、Updater类
负责weight的迭代更新计算,包含了SimpleUpdater、L1Updater、SquaredL2Updater三种更新策略
(1)SimpleUpdater
没有使用regularization,weights更新规则为:
其中:iter表示这是执行的第几次迭代
(2)L1Updater
使用了L1 regularization(R(w) = ||w||),利用soft-thresholding方法求解,weight更新规则为:
signum是符号函数,它的取值如下:
(3)SquaredL2Updater
使用了L2 regularization(R(w) = 1/2 ||w||^2),weights更新规则为:
注意:Mllib中的逻辑回归算法默认使用的SimpleUpdater
四、算法效果评估
BinaryClassificationMetrics类中包含了多种算法算法效果评估计算方法:
| 相关 | 不相关 | |
| 检索到 | true positives (tp) | false positives(fp) |
| 未检索到 | false negatives(fn) | true negatives (tn) |
1、ROC(receiver operating characteristic接收者操作特征)
调整分类器threshold取值,以FPR为横坐标,TPR为纵坐标做ROC曲线
Area Under roc Curve(AUC):处于ROC curve下方的那部分面积的大小
通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的性能
2、precision-recall(准确率-召回率)
准确率和召回率是互相影响的,理想情况下肯定是做到两者都高,
但是一般情况下准确率高、召回率就低,召回率低、准确率高,
当然如果两者都低,那是什么地方出问题了
3、F-Measure
在precision与recall都要求高的情况下,可以用F来衡量
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3816289.html
Spark Mllib逻辑回归算法分析的更多相关文章
- Spark ML逻辑回归
import org.apache.log4j.{Level, Logger} import org.apache.spark.ml.classification.LogisticRegression ...
- Spark LogisticRegression 逻辑回归之建模
导入包 import org.apache.spark.sql.SparkSession import org.apache.spark.sql.Dataset import org.apache.s ...
- Spark 多项式逻辑回归__多分类
package Spark_MLlib import org.apache.spark.ml.Pipeline import org.apache.spark.ml.classification.{B ...
- Spark 多项式逻辑回归__二分类
package Spark_MLlib import org.apache.spark.ml.Pipeline import org.apache.spark.ml.classification.{L ...
- Spark 机器学习------逻辑回归
package Spark_MLlib import javassist.bytecode.SignatureAttribute.ArrayType import org.apache.spark.s ...
- Spark LR逻辑回归中RDD转DF中VectorUDT设置
System.setProperty("hadoop.home.dir", "C:\\hadoop-2.7.2"); val spark = SparkSess ...
- Spark LogisticRegression 逻辑回归之简介
LogisticRegression简介
- 《Spark MLlib机器学习实践》内容简介、目录
http://product.dangdang.com/23829918.html Spark作为新兴的.应用范围最为广泛的大数据处理开源框架引起了广泛的关注,它吸引了大量程序设计和开发人员进行相 ...
- Spark MLlib回归算法------线性回归、逻辑回归、SVM和ALS
Spark MLlib回归算法------线性回归.逻辑回归.SVM和ALS 1.线性回归: (1)模型的建立: 回归正则化方法(Lasso,Ridge和ElasticNet)在高维和数据集变量之间多 ...
随机推荐
- 【Sharing】如何成为一名黑客
[声明]此文为转载,只为收藏. 从小到大听说了无数关于“电脑黑客”的故事,比如XXX入侵美国五角大楼,再比如前几年的“熊猫烧香”病毒,这些故事的主角都被我们的媒体称之为“黑客”.其实这些人,更大程度上 ...
- MongoDB五种树形结构表示法
MongoDB五种树形结构表示法 第一种:父链接结构 db.categories.insert( { _id: "MongoDB", parent: "Databases ...
- javascript 创建对象及对象原型链属性介绍
我们知道javascript里定义一个普通对象的方法,如: let obj = {}; obj.num = 1; obj.string = 'string'; obj.func = function( ...
- php ftp文件上传函数--新手入门参考
在 php编程中,用ftp上传文件比较多见,这里分享个简单入门型的ftp上传实例. <?php /** * ftp上传文件 * 学习ftp函数的用法 */ // 定义变量 $local_file ...
- 修改Win7远程桌面端口
Win7与XP不同,在开启远程桌面修改端口后是无法直接访问的,原因是还未修改远程桌面在防火墙入站规则中的端口号. 修改远程桌面端口: [HKEY_LOCAL_MACHINE/SYSTEM/Curren ...
- 为Eclipse设置背景色
1:打开Eclipse,在菜单栏找到Help—>Install new software.. 2:在打开的Work with中输入: Update Site - http://eclipse-c ...
- apache+tomcat整合
一 .Apache与Tomcat的比较 apache支持静态页面,tomcat支持动态的,比如servlet等. 一般使用apache+tomcat的话,apache只是作为一个转发,对jsp的处理是 ...
- c#使用easyhook库进行API钩取
目标:使calc程序输入的数自动加1 (当别人使用时,总会得不到正确的结果,哈哈) 编写注入程序 ————————————————————————————————— class Program中的方法 ...
- linux文件目录下各文件简介
/bin:存放最常用命令: /boot:启动Linux的核心文件: /dev:设备文件: /etc:存放各种配置文件: /home:用户主目录: /lib:系统最基本的动态链接共享库: /mnt:一般 ...
- java抽象类和接口详解
接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念 ...