线性回归
最近很久没出来活动了,好多学习资源被我浪费了,经过了半年的错过。现在感觉到自己不济,抓紧时间吧。
回归正题,线性回归试图学得
f
(
x
i
)
=
ω
x
i
+
b
f(x_{i})=\omega x_{i}+b
f(xi)=ωxi+b,使得
f
(
x
i
)
≃
y
i
f(x_{i})\simeq y_{i}
f(xi)≃yi。
西瓜书讲到均方误差 MSE 是回归任务中最常用的性能度量,试图让 MSE 最小化。
(
ω
∗
,
b
∗
)
=
a
r
g
m
i
n
(
w
,
b
)
∑
i
=
1
m
(
f
(
x
i
)
−
y
i
)
2
=
a
r
g
m
i
n
(
w
,
b
)
∑
i
=
1
m
(
f
(
x
i
)
−
ω
x
i
−
b
)
2
(\omega^*,b^*)=\underset{(w,b)}{arg\ min}\sum_{i=1}^{m}(f(x_{i})-y_{i})^2 \\=\underset{(w,b)}{arg\ min}\sum_{i=1}^{m}(f(x_{i})-\omega x_{i}-b)^2
(ω∗,b∗)=(w,b)arg mini=1∑m(f(xi)−yi)2=(w,b)arg mini=1∑m(f(xi)−ωxi−b)2
基于均方误差最小化来进行模型求解的方法称之为“最小二乘法”。
求解
ω
\omega
ω 和
b
b
b 使
E
(
w
,
b
)
=
∑
i
=
1
m
(
y
i
−
ω
x
i
−
b
)
2
E_{(w,b)}=\sum_{i=1}^{m}(y_{i}-\omega x_{i}-b)^2
E(w,b)=∑i=1m(yi−ωxi−b)2最小化的过程,称之为线性回归模型的最小二乘“参数估计”。
将
E
(
w
,
b
)
E_{(w,b)}
E(w,b)分别对
ω
\omega
ω 和
b
b
b 求导,得到:
∂ E ( ω , b ) ∂ ω = 2 ( ω ∑ i = 1 m x i 2 − ∑ i = 1 m ( y i − b ) x i ) − − − − − ( 1.1 ) \frac{\partial E(\omega,b)}{\partial \omega} =2(\omega\sum_{i=1}^{m}x_{i}^2-\sum_{i=1}^{m}(y_{i}-b)x_{i})-----(1.1) ∂ω∂E(ω,b)=2(ωi=1∑mxi2−i=1∑m(yi−b)xi)−−−−−(1.1)
∂ E ( ω , b ) ∂ b = 2 ( m b − ∑ i = 1 m ( y i − ω x i ) ) − − − − ( 1.2 ) \frac{\partial E(\omega,b)}{\partial b} =2(mb-\sum_{i=1}^{m}(y_{i}-\omega x_{i})) ----(1.2) ∂b∂E(ω,b)=2(mb−i=1∑m(yi−ωxi))−−−−(1.2)
令式(1.1)和(1.2)为0可得到 ω \omega ω 和 b b b 最优解的闭式解
ω = ∑ i = 1 m y i ( x i − x ˉ ) ∑ i = 1 m x i 2 − 1 m ( ∑ i = 1 m x i ) 2 \omega=\frac{\sum_{i=1}^{m}y_{i}(x_{i}-\bar{x})}{\sum_{i=1}^{m}x_{i}^2-\frac{1}{m}(\sum_{i=1}^{m}x_{i})^2} ω=∑i=1mxi2−m1(∑i=1mxi)2∑i=1myi(xi−xˉ)
b = 1 m ∑ − i = 1 m ( y i − ω x i ) b=\frac{1}{m}\sum-{i=1}^{m}(y_{i}-\omega x_{i}) b=m1∑−i=1m(yi−ωxi)
在这里,可以先求出 b b b ,然后带入(1.1)式中,求出 ω \omega ω ,其中 x ˉ = 1 m ∑ i = 1 m x i \bar{x}=\frac{1}{m}\sum_{i=1}^{m}x_{i} xˉ=m1∑i=1mxi 为 x i x_{i} xi 的均值。
更一般的情形给定数据 D D D ,样本由 d d d 个属性描述,此时试图学得
f
(
x
i
)
=
ω
T
x
i
+
b
f(x_{i})=\omega^{T}x_{i}+b
f(xi)=ωTxi+b使得
f
(
x
i
)
≃
y
i
f(x_{i})\simeq y_{i}
f(xi)≃yi
一般地,
b
∼
P
(
b
i
)
=
1
2
π
σ
e
(
−
(
(
b
i
)
2
)
2
σ
)
b\sim P\left(b^i\right)=\frac{1}{\sqrt{2\pi}\sigma}e^{(-\frac{((b^{i})^2)}{2\sigma})}
b∼P(bi)=2πσ1e(−2σ((bi)2))
写出似然函数
L
(
ω
)
⇒
P
(
f
(
x
i
)
∣
x
i
:
ω
)
=
1
2
π
σ
e
(
−
(
(
y
i
−
ω
x
i
)
2
)
2
σ
)
L(\omega)\Rightarrow P(f(x_{i})\mid x_{i}:\omega )=\frac{1}{\sqrt{2\pi}\sigma}e^{(-\frac{((y^{i}-\omega x^{i})^2)}{2\sigma})}
L(ω)⇒P(f(xi)∣xi:ω)=2πσ1e(−2σ((yi−ωxi)2))
取对数,写出对数似然
ln L ( θ ) = ln ∏ i = 1 m 1 2 π σ e ( − ( ( y i − ω x i ) 2 ) 2 σ ) = m ln 1 2 π σ − 1 2 σ 2 ∑ i = 1 m ( y i − ω x i ) 2 \ln L(\theta)\\=\ln \prod_{i=1}^{m}\frac{1}{\sqrt{2\pi}\sigma}e^{(-\frac{((y^{i}-\omega x^{i})^2)}{2\sigma})} \\ =m\ln\frac{1}{\sqrt{2\pi}\sigma}-\frac{1}{2\sigma^2}\sum_{i=1}^{m}(y^{i}-\omega x^{i})^2 lnL(θ)=ln∏i=1m2πσ1e(−2σ((yi−ωxi)2))=mln2πσ1−2σ21∑i=1m(yi−ωxi)2
观察上式,为使得误差最小(尽可能的小),只需要似然公式的后半部分尽可能的小即可。
取
U
(
ω
)
=
1
2
∑
i
=
1
m
(
y
i
−
ω
x
i
)
2
=
1
2
∑
i
=
1
m
(
u
(
ω
(
x
i
)
)
−
y
i
)
2
=
1
2
(
x
ω
−
y
)
T
(
x
ω
−
y
)
U(\omega)\\=\frac{1}{2}\sum_{i=1}^{m}(y^{i}-\omega x^{i})^2\\=\frac{1}{2}\sum_{i=1}^{m}(u(\omega(x^{i}))-y^{i})^2\\=\frac{1}{2}(x\omega-y)^T(x\omega-y)
U(ω)=21∑i=1m(yi−ωxi)2=21∑i=1m(u(ω(xi))−yi)2=21(xω−y)T(xω−y)
此处,是把数据集
D
D
D 表示成矩阵形式。
对
U
(
ω
)
U(\omega)
U(ω) 的
ω
\omega
ω 求导可得:
∂
U
(
ω
)
∂
ω
=
X
T
X
ω
−
X
T
y
\frac{\partial U(\omega) }{\partial \omega}=X^TX\omega-X^Ty
∂ω∂U(ω)=XTXω−XTy
其中,主要是将
1
2
(
x
ω
−
y
)
T
(
x
ω
−
y
)
\frac{1}{2}(x\omega-y)^T(x\omega-y)
21(xω−y)T(xω−y) 先转置运算,乘积打开,再求导。
令
∂
U
(
ω
)
∂
ω
=
0
\frac{\partial U(\omega) }{\partial \omega}=0
∂ω∂U(ω)=0 可得:
ω
=
(
X
T
X
)
−
1
X
T
y
\omega=(X^TX)^{-1}X^Ty
ω=(XTX)−1XTy
以为喜大普奔了,现实中往往是残酷的(
X
T
X
X^TX
XTX往往不是满秩矩阵)
救命的西瓜书来了,,常用的做法是引入正则化项,前提是列多于行(也就是所谓的变量很多,样例少)。
对数线性回归:
l
n
y
=
ω
T
x
+
b
lny=\omega^Tx+b
lny=ωTx+b 。这个式子只是隐式函数而已,火眼金睛还是线性回归,但其实质上是在求取输入空间到输出空间的非线性函数映射。
不懂?画一个
y
=
e
ω
T
x
+
b
y=e^{\omega^Tx+b}
y=eωTx+b 与
y
′
=
ω
T
x
+
b
y'=\omega^Tx+b
y′=ωTx+b 。比对点与点的联系。
不过,实际中样例数真的有这么穷到比变量少的?(保留)
广义线性模型:
y
=
g
−
1
(
ω
T
x
+
b
)
y=g^{-1}(\omega^Tx+b)
y=g−1(ωTx+b)
其中
g
−
1
g^{-1}
g−1 称之为“联系函数”,对数线性回归是广义线性模型在
g
(
⋅
)
=
l
n
(
⋅
)
g(\cdot)=ln(\cdot)
g(⋅)=ln(⋅) 时的特例。
对于常用的评估项
R
2
=
1
−
∑
(
y
i
^
−
y
i
)
2
∑
(
y
i
−
y
ˉ
)
2
R^2 = 1-\frac{\sum (\hat{y_{i}}-y_{i})^2}{\sum (y_{i}-\bar{y})^2}
R2=1−∑(yi−yˉ)2∑(yi^−yi)2 ,这个当然是越接近于1越好啊。
机器学习的套路来了?
对于得到
y
=
ω
T
x
+
b
y=\omega^Tx+b
y=ωTx+b 这样一个目标函数,直接求解,未必一定可解啊(表示不想死在计算上)。交给机器一大把数据,来,线性回归,解一下,必须的线性回归,别的我都不要,如何迭代自己产生能量。这里主要是讲第二种求解方法:梯度下降
梯度下降:对自变量不停地更新,也就是 y = ω T x + b y=\omega^Tx+b y=ωTx+b 中对 ω \omega ω 和 b b b 求偏导,使得目标函数不断趋近于最小值的一个过程。
批量梯度下降: 把所有样本都扔进去,容易得到最优解,但是速度上就很慢了。
随机梯度下降: 每次找一个样本,迭代速度快,但不一定每次都朝着收敛的方向。
小批量梯度下降: 每次更新,选择一小部分数据来算,实用性较强。
自己来一波儿?(这不是在为难我吗?┭┮﹏┭┮)
记得没错的话,可以使用sklearn里自带的数据集---------波士顿房价预测
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression,SGDRegressor
from sklearn.metrics import mean_squared_error
使用 LinearRegression() 得到的线性回归的预测系数:
[[-0.10355227 0.16306988 0.00343696 0.09555156 -0.23497297 0.25485994
0.01771771 -0.37762936 0.3073077 -0.22716396 -0.21499725 0.07761778
-0.43457091]]
采用 SGDRegressor() 求得的线性回归的预测系数:
[-6.82294546e-02 9.46123678e-02 -4.82762279e-02 1.11277826e-01
-1.06705658e-01 3.15981788e-01 2.15120318e-04 -2.32268920e-01
9.51851934e-02 -4.53409990e-02 -1.97275683e-01 7.73113250e-02
-3.89289986e-01]
最后给出线性回归和梯度下降法的 MSE:
线性方程的 MSE: 16.81885806991436
梯度下降法下均方误差为: 15.562294247971021
仅仅是用了sklearn库里的小沙粒来学习,空了继续更新自己的学习路。
欢迎评论区留言 敲我