특히 sklearn의 PCA 기능을 사용하여 차원 축소를 시도하고 있습니다.
from sklearn.decomposition import PCA
def mypca(X,comp):
pca = PCA(n_components=comp)
pca.fit(X)
PCA(copy=True, n_components=comp, whiten=False)
Xpca = pca.fit_transform(X)
return Xpca
for n_comp in range(10,1000,20):
Xpca = mypca(X,n_comp) # X is a 2 dimensional array
print Xpca
comp에 대해 다른 값을 가진 루프에서 mypca 함수를 호출하고 있습니다. 해결하려는 문제에 대해 comp의 최상의 가치를 찾기 위해이 작업을 수행하고 있습니다. 그러나 mypca 함수는 comp 값에 관계없이 항상 동일한 값, 즉 Xpca를 반환합니다.
반환하는 값은 루프에서 보내는 comp의 첫 번째 값에 대해 정확합니다. 즉, 매번 보내는 Xpca 값은 제 경우에 comp = 10에 대해 정확합니다.
comp의 최상의 가치를 찾으려면 어떻게해야합니까?
구성 요소 수에 대해 서로 다른 값을 전달하고 각각에 다시 맞추려는 것 같습니다. PCA의 좋은 점은 실제로이 작업을 수행 할 필요가 없다는 것입니다. 전체 구성 요소 수 (데이터 세트의 차원만큼 많은 구성 요소 포함)를 채운 다음 원하지 않는 구성 요소 (즉, 분산이 작은 구성 요소)를 버릴 수 있습니다. 이는 더 적은 수의 부품으로 전체 모델을 다시 맞추는 것과 같습니다. 많은 계산을 절약합니다.
방법 :
# x = input data, size(<points>, <dimensions>)
# fit the full model
max_components = x.shape[1] # as many components as input dimensions
pca = PCA(n_components=max_components)
pca.fit(x)
# transform the data (contains all components)
y_all = pca.transform(x)
# keep only the top k components (with greatest variance)
k = 2
y = y_all[:, 0:k]
구성 요소 수를 선택하는 방법은 수행하려는 작업에 따라 다릅니다. 성분 수를 선택하는 한 가지 표준 방법은의 각 선택에 의해 k
설명 된 분산 비율 ( R^2
) 을 보는 것 입니다 k
. 데이터가 저 차원 선형 부분 공간 근처에 분포되어있는 경우 R^2
대 를 플로팅 할 때 k
곡선은 '팔꿈치'모양을 갖습니다. 팔꿈치는 부분 공간의 차원에 위치합니다. 데이터를 이해하는 데 도움이되므로이 곡선을 보는 것이 좋습니다. 깨끗한 팔꿈치가 없더라도 R^2
분산의 95 %를 유지하기 위해에 대한 임계 값을 선택하는 것이 일반적 입니다.
이를 수행하는 방법은 다음과 같습니다 ( max_components
구성 요소가 있는 모델에서 수행해야 함 ).
# Calculate fraction of variance explained
# for each choice of number of components
r2 = pca.explained_variance_.cumsum() / x.var(0).sum()
진행할 수있는 또 다른 방법은 PCA 변환 데이터를 가져와 다운 스트림 알고리즘 (예 : 분류기 / 회귀)에 제공 한 다음 성능에 따라 구성 요소 수를 선택하는 것입니다 (예 : 교차 검증 사용).
참고 : 형식화 문제 일 수 있지만 코드 블록을 mypca()
들여 쓰기해야합니다. 그렇지 않으면 함수의 일부로 해석되지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다