线性回归怎么运用(线性回归综述)

线性回归原理

一般而言,房价会受很多因素的影响而波动,如果我们假设房价只与房产面积已经厅室数量有关系,可以看到房价、面积、厅室呈现以下数据:

线性回归怎么运用(线性回归综述)(1)

房产数据

我们可以将价格y和面积x1、厅室数量x2的关系表示为f(x)=θ0 θ1x1 θ2x2,很显然,我们的目的是使得f(x)尽量等于y,这就是一个直观的线性回归的样式。

  • 线性回归的一般形式

假设有数据集{(x1, y1), (x2, y2), ..., (xn, yn)},其中,xi=(xi1; xi2; xi3; ...; xid)∈n表示变量的数量,d表示每个变量的维度。那么,我们可以用以下函数来描述y和x之间的关系:

线性回归怎么运用(线性回归综述)(2)

y和x之间的关系

如何来确定θ的值,使得f(x)尽可能接近y呢?回归问题中常用的性能度量是均方误差,可以表示为如下公式:

线性回归怎么运用(线性回归综述)(3)

均方误差

我们可以选择合适的θ来让均方误差最小化。

  • 极大似然估计

下面我们用极大似然估计来解释为什么要用均方误差作为线性回归的性能度量。我们可以把目标值和变量写成如下等式:

线性回归怎么运用(线性回归综述)(4)

等式转换

ϵ表示我们未观测到的变量的印象,即随机噪音。我们假定ϵ是独立同分布,服从高斯分布。根据中心极限定理得到如下结果:

线性回归怎么运用(线性回归综述)(5)

中心极限定理转换

我们建立极大似然函数,即描述数据遵从当前样本分布的概率分布函数。由于样本的数据集独立同分布,因此可以写成如下形式:

线性回归怎么运用(线性回归综述)(6)

极大似然函数

我们选择可以使似然函数最大化的θ,这就是极大似然估计的思想。为了方便计算,我们计算时通常对对数似然函数求最大值,即对两边取对数,推导结果如下:

线性回归怎么运用(线性回归综述)(7)

推导过程

由上述推导可知,最大化似然函数与最小化红框部分是等价的(前面的1/2是为了后续计算方便的)。显然,这一结果就是均方误差,因此我们证明了用这个式子作为代价函数来优化线性回归模型在统计学的角度上来说是合理的。

线性回归的损失函数、代价函数与目标函数

首先明确损失函数、代价函数与目标函数的概念。损失函数度量的是单样本预测的错误程度,损失函数值越小,模型就越好。代价函数度量的是全部样本集的平均误差。目标函数则是代价函数和正则化函数,也是模型最终要优化的函数。

从上述概念中可以发现,代价函数已经可以度量样本集的平均误差了,那么我们为什么还要设定目标函数呢?这是因为当模型复杂度增加时,有可能出现对训练集模拟得很好,但是对测试集的效果却不好,也就是我们所说的过拟合现象,我们也称之为结构化风险。结构化风险最小化就是为了防止过拟合而提出来的策略。定义模型复杂度为J(F),则目标函数可表示为如下形式:

线性回归怎么运用(线性回归综述)(8)

目标函数

其中,λJ(F)我们称为正则化,其目的就是防止过拟合。当训练集本身存在噪声时,拟合曲线对未知影响因素的拟合往往不是最好的。通常,随着模型复杂度的增加,训练误差会减少;但测试误差会先增加后减小。我们的最终目的是使测试误差达到最小,因此我们需要选取适合的目标函数。

线性回归的优化方法

常见的优化方法有梯度下降法、最小二乘法矩阵、牛顿法和拟牛顿法。对于线性回归模型,我们一般选用批随机梯度下降法(与随机梯度下降法不同,但现在我们所说的随机梯度下降往往是批随机梯度下降)来优化模型。推导过程如下:

线性回归怎么运用(线性回归综述)(9)

线性回归随机梯度下降法推导

其中,下标j表示第j个参数,上标i表示第i个数据点。随机梯度下降法的优点是当数据点很多时,运行效率更高;缺点是由于每次只针对一批样本更新参数,未必能找到最快路径达到最优值,甚至有时候会出现参数在最小值附近徘徊无法收敛。如果函数为非凸函数,有可能找到的并非全局最优值,而是局部最优值。

线性回归的评价指标

线性回归是典型的回归问题,对于回归问题,常用的评价指标有均方误差(MSE)、均方根误差(RMSE)和平均绝对误差(MAE),但这些评价指标都无法消除量纲不一致而导致的误差值特别大的问题,因此对于线性回归,我们最常用的指标是R^2,可以避免量纲不一致问题。

线性回归怎么运用(线性回归综述)(10)

R^2评价指标

其中,VAR为实际结果与预测结果的方差,从式子中可以看出,R^2能够让回归模型可以成功解释数据方差部分在数据固有方差中所占的比例,R^2越接近1,表示可解释力度越大,模型拟合的效果也就越好。

使用sklearn实现一个简单的线性回归案例

sklearn(scikit-learn)是基于Python实现的机器学习工具以及简单高效的数据挖掘和数据分析工具,其内部集成了常用的所有机器学习模型,线性回归模型就包含在sklearn的linear_model库中。因此,在使用时,我们需要将该线性回归模型导入。

from sklearn.linear_model import LinearRegression

下面我们通过一个简单的例子来感受一下线性回归模型的整个流程。首先我们利用NumPy生成数据:

import numpy as np from sklearn.linear_model import LinearRegression # 生成随机数种子 使每次产生的随机数都一样 np.random.seed(49) x = np.random.rand(500, 3) print(x) # 构建映射关系,模拟真实的数据待预测值 # 映射关系设置为y = 2.1 2.8*x1 5.4*x2 y = x.dot(np.array([2.1, 2.8, 5.4]))

这里生成了一组映射关系为y = 2.1 2.8*x1 5.4*x2的数据,然后就可以利用sklearn的线性回归模型来训练模型并将训练好的模型用于预测。

# 生成模型 lr = LinearRegression(fit_intercept=True) # 训练模型 lr.fit(x, y) print("训练的参数值结果为:%s" % (lr.coef_)) # 评估模型 print('R^2为:%s' % (lr.score(x, y))) # 预测目标值 x_test = np.array([2, 4, 5]).reshape(1,-1) y_test = lr.predict(x_test) print("预测值为: %s" % (y_test))

运行结果如下所示:

线性回归怎么运用(线性回归综述)(11)

运行结果

由于我们设置的线性回归模型比较简单,只有三个参数,因此它的准确度达到了100%。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页