Open givitallugot opened 2 years ago
from sklearn.decomposition import PCA
pca = PCA(n_components = 2) X2D = pca.fit_transform(X)
pca.components_.T[:, 0]
### 8.3.5 설명된 분산의 비율
- ```explained_variance_ratio_```변수에 저장되어있음
- 각 주성분의 축을 따라 있는 데이터셋의 분산 비율을 나타냄
- 아래 예시 기준, 데이터셋 분산의 84.2%가 첫 번째 PC를 따라 놓여있고, 14.6%가 두번째 PC를 따라 놓여있음을 의미
```python
pca.explained_variance_ratio_ # array([0.8428607, 0.14631839])
# 훈련 세트의 분산을 95%로 유지하는데 필요한 최소 차원 수 계산
pca = PCA()
pca.fit(X_train)
cumsum = np.cumsum(pca.explained_variance_ratio_)
d = np.argmax(cumsum >= 0.95) + 1
pca = PCA(n_component=0.95) # or n_component=d 로 설정? X_reduced = pca.fit_transform(X_train)
#### b. 설명된 분산을 차원 수에 대한 함수로 그려서 확인
- 방법 a 에서 cumsum을 그래프로 그리면 됨
- 설명된 분산의 빠른 성장이 멈추는 변곡점을 확인하여 축소할 차원 수로 정의
![image](https://user-images.githubusercontent.com/26505830/186409122-fbfb9348-900d-443f-9ef2-6a68c4673261.png)
pca = PCA(n_components=154)
X_reduced = pca.fit_transform(X_train)
X_recovered = pca.inverse_transform(X_reduced)
rnd_pca = PCA(n_components=154, svd_solver="randomized", random_state=42)
X_reduced = rnd_pca.fit_transform(X_train)
from sklearn.decomposition import IncrementalPCA
n_batches = 100 inc_pca = IncrementalPCA(n_components=154) for X_batch in np.array_split(X_train, n_batches): print(".", end="") # 책에는 없음 inc_pca.partial_fit(X_batch)
X_reduced = inc_pca.transform(X_train)
- 위 코드는 100개의 미니배치로 나누고, 차원을 줄이는 것, fit() 메서드가 아니라 partial_fit() 메서드를 호출
X_centered = X - X.mean(axis=0)
U, s, Vt = np.linalg.svd(X_centered)
c1 = Vt.T[:, 0]
c2 = Vt.T[:, 1]
W2 = Vt.T[:, :2]
X2D = X_centered.dot(W2)