[回归] 线性回归之解析解的推导过程

线性回归

Linear Regression——线性回归

是什么?

是机器学习中有监督机器学习下的一种简单的回归算法。
分为一元线性回归(简单线性回归)和多元线性回归,其中一元线性回归是多元线性回归的一种特殊情况,我们主要讨论多元线性回归

做什么?

回归问题关注的是一个因变量和一个或多个自变量的关系,根据已知的自变量来预测因变量.
如果因变量和自变量之间的关系满足线性关系(自变量的最高幂为一次),那么我们可以用线性回归模型来拟合因变量与自变量之间的关系.

怎么做?

简单线性回归的公式如下:
y ^ = a x + b \hat y=ax+b y^=ax+b
多元线性回归的公式如下:
y ^ = θ T x \hat y= \theta^T x y^=θTx
上式中的 θ \theta θ为系数矩阵,x为单个多元样本.
由训练集中的样本数据来求得系数矩阵,求解的结果就是线性回归模型,预测样本带入x就能获得预测值 y ^ \hat y y^,求解系数矩阵的具体公式接下来会推导.

推导过程

推导总似然函数

假设线性回归公式为 y ^ = θ x \hat y= \theta x y^=θx.
真实值y与预测值 y ^ \hat y y^之间必然有误差 ϵ = y ^ − y \epsilon=\hat y-y ϵ=y^y,按照中心极限定理(见知识储备),我们可以假定 ϵ \epsilon ϵ服从正态分布,正态分布的概率密度公式为:
ρ ( x ) = 1 σ 2 π e − ( x − μ ) 2 2 σ 2 \rho (x)=\frac {1}{\sigma\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} ρ(x)=σ2π 1e2σ2(xμ)2
为了模型的准确性,我们希望 ϵ \epsilon ϵ的值越小越好,所以正态分布的期望 μ \mu μ为0.概率函数需要由概率密度函数求积分,计算太复杂,但是概率函数和概率密度函数呈正相关,当概率密度函数求得最大值时概率函数也在此时能得到最大值,因此之后会用概率密度函数代替概率函数做计算.
我们就得到了单个样本的误差似然函数( μ = 0 , σ \mu=0,\sigma μ=0,σ为某个定值):

ρ ( ϵ ) = 1 σ 2 π e − ( ϵ − 0 ) 2 2 σ 2 \rho (\epsilon)=\frac {1}{\sigma\sqrt{2\pi}}e^{-\frac{(\epsilon-0)^2}{2\sigma^2}} ρ(ϵ)=σ2π 1e2σ2(ϵ0)2

而一组样本的误差总似然函数即为:
L θ ( ϵ 1 , ⋯   , ϵ m ) = f ( ϵ 1 , ⋯   , ϵ m ∣ μ , σ 2 ) L_\theta(\epsilon_1,\cdots,\epsilon_m)=f(\epsilon_1,\cdots,\epsilon_m|\mu,\sigma^2) Lθ(ϵ1,,ϵm)=f(ϵ1,,ϵmμ,σ2)
因为我们假定了 ϵ \epsilon ϵ服从正态分布,也就是说样本之间互相独立,所以我们可以把上式写成连乘的形式:

f ( ϵ 1 , ⋯   , ϵ m ∣ μ , σ 2 ) = f ( ϵ 1 ∣ μ , σ 2 ) ∗ ⋯ ∗ f ( ϵ m ∣ μ , σ 2 ) f(\epsilon_1,\cdots,\epsilon_m|\mu,\sigma^2)=f(\epsilon_1|\mu,\sigma^2)*\cdots*f(\epsilon_m|\mu,\sigma^2) f(ϵ1,,ϵmμ,σ2)=f(ϵ1μ,σ2)f(ϵmμ,σ2)

所以
L θ ( ϵ 1 , ⋯   , ϵ m ) = ∏ i = 1 m f ( ϵ i ∣ μ , σ 2 ) = ∏ i = 1 m 1 σ 2 π e − ( ϵ i − 0 ) 2 2 σ 2 L_\theta(\epsilon_1,\cdots,\epsilon_m)=\prod^m_{i=1}f(\epsilon_i|\mu,\sigma^2)=\prod^m_{i=1}\frac {1}{\sigma\sqrt{2\pi}}e^{-\frac{(\epsilon_i-0)^2}{2\sigma^2}} Lθ(ϵ1,,ϵm)=i=1mf(ϵiμ,σ2)=i=1mσ2π 1e2σ2(ϵi0)2

在线性回归中,误差函数可以写为如下形式:
ϵ i = ∣ y i − y ^ i ∣ = ∣ y i − θ T x i ∣ \epsilon_i=|y_i-\hat y_i|=|y_i-\theta^Tx_i| ϵi=yiy^i=yiθTxi

最后可以得到在正态分布假设下的总似然估计函数如下:
L θ ( ϵ 1 , ⋯   , ϵ m ) = ∏ i = 1 m 1 σ 2 π e − ( ϵ i − 0 ) 2 2 σ 2 = ∏ i = 1 m 1 σ 2 π e − ( y i − θ T x i ) 2 2 σ 2 L_\theta(\epsilon_1,\cdots,\epsilon_m)=\prod^m_{i=1}\frac {1}{\sigma\sqrt{2\pi}}e^{-\frac{(\epsilon_i-0)^2}{2\sigma^2}}=\prod^m_{i=1}\frac {1}{\sigma\sqrt{2\pi}}e^{-\frac{(y_i-\theta^Tx_i)^2}{2\sigma^2}} Lθ(ϵ1,,ϵm)=i=1mσ2π 1e2σ2(ϵi0)2=i=1mσ2π 1e2σ2(yiθTxi)2

推导损失函数

按照最大总似然的数学思想(见知识储备),我们可以试着去求总似然的最大值.
遇到连乘符号的时候,一般思路是对两边做对数运算(见知识储备),获得对数总似然函数:
l ( θ ) = l o g e ( L θ ( ϵ 1 , ⋯   , ϵ m ) ) = l o g e ( ∏ i = 1 m 1 σ 2 π e − ( y i − θ T x i ) 2 2 σ 2 ) l(\theta)=log_e(L_\theta(\epsilon_1,\cdots,\epsilon_m))=log_e(\prod^m_{i=1}\frac {1}{\sigma\sqrt{2\pi}}e^{-\frac{(y_i-\theta^Tx_i)^2}{2\sigma^2}}) l(θ)=loge(Lθ(ϵ1,,ϵm))=loge(i=1mσ2π 1e2σ2(yiθTxi)2)

l ( θ ) = l o g e ( ∏ i = 1 m 1 σ 2 π e − ( y i − θ T x i ) 2 2 σ 2 ) = ∑ i = 1 m l o g e 1 σ 2 π e x p ( − ( y i − θ T x i ) 2 2 σ 2 ) = m l o g e 1 σ 2 π − 1 2 σ 2 ∑ i = 1 m ( y i − θ T x i ) 2 l(\theta) = log_e(\prod^m_{i=1}\frac {1}{\sigma\sqrt{2\pi}}e^{-\frac{(y_i-\theta^Tx_i)^2}{2\sigma^2}})\\ = \sum_{i=1}^mlog_e\frac {1}{\sigma\sqrt{2\pi}}exp({-\frac{(y_i-\theta^Tx_i)^2}{2\sigma^2}})\\=mlog_e\frac{1}{\sigma\sqrt{2\pi}}-\frac{1}{2\sigma^2}\sum^m_{i=1}(y^i-\theta^Tx^i)^2 l(θ)=loge(i=1mσ2π 1e2σ2(yiθTxi)2)=i=1mlogeσ2π 1exp(2σ2(yiθTxi)2)=mlogeσ2π 12σ21i=1m(yiθTxi)2

前部分是一个常数,后部分越小那么总似然值越大,后部分则称之为损失函数,则有损失函数的公式 J ( θ ) J(\theta) J(θ):
J ( θ ) = 1 2 ∑ i = 1 m ( y i − θ T x i ) 2 = 1 2 ∑ i = 1 m ( y i − h θ ( x i ) ) 2 = 1 2 ∑ i = 1 m ( h θ ( x i ) − y i ) 2 J(\theta)=\frac{1}{2}\sum^m_{i=1}(y^i-\theta^Tx^i)^2\\=\frac{1}{2}\sum^m_{i=1}(y^i-h_\theta(x^i))^2\\=\frac{1}{2}\sum^m_{i=1}(h_\theta(x^i)-y^i)^2\\ J(θ)=21i=1m(yiθTxi)2=21i=1m(yihθ(xi))2=21i=1m(hθ(xi)yi)2

解析方法求解线性回归

要求的总似然最大,需要使得损失函数最小,我们可以对损失函数求导.
首先对损失函数做进一步推导:
J ( θ ) = 1 2 ∑ i = 1 m ( h θ ( x i ) − y i ) 2 = 1 2 ( X θ − y ) T ( X θ − y ) J(\theta)=\frac{1}{2}\sum^m_{i=1}(h_\theta(x^i)-y^i)^2=\frac{1}{2}(X\theta-y)^T(X\theta-y) J(θ)=21i=1m(hθ(xi)yi)2=21(Xθy)T(Xθy)
注意上式中的X是一组样本形成的样本矩阵, θ \theta θ是系数向量,y也是样本真实值形成的矩阵,这一步转换不能理解的话可以试着把 1 2 ( X θ − y ) T ( X θ − y ) \frac{1}{2}(X\theta-y)^T(X\theta-y) 21(Xθy)T(Xθy)带入值展开试试.
所以
J ( θ ) = 1 2 ∑ i = 1 m ( h θ ( x i ) − y i ) 2 = 1 2 ( X θ − y ) T ( X θ − y ) = 1 2 ( ( X θ ) T − y T ) ( X θ − y ) = 1 2 ( θ T X T − y T ) ( X θ − y ) = 1 2 ( θ T X T X θ − y T X θ − θ T X T y + y T y ) J(\theta)=\frac{1}{2}\sum^m_{i=1}(h_\theta(x^i)-y^i)^2\\=\frac{1}{2}(X\theta-y)^T(X\theta-y)\\=\frac{1}{2}((X\theta)^T-y^T)(X\theta-y)\\=\frac{1}{2}(\theta^TX^T-y^T)(X\theta-y)\\=\frac{1}{2}(\theta^TX^TX\theta-y^TX\theta-\theta^TX^Ty+y^Ty) J(θ)=21i=1m(hθ(xi)yi)2=21(Xθy)T(Xθy)=21((Xθ)TyT)(Xθy)=21(θTXTyT)(Xθy)=21(θTXTXθyTXθθTXTy+yTy)

根据黑塞矩阵可以判断出 J ( θ ) J(\theta) J(θ)是凸函数,即 J ( θ ) J(\theta) J(θ)的对 θ \theta θ的导数为零时可以求得 J ( θ ) J(\theta) J(θ)的最小值.
J ( θ ) J(\theta) J(θ)求导,对矩阵求导的知识可以参考’知识储备’章节:

∂ J ( θ ) ∂ θ = 1 2 ( 2 X T X θ − ( y T X ) T − X T y ) = 1 2 ( 2 X T X θ − X T y − X T y ) = X T X θ − X T y \frac{\partial J(\theta)}{\partial\theta}=\frac{1}{2}(2X^TX\theta-(y^TX)^T-X^Ty)\\=\frac{1}{2}(2X^TX\theta-X^Ty-X^Ty)\\=X^TX\theta-X^Ty θJ(θ)=21(2XTXθ(yTX)TXTy)=21(2XTXθXTyXTy)=XTXθXTy

当上式等于零时可以求得损失函数最小时对应的 θ \theta θ,即我们最终想要获得的系数矩阵:
X T X θ − X T y = 0 X T X θ = X T y ( ( X T X ) − 1 X T X ) θ = ( X T X ) − 1 X T y E θ = ( X T X ) − 1 X T y θ = ( X T X ) − 1 X T y X^TX\theta-X^Ty=0\\X^TX\theta=X^Ty\\ ((X^TX)^{-1}X^TX)\theta=(X^TX)^{-1}X^Ty\\ E\theta=(X^TX)^{-1}X^Ty\\\theta=(X^TX)^{-1}X^Ty XTXθXTy=0XTXθ=XTy((XTX)1XTX)θ=(XTX)1XTyEθ=(XTX)1XTyθ=(XTX)1XTy

(顺便附上一元线性回归的系数解析解公式: θ = ∑ i = 1 m ( x i − x ‾ ) ( y i − y ‾ ) ∑ i = 1 m ( x i − x ‾ ) 2 \theta=\frac{\sum^m_{i=1}(x_i-\overline{x})(y_i-\overline{y})}{\sum^m_{i=1}(x_i-\overline{x})^2} θ=i=1m(xix)2i=1m(xix)(yiy))

实例

简单实现

import numpy as np
import matplotlib.pyplot as plt
# 随机创建训练集,X中有一列全为'1'作为截距项
X = 2 * np.random.rand(100, 1)
y = 5 + 4 * X + np.random.randn(100, 1)
X = np.c_[np.ones((100,1)),X]

# 按上面获得的解析解来求得系数矩阵theta
theta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)

# 打印结果
print(theta)

# 测试部分
X_test = np.array([[0],
               [2]])
X_test = np.c_[(np.ones((2, 1))), X_test]
print(X_test)
y_predict = X_test.dot(theta)
print(y_predict)

plt.plot(X_test[:,-1], y_predict, 'r-')
plt.plot(X[:,-1], y, 'b.')
plt.axis([0, 2, 0, 15])
plt.show()

sklearn实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

X = 2 * np.random.rand(100, 1)
y = 5 + 4 * X + np.random.randn(100, 1)
X = np.c_[np.ones((100,1)),X]

# 新建线性回归模型
model = LinearRegression(fit_intercept=False)
# 代入训练集数据做训练
model.fit(X,y)

# 打印训练结果
print(model.intercept_,model.coef_)
X_test = np.array([[0],
               [2]])
X_test = np.c_[(np.ones((2, 1))), X_test]
print(X_test)
y_predict =model.predict(X_test)
print(y_predict)

plt.plot(X_test[:,-1], y_predict, 'r-')
plt.plot(X[:,-1], y, 'b.')
plt.axis([0, 2, 0, 15])
plt.show()

优点

使用解析解的公式来求得地模型是最准确的.

缺点

计算量非常大,这会使得求解耗时极多,因此我们一般用的都是梯度下降法求解.

知识储备

距离公式

机器学习中常见的距离公式 - WingPig - 博客园

中心极限定理

是什么?
是讨论随机变量序列部分和分布渐近于正态分布的一类定理。这组定理是数理统计学和误差分析的理论基础,指出了大量随机变量累积分布函数逐点收敛到正态分布的积累分布函数的条件。线性回归中的误差 ϵ \epsilon ϵ就可以看作是一个随机变量.
做什么?
在自然界与生产中,一些现象受到许多相互独立的随机因素的影响,如果每个因素所产生的影响都很微小时,总的影响可以看作是服从正态分布的,中心极限定理从数学上证明了这一现象.
怎么做?
按照中心极限定理,我们可以认为当随机变量 ϵ \epsilon ϵ足够多的时候,是服从正态分布(即高斯分布).正态分布的概率密度函数公式为:
f ( x ) = 1 σ 2 π e − ( x − μ ) 2 2 σ 2 f(x)=\frac {1}{\sigma\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} f(x)=σ2π 1e2σ2(xμ)2
机器学习中我们常常假设误差符合均值为0,方差为定值的正态分布!!

最大似然值估计

是什么?
是一种统计方法
做什么?
求一个样本集的相关概率密度函数的参数,即估计一个数据集的概率密度函数.在线性回归算法中,要做的就是求正态分布函数中的 μ \mu μ,这里用来估计正态分布中的方差参数值.
我们要求得的是似然值最大时的参数.
怎么做?
假设每一个误差 ϵ \epsilon ϵ都服从正态分布,将所有的 ϵ \epsilon ϵ叠加起来可以获得总似然,即将每一个 ϵ \epsilon ϵ的概率函数相乘.
但是要求正态分布的概率函数需要对概率密度函数做积分,为了便于运算这里可以直接把正态分布的概率密度函数相乘,找到概率密度相乘最大时相当于找到了概率相乘最大的时候.

矩阵求导

常用的矩阵求导公式有:
[回归] 线性回归之解析解的推导过程_第1张图片

你可能感兴趣的:(机器学习)