1相关参数设置

<1> setMaxIter():设置最大迭代次数

<2> setRegParam(): 设置正则项的参数,控制损失函数与惩罚项的比例,防止整个训练过程过拟合,默认为0

<3> setElasticNetParam():使用L1范数还是L2范数

setElasticNetParam=0.0 为L2正则化;

setElasticNetParam=1.0 为L1正则化;

setElasticNetParam=(0.0,1.0) 为L1,L2组合

<4> setFeaturesCol():指定特征列的列名,传入Array类型,默认为features

<5>setLabelCol():指定标签列的列名,传入String类型,默认为label

<6>setPredictionCol():指定预测列的列名,默认为prediction

<7>setFitIntercept(value:Boolean):是否需要偏置,默认为true(即是否需要y=wx+b中的b)

<8>setStandardization(value:Boolean):模型训练时,是否对各特征值进行标准化处理,默认为true

<9>fit:基于训练街训练出模型

<10>transform:基于训练出的模型对测试集进行预测

<11>setTol(value:Double):设置迭代的收敛公差。值越小准确性越高但是迭代成本增加。默认值为1E-6。(即损失函数)

<12>setWeightCol(value:String):设置某特征列的权重值,如果不设置或者为空,默认所有实例的权重为1。

上面与线性回归一致,还有一些特殊的:

<1> setFamily:值为"auto",根据类的数量自动选择系列,如果numClasses=1或者numClasses=2,设置为二项式,否则设置为多项式;

值为"binomial",为二元逻辑回归;

值为"multinomial",为多元逻辑回归

<2> setProbabilityCol:设置预测概率值的列名,默认为probability(即每个类别预测的概率值)

<3> setRawPredictionCol:指定原始预测列名,默认为rawPrediction

<4>setThreshold(value:Double):二元类阈值[0-1],默认为0.5,如果预测值大于0.5则为1,否则为0

<5>setThresholds(value:Array[Double]):多元分类阈值[0-1],默认为0.5

image.png

2 Demo

2.1

val spark = SparkSession.builder()

.master("local[2]")

.appName("LinearRegression")

.getOrCreate()

val training = spark.read.format("libsvm").load("src/main/resources/sample_libsvm_data.txt")

training.show(20,false)

val lr=new LogisticRegression().setLabelCol("label")

.setFeaturesCol("features")

.setRegParam(0.2)

.setElasticNetParam(0.8)

.setMaxIter(6)

val model=lr.fit(training)

val test = spark.createDataFrame(Seq(

(1.0, Vectors.sparse(692, Array(10, 20, 30), Array(-1.0, 1.5, 1.3))),

(0.0, Vectors.sparse(692, Array(45, 175, 500), Array(-1.0, 1.5, 1.3))),

(1.0, Vectors.sparse(692, Array(100, 200, 300), Array(-1.0, 1.5, 1.3))))).toDF("label", "features")

test.show(false)

model.transform(test).show(false)

结果显示:

image.png

其中probability中第1位代表预测为0的概率,第2位代表预测为1的概率

2.2

显示每次迭代的时候的目标值,即损失值+正则项

val trainingSummary=model.summary

val objectiveHistory=trainingSummary.objectiveHistory

println("objectiveHistory:")

objectiveHistory.foreach(loss=>println(loss))

image.png

这里有一个疑问:最终的迭代次数总是会比设置的最大迭代次数,多1次;

设置的最大迭代次数为6,最后迭代次数为7

2.3 打印评估指标

val binarySummary=trainingSummary.asInstanceOf[BinaryLogisticRegressionSummary]

//评估指标

//roc值

val roc=binarySummary.roc

roc.show(false)

val AUC=binarySummary.areaUnderROC

println(s"areaUnderRoc:${AUC}")

roc的值:

image.png

AUC的值:

image.png

2.4 设置模型阈值

F1值就是precision和recall的调和均值

//获取不同的阈值对应的不同的F1值

val fMeasure=binarySummary.fMeasureByThreshold

fMeasure.show(false)

val df=fMeasure.withColumnRenamed("F-Measure","F1")

//获得最大的F1值

val maxFMeasure=df.selectExpr("max(F1)").head().getDouble(0)

println(maxFMeasure)

//找出最大F1值对应的阈值

val bestThreshold=df.where(s"F1=$maxFMeasure").select("threshold").head().getDouble(0)

//并将模型的threshold设置为选择出来的最佳分类阈值

println(s"bestThreshold:$bestThreshold")

model.setThreshold(bestThreshold)

结果:

这里的F-Measure必须得重命名一下,不然一致会报错。(好像是中间'-'的原因)

image.png

最大的F1值:1.0

对应阈值:

image.png

mllib逻辑回归 spark_Spark Mllib中逻辑回归相关推荐

  1. mllib逻辑回归 spark_Spark MLlib学习——分类和回归

    本章节介绍了分类和回归的算法.它还包括讨论特定类别的算法部分,如:线性方法,树和集成. 下面是整个API Doc中的内容框架,这里不会每个都详细介绍,主要会把用到的介绍出来,后续用到的再陆续添加.(下 ...

  2. mllib逻辑回归 spark_Spark mllib 逻辑回归

    逻辑回归 逻辑回归其实是一个分类算法而不是回归算法.通常是利用已知的自变量来预测一个离散型因变量的值(像二进制值0/1,是/否,真/假).简单来说,它就是通过拟合一个逻辑函数(logit fuctio ...

  3. mllib调参 spark_Spark MLlib协同过滤算法

    算法说明 协同过滤(Collaborative Filtering,简称CF,WIKI上的定义是:简单来说是利用某个兴趣相投.拥有共同经验之群体的喜好来推荐感兴趣的资讯给使用者,个人透过合作的机制给予 ...

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

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

  5. R语言使用broom包将回归模型(线性回归、逻辑回归、比例风险回归)的结果整理成dataframe并导出到excel等文件中:基于mtcars和colon数据集

    R语言使用broom包将回归模型(线性回归.逻辑回归.比例风险回归)的结果整理成dataframe并导出到excel等文件中:基于mtcars和colon数据集 目录

  6. ai逻辑回归_人工智能中的逻辑是什么?

    ai逻辑回归 人工智能逻辑 (Logic in Artificial Intelligence) Logic, as per the definition of the Oxford dictiona ...

  7. scikit-learn 中逻辑斯蒂回归的使用

    scikit-learn 中逻辑斯蒂回归的使用 1 二分类 2 多分类 逻辑斯蒂回归虽然有"回归"两个字,实际上它是一个分类模型,它可以输出属于每一个类别的概率 1 二分类 imp ...

  8. 回归、线性回归和逻辑回归【逻辑回归部分待完成】

    一.回归 "回归"这个词很有误导性,在陈希孺的<概率论与数理统计>中对这个词的来源有过解释.是个外国人,在做数据分析的时候,发现将数据画出来后,不管大的小的数据都会有一 ...

  9. 逻辑回归模型 python_机器学习-逻辑回归分析(Python)

    编辑推荐: 本文首先介绍这两种方法的区别和联系,然后对分类方法中的逻辑回归进行较详细的说明(包括其基本原理及评估指标),最后结合案例介绍如何利用Python进行逻辑回归分析. 本文来自于csdn,由火 ...

最新文章

  1. css中的垂直居中方法
  2. 【机器学习算法专题(蓄力计划)】一、机器学习简史和常用算法的梳理
  3. E104-BT02蓝牙无线传输模块物联网芯片的智能控制、采集
  4. 0924html小测答案
  5. Pandas系列(四)数据统计函数
  6. MacBook安装telnet工具和使用
  7. Springboot gzip解压http数据流
  8. cocos creator 微信小游戏 世界排行榜制作教程(云数据库)
  9. 机器视觉是什么,未来前景怎么样?
  10. AI代替30%班主任工作 尚德机构督学机器人上线
  11. 前端 地图增加边框线_基于百度地图开发——在地图上框出市、区的边界线
  12. dede mysql x_mysql 插入数据时中文变x87xE7xA7x91xE7x82这种?
  13. tensorflow2.4使用GooleNet实现识别植物花朵图像项目
  14. LCD屏幕,IPS屏幕,TFT屏幕,SLCD屏幕和AMOLED手机屏幕介
  15. Python绘制3D立体花
  16. R语言入门——不掉包实现FNN(单层感知机)
  17. wait和notify方法
  18. 判断是否是平衡二叉树
  19. itunes安装苹果测试包总是“正在安装”
  20. 对象实例数据和对象类型数据

热门文章

  1. 机器学习与高维信息检索 - Note 4 - 主成分分析及其现代解释(Principal Component Analysis, PCA)及相关实例
  2. 个人建议:设置Alt+S快捷键来控制VSCode自动保存切换功能
  3. 在Ubuntu 14.04 64bit上安装StarUML 2.5版本
  4. 在Ubuntu 14.04 64bit下用Python搭建数据科学研究环境
  5. Go 分布式学习利器(16) -- go中可复用的package构建
  6. C++智能指针:unique_ptr详解
  7. 包装类接受string 会自动将数字类型string转换成对应得包装类型
  8. Vue 框架-02-事件:点击, 双击事件,鼠标移上事件
  9. 数据结构(十)栈的作用--大数的加法运算
  10. 4GL之Non-SCROLLING CURSOR