我想實現最小二乘法:最小二乘:Python的
我有:$ y = \ THETA \歐米茄$
的最小二乘解是\歐米茄=(\ THETA^{T】\ THETA)^ { - 1} \ THETA^{T】ý
我tryied:
import numpy as np
def least_squares1(y, tx):
"""calculate the least squares solution."""
w = np.dot(np.linalg.inv(np.dot(tx.T,tx)), np.dot(tx.T,y))
return w
的問題是,這種方法很快變得不穩定 (對於小的問題它沒關係)
我意識到,當我比較了結果該最小二乘計算:
import numpy as np
def least_squares2(y, tx):
"""calculate the least squares solution."""
a = tx.T.dot(tx)
b = tx.T.dot(y)
return np.linalg.solve(a, b)
比較這兩種方法: 我試圖與,度12 [1 x的多項式擬合數據,的x^2,X^3中,x^4 ...,X^12]
第一種方法:
第二種方法:
你知道爲什麼第一個方法發散大型多項式?
P.S.如果您想測試這些功能,我只是爲了您的方便而添加了「像np一樣進口numpy」。
你見過[numpy.linalg。lstsq](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.linalg.lstsq.html)? –
@JonClements Thansk ...我改寫了我的問題 – james
我的猜測是因爲'inv'函數沒有考慮到這個事實,即你所反轉的矩陣總是Hermitian,並且使用適用於算法的算法一般矩陣。 除了內置'lstsq'函數外,最好的辦法是使用Cholesky分解('cholesky')。 – Kevin