<转>Spark 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值