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)在高维和数据集变量之间多 ...
随机推荐
- ADO.NET笔记——使用连接池
相关知识: 连接池的意义: 应用程序往往涉及大量的,并发的数据访问操作 数据库服务器能够同时维系的连接数量非常有限.如果某个数据库访问操作不及时关闭连接,就会减少其他调用对数据库访问的机会.因此,一般 ...
- sql server 中 bigint 和 datetime 性能比较
-- 创建表 create table Test_tbl ( ID varchar(40) primary key nonclustered, IntCol int, DateCol datetime ...
- node-mongo-native1.3.19连接mongo的最优方法
最近需要在node下连接mongo,尝试了很多方法,本文简要总结一下 选择Driver 首先,基本上有4个常见的driver供选择 1.官方的是node-mongo-native 2.基于node-m ...
- 转:const“变量”、define的常量和static 变量
首先讲C编译器的内存分配: 代码区 数据区 用户区=线程栈+堆 其中的数据区存储:常量(define)+静态变量(static)+符号集(const)+全局变量 然后讲一下编译的大致顺序: 注释- ...
- 自动设置iframe大小的jQuery代码
自动设置iframe的宽度,如何用jquery来实现呢? 代码: <iframe src="main_folder.aspx" class="global_main ...
- [转]Linux中find常见用法示例
Linux中find常见用法示例[转]·find path -option [ -print ] [ -exec -ok command ] {} \;find命令的参 ...
- STM32 ucosii 串口接收数据 遇到的问题及解决思路
写一个程序,用到了ucos ii ,串口在中断中接收数据(一包数据 8个字节 包含: 1byte包头 5byte数据 1byte校验和 1byte 包尾 ) ,数据由上位机每隔500ms发送一次,在串 ...
- platform
作者yuanlulu httpblogcsdnnetyuanlulu版权没有但是转载请保留此段声明 第1章platform驱动管理机制 platform_device 数据结构 注册流程 platfo ...
- advance 模板 怎么生成module
advance 模板 怎么生成module namespace写什么如果是前台呢就是 frontend\modules\modulename\Module@我叫红领巾 module id有什么用bak ...
- 野指针及c++指针使用注意点
避免野指针的产生 “野指针”的成因主要有: 1)指针变量没有被初始化.任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气.所以,指针变量在创建的同时应当被初始化,要么将指 ...