본문 바로가기
머신러닝

[머신러닝] 혼자 공부하는 머신러닝 + 딥러닝 | Chapter 06. 비지도 학습 |

by Hessedist 2022. 5. 16.

Chapter 06. 비지도 학습 - 1) 군집 알고리즘


 

타깃을 모르는 비지도 학습

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

 

과일 사진 데이터 준비하기

  • 컴퓨터가 255에 가까운 바탕에 집줄하는 이유: 알고리즘이 어떤 출력을 만들기 위해 곱셈, 덧셈을 함. 픽셀값이 0이면 출력도 0이 되어 의미가 없음. 픽셀값이 높으면 출력값도 커지기 때문에 의미를 부여하기 좋음. 
  • https://www.kaggle.com/datasets/moltean/fruits
 

Fruits 360

A dataset with 90380 images of 131 fruits and vegetables

www.kaggle.com

 

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

  • 군집: 비슷한 샘플끼리 그룹으로 모으는 작업
  • 클러스터: 군집 알고리즘에서 만든 그룹

 

 비슷한 샘플끼리 모으기

  • 과일 사진을 자동으로 모아야 하는데, 어떤 과일 사진을 올릴지 미리 예상할 수 없기 때문에 타깃값을 준비하여 분류 모델을 훈련하기 어려움. 
  • 타깃값이 없을 때 데이터에 있는 패턴을 찾거나 데이터 구조를 파악하는 머신러닝 방식을 비지도 학습이라고 함. 타깃이 없기 때문에 알고리즘을 직접적으로 가르칠 수가 없음. 대신 알고리즘은 스스로 데이터가 어떻게 구성되어 있는지 분석함. 
  • 대표적인 비지도 학습 문제는 '군집'임. 군집은 비슷한 샘플끼리 그룹으로 모으는 작업. 이 절에서는 사진의 픽셀을 사용해 군집과 비슷한 작업을 수행해 보았음. 하지만 샘플이 어떤 과일인지 미리 알고 있었기 때문에 사과 사진의 평균값을 알 수 있었음. 
  • 실제 비지도 학습에서는 타깃이 없는 사진을 사용해야 함. 다음 절에서 이런 경우 어떻게 샘플 그룹의 평균값을 찾는지 알아보겠음. 
  • 전체 소스 코드
 

6-1 군집 알고리즘.ipynb

Run, share, and edit Python notebooks

colab.research.google.com

 

키워드로 끝내는 핵심 포인트

  • 비지도 학습은 머신러닝의 한 종류로 훈련 데이터에 타깃이 없음. 타깃이 없기 때문에 외부의 도움 없이 스스로 유용한 무언가를 학습해야 함. 대표적인 비지도 학습 작업은 군집, 차원 축소 등임. 
  • 히스토그램은 구간별로 값이 발생한 빈도를 그래프로 표시한 것. 보통 x축이 값의 구간(계급)이고 y축은 발생 빈도(도수)임. 
  • 군집은 비슷한 샘플끼리 하나의 그룹으로 모으는 대표적인 비지도 학습 작업입니다. 군집 알고리즘으로 모은 샘플 그룹을 클러스터라고 부름. 
  • 히스토그램을 그릴 수 있는 맷플롯립 함수: hist()

 


Chapter 06. 비지도 학습 - 2) k-평균


 

k-평균 알고리즘 작동 방식

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

 

과일을 자동으로 분류하기

  • 1절에서는 과일 종류별로 픽셀 평균값을 계산했음. 하지만 실전에서는 어떤 과일 사진이 들어올지 모름. 따라서 타깃값을 모르는 척하고 자동으로 사진을 클러스터로 모을 수 있는 군집 알고리즘이 필요.
  • 이 절에서는 대표적인 군집 알고리즘인 k-평균 알고리즘을 사용했음. k-평균은 비교적 간단하고 속도가 빠르며 이해하기도 쉬움. k-평균 알고리즘을 구현한 사이킷런의 KMeans 클래스는 각 샘플이 어떤 클러스터에 소속되어 있는지 labels_속성에 저장함. 
  • 각 샘플에서 각 클러스터까지의 거리를 하나의 특성으로 활용할 수도 있음. 이를 위해 KMeans 클래스는 transform() 메서드를 제공. 또한 predict() 메서드에서 새로운 샘플에 대해 가장 가까운 클러스터를 예측값으로 출력함. 
  • k-평균 알고리즘은 사전에 클러스터 개수를 미리지정해야함. 사실 데이터를 직접 확인하지 않고서는 몇 개의 클러스터가 만들어질지 알기 어려움. 최적의 클러스터 개수 k를 알아내는 한 가지 방법은 클러스터가 얼마나 밀집되어 있는지 나타내는 이너셔를 사용하는 것. 이너셔가 더 이상 크게 줄어들지 않는다면 클러스터 개수를 더 늘리는 것은 효과가 없음. 이를 엘보우 방법이라고 부름. 
  • 사이킷런의 KMeans 클래스는 자동으로 이너셔를 계산하여 inertia_ 속성으로 제공. 클러스터 개수를 늘리면서 반복하여 KMeans 알고리즘을 훈련하고 이너셔가 줄어드는 속도가 꺽이는 지점을 최적의 클러스터 개수로 결정. 
  • 이번 절에서 k-평균 알고리즘의 클러스터 중심까지 거리를 특성으로 사용할 수도 있다는 점을 보았음. 이렇게 하면 훈련 데이터의 차원을 크게 줄일 수 있음. 데이터셋의 차원을 줄이면 지도 학습 알고리즘의 속도를 크게 높일 수 있음. 다음 절에서는 비지도 학습의 또 다른 종류인 차원 축소에 대해서 본격적으로 알아보겠음. 
  • 전체 소스 코드
 

6-2 K-평균.ipynb

Run, share, and edit Python notebooks

colab.research.google.com

 

키워드로 끝내는 핵심 포인트

  • k-평균 알고리즘은 처음에 랜덤하게 클러스터 중심을 정하고 클러스터를 만듬. 그 다음 클러스터의 중심을 이동하고 다시 클러스터를 만드는 식으로 반복해서 최적의 클러스터를 구성하는 알고리즘. 
  • 클러스터 중심은 k-평균 알고리즘이 만든 클러스터에 속한 샘플의 특성 평균값. 센트로이드(centroid)라고도 부름. 가장 가까운 클러스터 중심을 샘플의 또 다른 특성으로 사용하거나 새로운 샘플에 대한 예측으로 활용할 수 있음. 
  • 엘보우 방법은 최적의 클러스터 개수를 정하는 방법 중 하나. 이너셔는 클러스터 중심과 샘플 사이 거리의 제곱 합임. 클러스터 개수에 따라 이너셔 감소가 꺾이는 지점이 적절한 클러스터 개수 k가 될 수 있음. 이 그래프의 모양을 따서 엘보우 방법이라고 부름. 

 


Chapter 06. 비지도 학습 - 3) 주성분 분석

 


 

주성분 분석으로 차원 축소

  • 이 절에서는 대표적인 비지도 학습 문제 중 하나인 차원 축소에 대해 알아보았다. 차원축소를 사용하면 데이터셋의 크기를 줄일 수 있고 비교적 시각화하기 쉽다. 또 차원 축소된 데이터를 지도 학습 알고리즘이나 다른 비지도 학습 알고리즘에 재사용하여 성능을 높이거나 훈련 속도를 빠르게 만들 수 있다. 
  • 사이킷런의 PCA 클래스를 사용해 과일 사진 데이터의 특성을 50개로 크게 줄였다. 특성 개수는 작지만 변환된 데이터는 원본 데이터에 있는 분산의 90% 이상을 표현한다. 이를 설명된 분산이라 부른다. 
  • PCA 클래스는 자동으로 설명된 분산을 계산하여 제공해 준다. 또한 주성분의 개수를 명시적으로 지정하는 대신 설명된 분산의 비율을 설정하여 원하는 비율만큼 주성분을 찾을 수 있다. 
  • PCA 클래스는 변환된 데이터에서 원본 데이터를 복원하는 메서드도 제공한다. 변환된 데이터가 원본 데이터의 분산을 모두 유지하고 있지 않다면 완벽하게 복원되지 않는다. 하지만 적은 특성으로도 상당 부분의 디테일을 복원할 수 있다. 
  • 지금까지 머신러닝의 주요 알고리즘을 살펴 보았다. 다음 장에서는 최근 머신러닝 분야에서 가장 인기 있는 주제인 딥러닝에 대해서 배워보겠다. 
  • 전체 소스 코드
 

6-3 PCA.ipynb

Run, share, and edit Python notebooks

colab.research.google.com

 

키워드로 끝내는 핵심 포인트

  • 차원 축소는 원본 데이터의 특성을 적은 수의 새로운 특성으로 변환하는 비지도 학습의 한 종류임. 차원 축소는 저장 공간을 줄이고 시각화하기 쉬움. 또한 다른 알고리즘의 성능을 높일 수도 있음. 
  • 주성분 분석은 차원 축소 알고리즘의 하나로 데이터에서 가장 분산이 큰 방향을 찾는 방법. 이런 방향을 주성분이라고 부름. 원본 데이터를 주성분에 투영하여 새로운 특성을 만들 수 있음. 일반적으로 주성분은 원본 데이터에 있는 특성 개수보다 작음. 
  • 설명된 분산은 주성분 분석에서 주성분이 얼마나 원본 데이터의 분산을 잘 나타내는지 기록한 것. 사이킷런의 PCA 클래스는 주성분 개수나 설명된 분산의 비율을 지정하여 주성분 분석을 수행할 수 있음. 
  • PCA는 주성분 분석을 수행하는 클래스임.

예제 파일

 

GitHub - rickiepark/hg-mldl: <혼자 공부하는 머신러닝+딥러닝>의 코드 저장소입니다.

<혼자 공부하는 머신러닝+딥러닝>의 코드 저장소입니다. Contribute to rickiepark/hg-mldl development by creating an account on GitHub.

github.com