5

教師なし分類を行っています。このために、分類のために8つの機能(緑の分散、緑の標準分割、赤の平均、赤の分散、赤の標準分割、色相の平均、色相の分散、色相の標準分割)があります画像ごとに、PCA を使用して 3 つの最も重要な特徴を選択したいと考えています。機能選択用に次のコードを作成しました (機能の寸法は : 179X8) :

for c=1:size(feature,1)
   feature(c,:)=feature(c,:)-mean(feature)
end

DataCov=cov(feature); % covariance matrix
[PC,variance,explained] = pcacov(DataCov)

これは私に与えます:

PC =

0.0038   -0.0114    0.0517    0.0593    0.0039    0.3998    0.9085   -0.0922
0.0755   -0.1275    0.6339    0.6824   -0.3241   -0.0377   -0.0641    0.0052
0.7008    0.7113   -0.0040    0.0496   -0.0207    0.0042    0.0012    0.0002
0.0007   -0.0012    0.0051    0.0101    0.0272    0.0288    0.0873    0.9953
0.0320   -0.0236    0.1521    0.2947    0.9416   -0.0142   -0.0289   -0.0266
0.7065   -0.6907   -0.1282   -0.0851    0.0060    0.0003    0.0010   -0.0001
0.0026   -0.0037    0.0632   -0.0446    0.0053    0.9125   -0.4015    0.0088
0.0543   -0.0006    0.7429   -0.6574    0.0838   -0.0705    0.0311   -0.0001

分散 =

0.0179
0.0008
0.0001
0.0000
0.0000
0.0000
0.0000
0.0000

説明=

94.9471
4.1346
0.6616
0.2358
0.0204
0.0003
0.0002
0.0000

これは、第 1 主成分が 94.9% の分散を説明していることなどを意味しますが、これらは重要度の高いものから順に並べられています。上記の情報に基づいて、どの機能 (1 から 8) を選択するかをどのように知ることができますか?

4

3 に答える 3

6

あなたの問題は、 「データ分析を改善するためのCUR行列分解」でMahoneyとDrineasによって議論されたCOLUMNSELECTの問題と同じです。

最初に各ディメンションのレバレッジ スコアを計算し、次に、レバレッジ スコアを重みとして使用してランダムに 3 つを選択します。または、最大のものを選択することもできます。問題のスクリプトは次のとおりです。

私は最初にウェブから実際の自然の画像を取得し、あなたが求める寸法にサイズを変更しました。イメージは次のとおりです。

画像

%# Example data from real image of size 179x8
%# You can skip it for your own data
features = im2double(rgb2gray(imread('img.png')));

%# m samples, n dimensions
[m,n] = size(features);

次に、集中化されたデータを計算します。

%# Remove the mean
features = features - repmat(mean(features,2), 1, size(features,2));

主成分と係数の両方が得られるので、SVD を使用して PCA を計算します。サンプルが列にある場合、U主成分が保持されます。関係については、この論文の 2 ページ目を確認してください。

%# Compute the SVD
[U,S,V] = svd(features);

ここでの重要なアイデアは、ほとんどの変動を持つ寸法を取得したいということです。そして、データに何らかのノイズがあると仮定します。たとえば、データの 95% を表す優勢な固有ベクトルのみを選択します。

%# Compute the number of eigenvectors representing
%#  the 95% of the variation
coverage = cumsum(diag(S));
coverage = coverage ./ max(coverage);
[~, nEig] = max(coverage > 0.95);

nEig次に、主成分を使用してレバレッジ スコアが計算されます。つまり、nEig係数のノルムを取ります。

%# Compute the norms of each vector in the new space
norms = zeros(n,1);
for i = 1:n
    norms(i) = norm(V(i,1:nEig))^2;
end

次に、レバレッジ スコアを並べ替えることができます。

%# Get the largest 3
[~, idx] = sort(norms);
idx(1:3)'

最大のレバレッジ スコアを持つベクトルのインデックスを取得します。

ans =
   6     8     5

詳細は紙面にてご確認いただけます。

ただし、多くのディメンションがある場合は、PCA ベースの手法が適していることに注意してください。あなたの場合、検索スペースは非常に小さいです。私のアドバイスは、スペースを徹底的に検索し、@amit が推奨する最良の選択を取得することです。

于 2012-11-09T14:53:28.853 に答える
3

PCA は実際には一連の新しい機能を生成しており、それぞれが元の要素からの線形変換です。

したがって、取得したベクトルを、この分散を取得するために選択する必要があるフィーチャに直接変換することはできません。元のベクトルに基づいて新しいフィーチャを作成するだけです。
あなたの場合、次のようになります。

New_Feature = 0.038*F1 + 0.0755*F2 + 0.7008*F3 + ... + 0.0543*F8

これNew_Featureにより、次元の削減にもかかわらず、94.9471% の情報が得られます。
(そして、次の主要なコンポーネントについても同じことを行い、それらを同様に使用すると、明らかに情報ゲインが増加します)

元のサブセットを取得する必要があり、新しい機能を作成しない場合は、PCA の代わりに他の方法を使用していたでしょう。

遺伝的アルゴリズムは通常、サブセットの選択に非常に適しています。特徴のセットに 8 つの特徴しか含まれていない場合 (ブルート フォース検索を検討することもできます)、可能なサブセットは 2 8 =256 しかありません。場合によっては、すべてのサブセットを試して、最高のパフォーマンスが得られるものを確認できる場合があります。

于 2012-11-09T14:01:55.507 に答える
1

pcacov ドキュメントから:

COEFF は p 行 p 列の行列で、各列には 1 つの主成分の係数が含まれます。列は、コンポーネント分散の降順に並んでいます。

explainedは、最初の成分のみが説明分散に大きく寄与していることを示しているため、 の最初の列を見て、PCどの元の機能が使用されているかを確認する必要があります。

0.0038
0.0755
0.7008 <---
0.0007 
0.0320 
0.7065 <---
0.0026 
0.0543 

あなたの例では、3 番目と 6 番目の機能 ( <-- で示される) が最初の主成分の主な原因であることがわかります。これらの機能は最も重要なものと言えます。

同様に、1 番目、4 番目、および 7 番目の特徴は、 の最後の列のいくつかでのみ大きな重みを得るという事実に基づいて、PCそれらは比較的重要ではないと結論付けることができます。

ただし、この種の機能ごとの分析では、PCA は最適ではない可能性があります。同様に、元の特徴の標準偏差からそのような情報を導き出すこともできます。

于 2012-11-09T14:09:17.463 に答える