转载lr spark细节
来源:互联网 发布:什么理财软件安全可靠 编辑:程序博客网 时间:2024/05/29 04:39
原创文章,转载请注明: 转载自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
- 转载lr spark细节
- LR判断垃圾邮件spark代码
- 转载:qsort细节用法
- LR监控指标数据分析(转载)
- LR脚本的调试(转载)
- lr常用函数(转载,防丢失)
- LR - 细节解析,为什么LR脚本会去访问“脚本中不存在的“资源?
- LR
- LR
- LR
- LR
- Lr
- Lr
- Spark Shuffle实现 (转载)
- Spark常见问题汇总 (转载)
- 编程中的细节--指针(转载)
- Linux服务器启动细节[转载]
- 转载:String的一些细节
- Block全面分析
- 自动化测试之unittest
- EXTJS4.x以上的版本中没有dolayout这个方法
- 人脸识别 iOS开发
- 位运算
- 转载lr spark细节
- [代码片段] Android实用代码片段整合
- Apple Pay支付分享
- Python 字符编码判断
- linux centos 64位置mysql源码包安装
- InfoQ专栏 Git历险记(四)——索引与提交的幕后故事
- 你晓得吗?大多数企业根本没有做到 DevOps!
- 转lr
- neuq oj 1056: 谭浩强C语言(第三版)习题7.1 C++