혼공머_6_1 흑백 이미지 분류 방법과 비지도 학습, 군집 알고리즘 이해하기
Jul 26, 2021
»
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