mllib逻辑回归 spark_Spark Mllib中逻辑回归
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中逻辑回归相关推荐
- mllib逻辑回归 spark_Spark MLlib学习——分类和回归
本章节介绍了分类和回归的算法.它还包括讨论特定类别的算法部分,如:线性方法,树和集成. 下面是整个API Doc中的内容框架,这里不会每个都详细介绍,主要会把用到的介绍出来,后续用到的再陆续添加.(下 ...
- mllib逻辑回归 spark_Spark mllib 逻辑回归
逻辑回归 逻辑回归其实是一个分类算法而不是回归算法.通常是利用已知的自变量来预测一个离散型因变量的值(像二进制值0/1,是/否,真/假).简单来说,它就是通过拟合一个逻辑函数(logit fuctio ...
- mllib调参 spark_Spark MLlib协同过滤算法
算法说明 协同过滤(Collaborative Filtering,简称CF,WIKI上的定义是:简单来说是利用某个兴趣相投.拥有共同经验之群体的喜好来推荐感兴趣的资讯给使用者,个人透过合作的机制给予 ...
- Spark MLlib回归算法------线性回归、逻辑回归、SVM和ALS
Spark MLlib回归算法------线性回归.逻辑回归.SVM和ALS 1.线性回归: (1)模型的建立: 回归正则化方法(Lasso,Ridge和ElasticNet)在高维和数据集变量之间多 ...
- R语言使用broom包将回归模型(线性回归、逻辑回归、比例风险回归)的结果整理成dataframe并导出到excel等文件中:基于mtcars和colon数据集
R语言使用broom包将回归模型(线性回归.逻辑回归.比例风险回归)的结果整理成dataframe并导出到excel等文件中:基于mtcars和colon数据集 目录
- ai逻辑回归_人工智能中的逻辑是什么?
ai逻辑回归 人工智能逻辑 (Logic in Artificial Intelligence) Logic, as per the definition of the Oxford dictiona ...
- scikit-learn 中逻辑斯蒂回归的使用
scikit-learn 中逻辑斯蒂回归的使用 1 二分类 2 多分类 逻辑斯蒂回归虽然有"回归"两个字,实际上它是一个分类模型,它可以输出属于每一个类别的概率 1 二分类 imp ...
- 回归、线性回归和逻辑回归【逻辑回归部分待完成】
一.回归 "回归"这个词很有误导性,在陈希孺的<概率论与数理统计>中对这个词的来源有过解释.是个外国人,在做数据分析的时候,发现将数据画出来后,不管大的小的数据都会有一 ...
- 逻辑回归模型 python_机器学习-逻辑回归分析(Python)
编辑推荐: 本文首先介绍这两种方法的区别和联系,然后对分类方法中的逻辑回归进行较详细的说明(包括其基本原理及评估指标),最后结合案例介绍如何利用Python进行逻辑回归分析. 本文来自于csdn,由火 ...
最新文章
- css中的垂直居中方法
- 【机器学习算法专题(蓄力计划)】一、机器学习简史和常用算法的梳理
- E104-BT02蓝牙无线传输模块物联网芯片的智能控制、采集
- 0924html小测答案
- Pandas系列(四)数据统计函数
- MacBook安装telnet工具和使用
- Springboot gzip解压http数据流
- cocos creator 微信小游戏 世界排行榜制作教程(云数据库)
- 机器视觉是什么,未来前景怎么样?
- AI代替30%班主任工作 尚德机构督学机器人上线
- 前端 地图增加边框线_基于百度地图开发——在地图上框出市、区的边界线
- dede mysql x_mysql 插入数据时中文变x87xE7xA7x91xE7x82这种?
- tensorflow2.4使用GooleNet实现识别植物花朵图像项目
- LCD屏幕,IPS屏幕,TFT屏幕,SLCD屏幕和AMOLED手机屏幕介
- Python绘制3D立体花
- R语言入门——不掉包实现FNN(单层感知机)
- wait和notify方法
- 判断是否是平衡二叉树
- itunes安装苹果测试包总是“正在安装”
- 对象实例数据和对象类型数据
热门文章
- 机器学习与高维信息检索 - Note 4 - 主成分分析及其现代解释(Principal Component Analysis, PCA)及相关实例
- 个人建议:设置Alt+S快捷键来控制VSCode自动保存切换功能
- 在Ubuntu 14.04 64bit上安装StarUML 2.5版本
- 在Ubuntu 14.04 64bit下用Python搭建数据科学研究环境
- Go 分布式学习利器(16) -- go中可复用的package构建
- C++智能指针:unique_ptr详解
- 包装类接受string 会自动将数字类型string转换成对应得包装类型
- Vue 框架-02-事件:点击, 双击事件,鼠标移上事件
- 数据结构(十)栈的作用--大数的加法运算
- 4GL之Non-SCROLLING CURSOR