我的在执行MATLAB矩阵形式的多因素线性回归和我所遇到以下警告:
警告:矩阵接近奇异或严重缩放。结果可能是不准确的。 RCOND =不便。
我怀疑这是因为,我执行线性回归,我下面的标准方法,其中系数的矢量是((X'X)^(-1))*(X'Y)
的方式。我的矩阵X
如下格式:第一栏就是所有1
从而使拦截,可以发现,在我使用x
坐标的权力(所以多项式基础模型)等栏目,所以x
然后x^2
,x^3
等。 (列矢量)。我认为错误的出现是由于这样的事实,具有较高的碱值是非常小的,而且不知何故,把他们变成NaN
,从而警告。
我想用另一个变量的类型,但双是一样大,因为它得到?有没有办法再逼MATLAB不分配这些极小值NaN
?如果那是当然的了什么呢MATLAB。
一些意见。 (请在年底的定义,如果被标记混淆。)
X'*X / n
,你想X” * X是满秩!该错误是告诉你,高达机器精度,这个假设是违反!
我猜你的一列始终接近于0,或当你提高到高功率,两列数字变成类似(如0或在同一行很大。)试想一下,线性方程:
y = b1 * x1 + b2 * x2 + e
如果X2始终为零,你永远不会正确地评估B2,它可能是10,也可能是10 ^ 10。基本上是相同的成立当X 2是极为接近零的所有时间或列的一些线性组合在数字上靠近另一列:然后在数据微小的微小变化会导致在估算大幅波动。在数学方面,发生的事情是,E [X_I * X_I']比满秩有效较少。
一些尝试,检查cond(X'*X)
通过3加X事权1,检查cond(X'*X)
筹集x到权力1,虽然4,1到5,等等。在某些时候,你的条件数会通过屋顶作为X'*X
成为数字差点被秩亏。X'*X
的条件数是合理的。
也许你只能估计多达2阶多项式系数!不要贪婪,并试图估计什么是不可能的。b = X \ y
你的估计。
对于任何线性方程,求解,其中x = INV斧= C(A)×c是不是最佳的。形成逆是不必要的。您可以直接求解线性系统A\c
。在这个问题中,你可以解决你的系数与b
b = (X'*X) \ (X' * y);
而由于途中\
运营商的作品(它解决了最小二乘法意义上的超定),最简单的代码是:
b = X \ y; % USE THIS! (you can treat as a magical incantation to solve b = inv(X'*X) * X'y
最后这一点是不是你的问题的根源,但你无论如何都应该修复它。定义:
b
中线性方程y_i = x_i' * b + e_i
估计ķ。MATLAB不引入NaN的,只是因为数量也少(甚至是非常小的)。如果您输入x向量没有NaN的它然后MATLAB是不是把它们放入X ^ 2或x ^ 3或x ^ N。
但是,如果你的X矩阵的一列或多列接近于零,那么你有一个病态矩阵,是不是真的适合这个回归。你需要重新考虑你试图使用模型(即多项式的程度)。
顺便说一句,对于这个特定的问题,除非你需要编写自己的功能,那么你可以只使用polyfit,或在统计工具箱中的许多回归功能之一。
如果你需要编写自己的函数,那么请确保您使用的是反斜杠运算符不inv
功能,即使用(X'*X)\(X'*Y)
不inv(X'*X)*(X'*Y)
。