머신러닝

[혼자 공부하는 머신러닝+딥러닝] - 비지도 학습

주니빙 2023. 11. 18. 23:58

타킷을 모르는 비지도 학습

비지도 학습이란?

사람이 가르쳐 주지 않아도 데이터에 있는 무언가를 학습하는 것이다.

타킷을 없을 때 사용하는 머신러닝 알고리즘

 

타킷(Target)은 머신러닝에서 학습하고자 하는 대상이나 목표 변수를 의미하는데 모델이 예측하려는 값이나 분류하려는 클래스를 나타냅니다. 비지도 학습에서는 타킷이 없이 데이터의 구조나 패턴을 학습한다.

 

이제 과일 사진을 준비하고 사진들의 픽셀값을 이용해서 사진을 분류해본다.

 

과일 사진 데이터 준비하기

!wget <https://bit.ly/fruits_300_data> -O fruits_300.npy
import numpy as np
import matplotlib.pyplot as plt
fruits = np.load('fruits_300.npy')
print(fruits.shape)

# 출력 (300,100,100)

첫 번째 차원(300)은 샘플의 개수를 나타내고, 두 번째 차원은(100)은 이미지 높이, 세 번째 차원(100)은 이미지 너비이다.

이미지 크기는 100x100이고 각 픽셀은 넘파이 배열의 원소 하나에 대응한다.

 

첫 번째 행에 있는 픽셀 100개에 들어 있는 값을 출력해보았다. 이 넘파이 배열은 흑백 사진을 담고 있으므로 0~255까지의 정숫값을 가진다.

맷플롯립의 imshow() 함수를 사용하면 넘파이 배열로 저장된 이미지를 쉽게 그릴 수 있다.

흑백 이미지이므로 cmap 매개변수를 ‘grpy’로 지정한다.

 

cmap 매개변수란?

cmap 매개변수는 imshow() 함수에서 사용되는 매개변수로, 컬러맵(colormap)을 지정하는 역할을 한다. 컬러맵은 데이터 값을 색상으로 변환하여 이미지로 시각화할 때 사용되는 색상 팔레트를 의미한다. 예를 들어, 'gray'로 지정하면 흑백 이미지처럼 표현되고, 'viridis', 'jet', 'rainbow' 등의 컬러맵을 사용하면 다양한 색상으로 표현될 수 있다.

 

출력한 첫 번째 이미지를 통해 사과 같다는 것을 알 수 있다.

0에 가까울수록 검게 나타나고 높은 값은 밝게 표시된다

 

하지만 우리의 관심 대상은 바탕이 아니라 사과이므로 cmap 매개변수를 ‘gray_r’로 지정하여 다시 반전시킨다.

밝은 부분이 0에 가깝고 짙은 부분이 255에 가까운 값이 되어, 우리 눈에 보기 좋게 출력된다.

 

픽셀값 분석하기

fruits 데이터를 사괴, 파인애플, 바나나로 각각 나누어 본다.

넘파이 배열을 나눌 때 100x100 이미지를 펼쳐서 길이가 10,000인 1차원 배열로 만든다.

fruits 배졍레서 순서대로 100개씩 선택하기 위해 슬라이싱 연산자를 사용한다. 그 다음 reshape() 메서드를 사용해 두 번째 차원(100)과 세 번째 차원(100)을 10,000으로 합친다. 첫 번째 차원을 -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)

apple, pineapple, banana 배열의 크기는 (100, 10000)이 되었다.

 

apple, pineapple, banana 배열이 들어 있는 샘플의 픽셀 평균값을 계산해 본다. 넘파이 mean() 메서드를 사용할 것이다. axis=0으로 하면 첫 번째 축인 행을 따라, axis=1로 지정하면 두 번째 축인 열을 따라 계산한다.

우리가 필요한 것은 샘플의 평균값인데, 모두 가로로 값을 나열했으므로 axis=1로 지정하여 평균을 계산해준다.

 

사과 샘플 100개에 대한 픽셀 평균값을 계산하였다.

 

맷플롯립의 hist() 함수를 사용해 히스토그램을 그려 볼 수 있다. 사과, 파인애플, 바나나에 대한 히스토그램을 모두 겹쳐 그려 보았다. alpha 매개변수를 1보다 작게 하면 투명도를 줄 수 있다.

 

맷플롯립의 bar() 함수를 사용해 픽셀 10,000개에 대한 평균값을 막대그래프로 그려본다. subplots() 함수로 3개의 서브 그래프를 만들어 사과, 파인애플, 바나나에 대한 막대그래프를 그려본다.

순서대로 사과, 파인애플, 바나나 그래프이다.

 

픽셀 평균값을 100x100 크기로 바꿔서 이미지처럼 출력해본다. 픽셀을 평균 낸 이미지를 모든 사진을 합쳐 놓은 대표 이미지로 생각할 수 있다.