最小二乘问题

时间:2010-11-07 02:53:46

标签: least-squares

收集我的模型的数据后:

y = b(0)+ b(1)x(1)+ ... + b(i)x(i)

y = Xb,其中y是列向量(n * 1),X是矩阵(n * m),b是(m * 1)。

我使用普通最小二乘法(OLS)在python中实现了一个解决方案来找到b。我的问题是我的解决方案完全取决于X是否可逆。如果X不是,那么我无法使用OLS估计b。

有什么建议吗?

感谢。

2 个答案:

答案 0 :(得分:2)

是的,使用SVD(奇异值分解)来求解该方程组。

答案 1 :(得分:0)

如果有人稍后发现,矩阵X是n×m,因此对于n不等于m,它将永远不可逆。求解OLS的正规方程将涉及矩阵X ^ T * X的反演,并且只要X高且具有线性独立的列,这将始终是可逆的(通常如果你有更多的话测量值比变量估算)。

如果X ^ T * X不可逆,则必须进行某种简化假设。通常,这个假设是(大致)权重b很小,除非有足够的数据显示否则。这是通过将正方形问题转换为

来捕获的

最小化|| Xb - y || ^ 2 + lambda * || b || ^ 2

其中lambda是一个正标量。基本上这会对参数b的大值进行惩罚。你当然可以通过缩放lambda来使这个惩罚任意大或小。而不是OLS解决方案

b_ols = inv(X ^ T * X)* X ^ T * y

你可以用数学来找到正则化问题的解决方案

b_reg = inv(X ^ T * X + lambda * I)* X ^ T * y

对于λ的任何正值,矩阵总是是可逆的。找到一个好的" lambda的值通常需要做交叉验证