글과 사진, 그리고 이야기

IE & SWCON/Machine Learning

[혼공머딥] chapter 6

뱃놀이가자 2023. 8. 29. 00:14
728x90

* 혼자공부하는 머신러닝+딥러닝의 교재의 학습 요약 내용입니다
 
https://hongong.hanbit.co.kr/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%94%A5%EB%9F%AC%EB%8B%9D/

 

혼자 공부하는 머신러닝+딥러닝

혼자 공부하는 머신러닝 딥러닝, 무료 동영상 강의, 머신러닝+딥러닝 용어집을 다운로드 하세요. 포기하지 마세요! 독학으로 충분히 하실 수 있습니다. ‘때론 혼자, 때론 같이’ 하며 힘이 되겠

hongong.hanbit.co.kr

* 경희대학교 데이터분석 동아리 KHUDA의 2023년 8월 기초세션 5주차 학습내용입니다.
https://cafe.naver.com/khuda

 

KHUDA : 네이버 카페

경희대학교 데이터 분석 동아리 KHUDA

cafe.naver.com

* 2차배포 및 상업적의도로의 사용 목적 및 의도가 없습니다
* 모든 저작권은 책 출판사 한빛미디어에 있습니다 !

 


 

chapter 6 비지도 학습

 

6-1. 군집 알고리즘

 

사진의 픽셀값을 모두 평균 내면 비슷한 과일 "사진" 끼리 모이지 않을까?

의 고민에서 시작하는 머신러닝 방법 중의 하나가 비지도 학습이라고 볼 수 있다.

 

참고하면 좋을 듯 하다.

사진 같은 경우 2 차원 배열의 형태로 생각하고 각 값들의 위치에 대해 rgb 의 형태로서 0~255까지의 정수값을 가진다. 

이러한 경우 matplotlib 의 imshow( )를 사용하면 넘파이 배열로 저장된 이미지를 그릴 수 있고 이때 흑백 이미지 이므로 cmap 변수를 gray 로 지정해야 한다. 

 

 

보통의 흑백 샘플 이미지는 바탕이 밝고 물체가 짙은 색이다. 즉 원래대로라면 사과의 색이 짙은 색이어야 한다. 다만 사과를 짙게 할 경우 컴퓨터는 출력 값에서 255에 가까운 값에 집중하는 경향이 있어 원래대로라면 사과보다 바탕에 집중하므로 반전을 시켜 사과를 밝게 하는 과정을 반드시 걸쳐야 한다. 이를 반전시키고자 gray를 사용한 것이며 gray_r을 통해 다시 반전할 수도 있다. 

 

기억할 부분 rgb는 밝은 값이 0에 , 어두운 값이 255에 가깝다. 

 

해당 샘플 데이터는 사과를 100개, 파인애플을 100개, 바나나를 100개로 두었다. 

한편, 100x100의 2차원 구조이므로 이를 1차원 배열로 길이가 10000으로 만들어 이미지로 출력하기는 어렵지만

처음에 의도한 대로 평균을 계산하고자 할 때 용이하므로 이러한 형태를 취하고자 한다. 

 

예제를 위한 샘플 데이터이므로 apple, pineapple. banana로 100,100,100 개씩 의도된 넘파이 예제임을 기억해두자.

 

이럴경우 apple에는 [1,1,1, *** , 1, 1, 1]로서 10000개의 픽셀 값이 rgb로 저장되어있는 각 사진에 대한 넘파이가 100개로 구성이 되어 있다. 

[ [apple1 10000개 픽셀 numpy],  [apple2 10000개 픽셀 numpy], *** ]

 

이후 각각의 평균을 구하면 총 100개의 평균값이 나올 것이다.

마찬가지로 파인애플, 바나나에 대한 값을 각각 구한다면

이러한 형태의 그래프를 시각화할 수 있겠다. 이것을 본다면 첫번째로 드는 생각이 바나나에 대해서는 어느정도 예측이 쉬울 것 같다. 그러나 파인애플과 사과는 어떠할지 궁금하긴하다. 아 그래서 샘플별로 평균값을 구하는 것이 아닌 각 픽셀별로 총 10000개의 x축에 대해 300개의 과일 사진의 각각 평균값을 구했다. 

 

 

사진을 보면 사과는 픽셀이 갈 수록 값이 높아진다, 물론 2차원을 1차원으로 변경하였기에 이미지에 대한 완벽한 이해는 어렵지만 대략적으로 어느 부분이 밝고 어느 부분이 어두울지는 예상해볼 수 있을 것 같다. 그래도 앞서 샘플별 평균값을 구한 것은 너무 단순하기에 이정도면 차선책으로 좋을 것 같아 그래프를 그려보기로 했다. 

사과나 파인애플은 비슷해보이는데 바나나는 음 글쎄?

300개의 결국 샘플 들 중에서 사과 평균과 오차가 작은 100개를 선택해 그래프를 subplot에 나타내는 과정이다. 

성능이 매우 확실하다. 

지금까지는 샘플에 대해 사실상 분류를 했다고 봐도 무방하다. 그렇다면 입력값을 모르는 누군가가 사과, 파인애플, 바나나의 사진 중 하나를 보낸다면 이를 분류하기 위해서는 어떻게 할까? 군집에서 힌트를 찾을 수 있다. 

 

6-2. k-평균

 

이 때 나아가 k-means clustering 이라는 알고리즘이 있음을 배울 수 있다. 

(clustering이 군집이니까)

  • 무작위로 k개의 클러스터 중심을 정한다
  • 각 샘플에서 가장 가까운 클러스터의 중심을 찾아 해당 클러스터의 샘플로 지정한다
  • 클러스터에 속한 샘플의 평균값으로 클러스터 중심을 변경한다
  • 클러스터 중심에 변화가 없을 때까지 2번으로 돌아가 반복한다.

가 과정이라 볼 수 있다.

이를 우리가 하고 있는 과일 분류 예시에 적용한다면

1단계 랜덤으로 91, 98, 111 개로 분류를 한다

전체적인 과정이라고 할 수 있다.

k-means clustering의 최대 단덤은 클러스터의 개수를 사전에 지정해야 한다는 것이다. 즉 샘플에 대한 정보가 부족하면 힘들 수 있다. 따라서 최적의 k 값을 구하고자 하고 엘보우 방법을 사용한다. 이럴경우 꺽이는 지점이 뚜렷해보이는 부분이 최적의 k값이라고 할 수 있다. 

 

6-3. 주성분분석

 

이러한 과정을 반복하다 보면 큰 데이터를 건드리게 된다. 사진의 경우 픽셀 단위의 차원이 매우 많다. 따라서 차원을 줄일 수 있다면 경제성을 확보할 수 있겠다. 아 참고 2차원 이상에서 차원은 축 개수를 의미하지만 흔히 벡터로 표현되는 1차원은 원소의 개수가 차원의 개수이다. 

 

차원 축소에 대한 알고리즘을 공부해야 하는 이유이다. 

 

어렵다. 

 

질문)

1. 샘플사진에 따라 6-1에서 설정한 방법은 충분히 달라질 수 있을 것 같은데 샘플 사진에 대한 scale 작업이 필수이지 않을까? 이미지를 전처리하는 방법에 대해서는 어떤 방법이 있을까?

2. k-means 클러스터링에서 성능을 평가하는 지표는 없을까? 엘보우로는 온전히 성능을 평가하였다고 보기 어렵지 않을까?

3. 주성분 분석에 대해 다른 예시를 들어서 설명한다면?

728x90