numpy linalg ルーチン lstsq を使用して連立方程式を解いています。私の A マトリックスのサイズは (11046, 504) ですが、私の B マトリックスのサイズは (11046, 1) で、決定されたランクは 249 であるため、x 配列について解かれたものの約半分は特に役に立ちません。特異値の s 配列を使用して、特異値に対応するパラメーターの解決済みをゼロにしたいのですが、 s 配列は統計的有意性の低い順に並べ替えられているようです。どの x が各特異値 s に対応するかを調べる方法はありますか?
質問する
1547 次
1 に答える
3
Mb = x
で与えられる方程式の最小二乗解を得るには、特異値分解を計算する をnumpy.linalg.lstsq
使用することもできます。最適解は として与えられます。ここで、は の疑似逆です。行列と(行列 の左特異ベクトルと右特異ベクトルを含む) と特異値が与えられると、 ベクトル を計算できます。これで、 for に含まれていないすべてのコンポーネントと同様に、 withのすべてのコンポーネントを解を変更することなく任意に選択できます。numpy.linalg.svd
M= U S V*
x
x = V Sp U* b
Sp
S
U
V*
M
s
z=V*x
z_i
z
i > rank(M)
x_j
z_i
i <= rank(M)
以下は、ウィキペディアの特異値分解x
に関するエントリのサンプル データを使用して、 の重要なコンポーネントを取得する方法を示す例です。
import numpy as np
M = np.array([[1,0,0,0,2],[0,0,3,0,0],[0,0,0,0,0],[0,4,0,0,0]])
#We perform singular-value decomposition of M
U, s, V = np.linalg.svd(M)
S = np.zeros(M.shape,dtype = np.float64)
b = np.array([1,2,3,4])
m = min(M.shape)
#We generate the matrix S (Sigma) from the singular values s
S[:m,:m] = np.diag(s)
#We calculate the pseudo-inverse of S
Sp = S.copy()
for m in range(0,m):
Sp[m,m] = 1.0/Sp[m,m] if Sp[m,m] != 0 else 0
Sp = np.transpose(Sp)
Us = np.matrix(U).getH()
Vs = np.matrix(V).getH()
print "U:\n",U
print "V:\n",V
print "S:\n",S
print "U*:\n",Us
print "V*:\n",Vs
print "Sp:\n",Sp
#We obtain the solution to M*x = b using the singular-value decomposition of the matrix
print "numpy.linalg.svd solution:",np.dot(np.dot(np.dot(Vs,Sp),Us),b)
#This will print:
#numpy.linalg.svd solution: [[ 0.2 1. 0.66666667 0. 0.4 ]]
#We compare the solution to np.linalg.lstsq
x,residuals,rank,s = np.linalg.lstsq(M,b)
print "numpy.linalg.lstsq solution:",x
#This will print:
#numpy.linalg.lstsq solution: [ 0.2 1. 0.66666667 0. 0.4 ]
#We determine the significant (i.e. non-arbitrary) components of x
Vs_significant = Vs[np.nonzero(s)]
print "Significant variables:",np.nonzero(np.sum(np.abs(Vs_significant),axis = 0))[1]
#This will print:
#Significant variables: [[0 1 2 4]]
#(i.e. x_3 can be chosen arbitrarily without altering the result)
于 2013-08-26T20:44:12.517 に答える