1 引言
给出多元线性回归的解法,本篇重点回答如何构造“梯度下降法解”的数学模型。
2 从线性回归模型到最小二乘法的构建
[问题] 对于给定向量集合Ω={Xi},i:={1,...m},Xi属于集合Rn;再给出一个数集Y={yi},i:={1,...m}存在一个映射{Di}→{Yi}试给出它们的最佳超平面模拟;
[分析] 映射 Z = Xα + β ; Z是m×1向量;X是m×n的矩阵; α是1×n的向量;β为标量常量
最小二乘法表达式: E = ∑i( yi - Zi )2
改写为: E = ∑i( yi - Xi α - β)2
重新拼接表达式:令 Xα + β = [X I ][α β],且W = [X,I],ω = [α,β]T
E = || Y - Wω||2
梯度表达式:∂E/∂ω = 2(-W)T( Y - W ω ); // 此处为E对ω的梯度;根据此梯度更新ω的系数;对矩阵求导后,需要转置换位;
令迭代序列为 {ω0 ω1 ω2 ω3 ... ωs }
其中 ωi+1 = ωi - 2ε(∂E/∂ω) , 其中ε是给定的迭代步长;每次迭代增加梯度方向上的ε个长度
至此,按照梯度逐步下降的方向,一步一步将ωi迭带为数值解。
3 Python代码实现
import numpy as np
Y = np.array([0.75,0.98,1.76,1.98,2.63])
W = np.array([[2.1,1],[2.98,1],[4.9,1],[6.1,1],[7.6,1]])
omig = np.array([0,0])
for i in range(60000):
mid = Y - np.dot(W,omig)
Gnd = -2*np.dot(W.T,mid)
omig = omig - 0.0002*Gnd
if (i%10000 == 0 ):
print omig
结果打印
[ 0.01807416 0.00324 ]
[ 0.33869174 0.0163087 ]
[ 0.33910011 0.0140404 ]
[ 0.33912152 0.01392144]
[ 0.33912265 0.0139152 ]
[ 0.3391227 0.01391487]
打印图