본문 바로가기

Data Science/Machine Learning

[핸즈온 머신러닝 2/E] 1장. 한 눈에 보는 머신러닝

오늘부터 "핸즈온 머신러닝 2/E" 교재에 나온 내용들을 정리하며, 머신러닝 이론에 대한 공부를 시작했다.

 

1장에서는 머신러닝이란 무엇인지 그리고 왜 필요한지에 대한 내용들이 담겨있고, 사례들을 예시로 이해하기 쉽게 설명해주고 있다. 

 

 

자, 그럼 이제 1장에서 공부한 내용들을 정리해보겠다.

 

▶ 머신러닝이란 무엇인가?

  • 머신러닝은 명시적인 규칙을 코딩하지 않고, 기계가 데이터로부터 학습하여 어떤 작업을 더 잘하게 만드는 것이다.
  • <머신러닝을 활용한 사례>
    • 스팸 필터
    • 수익 예측
    • 고장 진단 및 사기 탐지 (이상치 탐지)
    • 고객 군집화
    • 상품 추천
    • 챗봇
    • 음성 인식
    • 이미지 분류
    • 텍스트 분류
  • 머신러닝 기술을 적용해서 대용량의 데이터를 분석한 후, 겉으로는 찾지 못했던 새로운 패턴을 발견하는 것을 "데이터 마이닝"이라고 한다. 말 그대로 "마이닝"이라는 말이 채굴(?)한다는 의미이므로, 데이터로부터 새로운 정보를 발견한다는 의미로 이해하면 쉽다.

 

▶ 머신러닝 시스템의 종류

1. 지도 학습(Supervised Learning)

  • 알고리즘에 주입하는 훈련 데이터에 레이블(label) 값이 포함되어 있다.
  • 즉, 명확한 레이블 값이 주어진 데이터를 학습한다.
    • 대표적인 지도 학습: 크게 "분류""회귀"로 나눌 수 있다. 
      • (1) 분류(Classification)
      • 기존 데이터가 어떤 레이블(label)에 속하는지 패턴을 알고리즘으로 인지한 뒤에, 새롭게 관측된 데이터에 대한 레이블(label)을 판별하는 것.
      • ex) 스팸 필터
        • <분류 모델>
          • 나이브 베이즈(Naive Bayes) 
          • K-Nearest Neighbors(KNN)
          • 로지스틱 회귀
          • SVM(서포트 벡터 머신)
          • 결정 트리 / 랜덤 포레스트(Random Forest)
          • 신경망(Neural Network)
      • (2) 회귀(Regression)
      • 예측 변수라 부르는 특성(feature)을 사용해서 target 값을 예측하는 것.
      • ex) 특정 상품의 가격 예측
        • <회귀 모델>
          • 선형 회귀
            • <규제 선형 모델>
            • Ridge 회귀
            • Lasso 회귀
            • Elasticnet 회귀
          • 다항 회귀
          • 회귀 트리
        • 일부 회귀 알고리즘은 분류에도 사용할 수 있다. → 로지스틱 회귀
          • 로지스틱 회귀는 클래스에 속할 확률을 출력해준다.
            • ex) 스팸 필터를 예시로 들면, "스팸일 가능성은 20%" 이런 식으로!
      • (3) 추천 시스템
      • (4) 시각/음성 감지/인식
      • (5) 텍스트 분석, NLP

2. 비지도 학습(Unsupervised Learning)

  • 알고리즘에 주입하는 훈련 데이터에 레이블(label) 값이 포함되어 있지 않다.
  • 즉, 명확한 레이블 값이 주어지지 않는 데이터를 학습한다.
    • 대표적인 비지도 학습
      • (1) 군집(Clustering)
        • K-Means
        • DBSCAN
        • 계층 군집 분석(HCA)
        • 이상치 탐지 및 특이치 탐지
        • One-class SVM
        • Isolation Forest
      • (2) 시각화와 차원 축소(Dimensionality Reduction)
        • 주성분 분석(PCA)
        • 커널 PCA
        • 지역적 선형 임베딩(LLE)
        • t-SNE
      • (3) 연관 규칙 학습
        • Apriori
        • Eclat

3. 준지도 학습(Semi-supervised Learning)

  • 일반적으로 실제 데이터는 레이블(label)이 없는 샘플이 많고, 레이블(label)된 샘플은 적은 경우가 대다수이다.
  • 이처럼 일부만 레이블(label)이 있는 데이터를 다루는 방법"준지도 학습"이라고 한다.
  • 대부분의 준지도 학습 알고리즘은 지도 학습과 비지도 학습의 조합으로 이루어져 있다.
    • ex) 심층 신뢰 신경망(Deep Belief Network; DBN)

4. 강화 학습(Reinforcement Learning)

  • 어떤 환경 안에서 정의된 에이전트(어떤 행동을 할지 판단을 내리는 주체)가 현재의 상태를 인식하여, 선택 가능한 행동들 중 보상을 최대화(벌점을 최소화)하는 행동 혹은 행동 순서를 선택하는 방법이다.
    • ex) 보행 로봇, 알파고

 

▶ 배치 학습(Batch Learning)과 온라인 학습

  • 배치 학습
    • 시스템이 점진적으로 학습할 수 없다
    • 가용한 데이터를 모두 사용해 훈련시켜야 한다.
    • 이는 시간과 자원이 많이 소모되므로, 보통 오프라인에서 수행된다.
      • 오프라인 학습
        • 먼저 시스템을 훈련시키고, 그 다음에 제품 시스템에 적용시킨다.
        • 즉, 학습한 것을 단지 적용만 한다.
    • 배치 학습 시스템은 시간이 많이 소요된다.
      • 시스템이 빠르게 변하는 데이터에 적응하기에는(ex. 주식가격) 적합하지 않다.
      • 컴퓨팅 자원이 제한된 경우에도 적합하지 않다.
  • 온라인 학습
    • 시스템이 점직적으로 학습할 수 있다
    • 데이터를 순차적으로 한 개씩 또는 "미니배치"라 부르는 작은 묶음 단위로 주입하여 시스템을 훈련시킨다.
    • 매 학습 단계가 빠르고 비용이 적게 든다.
      • 연속적으로 데이터를 받고(ex. 주식가격), 빠른 변화에 스스로 적응해야 하는 시스템에 적합하다.
      • 컴퓨팅 자원이 제한된 경우에도 적합하다.
    • 변화하는 데이터에 얼마나 빠르게 적응할 것인지를 나타내는 파라미터를 "학습률(Learning Rate)"이라고 한다.
      • 학습률을 높게 하면 시스템이 데이터에 빠르게 적응하지만, 예전 데이터를 금방 잊어버릴 것이다.
      • 반대로 학습률을 낮게 하면 시스템의 관성이 더 커져서 더 느리게 학습하지만, 새로운 데이터에 있는 잡음이나 대표성 없는 데이터 포인트에 덜 민감해질 것이다.
    • 온라인 학습에서의 문제점은 시스템에 나쁜 데이터가 주입되면, 시스템 성능이 점진적으로 감소한다는 것이다.
      • 때문에 시스템을 면밀히 모니터링하고, 성능 감소가 감지되면 즉각 학습을 중지시켜야 한다.

 

▶ 사례 기반 학습과 모델 기반 학습

  • 사례 기반 학습
    • 시스템이 훈련 샘플을 기억함으로써 학습을 하는 방법이다.
      • ex) 스팸 메일 분류에서 유사도 측정을 통해, 스팸 메일과 유사한 메일을 분류한다. 즉, 스팸 메일과 공통으로 갖고 있는 단어가 많으면 스팸으로 분류한다.
  • 모델 기반 학습
    • 샘플들의 모델을 만들어서 예측에 사용하는 방법이다.
      • ex) 집 값 예측을 위해 선형 회귀 모델을 만들고, 모델 파라미터를 조정하면서 최적의 모델을 선택한다.

 

※ <머신러닝 프로젝트 작업 흐름 요약>

  1. 데이터를 분석
  2. 모델을 선택
  3. 훈련 데이터로 모델을 훈련 (즉, 학습 알고리즘이 비용 함수를 최소화하는 모델 파라미터를 찾기)
  4. 새로운 데이터에 모델을 적용해서 예측을 수행

 

▶ 머신러닝을 수행하며 마주할 수 있는 주요 문제들

  • 충분하지 않은 양의 훈련 데이터
    • 일반적으로 데이터의 양이 많을수록 모델의 예측 성능이 높아진다고 알려져 있다.
    • 하지만 실제로 엄청나게 많은 양의 훈련 데이터를 모으는 것은 어려운 일이다.
  • 대표성 없는 훈련 데이터
    • 일반화하려는 사례들을 대표하는 훈렌 데이터 셋을 사용하는 것이 매우 중요하지만, 생각보다 어려울 때가 많다.
      • 샘플이 작으면 "샘플링 잡음(우연에 의한 대표성 없는 데이터)" 이 생기고, 매우 큰 샘플도 표본 추출 방법이 잘못되면 대표성을 띠지 못한다 (즉, 샘플링 편향).
  • 낮은 품질의 데이터
    • 당연한 얘기지만 훈련 데이터가 에러, 이상치, 잡음으로 가득하다면 머신러닝 알고리즘의 예측 성능이 떨어진다.
    • 이와 같은 이유로 훈련 데이터 정제에 많은 시간을 투자하는 것이다. (데이터 전처리 지옥...)
  • 관련 없는 특성(feature)
    • 훈련 데이터에 관련 없는 특성(feature)는 적고, 관련 있는 특성(feature)는 충분해야 성공적인 학습이 이루어 질 것이다.
    • 때문에 훈련에 사용할 좋은 특성(feature)들을 찾아내야 한다. 이를 "특성 공학(Feature Engineering)"이라고 한다.
      • 특성 선택(Feature Selection)
        • 가지고 있는 특성 중, 훈련에 가장 유용한 특성을 선택한다.
      • 특성 추출(Feature Extraction)
        • 특성을 결합하여 더 유용한 특성을 만든다.
        • ex) 차원 축소 알고리즘
      • 새로운 데이터를 수집해서 새로운 특성을 만든다.
  • 훈련 데이터 과대적합(Overfitting)
    • 훈련 데이터에는 모델 적합도가 뛰어나지만, 새로운 데이터들에 대한 모델 적합도는 떨어지는 현상을 말한다.
    • 과대적합은 훈련 데이터에 있는 잡음의 양에 비해 모델이 너무 복잡할 때 발생한다.
      • <과대적합 해결 방법>
        • 파라미터 수가 적은 모델을 선택하기
        • 훈련 데이터에 있는 특성(feature) 수 줄이기
        • 모델에 제약을 가하여 단순화 시키기
          • 모델을 단순하게 하고 과대적합의 위험을 감소시키기 위해 모델에 제약을 가하는 것을 "규제"라고 한다.
          • 대표적인 규제 모델로는 Ridge 회귀, Lasso 회귀, Elasticnet 회귀가 있다.
        • 더 많은 훈련 데이터를 모으기
        • 훈련 데이터의 잡음을 줄이기 (ex. 오류 데이터 수정, 이상치 제거)
  • 훈련 데이터 과소적합(Underfitting)
    • 모델이 너무 단순해서 데이터의 내재된 구조를 제대로 학습하지 못하는 현상을 말한다.
      • <과소적합 해결 방법>
        • 모델 파라미터가 더 많은 강력한 모델을 선택하기
        • 학습 알고리즘에 더 좋은 특성(feature)을 제공하기 (특성 공학)
        • 모델의 제약을 줄이기 (ex. 규제 하이퍼파라미터 감소시키기)

 

▶ 모델 테스트와 검증

  • 일반적으로 모델 테스트 및 검증은 훈련 데이터를 "훈련 세트""테스트 세트" 2개로 나눠서 수행한다.
    • "훈련 세트"를 사용해서 모델을 훈련시킨다.
    • "테스트 세트" 사용해서 모델을 테스트한다.
    • 일반적으로 데이터의 80%를 "훈련 세트"로 사용하고, 20%를 "테스트 세트"로 사용한다.
    • 그러나 위의 비율은 주어진 데이터의 크기에 따라 달라질 수 있다.
      • 주어진 데이터의 크기가 크면, 테스트 세트의 비율은 훨씬 줄어들 수 있다.
  • 새로운 샘플에 대한 오류 비율"일반화 오차"라고 하며, 테스트 세트에서 모델을 평가함으로써 이 오차에 대한 추정값을 얻을 수 있다.
    • 일반화 오차 값은 이전에 본 적이 없는 새로운 샘플에 대해 모델이 얼마나 잘 작동할지 알려준다.
    • 훈련 오차가 낮지만, 일반화 오차가 높다면 이는 모델이 훈련 데이터에 과대적합(overfitting)되었다는 뜻이다.

 

▶ 하이퍼파라미터 튜닝과 모델 선택

  • 일반화 오차를 테스트 세트에서 여러 번 측정하게 되면, 모델과 하이퍼파라미터가 테스트 세트에 최적화된 모델이 만들어진다.
    • 이는 모델이 새로운 데이터에 잘 작동하지 않을 수도 있다는 말이다.
    • 마치 우리가 모의고사 시험을 치기 전에, 미리 여러 번 풀어본 후 시험을 치는 것과 동일하다.
  • 이러한 문제를 해결하기 위해 "홀드아웃 검증" 방법을 사용한다.
    • 훈련 세트의 일부를 떼어내서 여러 후보 모델을 평가하고 가장 좋은 하나를 선택하는 것이다.
    • 이 때, 새로운 홀드아웃 세트를 "검증 세트"라고 부른다.
      • <모델 선택 과정 요약> 
      • 즉, 줄어든 훈련 세트(전체 훈련 세트 - 검증세트)에서 다양한 하이퍼파라미터 값을 가진 여러 모델을 훈련시키고, 검증 세트에서 가장 높은 성능을 내는 모델을 선택하는 것이다.
      • 위의 홀드아웃 검증 과정이 끝나면, 선택된 최선의 모델을 (검증 세트를 포함한) 전체 훈련 세트에서 다시 훈련시켜 최종 모델을 만든다.
      • 마지막으로 최종 모델을 테스트 세트에서 평가하여 일반화 오차를 추정한다.
    • 하지만 검증 세트가 너무 작거나 너무 크면, 모델이 정확하게 평가되지 않을 것이다.
      • 이러한 문제를 해결하기 위해 "교차 검증"을 수행한다.
        • 검증 세트마다 나머지 데이터에서 훈련한 모델을 해당 검증 세트에서 평가한다.
        • 모든 모델의 평가를 평균하면 더 정확한 성능을 측정할 수는 있으나, 시간이 많이 걸린다는 단점이 있다.

 

▶ 데이터 불일치

  • 훈련 세트의 분포와 검증 세트의 분포의 차이 때문에 오차가 커진 것인지, 아니면 일반화가 부족해서 생긴 분산 문제인지 구별하기가 어려울 경우가 있다.
  • "훈련-개발 세트"는 훈련 세트 중 일부를 떼어내서 또 다른 세트를 만드는 것으로, 위의 문제를 알아보기 위한 도구이다.
    • 모델을 (훈련-개발 세트가 아니라 훈련 세트에서) 훈련시킨 다음, 훈련-개발 세트에서 평가한다.
      • 이 모델이 검증 세트에서 좋지 않은 성능을 보인다면, 데이터 불일치로 인해 발생한 문제이다.
        • 즉, 훈련-개발 세트와 검증 세트의 오차 차이가 크다면, "데이터 분포의 차이 문제"이다.
      • 반대로 모델이 훈련-개발 세트에서 잘 작동하지 않는다면, 이는 훈련 세트에 과대적합된 것이다.
        • 즉, 훈련-개발 세트와 오차가 훈련 세트와 크게 차이가 없다면, "분산 문제"이다. 

 

위 설명에 대한 이해를 돕기 위해, 아래에 이미지 하나를 첨부하였다.

 

 

처음 책을 펼치기 전에는 1장의 내용이 30페이지 밖에 안되서 단순히 introduction 정도로만 생각했다. 

 

하지만 생각보다 꽤나 많은 내용들이 나와있었다. (1장이라고 절대 무시해서는 안 될 정도의 양...)

 

다음에 포스팅할 2장에서는 "머신러닝 프로젝트가 전반적으로 어떻게 이루어지는지"에 대해 자세하게 다뤄볼 예정이다!

 

★ 참고 자료

- 핸즈온 머신러닝 2/E 교재

- 파이썬 머신러닝 완벽 가이드 교재