구글 코랩을 사용해서 실습 진행했습니다 !

1장에서는 사과, 파인애플, 바나나에 있는 각 픽셀의 평균값을 구해서 가장 가까운 사진을 골랐다.
이 경우에는 사과, 파인애플, 바나나 사진임을 미리 알고 있었기 때문에 각 과일의 평균을 구할 수 있다.
하지만 진짜 비지도 학습에서는 사진에 어떤 과일이 들어있는지 알지 못한다.
이런 경우 평균값은 k-평균 군집 알고리즘이 평균값을 자동으로 찾아준다.
평균값이 클러스터의 중심에 위치하기 때문에 클러스터 중심 or 센트로이드라고 부른다.
k-평균 알고리즘
작동방식
- 무작위로 k개의 클러스터 중심을 정한다.
- 각 샘플에서 가장 가까운 클러스터 중심을 찾아 해당 클러스터의 샘플로 지정한다.
- 클러스터에 속한 샘플의 평균값으로 클러스터 중심을 변경한다.
- 클러스터 중심에 변화가 없을 때 까지 2번으로 돌아가 반복한다.
먼저 사진을 다운받는다.
!wget https://bit.ly/fruits_300_data -O fruits_300.npy
import numpy as np
fruits = np.load('fruits_300.npy')
fruits_2d = fruits.reshape(-1, 100*100)
from sklearn.cluster import KMeans
km = KMeans(n_clusters=3, random_state=42)
km.fit(fruits_2d)
n_clusters=3으로 지정했기 때문에 labels_ 배열의 값은 0,1,2 중 하나이다
print(km.labels_)
print(np.unique(km.labels_, return_counts = True))
import matplotlib.pyplot as plt
def draw_fruits(arr, ratio=1):
n = len(arr) # n은 샘플 개수입니다
# 한 줄에 10개씩 이미지를 그립니다. 샘플 개수를 10으로 나누어 전체 행 개수를 계산합니다.
rows = int(np.ceil(n/10))
# 행이 1개 이면 열 개수는 샘플 개수입니다. 그렇지 않으면 10개입니다.
cols = n if rows < 2 else 10
fig, axs = plt.subplots(rows, cols,
figsize=(cols*ratio, rows*ratio), squeeze=False)
for i in range(rows):
for j in range(cols):
if i*10 + j < n: # n 개까지만 그립니다.
axs[i, j].imshow(arr[i*10 + j], cmap='gray_r')
axs[i, j].axis('off')
plt.show()
draw_fruits(fruits[km.labels_==0])
draw_fruits(fruits[km.labels_==1])
draw_fruits(fruits[km.labels_==2])
draw_fruits(km.cluster_centers_.reshape(-1, 100, 100), ratio=3)
print(km.transform(fruits_2d[100:101]))
print(km.predict(fruits_2d[100:101]))
draw_fruits(fruits[100:101])
print(km.n_iter_)
K-평균 알고리즘의 단점 중 하나는 클러스터 개수를 사전에 지정해야 한다는 것.
적절한 클러스터 개수를 찾기 위한 대표적인 방법 = 엘보우 방법
클러스터 중심과 클러스터에 속한 샘플 사이의 거리를 잴 수 있다. 이 거리의 제곱 합 = 이너셔
이너셔는 클러스터의 샘플이 얼마나 가깝게 있는지를 나타내는 값이다.
엘보우 방법은 클러스터 개수를 늘려가면서 이너셔의 변화를 관찰하여 최적의 클러스터 개수를 찾는다.
inertia = []
for k in range(2,7):
km = KMeans(n_clusters=k, 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()
이 그래프에서는 꺾이는 지점이 뚜렷하지는 않지만, k=3에서 그래프의 기울기가 조금 바뀐 것을 볼 수 있다.
엘보우 지점보다 클러스터 개수가 많아지면 이너셔의 변화가 줄어들면서 군집효과도 줄어든다.

출처: http://www.yes24.com/Product/Goods/96024871
혼자 공부하는 머신러닝+딥러닝 - YES24
- 혼자 해도 충분하다! 1:1 과외하듯 배우는 인공지능 자습서 이 책은 수식과 이론으로 중무장한 머신러닝, 딥러닝 책에 지친 ‘독학하는 입문자’가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있
www.yes24.com
'Machine Learning > 혼자 공부하는 머신러닝+딥러닝' 카테고리의 다른 글
7-1 인공신경망(혼자공부하는 머신러닝 딥러닝) (0) | 2022.01.04 |
---|---|
6-3.p318~주성분 분석 (0) | 2021.10.29 |
6-1.p286~ 군집 알고리즘 (0) | 2021.10.28 |
5-3.p263~ 트리의 앙상블 (0) | 2021.10.28 |
5-2.p242~ 교차 검증과 그리드 서치 (0) | 2021.10.28 |