线性回归
线性回归(linear regression)是一种用于预测回归问题的算法.
一、线性回归模型
线性回归是对“目标变量随着某个特征变量的增大而增大(或者减小)”这种关联性建模的方法。其假设目标变量 y 是自变量 x 的线性函数。可以分为一元线性回归和多元线性回归。

1. 一元线性回归
一元线性回归是最简单的线性回归模型,它只有一个自变量 x。其数学表达式为:
其中,w 是斜率(或叫权重),b 是截距。
2. 多元线性回归
多元线性回归扩展了一元线性回归,它包含多个自变量。其数学表达式为:
y=w1x1+w2x2+⋯+wdxd+b
用向量表示为:
y=wTx+b
其中,w=(w1,w2,…,wd),x=(x1,x2,…,xd)。
二、损失函数和最优化算法

在线性回归中,常用的损失函数是均方误差(Mean Squared Error, MSE)。均方误差衡量了预测值与实际值之间的差异,其公式为:
E(w,b)=i=1∑m(yi−(wTxi+b))2
最优化算法的目标是找到使损失函数最小的参数 w 和 b。基于均方误差最小化来进行模拟求解的方法称为 “最小二乘法”。在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧氏距离之和最小。
三、最小二乘法
最小二乘法通过最小化预测值与实际值之间的平方误差来求解参数。下面详细介绍一元线性回归和多元线性回归中最小二乘法的计算。
1. 一元线性回归的最小二乘法
对于一元线性回归,损失函数为:
E(w,b)=i=1∑m(yi−(wxi+b))2
对 w 和 b 求导得到:
∂w∂E(w,b)∂b∂E(w,b)=2(wi=1∑mxi2−i=1∑m(yi−b)xi),=2(mb−i=1∑m(yi−wxi)),
上式推导过程如下:
∂w∂E(w,b)=∂w∂[i=1∑m(yi−wxi−b)2]=i=1∑m∂w∂[(yi−wxi−b)2]=i=1∑m[2(yi−wxi−b)(−xi)]=2i=1∑m[(wxi2−yixi+bxi)]=2(wi=1∑mxi2−i=1∑myixi+bi=1∑mxi)=2(wi=1∑mxi2−i=1∑m(yi−b)xi)
∂b∂E(w,b)=∂b∂[i=1∑m(yi−wxi−b)2]=i=1∑m∂b∂[(yi−wxi−b)2]=i=1∑m[2(yi−wxi−b)(−1)]=2i=1∑m[b−yi+wxi]=2[i=1∑mb−i=1∑myi+i=1∑mwxi]=2(mb−i=1∑m(yi−wxi))
令上式为零可得到 w 和 b 最优解的闭式解:
w=∑i=1mxi2−m1(∑i=1mxi)2∑i=1myi(xi−x)
b=m1i=1∑m(yi−wxi)
2. 多元线性回归的最小二乘法
我们把 w 和 b 吸收入向量形式 w^=(w;b):
X=x11x21⋮xm1x12x22⋮xm2……⋱…x1dx2d⋮xmd11⋮1=x1Tx2T⋮xmT11⋮1
w^∗=argw^min(y−Xw^)T(y−Xw^)
对于多元线性回归,损失函数为:
Ew^=(y−Xw^)T(y−Xw^)
对 w^ 求导得到:
∂w^∂Ew^=2XT(Xw^−y)
令上式为零可得:
w^∗=(XTX)−1XTy
四、代码实现
import numpy as np
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
y = np.array([1, 2, 2, 3])
X_b = np.c_[np.ones((X.shape[0], 1)), X]
beta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
X_new = np.array([[0, 2], [2, 5]])
X_new_b = np.c_[np.ones((X_new.shape[0], 1)), X_new]
y_predict = X_new_b.dot(beta_best)
print("预测结果:", y_predict)
五、总结
线性回归通过最小二乘法来最小化预测值和实际值之间的误差,从而得到模型参数。一元线性回归适用于单一特征,多元线性回归适用于多特征。
参考文献: