일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 통계
- 태블로
- scikit learn
- 이것이 코딩테스트다
- 데이터분석
- r
- matplotlib
- pytorch
- 데이터분석준전문가
- Google ML Bootcamp
- 시각화
- 회귀분석
- tableau
- 이코테
- 파이썬
- 코딩테스트
- 데이터 분석
- Python
- IRIS
- sklearn
- pandas
- 머신러닝
- 자격증
- Deep Learning Specialization
- SQL
- SQLD
- ADsP
- 데이터 전처리
- 딥러닝
- ML
- Today
- Total
함께하는 데이터 분석
[Scikit Learn] PCA 본문
주성분 분석(Principal Component Analysis)
- 차원을 축소하는 알고리즘 중 가장 인기 있는 알고리즘
사이킷런
import numpy as np
np.random.seed(4)
m = 60
w1, w2 = 0.1, 0.3
noise = 0.1
angles = np.random.rand(m) * 3 * np.pi / 2 - 0.5
X = np.empty((m, 3))
X[:, 0] = np.cos(angles) + np.sin(angles)/2 + noise * np.random.randn(m) / 2
X[:, 1] = np.sin(angles) * 0.7 + noise * np.random.randn(m) / 2
X[:, 2] = X[:, 0] * w1 + X[:, 1] * w2 + noise * np.random.randn(m)
차원을 축소시킬 3D 데이터 셋인 X를 생성
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X2D = pca.fit_transform(X)
사이킷런의 PCA 모델을 사용하면 SVD 분해 방법을 사용하여 구현됨
PCA 모델을 사용하여 데이터셋의 차원을 2로 줄이는 코드
이때 센터링(변량 - 평균)은 자동으로 진행되고 훨씬 간편
주성분 참조
pca.components_
>>> array([[-0.93636116, -0.29854881, -0.18465208],
[ 0.34027485, -0.90119108, -0.2684542 ]])
components_를 활용하여 주성분을 확인 가능
pca.components_[:, 0]
>>> array([-0.93636116, 0.34027485])
첫 번째 주성분을 나타냄
설명된 분산의 비율
pca.explained_variance_ratio_
>>> array([0.84248607, 0.14631839])
explained_variance_ratio_ 변수에 주성분의 설명된 분산의 비율이 저장됨
위의 세 개의 주성분 중 처음 주성분에 대한 설명된 분산의 비율은 84.2%
두 번째 주성분에 대한 설명된 분산의 비율은 14.6%
1 - pca.explained_variance_ratio_.sum()
>>> 0.011195535570688975
세 번째 주성분에 대한 설명된 분산은 1.1% 정도로 아주 적은 양의 정보가 들어있음
따라서 3차원의 데이터 셋을 2차원으로 축소해도 기존 3차원 데이터 셋의 98%가 넘는 정보를 설명을 할 수 있음
그렇다면 축소할 차원의 수를 어떻게 선택할까?
적절한 차원 수 선택하기
보통 축소할 차원의 수를 임의로 정하기보다는 충분한 분산이 될 때까지 더해야 할 차원의 수를 선택
pca = PCA()
pca.fit(X)
cumsum = np.cumsum(pca.explained_variance_ratio_)
d = np.argmax(cumsum >= 0.95) + 1
print(d)
>>> 2
위의 코드는 차원을 축소하지 않고 PCA를 계산한 뒤 분산을 95%로 유지하는 데 필요한 최소한의 차원 수를 계산한 것
cumsum에 설명된 분산의 누적합을 할당하고 python의 특성으로 인해 +1을 해준 것
위에서 확인한 것을 다시보면 첫 번째 주성분으로 84%가량의 정보를 설명할 수 있고
첫 번째와 두 번째 주성분을 합쳐 98%가량 설명하므로
필요한 최소의 차원의 수는 95%를 기준으로 하면 2인 것을 확인할 수 있음
pca = PCA(n_components=0.95)
X_reduced = pca.fit_transform(X)
print(pca.n_components_)
>>> 2
또 다른 방법은 이렇게 n_components를 0 ~ 1 사이로 설정하여 훈련시킨 다음
n_components_를 이용하여 구하는 것이 훨씬 쉽고 간단함
https://www.hanbit.co.kr/store/books/look.php?p_code=B9267655530
핸즈온 머신러닝
최근의 눈부신 혁신들로 딥러닝은 머신러닝 분야 전체를 뒤흔들고 있습니다. 이제 이 기술을 거의 모르는 프로그래머도 데이터로부터 학습하는 프로그램을 어렵지 않게 작성할 수 있습니다. 이
www.hanbit.co.kr
'데이터분석 공부 > ML | DL' 카테고리의 다른 글
[Pytorch] 인공 신경망 모델 학습 (0) | 2022.09.12 |
---|---|
[Python] 파이토치(Pytorch) 설치하기 (0) | 2022.09.07 |
[Scikit Learn] Random Forest (0) | 2022.08.28 |
[Python] 시각화 / graphviz (0) | 2022.08.21 |
[Ensemble] 머신러닝 앙상블 기법 (0) | 2022.08.19 |