Deep Learning/혼공 머신 러닝 - 딥러닝

[DL] 비지도 학습, 군집 알고리즘

KimTory 2021. 12. 19. 22:09

# 혼공 머신 러닝 인강 참고하여 내용 정리 하였습니다.

 

 

[ 군집 알고리즘 ]

 

▶ 비지도 학습은 머신 러닝의 한 종류로 훈련 데이터에 타깃이 없는 학습 방식이며, 스스로 무언가를 학습해야 한다.

대표적인 비지도 학습 작업은 군집, 차원 축소 등이 있습니다.

 

▶ 군집은 비슷한 샘플끼리 하나의 그룹으로 모으는 대표적인 비지도 학습이며, 군집 알고리즘으로 모은 샘플 그룹을

   클러스터라고 한다.

 

① Clustering : 비슷한 샘플끼리 그룹으로 모으는 일련의 작업

② Cluster : 군집 알고리즘에서 만든 그룹

 

[ 소스 코드 ]

!wget https://bit.ly/fruits_300_data -O fruits_300.npy # 캐글에 공유된 Data Set

import numpy as np
import matplotlib.pyplot as plt

fruits = np.load("fruits_300.npy")
print(fruits.shape)
# (300, 100, 100)

print(fruits[0,0, :]) # 0 번째 sample, 0번째 열, 모든 행 출력

plt.imshow(fruits[0], cmap="gray")
plt.show()

plt.imshow(fruits[0], cmap='gray_r') # gray scale 반전
plt.show()

fig, axs = plt.subplots(1, 2)
axs[0].imshow(fruits[100], cmap='gray_r')
axs[1].imshow(fruits[200], cmap='gray_r')
plt.show()

apple = fruits[0:100].reshape(-1, 100*100)
pineapple = fruits[0:100].reshape(-1, 100*100)
banana = fruits[200:300].reshape(-1, 100*100)

print(apple.shape)
# (100, 10000)

print(apple.mean(axis=1)) # 평균?

plt.hist(np.mean(apple, axis=1), alpha=0.8)
plt.hist(np.mean(pineapple, axis=1), alpha=0.8)
plt.hist(np.mean(banana, axis=1), alpha=0.8)
plt.legend(['apple', 'pineapple', 'banana'])
plt.show()


fig, axs = plt.subplots(1, 3, figsize=(20, 5))
axs[0].bar(range(10000), np.mean(apple, axis=0))
axs[1].bar(range(10000), np.mean(pineapple, axis=0))
axs[2].bar(range(10000), np.mean(banana, axis=0))
plt.show()

apple_mean = np.mean(apple, axis=0).reshape(100, 100)
pineapple_mean = np.mean(pineapple, axis=0).reshape(100, 100)
banana_mean = np.mean(banana, axis=0).reshape(100, 100)

fig, axs = plt.subplots(1, 3, figsize=(20, 5))
axs[0].imshow(apple_mean, cmap='gray_r') # apple sample 100개의 mean 이미지
axs[1].imshow(pineapple_mean, cmap='gray_r')
axs[2].imshow(banana_mean, cmap='gray_r')
plt.show()

abs_diff = np.abs(fruits - apple_mean)
abs_mean = np.mean(abs_diff, axis=(1,2))

print(abs_mean.shape)

apple_index = np.argsort(abs_mean)[:100] 
# 가장 작은 값 중 100개만 잘라서 apple_index로 받음
fig, axs = plt.subplots(10, 10, figsize=(10,10))

#10 * 10 = 100개
for i in range(10):
  for j in range(10):
    axs[i,j].imshow(fruits[apple_index[i*10 + j]], cmap="gray_r")
    axs[i,j].axis("off")
plt.show()

 

 

평균값과 가까운 사과 Image (300개의 Sample 중..)