2012-11-09 2 views
3

자발적 분류를하고 있습니다. 이를 위해 필자는 분류를 위해 녹색의 분산, 녹색의 표준 편, 적의 평균, 적분의 분산, 적색의 표준 편차, 색의 평균, 색조의 분산, 색의 분산, 색조의 표준 편차 등 8 가지 기능을 제공합니다. PCA를 사용하여 가장 중요한 3 가지 기능을 선택하고 싶습니다. 이것은 나에게주는PCA를 사용하여 기능을 선택

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

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

: 나는 (: 179X8 기능의 차원입니다) 기능 선택 에 대한 다음과 같은 코드를 작성했습니다 =

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 

이것은 첫 번째 주요 구성 요소가 94.9 %의 분산을 설명하고 있다는 것을 의미합니다. 그러나 이것들은 가장 중요도가 낮은 순서입니다. 위의 정보를 기반으로 선택할 기능 (1에서 8까지)을 어떻게 알 수 있습니까?

+0

'feature' 변수의 내용을 http://codepaste.net/과 같이 인터넷 어딘가에 붙여넣고 링크를 공유 할 수 있습니까? – petrichor

답변

4

문제는 Mahoney와 Drineas가 설명한 "CUR matrix decompositions for improved data analysis"의 COLUMNSELECT 문제와 같습니다.

그들은 먼저 각 차원에 대한 레버리지 점수를 계산 한 다음 레버리지 점수를 가중치로 사용하여 임의로 3 개를 선택합니다. 또는 가장 큰 것을 선택할 수 있습니다. 문제의 스크립트는 다음과 같습니다.

나는 웹에서 실제 자연의 이미지를 얻은 다음 요청한 크기로 크기를 조정합니다. 다음과 같이 이미지입니다 :

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

나는 당신의 주요 구성 요소 및 계수를 모두 제공하기 때문에 SVD는 PCA를 계산하기 위해 사용

img

%# 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); 

그런 다음, 중앙 집중식 데이터를 계산한다. 샘플이 열에 있으면 U이 주요 구성 요소를 보유합니다. 관계에 대한 두 번째 페이지 this paper을 확인하십시오.

%# 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 계수의 표준을 취합니다.

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

을 가장 큰 활용 점수와 벡터의 인덱스를 얻을 : 다음

%# 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 

, 우리는 레버리지 점수를 정렬 할 수 있습니다

ans = 
    6  8  5 

당신은 더 많은 것을 위해 용지를 확인하실 수 있습니다 세부.

그러나 많은 치수가있는 경우 PCA 기반 기술이 좋습니다. 귀하의 경우 검색 공간이 매우 작습니다. 나의 충고는 공간에서 철저히 검색하여 @amit이 권장하는 최선의 선택을하는 것이다.

+0

@ petrichor. 나는 예를 들어 이미지의 특정 관심 영역에서 추출 된 특징을 가지고있다. 나는 서로 다른 혈관을 가진 이미지를 가지고 있으며,이 혈관들의 각각에서 혈관의 중심선 픽셀에 특징을 추출했습니다. 위에서 설명한 것처럼, 기능 매트릭스는 특정 관심 영역의 기능이 아닌 이미지입니다. 나는 당신의 방법이 여전히 나의 경우에 적용 가능한지 알고 싶다. – Dev

+1

@Dev 나의 예제는 MATLAB에서 그것을 구현하는 방법을 보여주는 장난감의 의미없는 예제이다. 그것은 당신의 경우에 실제로 의미가 있습니다. – petrichor

2

PCA는 실제로 새로운 요소 집합을 생성합니다. 각 요소는 원래 요소의 선형 변환입니다.

따라서 벡터는 원본을 기반으로 새로운 기능을 생성하므로이 벡터를 얻기 위해 선택한 기능으로 직접 변환 할 수 없습니다. 귀하의 경우에는
, 당신은 얻을 :

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

New_Feature는 차원 축소에도 불구하고, 당신에게 94.9471 % 정보 이득을 제공합니다.
당신이 원본의 부분 집합을 취득해야하는 경우

(당신이 다음 원칙 comopnents에 대한 동일한 기능을 수행 할뿐만 아니라 그들을 사용하는 경우, 당신은 분명 정보의 이득을 증가), 새로운 기능을 만들 수 없습니다 - 나는 것 PCA 대신 다른 방법을 사용했습니다.

유전자 알고리즘은 일반적으로 하위 집합 선택에 매우 적합하며 기능 집합에 8 개의 기능 만 포함되어있는 경우 무차별 검색을 고려해 볼 수 있습니다. = 256 개의 가능한 하위 집합 만 있습니다. 경우에 따라 모든 하위 집합을 시도하고 최상의 성능을 제공하는 것이 무엇인지 볼 수도 있습니다. pcacov docs 가입일

+0

@ amit. 당신의 답변에 감사드립니다. 감독되지 않은 분류를 사용하고 있습니다. 즉, 데이터를 설정하는 훈련을받지 못했습니다. 내 knowlegde 당으로서 나는 훈련 데이터 세트가 필요하기 때문에 GA (Genetic Algorithm)를 사용할 수 없다. Pls. 내가 틀렸다면 나를 바로 잡아라. 무 감독 분류에 GA를 사용할 수 있습니까? – Dev

+1

@Dev : 클러스터링을 의미합니까?그렇다면 어쩌면 모든 기능을 사용하는 클러스터를 찾을 수 있습니다. 그리고 그 사실을 근거로 GA 및 기타 하위 집합 선택 알고리즘을 사용하여 충분히 근접한 하위 집합을 찾습니다. 또는 PCA에 충실 할 수 있지만 원래 기능의 일부가 아닌 "새로운 기능"을 얻고 있다는 것을 알아 두십시오. – amit

1

:

COEFF 한 주성분에 대한 계수들을 포함하는 각각의 컬럼은 P 별 P 매트릭스이다. 열은 구성 요소 분산이 감소하는 순서입니다.

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

그것은 밝혀 : explained 이후

는 첫 번째 구성 요소는 정말 설명 분산에 상당한 기여 보여줍니다, 당신은 그것을 사용 원래있는 기능을 볼 수 PC의 첫 번째 열에서 찾아야한다 귀하의 예에서 3 번째 및 6 번째 피쳐 (< -로 표시)가 첫 번째 주요 구성 요소의 주된 원인입니다.이러한 기능이 가장 중요한 기능이라고 할 수 있습니다.

마찬가지로 첫 번째, 네 번째 및 일곱 번째 기능은 PC의 마지막 열 중 일부에서만 큰 가중치를 갖기 때문에 상대적으로 중요하지 않다고 결론을 내릴 수 있습니다.

그러나 이러한 종류의 기능 분석을 사용하면 PCA가 가장 적합하지 않을 수 있습니다. 원래 기능의 표준 편차에서 이러한 정보를 얻을 수 있습니다.

+0

답변을 주셔서 감사합니다.하지만 마지막 문장을 자세히 설명해주십시오. 표준 편차에서 기능을 정렬하는 방법을 understod하지 않았다 .... 미리 감사드립니다 – Dev

관련 문제