线性回归
回归分析
回归分析是一种预测性的建模技术,**它研究的因变量(目标)和自变量(预测器)之间的关系。**这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。通常使用曲线/线来拟合数据点,目标是使曲线到数据点的差异最小。
理论概述
线性回归是回归问题的一种,线性回归假设目标值与特征之间线性相关,即满足一个多元一次方程。
一元线性回归分析:只包含一个自变量和一个因变量,且二者的关系可用一条直线近似表示。
多元线性回归:包含两个或两个以上的自变量和一个因变量,且因变量与自变量之间是线性关系
通过构建损失函数,来求解损失函数最小时的参数 和 。一元线性回归通
长我们可以表达成如下公式:
y
^
=
w
x
+
b
\hat{y}=wx+b
y^=wx+b
y
^
\hat{y}
y^是预测值,自变量x和因变量y是已知的。
我们的目的是:预测新增一个x,其对应的y是多少。因此,为了构建这个函数关系,目标是通过已知数据点,求解线性模型中w和b两个参数。
目标/损失函数
损失函数用来评价模型的预测值和真实值不一样的程度。
损失函数越好,通常模型的性能越好。对于不同的模型,使用不同的损失函数。在应用中,通常通过最小化损失函数求解和评估模型。
对与最小参数,需要定量化一个目标函数式,使得计算机可以在求解过程中不断地优化。
针对任何模型求解问题,都是最终都是可以得到一组预测值 ,对比已有的
真实值 ,数据行数为 ,可以将损失函数定义如下:
即预测值与真实值之间的平均的平方距离,
统计中一般称其为MAE(mean square error)均方误差。把之前的函数式代入损失函数,并且将需要求解的参数w和b看做是函数L的自变量,可得:
现在的任务是求解最小化L是 ω \omega ω和b的值,
即核心目标优化式为:
两种求解方式:
1)梯度下降(gradient descent,GD):
对自变量进行不断的更新(针对
ω
\omega
ω和b偏导),使得目标函数不断逼近最小值的过程
ω
←
ω
−
α
∂
l
∂
ω
\omega\gets\omega-\alpha\frac{\partial l}{\partial\omega}
ω←ω−α∂ω∂l
b
←
b
−
α
∂
l
∂
ω
b\gets b- \alpha\frac{\partial l}{\partial\omega}
b←b−α∂ω∂l
一元线性回归函数推导过程
采用梯度下降的方法
设线性回归函数
y
^
=
ω
x
+
b
\hat{y} = \omega x+b
y^=ωx+b
构造损失函数(loss):
L
(
ω
,
b
)
=
1
2
n
∑
i
=
1
n
(
ω
x
i
+
b
−
y
i
)
2
L(\omega , b)= \frac{1}{2n}\sum_{i=1}^{n} (\omega x_{i} + b - y_{i})^2
L(ω,b)=2n1i=1∑n(ωxi+b−yi)2
思路:通过梯度下降法不断更新
ω
\omega
ω和b,当损失函数的值特别小时,就得到
了我们最终的函数模型
step1.求导:
step2.更新
θ
0
\theta_0
θ0和
θ
1
\theta_1
θ1:
step3.代入损失函数,求损失函数的值:
若得到的值小于
ε
\varepsilon
ε(一般
ε
\varepsilon
ε为0.01或0.001这样的小数),退出
否则,返回step1
梯度下降存在的问题
梯度下降的三种方法
批量梯度下降法(Batch Gradient Descent)
批量梯度下降法每次都使用训练集中的所有样本更新参数。它得到的是一个全局最优解,但是每迭代一步,都要用到训练集所有的数据。
优点:可以得到全局最优解
缺点:样本数据集大时,训练速度慢。
随机梯度下降法(Stochastic Gradient Descent)
随机梯度下降法每次更新都从样本随机选择1组数据,因此随机梯度下降比
批量梯度下降在计算量上会大大减少。SGD有一个缺点是,其噪音较BGD
要多,使得SGD并不是每次迭代都向着整体最优化方向。而且SGD因为每
次都是使用一个样本进行迭代,因此最终求得的最优解往往不是全局最优
解,而只是局部最优解。但是大的整体的方向是向全局最优解的,最终的
结果往往是在全局最优解附近。
优点:训练速度较快。
缺点:过程杂乱,准确度下降。
小批量梯度下降法(Mini-batch Gradient Descent)
小批量梯度下降法对包含n个样本的数据集进行计算。综合了上述两种方
法,既保证了训练速度快,又保证了准确度。
举例分析
波士顿房价预测
房屋价格与面积(数据在下面表格中):
输出结果
多元线性回归(采用梯度下降方式)
理论分析
设置一个回归方程:
h
θ
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
3
+
.
.
.
+
θ
n
x
n
h_\theta = \theta_{0} +\theta_{1}x_{1}+\theta_{2}x_{2}+\theta_{3}x_{3}+...+\theta_{n}x_{n}
hθ=θ0+θ1x1+θ2x2+θ3x3+...+θnxn
添加一个列向量
这样方程可以写为:
h
θ
=
θ
0
x
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
3
+
.
.
.
+
θ
n
x
n
h_\theta = \theta_{0}x_{0} +\theta_{1}x_{1}+\theta_{2}x_{2}+\theta_{3}x_{3}+...+\theta_{n}x_{n}
hθ=θ0x0+θ1x1+θ2x2+θ3x3+...+θnxn
既不会影响到方程的结果,而且使x与
θ
\theta
θ的数量一致以便于矩阵计算。
为了更方便表达,分别记为:
这样方程就变为:
由回归方程推导出损失方程:
梯度下降
鸢尾花数据集
先导入需要的库
三种数据集
训练集
参与训练,模型从训练集中学习经验,从而不断减小训练误差。这个最容
易理解,一般没什么疑惑。
验证集
不参与训练,用于在训练过程中检验模型的状态,收敛情况。验证集通常
用于调整超参数,根据几组模型验证集上的表现决定哪组超参数拥有最好
的性能。
同时验证集在训练过程中还可以用来监控模型是否发生过拟合,一般来说
验证集表现稳定后,若继续训练,训练集表现还会继续上升,但是验证集
会出现不升反降的情况,这样一般就发生了过拟合。所以验证集也用来判
断何时停止训练
测试集
不参与训练,用于在训练结束后对模型进行测试,评估其泛化能力。在之
前模型使用【验证集】确定了【超参数】,使用【训练集】调整了【可训
练参数】,最后使用一个从没有见过的数据集来判断这个模型的好坏。
交叉验证
回归模型评价指标
参考:
1.https://www.cnblogs.com/geo-will/p/10468253.html
2.https://blog.csdn.net/weixin_44613063/article/details/88659981
3.https://blog.csdn.net/HaoZiHuang/article/details/104819026
4.https://blog.csdn.net/qq_43673118/article/details/105490502