2014-04-25 2 views
22

치수가 m x n 인 행렬에서 PCA를 실행하려고합니다. 여기서 m은 피처 수이고 n은 샘플 수입니다.scikit-learn PCA를 사용하여 기능 감소 및 폐기 된 기능 알아보기

최대 분산으로 nf 기능을 보존한다고 가정합니다. scikit-learn으로 나는이 방법으로 그것을 할 수 있어요 :

from sklearn.decomposition import PCA 

nf = 100 
pca = PCA(n_components=nf) 
# X is the matrix transposed (n samples on the rows, m features on the columns) 
pca.fit(X) 

X_new = pca.transform(X) 

지금, 나는 n 개의 X의 NF의 형상을 갖는 새로운 매트릭스 X_new를 얻을. 어떤 기능이 삭제되었거나 유지 된 기능인지를 아는 것이 가능합니까?

감사

+3

특징은 작은 크기에 투영하고 다양한 기능 사이의 흥미로운 연결을 나타 내기 위해 생각되어 삭제되지 않습니다. –

+0

감사합니다. Tom, PCA를 기능 선택에 사용할 수 있다고 생각했지만 (잘못된 경우 올바르다) 주 구성 요소의 데이터를 다시 크기 조정하는 데만 사용됩니다. 그것을 읽으면서 나는 그 질문을 끝낼 것이라고 생각합니다. – gc5

+1

출력 매트릭스의 모양은'(nf, n)'이 아니라'(n, nf)'이어야합니다. – eickenberg

답변

24

PCA 개체가 피팅 중에 결정한 기능은 pca.components_입니다. pca.components_에 걸친 것과 직교하는 벡터 공간은 버려집니다.

PCA는 미리 정의 된 기능 (사용자가 지정한 열로 인코딩 됨)을 "버리거나"보존하지 않습니다. 최대 분산의 직교 방향을 찾기 위해 (가중치 합계로) 모두를 섞습니다.

이것이 당신이 찾고있는 행동이 아니라면, PCA 차원 감소는 갈 길이 아닙니다. 몇 가지 간단한 일반적인 기능 선택 방법은 sklearn.feature_selection

+1

나는 마침내 PCA가 무엇을하는지 이해했다. 지형지 물이 주요 구성 요소와 상관 관계가있는 경우 계산할 선호 상관 관계 함수가 있습니까? 이런 식으로 나는 내 데이터 집합에서 가장 대표적인 차원을 찾을 수있을 것이라고 생각한다. (틀렸다면 나에게 맞춰라.) 피어슨이나 코사인 유사성을 사용할 수 있습니까? – gc5

+5

PCA를 이해하는 데 도움이됩니다;) - 질문에 대답 할 수 있으려면 * feature * 및 * dimension *이 의미하는 바를 명확하게 밝혀야합니다. 둘 모두와 혼동 할 가능성이 있습니다. 지정한 기능은 행렬의 열입니다. PCA 구성 요소 0이 기능 'i'를 사용하는지 확인하기 위해'pca.components_ [0, i]'를'pca.components_ [0]'의 나머지 부분과 비교할 수 있습니다. 그래서 귀하의 질문을 올바르게 이해한다면 대답은 주어진 PC를보고 어떤 기능이 가장 강한 가중치를 갖는지 확인하는 것입니다. – eickenberg

+5

면책 조항 : 주요 구성 요소의 가중치에 따라 기능을 선택하면 흥미로운 내용을 얻을 수도 있고 얻지 못할 수도 있습니다. 다시 한번, PCA는 표준 축에 정의 된 기능을 버리지 않기 위해 만들어진 것이 아닙니다. 자신이하고있는 일을 확실하게하기 위해서, 타겟이 숫자인지 범주인지에 따라'sklearn.feature_selection.SelectKBest'를 사용하여'sklearn.feature_selection.f_classif' 또는'sklearn.feature_selection.f_regression'을 사용하여'k' 특징을 선택해보십시오. – eickenberg

2

주성분 상에 투사 기능이 중요한 정보를 유지 (최대 차이로 축)되며 작은 방울로 분산 축. 이 동작은 compression (폐기하지 않음)과 같습니다. 그것은 당신이 여기에 X_rec

X_rec = pca.inverse_transform(X_proj) # X_proj is originally X_new 

재구성 할 수 principal components

위에 X의 투사이기 때문에

그리고 X_projX_new의 더 나은 이름이고, X_recX에 가까운,하지만 less important 정보는 PCA에 의해 삭제되었습니다. 그래서 우리는 X_rec이 denoised라고 말할 수 있습니다.

내 의견으로는 the noise이 삭제되었다고 말할 수 있습니다.

0

위의 답변이 잘못되었습니다. sklearn 사이트는 components_ 배열이 정렬되어 있음을 분명히 표시합니다. 따라서 중요한 기능을 식별하는 데 사용할 수 없습니다.

components_ : 배열 데이터의 최대 변화의 방향을 나타내는 기능 공간 [n_components, n_features] 주축. 구성 요소는 explain_variance_로 정렬됩니다.

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html