99814.com 99814.com 99814.com

预测回归_回归分析与预测技术简介

回归分析的基本概念是使用一组变量来预测另一个变量的方法。通俗地说,就是根据几个事件的相关程度来预测另一个事件发生的概率。回归分析的目的是找到一个连接输入和输出变量的最佳模型。

回归方法有很多种,可以按3种方法分类:自变量的个数、因变量的类型、回归线的形状。1)根据相关性中自变量的个数分类,回归方法可分为单变量回归分析法和多元回归分析法。在单变量回归分析中,只有一个自变量,而在多元回归分析中,有两个以上的自变量。2)根据因变量的类型,回归方法可分为线性回归分析法和非线性回归分析法。3)根据回归线的形状分类时,如果回归分析中只包含一个自变量和一个因变量,并且两者之间的关系可以用一条直线近似,则该回归分析称为单变量线性回归分析;如果在回归分析中包含两个或多个自变量,且因变量与自变量之间存在非线性关系,则称为多元非线性回归分析。

1. 线性回归

线性回归是世界上最著名的建模方法之一。在线性回归中,使用线性预测函数对数据进行建模,并且还根据数据估计未知模型参数。这些模型称为线性模型。在线性模型中,因变量是连续的,自变量可以是连续的或离散的,回归线是线性的。

1) 单变量线性回归

回归分析的目的是找到一个连接输入和输出变量的最佳模型。更准确地说,回归分析是确定变量 Y 与一个或多个变量 X 之间关系的过程。

Y 通常称为响应输出或因变量,X 称为输入、回归量、解释变量或自变量。线性回归最好用一条直线(回归线)来建立因变量 Y 与一个或多个自变量 X 之间的关系,如图 1 所示。可用以下公式表示。

Y = a+bx X+e

其中 a 是截距,b 是回归线的斜率,e 是误差项。

找到回归线就是确定回归系数a和b。假设变量 y 的方差是一个常数,可以使用最小二乘法计算这些系数,以最小化实际数据点与估计的回归线之间的误差。只有误差最小化时得到的参数才是我们最需要的参数。范围。这些残差平方和通常被称为回归线的平方误差之和,用 SSE 表示,如下所示。

4179fb3c7136fd3d14dab8e20e565a06.png

cc7cc3b2964cfe1de554f5b37500cec5.gif

图 1 一元线性回归

如图2所示,回归线的误差平方和为所有样本的yi值和回归线上各点的yi

差的平方和。

dbe6c6c32fa5b476c5389d9823213016.gif

图2 回归线误差平方和示意图

2) 多元线性回归

多元线性回归是涉及多个预测变量的单位线性回归的扩展。响应变量 Y 被建模为几个预测变量的线性函数,可以通过属性的线性组合来预测。其基本形式如下。

f7fa55ed0a1a0ff76bb127cae5c8f5ee.png

线性回归模型的解释性很强,模型的权重向量非常直观的表达了样本中各个属性在预测中的重要性。例如,如果要预测今天是否下雨,并且根据历史数据学习了模型中的权重向量和截距,则可以综合考虑每个属性来确定今天是否下雨。

f75ce2545f52557099e919758a102fad.png

其中,X1代表风力线性回归分析预测,X2代表湿度,X3代表空气质量。

在训练模型时,需要使预测值尽可能接近真实值,以尽量减少误差,而均方误差是表示这种误差的一种方式,所以求解多元线性回归模型,求解最小化均方误差参数时的相应误差。

3)线性回归的优缺点

3d预测专家林雪2016024预测分析_线性回归分析预测_回归预测分析

线性回归是回归任务中最常用的算法之一。在其最简单的形式中,它用连续超平面拟合数据集,例如,当只有两个变量时,它是一条直线。如果数据集中的变量之间存在线性关系,则拟合非常好。

线性回归的理解和解释非常直观,通过正则化也可以避免过拟合。此外,线性回归模型可以通过随机梯度下降轻松更新数据模型。然而,线性回归在处理非线性关系方面很糟糕,在识别复杂模式方面不灵活,并且添加正确的交互项或多项式极其棘手和耗时。

2. Spark MLlib中的SGD线性回归算法

Spark MLlib 的 SGD 线性回归算法由 LinearRegressionWithSGD 类实现,该类基于非正则化随机梯度下降算法,该算法使用(标签、特征序列)的 RDD 来训练线性回归模型。

每对(标签,特征序列)描述一组特征/以及与这些特征相对应的标签。算法按照指定的步长进行迭代,迭代次数由参数指定。在每次迭代中,用于计算下降梯度的样本数也由参数给出。

Spark MLlib 中 SGD 线性回归算法的实现类 LinerRegressionWithSGD 具有以下变量。

class LinerRegressionWithRGD private (
    private var stepSize: Double,
    private var numIterations: Int,
    private var miniBatchFraction: Double
)

1) Spark MLlib 的 LinerRegressionWithRGD 构造函数

用默认值构造SparkMLlib的LinerRegressionWithRGD实例的接口如下。

{stepSize:1.0,numIterations:100,miniBatchFraction:1.0}。

下面解释参数的含义。

2)Spark MLlib的LinerRegressionWithRGD训练函数

Spark MLlib的LinerRegressionWithRGD训练函数的LinerRegressionWithRGD.train方法有很多重载方法。此处显示具有最完整参数的一个以进行说明。LinerRegressionWithRGD.train 方法的预览如下所示。

def train(
    input:RDD[LabeledPoint],
    numIterations:Int,
    stepSize:Double,
    miniBatchFraction:Double,
    initialWeights:Vector):LinearRegressionModel

参数numIterations、stepSize和miniBatchFraction的含义与构造函数的含义相同,其他两个参数含义如下。

回归预测分析_3d预测专家林雪2016024预测分析_线性回归分析预测

3.Spark MLlib的SGD线性回归算法示例

本例使用数据集进行模型训练,可以通过建立简单的线性模型来预测标签的值,并可以通过计算均方误差来评估预测值与实际值的一致性。

本示例使用 LinearRegressionWithSGD 算法构建预测模型,如下所示。① 加载数据。数据以文本文件的形式存储。②建立预测模型。设置迭代次数为100,其他参数使用默认值训练模型,形成数据模型。③ 打印预测模型的系数。④ 使用训练样本评估模型,计算训练误差值。

本例使用的数据存储在lrws_data.txt文件中,该文件提供67个数据点,每个数据点为1行,每行由1个标签值和8个特征值组成,每行数据格式如下.

标签值,特征 1 特征 2 特征 3 特征 4 特征 5 特征 6 特征 7 特征 8

其中,第一个值为标签值,与特征值用“,”隔开,特征值用空格隔开。前5行数据如下。

-0.4307829,-1.63735562648104 -2.00621178480549 -1.86242597251066 -1.02470580167082 -0.522940888712441 -0.863171185425945 -1.04215728919298 -0.8644665073373.06
-0.1625189,-1.98898046126935 -0.722008756122123 -0.787896192088153 -1.02470580167082 -0.522940888712441 -0.863171185425945 -1.04215728919298 -0.864466507337306
-0.1625189, -1.578 818 8754 8545, -2.1887840293994 1.36116336875686 -1.02470580167082 -0.522940888712441 -0.863171185425945 0.342627053981254 -0.155348103855541
-0.1625189,-2.16691708463163 -0.807993896938655 -0.787896192088153 -1.02470580167082 -0.522940888712441 -0.863171185425945 -1.04215728919298 -0.864466507337306
0.3715636,-0.507874475300631 -0.458834049396776 -0.250631301876899 -1.02470580167082 -0.522940888712441 -0.863171185425945 -1.04215728919298 -0.864466507337306

在这个例子中,每一列数据都被视为一个特征指标,并使用数据集构建了一个预测模型。实现的代码如下。

import java.text.SimpleDateFormat
import java.util.Date
import org.apache.log4j.{Level,Logger}
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.{LinearRegressionWithSGD, LabeledPoint}
import org.apache.spark.{SparkContext, SparkConf}
/**

线性回归分析预测_3d预测专家林雪2016024预测分析_回归预测分析

* 计算回归曲线的MSE * 对多组数据进行模型训练,然后再利用模型来预测具体的值 * 公式:f(x) =a1*x1+a2*x2+a3*x3+.... */ object LinearRegression2 { //屏蔽不必要的曰志 Logger.getLogger("org.apache.spark").setLevel(Level.WARN) Logger.getLogger("org.apache.eclipse.jetty.server").setLevel(Level.OFF) //程序入口 val conf = new SparkConf().setAppName(LinearRegression2).setMaster("local[1]") val sc = new SparkContext(conf) def main(args:Array[String]) { //获取数据集路径 val data = sc.textFile (("/home/hadoop/exercise/lpsa2.data",1) //处理数据集 val parsedData = data.map{ line => val parts = line.split (",") LabeledPoint (parts(0).toDouble,Vectors.dense(parts(1).split('').map(_.toDouble))) } //建立模型 val numIterations = 100 val model = LinearRegressionWithSGD.train(parsedData, numIterations,0.1) //获取真实值与预测值

回归预测分析_线性回归分析预测_3d预测专家林雪2016024预测分析

val valuesAndPreds = parsedData.map { point => //对系数进行预测 val prediction = model.predict(point.features) (point, label, prediction) //(实际值,预测值) } //打印权重 var weights = model.weights printIn("model.weights" + weights) //存储到文档 val isString = new SimpleDateFormat("yyyyMMddHHmmssSSS").format{new Date ()) val path = "("/home/hadoop/exercise/" + isString + "/results")" ValuesAndPreds.saveAsTextFile(path) //计算均方误差 val MSE = valuesAndPreds.map {case (v,p) => math.pow ((v - p),2)}.reduce(_ + _) / valuesAndPreds.count printIn ("训练的数据集的均方误差是" + MSE) sc. stop () } }

运行程序打印回归公式的系数和训练数据集的均方误差值。将每个数据点的预测值存储在结果文件中。数据项的格式为(实际值、预测值)。

4. 逻辑回归

逻辑回归用于查找事件成功或事件失败的概率。首先要明确一点,逻辑回归方法仅在目标变量为分类时才考虑,主要用于两个分类问题。

1) 逻辑回归示例

医生希望通过肿瘤大小X1、长度X2、类型X3的特征来判断患者的肿瘤是恶性肿瘤还是良性肿瘤。此时目标变量y为分类变量(0表示良性肿瘤,1表示恶性肿瘤)。线性回归是通过x和y之间的某种线性关系来预测的,但是此时由于y是分类变量,它的值只能是0、1,或者0、1、2等,不是负无穷到正无穷,所以引入了一个sigmoid函数,即

线性回归分析预测_3d预测专家林雪2016024预测分析_回归预测分析

40b36adf7f69003cd4f03c53c9fefbe4.png

,x的输入可以从负无穷到正无穷,输出y总是[0,1],当x=0时,y的值为0.5,如图3(a)所示。

当x=0时,y=0.5,就是决策边界。在判断一个肿瘤是良性还是恶性的时候,其实就是找到能够将两类样本分开的边界,即决策边界,如图3(b)所示。

2c5e8ca148b47afca46e6d4ddd49fa8e.gif

Fig.3 sigmoid函数图和决策边界示意图

2)逻辑回归函数

在分类的情况下,学习到的逻辑回归分类器实际上是一组权重

6ab68d78d1915dfa04567f8785362f45.png

. 当测试样本集中的测试数据到达时,将这组权重线性添加到测试数据中得到z值,即

6da56e1918cf3309a8f1123dd1a9d4f3.png

,在,

871d0d042b742b6c9a4d83b94a6c6855.png

是样本数据的每个特征,维度是m。然后以sigmoid函数的形式找到

2d7c3054605b408e4555ee5c8cf104d6.png

,马上

40b36adf7f69003cd4f03c53c9fefbe4.png

逻辑回归函数的显着性如图 4 所示。

7adff2b19e8c051e1da0f777cb7d09d4.gif

图 4 逻辑回归函数的含义

由于sigmoid函数的域是(-inf,inf)线性回归分析预测,范围是(0,1),所以最基本的逻辑回归分类器适用于二元目标的分类。

方法是利用sigmoid函数的特殊数学性质,将结果映射到(0,1),并设置一个概率阈值(不一定是0.5),如果大于这个阈值,则归类为1,如果它小于它将被归类为0。

求解逻辑回归模型参数的常用方法之一是以最大似然估计的对数形式构造函数,然后使用梯度下降函数求解。

3)逻辑回归的优缺点

逻辑回归特别适用于分类场景,尤其是因变量为二分类的场景,比如垃圾邮件判断、你是否患有某种疾病、是否点击了广告等。逻辑回归的优势在于模型是比线性回归更简单、更容易理解、更容易实现,尤其是对于大规模线性分类。

逻辑回归的缺点是它需要较大的样本量,因为最大似然估计不如样本量小的最小二乘法有效。逻辑回归对模型中自变量的多重共线性很敏感。需要对自变量进行相关性分析,剔除线性相关的变量,防止过拟合和欠拟合。