收集我的模型的数据后:
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。
有什么建议吗?
感谢。
答案 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的值通常需要做交叉验证