线性回归推导
原理
闭式求解
模型:$h_\theta(x)=\theta^TX$
损失函数:$J(\theta)=\left|X\theta-Y\right|_2^2$
目标:$\theta=\arg\min J(\theta)$
说明:
正规方程形式求解,即为直接求 $J(\theta)$ 的最小值:
先展开 $J(\theta)$ :
$$\begin{align*} J(\theta) &= \|X\theta - Y\|_{2}^{2} \\ &= (X\theta - Y)^{T}(X\theta - Y) \\ &= (X^{T}\theta^{T} - Y^{T})(X\theta - Y) \\ &= X^{T}\theta^{T}X\theta - Y^{T}X\theta - Y^{T}X\theta + Y^{T}Y \\ &= X^{T}\theta^{T}X\theta - 2Y^{T}X\theta + Y^{T}Y \end{align*} $$对 $J(\theta)$ 进行求导:
$$\begin{aligned} \frac{\partial J(\theta)}{\partial\theta}& =\frac{\partial X^T\theta^TX\theta-2Y^TX\theta+Y^TY}{\partial\theta} \\ &=2X^{T}X\theta-2Y^{T}X \end{aligned}$$令 $J(\theta)=0$ 得:
$$\begin{aligned} 2X^{T}X\theta-2Y^{T}X& =0 \\ X^{T}X\theta & =Y^{T}X \\ \theta & =(X^TX)^{-1}Y^TX \end{aligned}$$上述结果即为求解结果,需要说明的是:特征矩阵 $X$ 不满秩(即存在特征间的线性相关性),则正规方程求解过程中的矩阵求逆操作可能会导致数值不稳定性。
梯度下降求解
模型:$h_\theta(x)=\sum_{i=1}^d\theta_ix_i$
注:$x_i$表示$x$的第$i$维
损失函数:$J(\theta)=\frac1{2m}\sum_{j=0}^m\left(y^j-h_\theta(x^j)\right)^2$
注:$x^j$表示第$j$个样本
目标:$\theta=\arg\min J(\theta)$
说明:
损失函数 $J(\theta)$ 是一个关于参数 $\theta$ 的二次型,对 $J(\theta)$ 进行展开:
$$\begin{aligned} J(\theta)& =\frac{1}{2m}\sum_{j=0}^{m}\Big(y^{j}-h_{\theta}(x^{j})\Big) \\ &=\frac{1}{2m}\sum_{j=0}^{m}\Bigg(y^{j}-\sum_{i=1}^{d}\theta_{i}x_{i}^{j}\Bigg)^{2} \end{aligned}$$对 $J(\theta)$ 进行偏微分求导运算得到:
$$\begin{aligned} \partial\frac{J(\theta)}{\partial\theta_i}& =\frac{\partial}{\partial\theta_{i}}\frac{1}{2m}\sum_{j=0}^{m}\Bigg(y^{j}-\sum_{i=1}^{d}\theta_{i}x_{i}^{j}\Bigg)^{2} \\ &=\frac{1}{m}\sum_{j=0}^{m}\Bigg( y^{j}-\sum_{i=1}^{d}\theta_{i}x_{i}^{j}\Bigg)(-x_{i}^{j}) \\ &=\frac{1}{m}\sum_{j=0}^{m}\Bigg(\sum_{i=1}^{d}\theta_{i}x_{i}^{j}-y^{j}\Bigg)x_{i}^{j} \end{aligned}$$每次根据梯度更新参数:
$$\begin{aligned} \theta_{i}& =\theta_i-\alpha\partial\frac{J(\theta)}{\partial\theta_i} \\ &=\theta_i-\alpha(\frac1m\sum_{j=0}^m\biggl(\sum_{i=1}^d\theta_ix_i^j-y^j\biggr)x_i^j) \\ &=\theta_i+\alpha \frac{1}{m}\sum_{j=0}^m\Bigg( y^j-\sum_{i=1}^d\theta_ix_i^j\Bigg)x_i^j \end{aligned}$$梯度下降法步骤:
$\text{Repeat until convergence } \{$ $$\theta_i:=\theta_i+\alpha\:\frac{1}{m}\sum_{j=0}^m\Bigg(y^j-\sum_{i=1}^d\theta_ix_i^j\Bigg)x_i^j$$ $\}$Python实现
导包
1 | # 导入所需的包 |
读取数据集
1 | # 读取数据 |
数据预处理
1 | # 1)处理缺失值 |
划分数据集
1 | feature = coded_df.iloc[:, :8].join(coded_df.iloc[:, -5:]) |
求解模型
评价指标R^2
1 | # 计算R^2 |
数据标准化
1 | # 数据标准化 |
闭合形式求解
1 | # 1)线性回归模型的闭合形式参数求解 |
梯度下降求解
1 | # 2)线性回归梯度下降参数求解 |
实验结果
Comments
Comment plugin failed to load
Loading comment plugin