혼공단/혼공단 5기

혼자 공부하는 머신러닝 + 딥러닝 6장 - 주성분 분석

하양훈 2021. 2. 28. 10:52
반응형

1. 차원과 차원 축소 

 

차원 : 데이터가 가진 속성을 말한다. 특성과 동일한 의미이다

 

 

<차원 축소>

 

- 비지도 학습 방법 중의 하나이다.

- 데이터를 잘 나타내는 일부 특성을 선택하여 데이터 크기를 줄이고 지도학습 모델의 성능을 향상시킬수 있다.

- 차원 축소를 실행할 경우 과대적합을 방지할 수 있다.

 

 

2. 주성분 분석(Principal Component Analysis, PCA)

- 주성분 분석은 데이터에 있는 분산이 큰 방향(데이터가 더 퍼져 있는 방향)을 찾는 것이다.

- 주성분 벡터는 원본 데이터에 있는 어떠한 방향적 특성이다

- 따라서 주성분 벡터의 원소개수는 원본 데이터셋에 있는 특성 개수와 같다.

- 주성분은 가장 분산이 큰 방향이기 때문에, 첫 번째 주성분이 분산이 가장 크고, 마지막으로 갈수록 분산이 작아진다.

 

[실습코드]

from sklearn.decomposition import PCA

pca = PCA(n_components=50)
pca.fit(fruits_2d)

#PCA가 찾은 주성분은 components_에 저장되어 있음.
print(pca.components_.shape)
>>(50, 10000)

 

- 사이킷런은 sklearn.decomposition 모듈 아래 PCA 클래스로 주성분 분석 알고리즘을 제공한다.

- PCA 클래스의 객체를 만들때, n_components 매개변수에 주성분의 개수를 지정해야 한다.

 

print(fruits_2d.shape)
>>(300, 10000)

fruits_pca = pca.transform(fruits_2d)

print(fruits_pca.shape)
>>(300, 50)

fruits_inverse = pca.inverse_transform(fruits_pca)
print(fruits_inverse.shape)

 

- PCA의 transform() 메서드를 사용해 원본 데이터의 차원을 줄일 수 있으며, inverse_transform() 메서드를 통해 차원 축소한 데이터를 복원할 수도 있다.

 

 

<설명된 분산>

 

- 주성분이 원본데이터의 분산을 얼마나 잘 나타내는지 기록한 값을 설명된 분산(explained variance)라고 한다.

- PCA에 explained_variance_ratio에서각 주성분의 설명된 분산비율이 기록되어 있으며, 첫번째 주성분의 설명된 분산이 가장 크다.

print(np.sum(pca.explained_variance_ratio_))

plt.plot(pca.explained_variance_ratio_)

 

그래프를 보면 처음 10개의 주성분이 대부분의 분산을 표현하고 있는 것을 볼수 있다.

 

[주성분 분석 실행 전후 비교]

from sklearn.linear_model import LogisticRegression

lr = LogisticRegression()

target = np.array([0] * 100 + [1] * 100 + [2] * 100)

from sklearn.model_selection import cross_validate

#주성분 분석 X
scores = cross_validate(lr, fruits_2d, target)
print(np.mean(scores['test_score']))
>>0.9966666666666667
print(np.mean(scores['fit_time']))
>>1.8380496025085449

#주성분 분석 O
scores = cross_validate(lr, fruits_pca, target)
print(np.mean(scores['test_score']))
>>1.0
print(np.mean(scores['fit_time']))
>>0.03938336372375488

- 주성분 분석을 한것과 하지않은 것 사이에서 정확도는 큰 차이가 없으며, 실행속도는 20배 이상 줄어든 것을 확인할 수 있다. 

반응형