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()