[혼공학습단8기] Chapter6🌍 비지도학습- 2. k-평균

hanjuli94·2022년 8월 12일
0

혼공학습단

목록 보기
9/10

Chapter2에서 잠깐 언급하였지만 비지도학습은 입력데이터만을 통한 학습을 말한다.
당연히 비지도학습인 k-평균(k-means) 알고리즘도 입력데이터만 존재하는 것을 예측 할 수 있다.

그럼 k-평균 알고리즘에 대해서 자세히 알아보기위해,
책에서 예시로 들은 과일을 분류하는 비지도 학습모델을 따라가보자.

k-평균(k-means) 동작 방식

1. 무작위로 k개의 클러스터 중심 선정

각 과일 별로 클러스터라면, 바나나, 사과, 포도로 이루어진 총 3개의 기준 클러스터가 있는 것을 알 수 있다.

클러스터 갯수 만큼 랜덤한 클러스터 중심점(검정점) 3개를 지정한다.
임의의 클러스터 중심을 주변으로 가까운 입력 샘플들을 우선은 하나의 클러스터로 묶는다.
동그라미로 표시된 부분을 클러스터라고 보면 된다.

2. 클러스터 중심 계산(반복)

각 클러스터 중심 별로 가장 많은 샘플들이 있는 곳으로
➊ 클러스터를 묶고
➋ 각 샘플별로 중심과의 거리를 계산하고
➌ 가장 가까운 샘플들에게로 중심이 이동되고
의 과정을 거치면서 아래 그림처럼 클러스터 중심이 이동된다.

💡 k-평균 알고리즘은,
최초에는 랜덤한 클러스터 중심을 선택하고 점차 가장 가까운 샘플의 중심으로 이동하는 알고리즘이다.


k-평균(k-means) 구현하기

1. 데이터셋 준비하기

2. 2차원 배열로 변환하기

준비한 데이터셋의 차원을 확인해보면 3차원인 것을 알 수 있다.

k-평균 모델을 훈련하기 위해 2차원 배열로 변환하자.

3. 임의의 k개 클러스터 중심 선정

앞서 변환한 2차원 배열을 KMeans클래스를 통해 임의의 3개 클러스터 중심을 선정한다.

  • n_clusters 갯수 만큼 군집된 클러스터들이 KMeans 클래스 객체의 labels_ 속성에 저장된다.

3개의 클러스터 갯수이므로 0, 1, 2로 분류되었다는 것을 알 수 있다.

4. 분류된 샘플 갯수 확인하기

각 클러스터별로 몇개의 샘플들이 있는지 확인해보자.

총 3개의 클러스터 중
'0' 클러스터 ➜ 111개
'1' 클러스터 ➜ 98개
'2' 클러스터 ➜ 91개

📍 클러스터 순서는 의미가 없다.

5. 샘플 출력하기

샘플을 출력하는 함수를 선언한다.
python 문법으로 작성되며, (샘플 개수, 너비, 높이)의 3차원 배열을 입력받아 이미지를 그린다.

함수는 아래와 같다.
함수 작성시에 들여쓰기를 주의하자!

레이블 '0'으로 된 클러스터 111개를 출력했다.

육안으로 보기에는 아직 다른 클러스터들이 섞여있는 것을 볼 수 있다.

나머지 클러스터들도 확인해보자

  • 레이블 '1' 클러스터
  • 레이블 '2' 클러스터

6. 바뀐 클러스터 중심 확인하기

각 클러스터 별 중심은 아래와 같이 확인 할 수 있다.

7. 예측하기

먼저, 100번째 샘플의 클러스터 중심으로부터 거리를 확인하자.
3개의 값이 나왔는데 앞에서부터 순서대로 레이블 '0' 클러스터의 중심으로부터 거리를 나타내는 것이라고 보면 된다.

그럼 100번째 샘플의 클러스터 중심 간의 거리는 아래와 같다.

'0' 클러스터 중심과의 거리 ➜ 3393.8136117
'1' 클러스터 중심과의 거리 ➜ 8837.37750892
'2' 클러스터 중심과의 거리 ➜ 5267.70439881

'0' 클러스터 중심과의 거리가 가장 가까우므로 '0' 클러스터에 속한 다고 볼 수 있다.

직접 학습 모델로 예측해보자.

빙고!!! '0' 클러스터로 예측하였다.
모델이 잘 학습되었음을 알 수 있다.

그럼 실제도 샘플 데이터가 맞게 분류되었는지 확인하자.

앞서 확인했듯이 '0' 클러스터는 파인애플이였고 맞게 분류되어있다.

📕 결론

정확하진 않지만 KMeans 클래스로 입력 데이터를 잘 분류하였음을 확인하였다.
다만, 우리는 이미 클러스터가 3개라는 것을 이미 알고 n_clusters를 3으로 지정하였다.

하지만 실무에서는 입력데이터만 있고 타깃데이터에 대한 정보가 전혀 없기 때문에
최적의 k값을 찾아야한다.


최적의 k 찾기

k-평균 알고리즘의 큰 특징은 k의 값을 찾아야 한다는 것이다.

찾는 방법에는 여러가지가 있지만 그 중 대표적인 방법은 엘보우(elbow) 방법이다.

k-평균 알고리즘은 클러스터 중심과 클러스터에 속한 샘플 사이의 거리를 잴 수 있다.
거리의 제곱 합을 이너셔(inertia) 라고 한다.

이너셔의 값으로부터 각 샘플들이 클러스터 중심에서부터 어느정도 가까이 있는지 파악 할 수 있는 지표가 된다.
만약, 클러스터 개수가 늘어나면 클러스터 개개의 크기는 줄어들기 때문에 이너셔도 줄어든다.

🔑 엘보우 방법의 핵심은 클러스터 개수를 늘려가면서 이너셔의 변화를 관찰하여 최적의 k를 찾아내는 것이다.

클러스터 갯수를 늘리면서 어느순간 이너셔의 값이 크게 변화하지 않는 지점이 있는데
그 변화가 시작되는 지점을 적절한 k의 값이라고 선정한다.

그 과정을 그래프로 확인해보자.

검증을 위해 입력데이터는 앞서 사용한 데이터로 하였다.

샘플의 갯수는 x축이고 이너셔는 y축이다.
2개부터 6개까지 샘플의 갯수가 늘어나는데, 샘플의 갯수가 3개인 지점부터 이너셔의 변화가 크지 않다는 것을 알 수 있다.

이로써, 입력데이터의 최적의 k는 3이 되는 것이다.

정확하지는 않지만 이런식으로 k의 값을 찾아가는 방법이 있다.

0개의 댓글