2016-07-29 44 views
8

与えられたデータの最小二乗推定値を計算したいと思います。numpy最小二乗結果が直接式を使用していないのはなぜですか?

これを行うにはいくつかの方法があり、一つはnumpyのの最小二乗法を使用することである:

Xが行列とY互換寸法(タイプのfloat64)のベクトルである
import numpy 
np.linalg.lstsq(X,y)[0] 

。第二の方法は、直接式を使用して結果を計算することである。

import numpy 
numpy.linalg.inv(X.T.dot(X)).dot(X.T).dot(y) 

私の問題:(差がないかもしれないが)異なる式が根本的に異なる結果を与える場合があります。 1つの数式を使用して係数が非常に大きくなり、もう一方の式がはるかにうまく動作することがあります。数式は同じですが、なぜ結果がそんなに大きく分かれるのですか?これは何らかの丸め誤差のタイプですか、どのように最小化するのですか?

+0

あなたのXに傍受が追加されていますか? – gobrewers14

答えて

5

これらの2つの式は数学的には同等ですが、ではありません。線形方程式Ax = bのシステムを解決するには、両辺にA ^( - 1)を掛けるよりも、Gaussian Eliminationの方が良い方法があります。 numpy.linalg.lstsqは、この(より洗練された)方法を使用して、基礎となる線形システムを解決します。さらに、多くのコーナーケースを処理できます。あなたができるときにそれを使用してください。

マトリックスの逆転は非常に数値的に不安定です。あなたがする必要がある場合を除き、それをしないでください。

関連する問題