原创文章,转载请注明: 转载自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逻辑回归算法分析的更多相关文章

  1. Spark ML逻辑回归

    import org.apache.log4j.{Level, Logger} import org.apache.spark.ml.classification.LogisticRegression ...

  2. Spark LogisticRegression 逻辑回归之建模

    导入包 import org.apache.spark.sql.SparkSession import org.apache.spark.sql.Dataset import org.apache.s ...

  3. Spark 多项式逻辑回归__多分类

    package Spark_MLlib import org.apache.spark.ml.Pipeline import org.apache.spark.ml.classification.{B ...

  4. Spark 多项式逻辑回归__二分类

    package Spark_MLlib import org.apache.spark.ml.Pipeline import org.apache.spark.ml.classification.{L ...

  5. Spark 机器学习------逻辑回归

    package Spark_MLlib import javassist.bytecode.SignatureAttribute.ArrayType import org.apache.spark.s ...

  6. Spark LR逻辑回归中RDD转DF中VectorUDT设置

    System.setProperty("hadoop.home.dir", "C:\\hadoop-2.7.2"); val spark = SparkSess ...

  7. Spark LogisticRegression 逻辑回归之简介

    LogisticRegression简介

  8. 《Spark MLlib机器学习实践》内容简介、目录

      http://product.dangdang.com/23829918.html Spark作为新兴的.应用范围最为广泛的大数据处理开源框架引起了广泛的关注,它吸引了大量程序设计和开发人员进行相 ...

  9. Spark MLlib回归算法------线性回归、逻辑回归、SVM和ALS

    Spark MLlib回归算法------线性回归.逻辑回归.SVM和ALS 1.线性回归: (1)模型的建立: 回归正则化方法(Lasso,Ridge和ElasticNet)在高维和数据集变量之间多 ...

随机推荐

  1. BootStrap简介及应用要点

    BootStrap简介 BootStrap是基于HTML.CSS和JavaScript的框架,使你只需要写简单的代码就可以很快的搭建一个还不错的前端框架,他是后端程序员的福音,使他们只需要专注业务逻辑 ...

  2. 33选6算法:M个数N个为一组,无重复的排列组合

    private void button1_Click(object sender, EventArgs e) { int nCnt = 0; List nNumList = new List(); f ...

  3. SequoiaDB数据库集群部署

    一般在多机环境下部署数据库的集群模式是比较繁琐的,下面我来分享一个如何通过shell脚本的方式简单.方便地部署我们的集群. 首先,我们要给机器配置信任关系,这样我们就无需手动的输入密码来执行ssh和s ...

  4. 跨域名设置cookie或获取cookie

    可以使用jquery里面的ajax中的jsonp的方式来访问就可以了.代码如下: $.ajax({ url: 'your url', data: {'xx' : 'xx', 'xx2' : 'xx2' ...

  5. 婚庆手机APP

    这是一个信息化的时代,即将步入婚姻殿堂的新人们,你们是否希望有这样一款手机软件能伴随你从结婚到婚后一路的历程呢?比如说请帖通过手机客户端来将结婚的时间地点流程共享给您的亲朋好友,将您的婚纱照.随拍.写 ...

  6. [C/C++] 各种C/C++编译器对UTF-8源码文件的兼容性测试(VC、GCC、BCB)

    在不同平台上开发C/C++程序时,为了避免源码文件乱码,得采用UTF-8编码来存储源码文件.但是很多编译器对UTF-8源码文件兼容性不佳,于是我做了一些测试,分析了最佳保存方案. 一.测试程序 为了测 ...

  7. Python开发【第一篇】Python基础之正则表达式补充

    正则表达式 一简介:就其本质而言,正则表达式(或RE)是一种小型的.高度专业化的标称语言,(在Python中)它内嵌在Python中,并通过re模块实现.正则表达式模式被编译成一系列的字节码,然后由用 ...

  8. 从word中提取图片的三种方法

    方法1:使用截图方法来提取并保存图片,如果你安装了QQ并且运行了的话,你可以使用Ctrl+Alt+A来截图,然后在QQ聊天框中按CTRL+V来保存图片,当然你可以在PS新建文档按CTRL+V来粘贴图片 ...

  9. mapreduce 实现矩阵乘法

    import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs ...

  10. ngnix 下配置多域名跳转 配置方法

    自己申请了多个域名,统一使用 http://goipc.cn/ 格式访问网站 server_name goipc.cn ; server_name www.goipc.cn ; server_name ...