antlr4权威指南中文_Spark权威指南(中文版)第27章 回归

Spark The Definitive Guide(Spark权威指南) 中文版。本书详细介绍了Spark2.x版本的各个模块,目前市面上最好的Spark2.x学习书籍!!!

扫码关注公众号:登峰大数据,阅读中文Spark权威指南(完整版),系统学习Spark大数据框架!

如果您觉得作者翻译的内容有帮助,请分享给更多人。您的分享,是作者翻译的动力

12e95525db6c089542fd805c46381c21.png

    回归是分类的逻辑扩展。回归不是仅仅从一组值预测一个值,而是从一组特征(用数字表示)预测一个实数(或连续变量)。

    回归可能比分类更难,因为从数学角度看,可能的输出值是无限的。此外,我们的目标是优化预测值和真实值之间的一些误差度量,而不是一个正确率。除此之外,回归和分类是相当相似的。由于这个原因,我们将看到许多应用于回归的基本概念,就像我们在分类中所做的那样。

27.1.   用例

    下面是一些回归用例,可以让你思考自己领域中潜在的回归问题:

电影观众人数预测

    提供关于电影和电影观众的信息,比如有多少人看过预告片或在社交媒体上分享了它,你可能想要预测这部电影上映时有多少人可能会去看。

预测公司的收入

    给定当前的增长轨迹、市场和季节性,您可能想要预测公司未来将获得多少收入。

预测作物产量

    给定作物生长的特定区域的信息,以及全年的当前天气,您可能想要预测特定地块的作物总产量。

27.2.   MLlib中的回归模型

    MLlib中有几种基本的回归模型。其中一些模型是从第26章继承下来的。其他的只与回归问题域相关。下面列表基于Spark 2.2版本,但还会增长:

  • 线性回归

  • 广义线性回归

  • 保序回归

  • 决策树

  • 随机森林

  • 梯度提升树

  • 生存回归

本章将介绍这些模型的基本知识,包括:

  • 一个简单的模型解释和算法背后的客观事实

  • 模型超参数(初始化模型的不同方法)

  • 训练参数(影响模型训练方式的参数)

  • 预测参数(影响如何进行预测的参数)

您可以使用ParamGrid搜索超参数和训练参数,正如我们在第24章中看到的。

27.2.1.   模型的可伸缩性

    MLlib中的回归模型都可以扩展到大型数据集。表27-1是一个简单的模型可伸缩性记分卡,它将帮助您为特定的任务选择最佳模型(如果可伸缩性是您的核心考虑因素)。这将取决于您的配置、机器大小和其他因素。

    表27-1。回归可伸缩性参考

模型

特征数量

训练样本数

线性回归

1至1000万

没有限制

广义线性回归

4096

没有限制

保序回归

N/A

百万级别

决策树

1000s

没有限制

随机森林

10000s

没有限制

梯度提升树

1000s

没有限制

生存回归

1至1000万

没有限制

注意

和我们的其他高级分析章节一样,这一章不能教你每一个模型的数学基础。参见ISL和ESL中的第3章来回顾回归。

让我们读取一些例子数据,这些数据将在整个章节中使用:

// in Scala

val df =  spark.read.load("/data/regression")

# in Python

df =  spark.read.load("/data/regression")

27.3.   线性回归

        线性回归假设输入特征的线性组合(每个特征的和乘以一个权重)的输出中出现一定数量的高斯误差。这种线性假设(以及高斯误差)并不总是成立的,但它确实使一个简单的、可解释的模型很难过度拟合。与逻辑回归类似,Spark为此实现了ElasticNet正则化,允许您混合使用L1和L2正则化。

27.3.1.   模型超参数

线性回归与逻辑回归具有相同的模型超参数。更多信息见第26章。

27.3.2.   训练参数

线性回归也具有与逻辑回归相同的所有训练参数。有关这个主题的更多信息,请参阅第26章。

27.3.3.   实例
// in Scalaimport org.apache.spark.ml.regression.LinearRegressionval lr = new LinearRegression().setMaxIter(10).setRegParam(0.3)\  .setElasticNetParam(0.8)println(lr.explainParams())val lrModel = lr.fit(df)# in Pythonfrom pyspark.ml.regression import LinearRegressionlr = LinearRegression().setMaxIter(10).setRegParam(0.3).setElasticNetParam(0.8)print lr.explainParams()lrModel = lr.fit(df)
27.3.4.   训练摘要

        就像逻辑回归一样,我们从模型中得到详细的训练信息。代码中的方法是访问这些指标的一种简单的简写方式。它显示了几个衡量回归模型成功与否的传统度量标准,可以查看模型实际拟合这条线的情况。

        summary方法返回一个包含多个字段的摘要信息对象。让我们依次来看看这些。残差(residuals)就是我们输入到模型中的每个特征的权值。objectiveHistory方法显示我们的训练在每次迭代中是如何进行的。均方根误差是衡量直线拟合程度的一种方法,它由每个预测值和数据中实际值之间的距离决定。r平方变量是对模型所捕获的预测变量的方差所占比例的度量。

        有许多度量标准和摘要信息可能与您的用例相关。本节将演示API,但不会全面覆盖每个指标(有关更多信息,请参阅API文档)。

        下面是线性回归模型摘要的一些属性:

// in Scalaval summary = lrModel.summarysummary.residuals.show()println(summary.objectiveHistory.toSeq.toDF.show())println(summary.rootMeanSquaredError)println(summary.r2)# in Pythonsummary = lrModel.summarysummary.residuals.show()print summary.totalIterationsprint summary.objectiveHistoryprint summary.rootMeanSquaredErrorprint summary.r2
27.4.   广义线性回归

        我们在这章看到的标准线性回归实际上是一个算法家族的一部分叫做广义线性回归。Spark有两个该算法的实现。其中一个是为处理非常大的特征集而优化的(本章之前介绍过的简单线性回归),而另一种则更普遍,包括对更多算法的支持,而且目前还不能扩展到大量的特征。

        线性回归的广义形式为您提供了对所使用的回归模型类型的更细粒度控制。例如,它们允许您从各种族中选择期望的噪声分布,包括高斯(线性回归)、二项(逻辑回归)、泊松(泊松回归)和伽玛(伽玛回归)。广义模型还支持设置一个链接函数来指定线性预测器和分布函数的平均值之间的关系。表27-2显示了每个族(family)可用的链接函数。

表27-2。回归家族、响应类型和链接函数

响应类型

链接函数

Gaussian

Continuous

Identity*, Log, Inverse

Binomial

Binary

Logit*, Probit, CLogLog

Poisson

Count

Log*, Identity, Sqrt

Gamma

Continuous

Inverse*, Idenity, Log

Tweedie

Zero-inflated continuous

Power link function

星号表示每个族的规范链接函数。

有关广义线性模型的更多信息,请参见ISL 3.2和ESL 3.2。

警告

Spark 2.2的一个基本限制是广义线性回归只接受输入的最大4,096个特性。在Spark的后续版本中,这一点可能会发生变化,所以一定要参考文档。

27.4.1.   模型超参数

     这些是我们指定来确定模型本身的基本结构的配置。除了fitIntercept和regParam(“Regression回归”章节中提到),广义线性回归还包括其他几个超参数:

Family

    对模型中使用的误差分布的描述。支持的选项有Poisson, binomial, gamma, Gaussian和tweedie。

Link

    提供线性预测器与分布函数均值之间关系的链接函数的名称。支持的选项有cloglog、probit、logit、inverse、sqrt、identity和log(默认为identity)。

Solver

    solver算法用于优化。目前唯一支持的solver是irls(迭代重加权最小二乘)。

variancePower

    Tweedie分布的方差函数中的幂,它表征了分布的方差与均值之间的关系。只适用于Tweedie族。支持的值是0和[1,∞)。默认值是0。

linkPower

    Tweedie族的power link函数中的索引。

27.4.2.   训练参数

训练参数与逻辑回归的训练参数是相同的。更多信息请参考第26章。

27.4.3.   预测参数

    该模型增加了一个预测参数:

linkPredictionCol

    一个列名,用于保存每个预测的链接函数的输出。

27.4.4.   实例

下面是一个使用广义线性回归的例子:

// in Scalaimport org.apache.spark.ml.regression.GeneralizedLinearRegressionval glr = new GeneralizedLinearRegression()  .setFamily("gaussian")  .setLink("identity")  .setMaxIter(10)  .setRegParam(0.3)  .setLinkPredictionCol("linkOut")println(glr.explainParams())val glrModel = glr.fit(df)# in Pythonfrom pyspark.ml.regression import GeneralizedLinearRegressionglr = GeneralizedLinearRegression()\  .setFamily("gaussian")\  .setLink("identity")\    .setMaxIter(10)\  .setRegParam(0.3)\  .setLinkPredictionCol("linkOut")print glr.explainParams()glrModel = glr.fit(df)
27.4.5.   训练摘要

        对比上一节的简单线性模型,Spark为广义线性模型提供的训练摘要可以帮助模型很好地fit用作训练集的数据。需要注意的是,这并不会取代根据适当的测试集运行算法,但可以提供更多信息。此信息包括许多用于分析算法适用性的不同潜在指标,包括一些最常见的成功指标:

R平方

确定系数;一种拟合度。

残差

标号与预测值之间的差值。

一定要检查模型上的summary对象,以查看所有可用的方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值