3

Pythonで主成分分析に従ってPythonでPCAを使用してますが、選択する機能(つまり、どの列/機能が最も分散が大きいか)を決定するのに苦労しています。

を使用するscipy.linalg.svdと、特異値が自動的にソートされるため、それらがどの列に属しているかわかりません。

コード例:

import numpy as np
from scipy.linalg import svd
M = [
     [1, 1, 1, 1, 1, 1],
     [3, 3, 3, 3, 3, 3],
     [2, 2, 2, 2, 2, 2],
     [9, 9, 9, 9, 9, 9]
]
M = np.transpose(np.array(M))
U,s,Vt = svd(M, full_matrices=False)
print s

特異値をソートせずにこれを実行する別の方法はありますか?

更新:少なくともMatlabフォーラムのこの投稿( http://www.mathworks.com/matlabcentral/newsreader/view_thread/241607)によると、これは不可能なようです。誰かが他のことを知っているなら、私に知らせてください:)

4

1 に答える 1

2

PCAが特徴選択を行ったのに対し、代わりに特徴抽出を行ったという誤った印象を受けました。

代わりに、PCAは新しい一連の機能を作成します。各機能は、入力機能の組み合わせです。

PCAから、本当に特徴選択を行いたい場合は、PCAで作成された特徴の入力特徴の重みを確認できます。たとえば、matplotlib.mlab.PCAライブラリはプロパティの重みを提供します(ライブラリの詳細)。

from matplotlib.mlab import PCA
res = PCA(data)
print "weights of input vectors: %s" % res.Wt

ただし、特徴抽出ルートがPCAを使用する方法のように聞こえます。

于 2013-01-11T20:26:59.870 に答える