우당탕탕 개발일지

[혼공머신] 6-1. 군집 알고리즘 본문

인공지능

[혼공머신] 6-1. 군집 알고리즘

민아당긴아 2025. 2. 4. 00:15

💡 서론

1~5장에는 타겟 데이터가 제시되어 있는 지도 학습(Supervised Learinng)이었지만 6장에는 비지도 학습(Unsupervised Learning) 내용이 담겨있다.

비지도 학습(Unsupervised Learning)의 특징은 아래와 같다.

1. 타겟이 없음. 타겟의 개수도 모름.

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

ⓒ https://vitalflux.com/great-mind-maps-for-learning-machine-learning/

비지도 학습 알고리즘에는 차원 축소, 클러스터링 등이 있는데 6-1장에서는 클러스터링, 즉 군집 알고리즘을 다루고 있다. 또한 이전 장과 다르게 이미지 데이터, 즉 비정형 데이터를 다룬다.

💡 군집 알고리즘, 클러스터링(Clustering)

군집(Clustering): 비슷한 샘플끼리 그룹화하는 작업

클러스터(Clutser): 비슷한 샘플끼리의 그룹, 군집 알고리즘에서 만든 그룹

예예를

예를 들어 K-평균 군집 알고리즘의 경우 가까이에 위치한 데이터들끼리 하나의 그룹으로 묶는다.

k-평균 군집 알고리즘은 6-2장에 나오고, 6-1장에는 총 300개의 이미지 데이터를 비슷한 것끼리 묶는다.

분류와 군집, 모두 그룹을 나눈다는 점에서 비슷하지만 그룹을 나누는 방식에 차이가 있다.

 

💡 데이터 소개

6-1장에서 사용하는 데이터는 사과, 바나나, 파인애플을 각각 100개씩 담고 있는, 총 300장의 흑백 사진이다. 

하나의 사진은 100*100 픽셀로 이루어져 있다.

이는 넘파이 배열의 기본저장 포맷인 npy 파일로 저장되어 있어 !wget을 이용해서 불러와야 한다. 

이 300장의 사진을 클러스터링해서 3개의 그룹으로 잘 분류되는지 파악하고자 한다.

 

💡 이미지 시각화

비정형 데이터인 이미지 데이터를 이용하다보니 matplotlib.pyplot 라이브러리에 내장된 함수를 자주 사용한다.

matplotlib.pyplot 라이브러리에 내장된 함수 목록

1. plt.imshow(): 이미지 보여주기

2. plt.subplots(a, b): 여러 그래프를 a by b 행렬 형태로 한 번에 보여주기

💡 픽셀값 분석하기

- 이미지를 1차원 배열로 변환하기: 100*100 넘파이 배열을 길이가 10000인 1차원 배열로 바꾸기

- 픽셀의 평균값 구하기: 사진별로 하나의 평균값이 도출된다. 1개의 사진 = 1개의 평균값

- 히스토그램 시각화

사진의 평균값을 히스토그램으로 나타내었다. 겹치는 부분도 다 보기 위해서 alpha = 0.8(투명도 80%)로 지정했다.

또한 직관적인 이해를 위해 사과는 빨간색, 파인애플은 주황색, 바나나는 노란색으로 지정했다.

- 막대그래프 시각화

이것도 역시 사과는 빨간색, 파인애플은 주황색, 바나나는 노란색으로 지정했다.

사과, 파인애플, 바나나 모두 다른 분포를 보인다.

사과는 전체적으로 값이 작고, x값이 커질수록 y값도 커진다.

파인애플은 전체적으로 값이 크고, 고르게 분포되어 있다.

바나나는 중앙의 값이 높다. 산 모양이다.

- 평균 이미지 시각화

평균 이미지도 시각화해보았다. 사과와 파인애플은 구 형태라서 평균 이미지가 원 모양인데, 바나나는 막대 형태라 방향에 따라 모양이 다르다.그래서 정체불명의 이미지가 생성되었다.

- 평균값과 가까운 사진 고르기

절댓값 오차를 계산해서 평균과 가장 가까운 사진 100장을 시각화했다. 다행히 사과 평균과 가까운 사진 100개는 모두 사과다.