알파카징징이 알파카징징이 코딩하는 알파카

혼공머_6_1 흑백 이미지 분류 방법과 비지도 학습, 군집 알고리즘 이해하기

» writing

혼자공부하는머신러닝+딥러닝 수업을 참고하여 작성하였습니다

6_1_흑백 이미지 분류 방법과 비지도 학습, 군집 알고리즘 이해하기

정의


흑백 이미지 분류 방법과 비지도 학습, 군집 알고리즘 이해하기

1. 과일 데이터 준비하기
    - 비지도 학습 : 타깃이 없어서 외부의 도움없이
     스스로 유용한 무언가를 학습
     대표적으로 군집, 차원 축소 등이 있다
import numpy as np
import matplotlib.pyplot as plt

fruits = np.load('fruits_300.npy')
print(fruits.shape)
# (300, 100, 100)
2. 샘플 확인
print(fruits[0,0, :])
# [  1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   2   1
#    2   2   2   2   2   2   1   1   1   1   1   1   1   1   2   3   2   1
#    2   1   1   1   1   2   1   3   2   1   3   1   4   1   2   5   5   5
#   19 148 192 117  28   1   1   2   1   4   1   1   3   1   1   1   1   1
#    2   2   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
#    1   1   1   1   1   1   1   1   1   1]
plt.imshow(fruits[0], cmap='gray')
plt.show()

plt.imshow(fruits[0], cmap='gray_R')
plt.show()

3. 샘플 차원 변경하기 (2차원 -> 1차원)
apple = fruits[0:100].reshape(-1, 100*100)
pineapple = fruits[100:200].reshape(-1, 100*100)
banana = fruits[200:300].reshape(-1, 100*100)

print(apple.shape)
# (100, 10000)
4. 샘플 평균의 히스토그램
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()

5. 픽셀 평균의 히스토그램
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()

6. 평균 이미지 그리기
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')
axs[1].imshow(pineapple_mean, cmap = 'gray_r')
axs[2].imshow(banana_mean, cmap = 'gray_r')
plt.show()

6. 평균과 가까운 사진 고르기
abs_diff = np.abs(fruits - apple_mean)
abs_mean = np.mean(abs_diff, axis = (1,2))

print(abs_mean.shape)
# (300,)

apple_index = np.argsort(abs_mean)[:100]
fig, axs = plt.subplots(10, 10, figsize = (10,10))
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()

s