【云计算】SparkMllib之线性回归解析
小标 2018-12-24 来源 : 阅读 696 评论 0

摘要:本文主要向大家介绍了【云计算】SparkMllib之线性回归解析,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。

本文主要向大家介绍了【云计算】SparkMllib之线性回归解析,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。

SparkMllib之线性回归解析


1. 线性最小二乘,Lasso回归和岭回归


线性最小二乘法是回归问题的最常见公式。损失函数如下:


通过使用不同类型的正则化来导出各种相关的回归方法:普通最小二乘或线性最小二乘不使用正则化; 岭回归使用L2正则化; Lasso使用L1正则化。对于所有这些模型,平均损失或训练误差,


被称为均方误差。


MLlib的所有方法都使用Java友好类型,因此您可以像在Scala中一样导入和调用它们。唯一需要注意的是,这些方法使用Scala RDD对象,而Spark Java API使用单独的JavaRDD类。您可以通过在JavaRDD对象上调用.rdd()将Java RDD转换为Scala。下面提供了Scala代码段的相应Java示例:



 
 
 

SparkConf conf = new SparkConf().setAppName("JavaLinearRegressionWithSGDExample").setMaster("local");


 

JavaSparkContext sc = new JavaSparkContext(conf);


 

String path = "F:\\Learning\\java\\project\\LearningSpark\\src\\main\\resources\\lpsa.data";


 

JavaRDD data = sc.textFile(path);


 

JavaRDD parsedData = data.map(line -> {


 

String[] parts = line.split(",");


 

String[] features = parts[1].split(" ");


 

double[] v = new double[features.length];


 

for (int i = 0; i < features.length - 1; i++) {


 

v[i] = Double.parseDouble(features[i]);


 

}


 

return new LabeledPoint(Double.parseDouble(parts[0]), Vectors.dense(v));


 

});


 

parsedData.cache();


 

// 模型构建和训练


 

int numIterations = 100; // 迭代次数


 

double stepSize = 0.00000001; // 学习率


 

LinearRegressionModel model = LinearRegressionWithSGD.train(JavaRDD.toRDD(parsedData), numIterations, stepSize);


 

JavaPairRDD valueAndPreds = parsedData


 

.mapToPair(point -> new Tuple2<>(model.predict(point.features()), point.label()));


 

double MSE = valueAndPreds.mapToDouble(pair -> {


 

double diff = pair._1() - pair._2();


 

return diff * diff;


 

}).mean();


 

System.out.println("训练数据的均方误差为:" + MSE);


     

2. Streaming linear regression


当数据以流式方式到达时,在线拟合回归模型,在新数据到达时更新模型的参数是有用的。spark.mllib目前支持使用普通最小二乘法进行流线性回归。拟合类似于离线执行的拟合,除了在每批数据上进行拟合,因此模型不断更新以反映来自流的数据。以下示例演示如何从两个不同的文本文件输入流加载训练和测试数据,将流解析为标记点,将线性回归模型在线拟合到第一个流,并对第二个流进行预测。


首先,我们导入必要的类来解析输入数据并创建模型。然后我们为训练和测试数据制作输入流。我们假设已经创建了StreamingContext ssc。对于此示例,我们在训练和测试流中使用标记点,但实际上您可能希望使用未标记的矢量来测试数据。我们通过将权重初始化为零来创建我们的模型,并注册流以进行训练和测试然后开始工作。输出预测与真实标签一起使我们可以轻松查看结果。


最后,我们可以将包含数据的文本文件保存到训练或测试文件夹中。每一行应该是格式为(y,[x1,x2,x3])的数据点,其中y是标签,x1,x2,x3是特征。只要文本文件放在args(0)中,模型就会更新。只要文本文件放在args(1)中,您就会看到预测。当您将更多数据提供给训练文件夹时,预测会变得更好!

import org.apache.spark.mllib.linalg.Vectors


 

import org.apache.spark.mllib.regression.LabeledPoint


 

import org.apache.spark.mllib.regression.StreamingLinearRegressionWithSGD


 

val trainingData = ssc.textFileStream(args(0)).map(LabeledPoint.parse).cache()


 

val testData = ssc.textFileStream(args(1)).map(LabeledPoint.parse)


 

val numFeatures = 3


 

val model = new StreamingLinearRegressionWithSGD()


 

.setInitialWeights(Vectors.zeros(numFeatures))


 

model.trainOn(trainingData)


 

model.predictOnValues(testData.map(lp => (lp.label, lp.features))).print()


 

ssc.start()


 

ssc.awaitTermination()


     

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据安全频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程