SparkMLlib分类算法之逻辑回归算法
SparkMLlib分类算法之逻辑回归算法
(一),逻辑回归算法的概念(参考网址:http://blog.csdn.net/sinat_33761963/article/details/51693836)
逻辑回归与线性回归类似,但它不属于回归分析家族(主要为二分类),而属于分类家族,差异主要在于变量不同,因此其解法与生成曲线也不尽相同。逻辑回归是无监督学习的一个重要算法,对某些数据与事物的归属(分到哪个类别)及可能性(分到某一类别的概率)进行评估。
(二),SparkMLlib逻辑回归应用
1,数据集的选择:http://www.kaggle.com/c/stumbleupon/data 中的(train.txt和test.txt)
2,数据集描述:关于涉及网页中推荐的页面是短暂(短暂存在,很快就不流行了)还是长久(长时间流行)的分类
3,数据预处理及获取训练集和测试集
- val orig_file=sc.textFile("train_nohead.tsv")
- //println(orig_file.first())
- val data_file=orig_file.map(_.split("\t")).map{
- r =>
- val trimmed =r.map(_.replace("\"",""))
- val lable=trimmed(r.length-1).toDouble
- val feature=trimmed.slice(4,r.length-1).map(d => if(d=="?")0.0
- else d.toDouble)
- LabeledPoint(lable,Vectors.dense(feature))
- }.randomSplit(Array(0.7,0.3),11L)
- val data_train=data_file(0)//训练集
- val data_test=data_file(1)//测试集
4,逻辑回归模型训练及模型评价
- val model_log=new LogisticRegressionWithLBFGS().setNumClasses(2).run(data_train)
- /*
- 有两种最优化算法可以求解逻辑回归问题并求出最优参数:mini-batch gradient descent(梯度下降法),L-BFGS法。我们更推荐使用L-BFGS,因为它能更快聚合,而且现在spark2.1.0已经放弃LogisticRegressionWithLSGD()模式了*/
- /*性能评估:使用精确度,PR曲线,AOC曲线*/
- val predictionAndLabels=data_test.map(point =>
- (model_log.predict(point.features),point.label)
- )
- val metricsLG=new MulticlassMetrics(predictionAndLabels)//0.6079335793357934
- val metrics=Seq(model_log).map{
- model =>
- val socreAndLabels=data_test.map {
- point => (model.predict(point.features), point.label)
- }
- val metrics=new BinaryClassificationMetrics(socreAndLabels)
- (model.getClass.getSimpleName,metrics.areaUnderPR(),metrics.areaUnderROC())
- }
- val allMetrics = metrics
- allMetrics.foreach{ case (m, pr, roc) =>
- println(f"$m, Area under PR: ${pr * 100.0}%2.4f%%, Area under ROC: ${roc * 100.0}%2.4f%%")
- }
- /*LogisticRegressionModel, Area under PR: 73.1104%, Area under ROC: 60.4200%*/
5,模型优化
特征标准化处理
- val orig_file=sc.textFile("train_nohead.tsv")
- //println(orig_file.first())
- val data_file=orig_file.map(_.split("\t")).map{
- r =>
- val trimmed =r.map(_.replace("\"",""))
- val lable=trimmed(r.length-1).toDouble
- val feature=trimmed.slice(4,r.length-1).map(d => if(d=="?")0.0
- else d.toDouble)
- LabeledPoint(lable,Vectors.dense(feature))
- }
- /*特征标准化优化*/
- val vectors=data_file.map(x =>x.features)
- val rows=new RowMatrix(vectors)
- println(rows.computeColumnSummaryStatistics().variance)//每列的方差
- val scaler=new StandardScaler(withMean=true,withStd=true).fit(vectors)//标准化
- val scaled_data=data_file.map(point => LabeledPoint(point.label,scaler.transform(point.features)))
- .randomSplit(Array(0.7,0.3),11L)
- val data_train=scaled_data(0)
- val data_test=scaled_data(1)
- /*训练逻辑回归模型*/
- val model_log=new LogisticRegressionWithLBFGS().setNumClasses(2).run(data_train)
- /*在使用模型做预测时,如何知道预测到底好不好呢?换句话说,应该知道怎么评估模型性能。
- 通常在二分类中使用的评估方法包括:预测正确率和错误率、准确率和召回率、准确率 召回率
- 曲线下方的面积、 ROC 曲线、 ROC 曲线下的面积和 F-Measure*/
- val predictionAndLabels=data_test.map(point =>
- (model_log.predict(point.features),point.label)
- )
- val metricsLG=new MulticlassMetrics(predictionAndLabels)//精确度:0.6236162361623616
- val metrics=Seq(model_log).map{
- model =>
- val socreAndLabels=data_test.map {
- point => (model.predict(point.features), point.label)
- }
- val metrics=new BinaryClassificationMetrics(socreAndLabels)
- (model.getClass.getSimpleName,metrics.areaUnderPR(),metrics.areaUnderROC())
- }
- val allMetrics = metrics
- allMetrics.foreach{ case (m, pr, roc) =>
- println(f"$m, Area under PR: ${pr * 100.0}%2.4f%%, Area under ROC: ${roc * 100.0}%2.4f%%")
- }
- /*LogisticRegressionModel, Area under PR: 74.1103%, Area under ROC: 62.0064%*/
6,总结
1,如何能提高更明显的精度。。。。。
2,对逻辑回归的认识还不够。。。。
SparkMLlib分类算法之逻辑回归算法的更多相关文章
- SparkMLlib学习分类算法之逻辑回归算法
SparkMLlib学习分类算法之逻辑回归算法 (一),逻辑回归算法的概念(参考网址:http://blog.csdn.net/sinat_33761963/article/details/51693 ...
- 分类算法之逻辑回归(Logistic Regression
分类算法之逻辑回归(Logistic Regression) 1.二分类问题 现在有一家医院,想要对病人的病情进行分析,其中有一项就是关于良性\恶性肿瘤的判断,现在有一批数据集是关于肿瘤大小的,任务就 ...
- sklearn调用逻辑回归算法
1.逻辑回归算法即可以看做是回归算法,也可以看作是分类算法,通常用来解决分类问题,主要是二分类问题,对于多分类问题并不适合,也可以通过一定的技巧变形来间接解决. 2.决策边界是指不同分类结果之间的边界 ...
- 逻辑回归算法的原理及实现(LR)
Logistic回归虽然名字叫"回归" ,但却是一种分类学习方法.使用场景大概有两个:第一用来预测,第二寻找因变量的影响因素.逻辑回归(Logistic Regression, L ...
- 一小部分机器学习算法小结: 优化算法、逻辑回归、支持向量机、决策树、集成算法、Word2Vec等
优化算法 先导知识:泰勒公式 \[ f(x)=\sum_{n=0}^{\infty}\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n \] 一阶泰勒展开: \[ f(x)\approx ...
- Spark机器学习(2):逻辑回归算法
逻辑回归本质上也是一种线性回归,和普通线性回归不同的是,普通线性回归特征到结果输出的是连续值,而逻辑回归增加了一个函数g(z),能够把连续值映射到0或者1. MLLib的逻辑回归类有两个:Logist ...
- 《BI那点儿事》Microsoft 逻辑回归算法——预测股票的涨跌
数据准备:一组股票历史成交数据(股票代码:601106 中国一重),起止日期:2011-01-04至今,其中变量有“开盘”.“最高”.“最低”.“收盘”.“总手”.“金额”.“涨跌”等 UPDATE ...
- Python实现机器学习算法:逻辑回归
import numpy as np import matplotlib.pyplot as plt from sklearn.datasets.samples_generator import ma ...
- 每日一个机器学习算法——LR(逻辑回归)
本系列文章用于汇集知识点,查漏补缺,面试找工作之用.数学公式较多,解释较少. 1.假设 2.sigmoid函数: 3.假设的含义: 4.性质: 5.找一个凸损失函数 6.可由最大似然估计推导出 单个样 ...
随机推荐
- BZOJ1027 [JSOI2007]合金 【计算几何 + floyd】
题目 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的 原材料中铁铝锡的比重不同.然后,将每种原材料取出一定量,经过融解.混合,得到新的合金.新的合金的 ...
- 如何使用 JSP JSTL 显示/制作树(tree) 菜单
JSTL里面并没有直接制作tree菜单的元素,因此递归是JSP JSTL显示/制作tree菜单的唯一方法. 以下详述如何制作tree菜单. 首先,在主页面里面增加包含制作树菜单的jsp,例如: 在my ...
- [USACO06NOV]玉米田Corn Fields (状压$dp$)
题目链接 Solution 状压 \(dp\) . \(f[i][j][k]\) 代表前 \(i\) 列中 , 已经安置 \(j\) 块草皮,且最后一位状态为 \(k\) . 同时多记录一个每一列中的 ...
- 7月13号day5总结
今天学习过程和小结 使用伪分布式进行大数据计算,计算气象站记录气温的平均值 weather map()方法,key值数据多所以用LongWritable,value值是string类型,string类 ...
- 让JavaScript像C#一样支持Region
问题 Web Essentials 是非常给力的js插件,具体的介绍,大家请看这里,最锋利的Visual Studio Web开发工具扩展:Web Essentials详解 . 不过在使用的过程中,让 ...
- 调试钩取技术 - 记事本WriteFile() API钩取
@author: dlive 0x01 简介 本章将讲解前面介绍过的调试钩取技术,钩取记事本的kernel32!WriteFile() API 调试钩取技术能进行与用户更具有交互性(interacti ...
- Apache开启PHP的伪静态模式
首先,什么是伪静态: 伪静态又名URL重写,是动态的网址看起来像静态的网址.换句话说就是,动态网页通过重写 URL 方法实现去掉动态网页的参数,但在实际的网页目录中并没有必要实现存在重写的页面. 1. ...
- Laravel 添加自定义辅助函数
1. 在 app 目录下新建一个文件 helpers.php 2. 在 composer.json 文件的 autoload 字典中添加 "files":["app/he ...
- React+dva.js+typescript实现百度贴吧移动web端
个人练习作品,有bug欢迎在github上提:) github地址:https://github.com/axel10/react-tieba 整个项目中实现起来最麻烦的应该算是滚动位置记忆和路由动画 ...
- HDU 6305.RMQ Similar Sequence-笛卡尔树+数学期望 (2018 Multi-University Training Contest 1 1008)
6305.RMQ Similar Sequence 这个题的意思就是对于A,B两个序列,任意的l,r,如果RMQ(A,l,r)=RMQ(B,l,r),B序列里的数为[0,1]的实数,B的重量为B的所有 ...