반응형
드디어 6단원에 들어왔다.
강의에서 원한다면 6단원은 건너뛰고 나중에 다시 와서 봐도 좋다고 하는데, 나는 그냥 교재 순차대로 보려고 한다.
키워드
비지도 학습
비지도 학습은 머신러닝의 한 종류로 훈련 데이터에 타깃이 없습니다. 타깃이 없기 때문에 외부의 도움 없이 스스로 유용한 무언가를 학습해야 합니다. 대표적인 비지도 학습은 군집, 차원 축소 등입니다.
히스토그램
히스토그램은 구간별로 값이 발생한 빈도를 그래프로 표시한 것입니다. 보통 x축이 값의 구간(계급)이고 y축은 발생 빈도(도수)입니다.
군집
군집은 비슷한 샘플끼리 하나의 그룹으로 모으는 대표적인 비지도 학습 작업입니다. 군집 알고리즘으로 모은 샘플 그룹을 클러스터라고 부릅니다.
06-1 단원 내용
시작하기 전에
고객이 사진을 보내면 그 중 가장 많이 요청하는 과일을 판매 품목으로 선정하려 한다. 또 1위로 선정된 과일 사진을 보낸 고객 중 몇 명을 뽑아 이벤트 당첨자로 선정하려 한다.
우리는 사진에 대한 정답(타깃)을 알 수 없으니 사진을 종류대로 모을 수 있는 방법을 생각해야 한다.
타깃을 모르는 비지도 학습
타깃이 없을 때 사용하는 머신러닝 알고리즘 중 비지도 학습unsupervised learning이 있다.
과일 사진 데이터 준비하기
우선 어떻게 분류할지 생각해보자. 사진의 픽셀값을 모두 평균 내면 비슷한 과일끼리 모이지 않을까?
- 넘파이에서 npy 파일을 로드
fruits = np.load('fruits_300,npy')
- 맷플롯립으로 넘파이 배열로 저장된 이미지를 그려보기
plt.imshow(fruits[0], cmap='gray')
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()
픽셀값 분석하기
- fruits 데이터를 사과, 파인애플, 바나나로 각각 나눠보기. 이 때 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 배열에 들어있는 샘플의 픽셀 평균값 계산하기
print(apple.mean(axis=1))
/*넘파이 np.mean() 함수를 사용해도 되지만,
넘파이 배열은 이런 함수를 위처럼 메서드로도 제공함.*/
- 샘플의 픽셀 평균값을 히스토그램으로 그려보기
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)
- 샘플의 픽셀 평균값이 아니라 픽셀별 평균값을 계산해보기
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))
/*axis=0으로 지정하면 픽셀별 평균을 계산할 수 있음*/
- 픽셀별 평균값을 100*100 크기로 바꿔서 이미지처럼 출력하여 비교해보기
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].imgshow(banana_mean, cmap='gray_r')
plt.show()
평균값과 가까운 사진 고르기
- 사과 사진의 평균값인 apple_mean과 가장 가까운 사진 골라보기.
/*절대값 오차 사용*/
abs_diff = np.abs(fruits - apple_mean)
abs_mean = np.mean(abs_diff, axis=(1,2))
print(abs_mean.shape) /* (300,) 출력 */
- 가장 작은 순서대로 100개를 고른 후 10*10 격자로 이루어진 그래프 그리기
apple_index = np.argsort(abs_mean)[:100] /*argsort 함수 사용*/
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,g].axis('off')
plt.show()
이렇게 비슨한 샘플끼리 그룹으로 모으는 작업을 군집clustering이라고 한다. 군집은 대표적인 비지도 학습 작업 중 하나이다. 군집 알고리즘에서 만든 그룹을 클러스터cluster라고 부른다.
비슷한 샘플끼리 모으기
반응형
'AI > 혼공머신' 카테고리의 다른 글
[혼공머신] 05-3 | 트리의 앙상블 (2) | 2024.11.04 |
---|---|
[혼공머신] 05-2 | 교차 검증과 그리드 서치 (1) | 2024.11.01 |
[혼공머신] 05-1 | 결정 트리 (0) | 2024.10.31 |
[혼공머신] 04-2 | 확률적 경사 하강법 (0) | 2024.10.24 |
[혼공머신] 04-1 | 로지스틱 회귀 (0) | 2024.10.17 |