1

PCA를 사용하여 훈련 세트의 치수를 줄이려고합니다. 두 가지 접근 방식을 접했습니다. 여기PCA - MATLAB을 사용한 치수 감소

[V,U,eigen]=pca(train_x); 
eigen_sum=0; 
for lamda=1:length(eigen) 
    eigen_sum=eigen_sum+eigen(lamda,1); 
    if(eigen_sum/sum(eigen)>=0.90) 
      break; 
    end  

end 
train_x=train_x*V(:, 1:lamda); 

는 단순히 원래 세트의 90 %를 나타내는 주성분 결정 기능 낮은 양의 트레이닝 세트를 재구성하기 위해 고유 행렬을 사용한다. 우리는 원래 훈련의 주요 구성 요소의 표현으로 설정 한 훈련을, 즉

train_x=U(:,1:lamda); 

:

내가 찾은 다른 방법으로 변경 마지막 줄을, 저장, 거의 정확하게 동일합니다 일부 기능 lamda를 설정합니다.

이 두 가지 방법 모두 비슷한 결과를 얻는 것으로 보이지만 차이는 있지만 아주 적습니다.

제 질문은 어떤 것이 올바른 방법입니까?

답변

1

답변은 데이터 및 수행하려는 작업에 따라 다릅니다.

변수 이름 사용. 일반적으로는 pca의 출력이

U = train_x * V 

을 유지할 것으로 예상하기 쉽다 그러나 데이터가 이미 각 구성 요소에서 평균을 제거 특별히 경우, 정규화 된 경우에만 해당됩니다. 그렇지 않다면, 하나는 무엇을 기대할 수

U = train_x * V - mean(train_x * V) 

입니다 그리고 그 점에서, 제거하거나 처리하기 전에 데이터의 평균을 유지하려면 날씨, 응용 프로그램에 따라 다릅니다.

그것은 또한 당신이 처리하기 전에 평균을 제거하더라도, 몇 가지 작은 차이가있을 수 있음을 언급하는 것은 가치가 있지만, 주위 소수점 정밀도 오류

((train_x * V) - U) ./ U ~~ 1.0e-15 

을 떠 것이다 그리고이 오류가 안전하게

을 무시할 수 있습니다
+0

답장을 보내 주셔서 감사합니다. 후속 조치 : 1) 데이터를 사용하여 능선 회귀 2) 나는 PCA 단계 이후와 능선 회귀 전과 나머지 동안 정상화합니다. 그러나 평균의 존재가 정규화 없이도 선형 회귀에 영향을주지 않아야합니다. 맞습니까? – Drakhlur

+0

예, 이론적으로 0이 아닌 평균 데이터는 선형 회귀만을 오프셋합니다. 원래 구성 요소의 수단은 'train_x * V'구성 요소의 수단과 동일하지 않도록주의해야합니다. 그리고 당신이 염두에두고있는 한 정상화의 나머지 부분은 괜찮을 것입니다. –