njs03332 / ml_study

3 stars 0 forks source link

2022/08/18~2022/08/24 #40

Open givitallugot opened 2 years ago

givitallugot commented 2 years ago
danbi5228 commented 2 years ago

8.3.4 사이킷런 사용하기

pca = PCA(n_components = 2) X2D = pca.fit_transform(X)

components_ 속성에 첫d열로 구성된 행렬 (W^d) 의 전치가 담겨있음

ex) 첫번째 주 성분을 정의하는 단위벡터 구하기

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])

8.3.6 적절한 차원 수 선택하기

유지하려는 주성분의 수를 지정하기보다는 보존하려는 분산의 비율(n_component)을 0 ~ 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)
givitallugot commented 2 years ago

8.3.7 압축을 위한 PCA


8.3.8 랜덤 PCA


8.3.9 점진적 PCA

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() 메서드를 호출
njs03332 commented 2 years ago

8.3 PCA