机器学习=====>线性回归

线性回归


最近很久没出来活动了,好多学习资源被我浪费了,经过了半年的错过。现在感觉到自己不济,抓紧时间吧。

回归正题,线性回归试图学得 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=1m(f(xi)yi)2=(w,b)arg mini=1m(f(xi)ωxib)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ωxib)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=1mxi2i=1m(yib)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) bE(ω,b)=2(mbi=1m(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=1mxi2m1(i=1mxi)2i=1myi(xixˉ)

b = 1 m ∑ − i = 1 m ( y i − ω x i ) b=\frac{1}{m}\sum-{i=1}^{m}(y_{i}-\omega x_{i}) b=m1i=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ˉ=m1i=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})} bP(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(θ)=lni=1m2π σ1e(2σ((yiωxi)2))=mln2π σ12σ21i=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(ω)=21i=1m(yiωxi)2=21i=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往往不是满秩矩阵)

length=20,width=20
救命的西瓜书来了,,常用的做法是引入正则化项,前提是列多于行(也就是所谓的变量很多,样例少)。
对数线性回归 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=g1(ωTx+b)
其中 g − 1 g^{-1} g1 称之为“联系函数”,对数线性回归是广义线性模型在 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(yiyˉ)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库里的小沙粒来学习,空了继续更新自己的学习路。
欢迎评论区留言 敲我

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值