关键词:
文章目录
简介
线性回归(Linear Regression)是回归任务中最常见的算法,利用回归方程对自变量和因变量进行建模,且因变量和自变量之间是线性关系而得名,从而可以根据已知数据预测未来数据,如房价预测、PM2.5预测等。
其中,只有一个自变量则称为一元线性回归,包含多个自变量则成为多元线性回归。
如下图,根据已知数据点(蓝色),建模得到红色的回归方程,表示自变量和因变量关系,从而可以输入新的自变量,得到预测值(因变量)。
预测函数定义为:
h
(
w
)
=
w
1
x
1
+
w
2
x
2
+
⋅
⋅
⋅
+
w
d
x
d
+
b
h(w)=w_1x_1+w_2x_2+···+w_dx_d+b
h(w)=w1x1+w2x2+⋅⋅⋅+wdxd+b
向量形式为:
h
(
w
)
=
w
T
x
h(w)=\\boldw^T\\boldx
h(w)=wTx
其中
w
T
=
(
b
w
1
⋅
⋅
⋅
w
d
)
,
x
=
(
1
x
1
⋅
⋅
⋅
x
d
)
\\boldw^T=\\begingathered\\beginpmatrix b\\\\ w_1\\\\···\\\\w_d \\endpmatrix\\endgathered,\\boldx=\\begingathered\\beginpmatrix 1\\\\ x_1\\\\···\\\\x_d \\endpmatrix\\endgathered
wT=⎝
⎛bw1⋅⋅⋅wd⎠
⎞,x=⎝
⎛1x1⋅⋅⋅xd⎠
⎞
也就是说我们需要确定 w \\boldw w和 b b b的值,来构建预测函数。
假设随机初始化 w \\boldw w和 b b b后,我们得到一个预测函数 h w h_w hw,我们的目标就是希望 h w h_w hw尽可能贴近目标函数。那又要如何评价当前构建出来的模型怎么样,评价两个模型的优劣,并如何向目标函数不断靠近呢?
即使用损失函数和优化算法。
损失函数
损失函数就是定义当前函数和目标函数之间的差异,并且我们期望这个差异(损失)越小越好。
使用误差平方和SSE来表示损失,即预测值和真实值差的平方求和,该方法也称为最小二乘法,二乘即平方的意思,求最小的损失。
总损失定义为:
J
(
w
)
=
1
2
∑
i
=
1
m
(
h
w
(
x
i
)
−
y
i
)
2
=
1
2
(
x
w
−
y
)
2
J(w)=\\frac12\\sum_i=1^m(h_w(x_i)-y_i)^2=\\frac12(\\boldx\\boldw-\\boldy)^2
J(w)=21i=1∑m(hw(xi)−yi)2=21(xw−y)2
其中
h
w
(
x
i
)
h_w(x_i)
hw(xi)表示训练样本
i
i
i的预测值,
y
i
y_i
yi是训练样本
i
i
i的真实值。
也就是使下图中黄色长度之和最小。
优化算法
正规方程
利用高中知识,求一个函数的最小值,我们可以求导,在导数为0处取得最小值。
这也是为什么损失函数乘以
1
2
\\frac12
21,为了求导后可以约掉。
对
w
\\boldw
w求导:
(
1
2
(
x
w
−
y
)
2
)
′
=
0
(
x
w
−
y
)
x
=
0
(
x
w
−
y
)
(
x
x
T
)
=
0
(
x
w
−
y
)
(
x
x
T
)
(
x
x
T
)
−
1
=
0
x
w
−
y
=
0
x
w
=
y
x
T
x
w
=
x
T
y
(
x
T
x
)
−
1
(
x
T
x
)
w
=
(
x
T
x
)
−
1
x
T
y
w
=
(
x
T
x
)
−
1
x
T
y
(\\frac12(\\boldx\\boldw-\\boldy)^2)^'=0\\\\ (\\boldx\\boldw-\\boldy)\\boldx=0\\\\ (\\boldx\\boldw-\\boldy)(\\boldx\\boldx^T)=0\\\\ (\\boldx\\boldw-\\boldy)(\\boldx\\boldx^T)(\\boldx\\boldx^T)^-1=0\\\\ \\boldx\\boldw-\\boldy=0\\\\ \\boldx\\boldw=\\boldy\\\\ \\boldx^T\\boldx\\boldw=\\boldx^T\\boldy\\\\ (\\boldx^T\\boldx)^-1(\\boldx^T\\boldx)\\boldw=(\\boldx^T\\boldx)^-1\\boldx^T\\boldy\\\\ \\boldw=(\\boldx^T\\boldx)^-1\\boldx^T\\boldy
(21(xw−y)2)′=0(xw−y)x=0(xw−y)(xxT)=0(xw−y)(xxT)(xxT)−1=0xw−y=0xw=yxTxw=xTy(xTx)−1(xTx)w=(xTx)−1xTyw=(xTx)−1xTy
一顿操作之后,也就是说如果
x
T
x
\\boldx^T\\boldx
xTx可逆(是正定矩阵),我们就可以直接求得最小损失对应的
w
\\boldw
w。
但是该方法适合样本特征数比较小的情况,不然矩阵太大了运算也很慢,因为复杂度是O(N3)。
使用numpy和scipy提供的矩阵运算,可以得到代码实现:
def Regres(X, Y):
x = mat(X) # 创建矩阵
y = mat(Y).T # 处理y为一列
if linalg.det(x.T * x) == 0.0: # 不可逆
return 0
else:
return (x.T * x).I * (x.T * y)
梯度下降
如果可逆,通过正规方程可以一步到位求得最优模型的参数 w \\boldw w。但如果不可逆,就不能使用该方法了。
使用梯度下降可以求得最小的损失值,其主要思想是求偏导按照梯度上升最快的方向进行求解,取其梯度反方向,即梯度下降。
比如三维特征中,其平面图可以像是山峰和谷底,那我们就是要从山峰出发,从最陡(梯度最大)的方向进行下山,从而到达谷底取最小值,但往往可能陷入其它谷底,只取到了极小值,可以修改步长(学习率)。
梯度下降算法内容较多,可见另一篇:浅谈梯度下降与模拟退火算法。
上图摘自网络。
(
插播反爬信息)博主CSDN地址:https://wzlodq.blog.csdn.net/
项目实战
使用波士顿房价数据集,sklearn内置了该数据集,也是查看详情
一元线性回归-梯度下降法-房价预测(代码片段)
数据32.502345269453031,31.7070058465699253.426804033275019,68.7775959816389161.530358025636438,62.56238229794580347.475639634786098,71.54663223356777759.813207869512318,87.23092513368739355.142188413943 查看详情
回归模型与房价预测(代码片段)
1.导入boston房价数据集2.一元线性回归模型,建立一个变量与房价之间的预测模型,并图形化显示。3.多元线性回归模型,建立13个变量与房价之间的预测模型,并检测模型好坏,并图形化显示检查结果。4. 一元多项式回归模... 查看详情
回归模型与房价预测(代码片段)
1.导入boston房价数据集2.一元线性回归模型,建立一个变量与房价之间的预测模型,并图形化显示。3.多元线性回归模型,建立13个变量与房价之间的预测模型,并检测模型好坏,并图形化显示检查结果。4. 一元多项式回归模... 查看详情
5.线性回归算法
...总结出来,可以配上图片,以及说明该知识点的重要性(1)回归与分类的区别 (2)线性回归的应用 ①房价预测②贷款额度预测③销售额预测④面积与房价的关系(3)矩阵的乘积运算(4)线性回归关系模型 (5)损... 查看详情
线性回归案例:波士顿房价预测(代码片段)
波士顿房价预测1.背景介绍2.案例分析3.回归性能评估4.代码实现4.1正规方程4.2梯度下降法5.小结1.背景介绍数据介绍给定的这些特征,是专家们得出的影响房价的结果属性。我们此阶段不需要自己去探究特征是否有用,只... 查看详情
02-06普通线性回归(波斯顿房价预测)+特征选择(代码片段)
目录普通线性回归(波士顿房价预测)一、导入模块二、获取数据2.1打印数据三、特征选择3.1散点图矩阵3.2关联矩阵四、训练模型五、可视化更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智... 查看详情
回归模型与房价预测(代码片段)
导入boston房价数据集fromsklearn.datasetsimportload_bostonboston=load_boston()print(boston.keys())一元线性回归模型,建立一个变量与房价之间的预测模型,并图形化显示。fromsklearn.datasetsimportload_bostonimportmatplotlib.pyplotaspltboston=load_ 查看详情
回归模型与房价预测(代码片段)
1.导入boston房价数据集fromsklearn.datasetsimportload_bostonboston=load_boston()boston.keys()print(boston.DESCR) boston.data.shapeimportpandasaspdpd.DataFrame(boston.data) 2.一元线性回归模型,建立一个变量与房价之间的预测模 查看详情
回归模型与房价预测(代码片段)
1.导入boston房价数据集fromsklearn.datasetsimportload_bostonboston=load_boston()boston.keys()print(boston.DESCR)boston.data.shapeimportpandasaspdpd.DataFrame(boston.data) 2.一元线性回归模型,建立一个变量与房价之间的预测模型,并图形化 查看详情
sklearn线性回归实现房价预测模型(代码片段)
目录题目要求单特征线性回归方案一方案二多特征线性回归两份数据ex1data1.txtex1data2.txt题目要求建立房价预测模型:利用ex1data1.txt(单特征)和ex1data2.txt(多特征)中的数据,进行线性回归和预测。作散点图可知,数据大致符合... 查看详情
回归模型与房价预测(代码片段)
...ta.shape 查看boston的数据形状,结果为(506,13)2.一元线性回归模型,建立一个变量与房价之间的预测模型,并图形化显示。 data=boston.datax=data[ 查看详情
05线性回归算法
...图片,以及说明该知识点的重要性。(1)监督学习的分类:回归算法与分类算法回归算法的简介:回归算法与分类算法的区别: (2)回归算法的具体应用:房价预测、销售额预测、(3)回归算法的定义: ... 查看详情
掌握spark机器学习库-07.6-线性回归实现房价预测(代码片段)
数据集house.csv数据概览代码packageorg.apache.spark.examples.examplesformlimportorg.apache.spark.ml.feature.VectorAssemblerimportorg.apache.spark.ml.regression.LinearRegressionimportorg.apache.spark.sql.SparkSe 查看详情
线性回归预测波士顿房价(代码片段)
...价,上次已经通过房间数目预测了房价,这次用多元线性回归预测。根据之前推导的多元线性回归的参数 接下来是多元线性回归的代码实现defLinearRegression_(x,y):np.array(x)np.array(y)a=(np.linalg.inv(x.T.dot(x))).dot(x.T).dot(y)上次大致了解... 查看详情
5.线性回归算法4/20(代码片段)
...上图片,以及说明该知识点的重要性 · 我们先了解回归算法: · 课上老师举了线性回归的应用:①房价预测;②销售额预测;③贷款额度预测; 我们可以发现做线性回归,需要的数据都应该为... 查看详情
一文带你用python玩转线性回归模型❤️加利福尼亚房价预测❤️回归模型评估指标介绍(代码片段)
...这一篇文章,我会详细介绍如何利用Python来实现线性回归以及线性回归的实战模拟,以及回归模型的评估指标的详细介绍,感兴趣的朋友可以看一看。目录前言1线性回归的Scikit-learn实现1.1导入模块后开始下载数据1.2... 查看详情
机器学习100天:008简单线性回归python实战(代码片段)
机器学习100天,今天讲的是:简单线性回归Python实战——房价预测。上一节课,我们通过引入房价预测的例子,讲解了线性回归的理论知识,以及如何最小化损失函数,来计算最优的参数www。今天我们就使用Python来编写一个简单... 查看详情