전체 주성분의 설명된 분산 비율을 알고 싶다면 n_components 매개변수를 None으로 지정하고 PCA 클래스의 객체를 만들면 됩니다. explained_variance_ratio_ 속성에서 모든 주성분의 설명된 분산 비율을 확인할 수 있습니다.
>>> pca = PCA(n_components=None)
>>> X_train_pca = pca.fit_transform(X_train_std)
>>> pca.explained_variance_ratio_
array([0.36951469, 0.18434927, 0.11815159, 0.07334252, 0.06422108, 0.05051724, 0.03954654, 0.02643918, 0.02389319, 0.01629614, 0.01380021, 0.01172226, 0.00820609])
PCA 클래스의 객체를 만들 때 n_components = None이라고 지정했기 때문에 차원 축소를 수행하는 대신 분산의 크기 순서대로 모든 주성분이 반환됩니다.
Note ≡
역주 n_components에 (0, 1) 사이 실수를 입력하면 설명된 분산의 비율을 나타내며 자동으로 이 비율을 달성하기 위해 필요한 주성분 개수를 선택합니다.
>>> pca = PCA(n_components=0.95)
>>> print(' 주성분 개수:', pca.n_components_)
주성분 개수: 10
>>> print(' 설명된 분산 비율:', np.sum(pca.explained_variance_ratio_))
설명된 분산 비율: 0.9662714406558742
n_components='mle'로 지정하면 토마스 민카(Thomas Minka)가 제안한 차원 선택 방식을 사용합니다(Minka, T. P. “Automatic choice of dimensionality for PCA”, In NIPS, pp. 598- 604).
>>> pca = PCA(n_components='mle')
>>> print(' 주성분 개수:', pca.n_components_)
주성분 개수: 9
>>> print(' 설명된 분산 비율:', np.sum(pca.explained_variance_ratio_))
설명된 분산 비율: 0.9499753029186232
PCA의 가장 큰 제약 사항 중 하나는 배치로만 실행되기 때문에 대용량 데이터셋을 처리하려면 많은 메모리가 필요하다는 점입니다. IncrementalPCA를 사용하면 데이터셋의 일부를 사용하여 반복적으로 훈련할 수 있습니다.
partial_fit() 메서드는 네트워크나 로컬 파일 시스템으로부터 조금씩 데이터를 받아서 훈련할 수 있습니다. fit() 메서드는 numpy.memmap을 사용하여 로컬 파일로부터 데이터를 조금씩 읽어 올 수 있습니다. 한 번에 읽어 올 데이터 크기는 IncrementalPCA 클래스의 batch_size로 지정합니다. 기본값은 특성 개수의 5배입니다.
IncrementalPCA의 n_components 매개변수는 정수 값만 입력할 수 있습니다. 다음은 partial_fit() 메서드를 사용하여 앞의 PCA로 찾은 주성분의 결과와 비교하는 간단한 예입니다.
>>> from sklearn.decomposition import IncrementalPCA
>>> ipca = IncrementalPCA(n_components=9)
>>> for batch in range(len(X_train_std)//25+1):
... X_batch = X_train_std[batch*25:(batch+1)*25]
... ipca.partial_fit(X_batch)
>>> print(' 주성분 개수:', ipca.n_components_)
주성분 개수: 9
>>> print(' 설명된 분산 비율:', np.sum(ipca.explained_variance_ratio_))
설명된 분산 비율: 0.9478392700446645