齐次线性方程组最小二乘解
非齐次线性方程组:常数项不全为0的线性方程组。
最小二乘解:
齐次线性方程组:常数项全为0的线性方程组。
当齐次线性方程组没有严格零解时,我们需要通过最小二乘法寻找近似解,即找到非零向量,使得残差平方和
最小。
直接最小化会导致零解,但零解无实际意义,因此需要添加归一化约束排除零解,最常用的约束是
,即
。齐次线性方程组的解不是唯一的,可以按比例缩放,任何
仍是解,
是标准化了解的比例。
此时最小化问题转化为带约束的最小二乘优化:
通过拉格朗日乘子法将有约束问题转为无约束问题,构造拉格朗日函数:
求极值即对求偏导为0(利用矩阵性质
):
结合目标函数 ,最小化
即最小化
。
所以齐次线性方程组的最小二乘解
是
的最小特征值对应的特征向量。
示例代码:
x = np.linspace(0, 99, 100)
y = 2 * x + 6.5 + np.random.randn(100)
plt.close('all')
plt.figure()
plt.plot(x, y)B = np.column_stack([x, y, np.ones(100)])
eigenvalues, eigenvectors = np.linalg.eig(np.dot(B.T, B))
idx = np.argmin(eigenvalues)
u = eigenvectors[:, idx]
a = u[0]
b = u[1]
c = u[2]
print("k={}, b={}".format(-a / b, -c / b))
y_pred = -a / b * x + (-c / b)
plt.plot(x, y_pred)