Sparkmllib scala线性回归

在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。(这反过来又应当由多个相关的因变量预测的多元线性回归区别,而不是一个单一的标量变量。)

在线性回归中,数据使用线性预测函数来建模,并且未知的模型参数也是通过数据来估计。这些模型被叫做线性模型。最常用的线性回归建模是给定X值的y的条件均值是X的仿射函数。不太一般的情况,线性回归模型可以是一个中位数或一些其他的给定X的条件下y的条件分布的分位数作为X的线性函数表示。像所有形式的回归分析一样,线性回归也把焦点放在给定X值的y的条件概率分布,而不是X和y的联合概率分布(多元分析领域)。

线性回归是回归分析中第一种经过严格研究并在实际应用中广泛使用的类型。这是因为线性依赖于其未知参数的模型比非线性依赖于其位置参数的模型更容易拟合,而且产生的估计的统计特性也更容易确定。

线性回归模型经常用最小二乘逼近来拟合,但他们也可能用别的方法来拟合,比如用最小化“拟合缺陷”在一些其他规范里(比如最小绝对误差回归),或者在桥回归中最小化最小二乘损失函数的惩罚.相反,最小二乘逼近可以用来拟合那些非线性的模型.因此,尽管“最小二乘法”和“线性模型”是紧密相连的,但他们是不能划等号的。

 

数据源准备:

position;square;price;direction;type;name;
0;190;20000;0;4室2厅2卫;中信城(别墅);
0;190;20000;0;4室2厅2卫;中信城(别墅);
5;400;15000;0;4室3厅3卫;融创上城;
0;500;15000;0;5室3厅2卫;中海莱茵东郡;
5;500;15000;0;5室3厅4卫;融创上城(别墅);
1;320;15000;1;1室1厅1卫;长江花园;
0;143;12000;0;3室2厅2卫;融创上城;
0;200;10000;0;4室3厅2卫;中海莱茵东郡(别墅);
0;207;9000;0;4室3厅4卫;中海莱茵东郡;
0;130;8500;0;3室2厅2卫;伟峰东第;
5;150;7000;0;3室2厅2卫;融创上城;
2;178;6000;0;4室2厅2卫;鸿城国际花园;
5;190;6000;0;3室2厅2卫;亚泰豪苑C栋;
1;150;6000;0;5室1厅2卫;通安新居A区;
2;165;6000;0;3室2厅2卫;万科惠斯勒小镇;
0;64;5500;0;1室1厅1卫;保利中央公园;
2;105;5500;0;2室2厅1卫;虹馆;
1;160;5300;0;3室2厅1卫;昊源高格蓝湾;
2;170;5100;0;4室2厅2卫;亚泰鼎盛国际;
0;155;5000;0;3室2厅2卫;中海水岸馨都;
5;128;5000;0;4室2厅1卫;长影世纪村;
0;145;4500;0;3室2厅2卫;富奥临河湾;
2;92;4200;0;3室2厅1卫;御翠豪庭尚府一期;
0;75;4100;0;1室1厅1卫;恒大雅苑;
5;105;4000;0;2室1厅1卫;南湖名家;
2;93;4000;0;3室2厅1卫;御翠豪庭尚府一期;
5;121;4000;0;3室1厅1卫;万达广场;
0;104;4000;0;2室1厅1卫;棠棣;
1;135;4000;0;3室2厅2卫;万科蓝山;
5;98;4000;0;2室2厅1卫;华亿红府;
0;128;3800;0;3室2厅1卫;复地哥德堡森林;
2;154;3700;0;3室2厅2卫;长春明珠;
0;100;3700;0;2室2厅1卫;翡翠花溪;
4;66;3700;0;1室1厅1卫;长客厂南;
2;106;3600;0;2室2厅1卫;虹馆;
5;132;3500;0;3室2厅1卫;大禹城邦;
1;135;3500;0;3室2厅1卫;昊源高格蓝湾;
0;130;3500;0;3室2厅1卫;中海国际社区(AJ区);
2;70;3500;0;2室1厅1卫;中信御园;
0;145;3500;0;3室2厅2卫;万盛东城;
5;132;3500;0;3室2厅2卫;大禹城邦;
5;100;3300;0;2室2厅1卫;国信南湖公馆;
5;75;3200;0;1室1厅1卫;南湖祥水湾;
0;120;3200;0;3室3厅2卫;复地哥德堡森林;
2;95;3200;0;3室2厅1卫;万科金域长春;
0;106;3200;0;2室2厅1卫;富腾天下城;
5;118;3200;0;3室2厅2卫;融创上城(别墅);
1;130;3200;0;3室2厅1卫;万龙名城;
0;137;3200;0;3室2厅2卫;中海国际社区(AJ区);

Demo:


import org.apache.spark.SparkConf
import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.ml.regression.LinearRegression
import org.apache.spark.sql.SparkSession


/**
 * 线性回归
 */
object linner {

  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setMaster("local[*]").setAppName("linner")
    val spark = SparkSession.builder().config(conf).getOrCreate()
    val file = spark.read.format("csv").option("sep", ";").option("header", "true").load("house.csv")
    import spark.implicits._

    //生成随机数
    val random = new util.Random()
    val data = file.select("square", "price").map(rows => (rows.getAs[String](0).toDouble, rows.getString(1)
      .toDouble, random.nextDouble())).toDF("square", "price", "random")
      .sort("random")

    //类似封装成 数组
    val assembler = new VectorAssembler()
      .setInputCols(Array("square"))
      .setOutputCol("features")
    val frame = assembler.transform(data)

    //把数据集拆分2个部分
    val Array(train, test) = frame.randomSplit(Array(0.8, 0.2), 1L)

    //创建线性回归的示例
    val regression = new LinearRegression()
      .setMaxIter(10) //训练轮次
      .setRegParam(0.3) //正则化
      .setElasticNetParam(0.8) //推荐值

    //Features 特征向量     label 标签
    val model = regression.setLabelCol("price").setFeaturesCol("features").fit(train)

    model.transform(test).count()
    model.transform(test).show(50, truncate = true)

    /**
     * fit   做训练
     * transform   做预测
     */
    spark.stop()
  }
}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值