2016-07-29 13 views
8

Verilen veriler için en küçük kareler tahminini hesaplamak istiyorum.Nümerik en küçük kareler, doğrudan formülün kullanılmasıyla sonuçlanır?

yapmak için birkaç yol vardır, bir numpy en az kareler kullanmaktır:

X, bir matris ve y
import numpy 
np.linalg.lstsq(X,y)[0] 

uyumlu boyut (tip float64) bir vektör.

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

My sorun: İkinci bir şekilde direkt olarak formül kullanılarak sonucu hesaplamak için (bir fark söz konusu olsa da), farklı formüller farklı bir sonuç elde durumlar vardır. Bazen katsayılar bir formül kullanarak aşırı derecede büyürken, diğeri çok daha iyi davranır. Formüller aynıdır, bu yüzden sonuç neden bu kadar çok farklı olabilir? Bu bir çeşit yuvarlama hatası mı ve nasıl en aza indiririm?

+0

X'inize bir kesişen var mı? – gobrewers14

cevap

5

Bu iki formül matematiksel olarak eşdeğer olsa da, , sayısal olarak eşdeğer değildir! Lineer denklemler sistemini çözmek için daha iyi yollar vardır: Ax = b, her iki tarafı da Gaussian Elimination gibi A^(- 1) ile çarpmaktan daha iyidir. numpy.linalg.lstsq, altta yatan doğrusal sistemi çözmek için bu (ve daha karmaşık) yöntemleri kullanır, ayrıca çok sayıda köşe kutusuyla başa çıkabilir. Öyleyse kullanabildiğin zaman kullan.

Matris dönüşümü çok sayısal olarak kararsız. Yapmadıkça yapma.