spark 逻辑回归算法案例_SparkMLlib学习分类算法之逻辑回归算法

SparkMLlib分类算法之逻辑回归算法

逻辑回归与线性回归类似,但它不属于回归分析家族(主要为二分类),而属于分类家族,差异主要在于变量不同,因此其解法与生成曲线也不尽相同。逻辑回归是无监督学习的一个重要算法,对某些数据与事物的归属(分到哪个类别)及可能性(分到某一类别的概率)进行评估。

(二),SparkMLlib逻辑回归应用

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分类算法之逻辑回归算法 (一),逻辑回归算法的概念(参考网址:http://blog.csdn.net/sinat_33761963/article/details/5169383 ...

分类算法之逻辑回归(Logistic Regression

分类算法之逻辑回归(Logistic Regression) 1.二分类问题 现在有一家医院,想要对病人的病情进行分析,其中有一项就是关于良性\恶性肿瘤的判断,现在有一批数据集是关于肿瘤大小的,任务就 ...

sklearn调用逻辑回归算法

1.逻辑回归算法即可以看做是回归算法,也可以看作是分类算法,通常用来解决分类问题,主要是二分类问题,对于多分类问题并不适合,也可以通过一定的技巧变形来间接解决. 2.决策边界是指不同分类结果之间的边界 ...

一小部分机器学习算法小结: 优化算法、逻辑回归、支持向量机、决策树、集成算法、Word2Vec等

优化算法 先导知识:泰勒公式 \[ f(x)=\sum_{n=0}^{\infty}\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n \] 一阶泰勒展开: \[ f(x)\approx ...

逻辑回归算法的原理及实现(LR)

Logistic回归虽然名字叫"回归" ,但却是一种分类学习方法.使用场景大概有两个:第一用来预测,第二寻找因变量的影响因素.逻辑回归(Logistic Regression, L ...

Spark机器学习(2):逻辑回归算法

逻辑回归本质上也是一种线性回归,和普通线性回归不同的是,普通线性回归特征到结果输出的是连续值,而逻辑回归增加了一个函数g(z),能够把连续值映射到0或者1. MLLib的逻辑回归类有两个:Logist ...

(数据科学学习手札24)逻辑回归分类器原理详解&Python与R实现

一.简介 逻辑回归(Logistic Regression),与它的名字恰恰相反,它是一个分类器而非回归方法,在一些文献里它也被称为logit回归.最大熵分类器(MaxEnt).对数线性分类器等:我们 ...

吴恩达深度学习:2.9逻辑回归梯度下降法(Logistic Regression Gradient descent)

1.回顾logistic回归,下式中a是逻辑回归的输出,y是样本的真值标签值 . (1)现在写出该样本的偏导数流程图.假设这个样本只有两个特征x1和x2, 为了计算z,我们需要输入参数w1.w2和b还 ...

《BI那点儿事》Microsoft 逻辑回归算法——预测股票的涨跌

数据准备:一组股票历史成交数据(股票代码:601106 中国一重),起止日期:2011-01-04至今,其中变量有“开盘”.“最高”.“最低”.“收盘”.“总手”.“金额”.“涨跌”等 UPDATE ...

随机推荐

bat产生随机数并复制文件及生成文件列表

有这样一个场景:我需要将同一个文件复制为上千个文件,并且文件名应为随机数.为了简单起见,不想写程序,直接写个BAT来,方便,简单,易用: 1. 搞定用BAT产生32位随机数,存为变量并使用,保存以下代 ...

C语言中的三值合一

在学习C语言中我们会发现这样一种情况: #include Int main() { Int ar[10]; printf(“%p\n”,ar); printf(“%p\n ...

CF Covered Path (贪心)

Covered Path time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

C#改动文件或目录的权限,为指定用户、用户组加入全然控制权限

C#改动文件或文件夹的权限,为指定用户.用户组加入全然控制权限 //给Excel文件加入"Everyone,Users"用户组的全然控制权限 FileInfo fi = new F ...

JPA 映射单向多对一的关联关系

1.首先在多的一端加入一的一端的实体类 //映射单向n-1的关联关 //使用@ManyToOne 来映射多对一的关系 //使用@JoinColumn 来映射外键/可以使用@ManyToOne的fetc ...

excel2003和excel2007文件的创建和读取

excel2003和excel2007文件的创建和读取在项目中用的很多,首先我们要了解excel的常用组件和基本操作步骤. 常用组件如下所示: HSSFWorkbook excel的文档对象 HSSF ...

详解 JVM Garbage First(G1) 垃圾收集器(转载)

前言 Garbage First(G1)是垃圾收集领域的最新成果,同时也是HotSpot在JVM上力推的垃圾收集器,并赋予取代CMS的使命.如果使用Java 8/9,那么有很大可能希望对G1收集器进行 ...

Security Testing Test Scenarios

1 check for sql injection attacks2 secure pages should use https protocol3 page crash should not rev ...

numpy库数组拼接np.concatenate的用法

concatenate功能:数组拼接 函数定义:numpy.concatenate((a1, a2, ...), axis=0, out=None)

【校招面试 之 C/C++】第3题 为什么要内存对齐?以及内存对齐的方式

1.为什么要进行内存对? 参考:https://blog.csdn.net/a369000753/article/details/51188915 所谓内存对齐,是为了让内存存取更有效率而采用的一种编 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值