상세 컨텐츠

본문 제목

혼공학습단 10기 K-평균과 PCA 배워보자 5주차!!

혼공학습단

by 공돌이주인 2023. 8. 12. 15:16

본문

 최근 2~3주 동안 다른 공부를 열심히 하다가, 오랜만에 다시 머신러닝 공부를 하려니까 벌써 머리가 어지럽다....

하지만 이제부터 공부할 chapter6, 7은 평소에 내가 이해가 잘 가지 않았던 부분이기 때문에 공부를 열심히 해야 한다.

지금부터 review를 시작해보자!!!

 

1. K-평균

k-평균은 무엇일까? 일단 명칭에서부터 눈치챌 수 있다. 앞선 chapter에서 배운 k 알고리즘과 비슷하다고 말이다. k-평균 군집 알고리즘은 비지도 학습에서 사용하는 방법으로 target data를 사용하지 않는다. 

k-평균 군집 알고리즘의 작동 방식은 아래와 같다.

  1. 무작위로 초기 클러스터 중심 결정하기
  2. 교육 데이터 세트 반복 및 각 샘플에서 가까운 클러스터 중심 찾아 계산
  3. 클러스터 샘플들의 평균값으로 중심 변경
  4. 중심에 변화가 없을 때까지 2번 과정으로 돌아가 반복

이 과정으로 k의 mean을 찾게 되면 각 군집별로 평균 data를 출력할 수 있고, 예측이 가능해진다.

하지만 k-평균 알고리즘의 단점은 클러스터 개수를 사전에 입력을 해야한다는 것이다.

여기서 클러스터 개수를 찾기 위한 방법 중에 하나인 elbow 방법이 있다.

#최적 k 찾기
inertia = []
for k in range(2, 7):
    km = KMeans(n_clusters=k, n_init='auto', random_state=42)
    km.fit(fruits_2d)
    inertia.append(km.inertia_)

plt.plot(range(2, 7), inertia)
plt.xlabel('k')
plt.ylabel('inertia')
plt.show()

직선의 기울기가 크게 변화하는 3이 적절한 k 값이다

2. 주성분 분석(PCA)

다음으로 공부한 내용은 PCA이다. PCA는 간단하게 말하면 특성이 많은 data에서 중요한 특성만 남기고 줄이는 것이다. PCA의 차원 축소를 사용하면 데이터 모델의 크기를 줄일 수 있고, 시각화 하기 쉽다. 또한 정확도는 거의 비슷하게 유지하면서 학습 시간은 크게 줄일 수 있다. 

import numpy as np

fruits = np.load('fruits_300.npy')
fruits_2d = fruits.reshape(-1, 100*100)
 
from sklearn.decomposition import PCA

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

확인문제

1. 특성이 20개인 대량의 데이터셋이 있다. 이 데이터셋에서 찾을 수 있는 주성분 개수는 몇 개일까?

답 : 20개이다. 위의 코드에서 n_components가 있는데 이것은 주성분의 개수를 지정하는 역할이다. 기본값으로 특성 개수 or 샘플 개수 중에 작은 값으로 선정한다. 문제에서 대량의 데이터셋이라 했으므로 작은 값인 특성을 선택한다.

 

2. 샘플 개수가 1000개이고 특성 개수는 100개인 데이터셋이 있다. 즉, 이 데이터셋의 크기는 (1000, 100)이다. 이 데이터를 PCA 클래스를 사용해 10개의 주성분을 찾아 변환했다. 변환된 데이터셋의 크기는 얼마일까?

답 : (1000, 10)이다. PCA는 데이터의 특성의 개수를 줄이는 방법으로 특성의 개수가 100개에서 10개로 바뀌게 된다.

 

3. 2번 문제에서 설명된 분산이 가장 큰 주성분은 몇 번째인가?

답 : 첫 번째 주성분이다. PCA는 분산이 가장 큰 것부터 순서대로 이루어진다.

관련글 더보기