[Hands-On-Machine Learning]1장 한 눈에 보는 머신러닝

YJCho·2024년 9월 9일

머신러닝 입문서로 불리는 핸즈온 머신러닝을 이해한 대로 정리해보려고 한다.

1.1 🔥머신러닝이란?

머신러닝의 공학적인 정의는 아래와 같다

A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.
Tom Mitchell, 1997

훈련 세트(training set) : 시스템이 학습하는 데 사용하는 샘플
훈련 사례(training instance) or 샘플(sample) : 각각의 훈련 데이터
모델(model) : 머신러닝 시스템에서 학습하고 예측을 만드는 부분
정확도(accuracy) : 머신러닝의 공학적인 정의에서 언급한 성능 측정 P

모델 예시 : 신경망(neural network), 랜덤 포레스트(random forest)

1.2 🔥머신러닝을 사용하는 이유

  • 기존 솔루션으로 는 많은 수동 조정과 규칙이 필요한 문제에 유용
    : 머신러닝 모델이 코드를 간단하게 만들고 전통적인 방법보다 더 잘 수행 가능
    : 문제가 어려워지면 더욱 규칙이 길고 복잡해지므로 유지 보수에 용이하지 않음.

  • 전통적인 방식으로는 해결 방법이 없는 복잡한 문제
    : 가장 뛰어난 머신러닝 기법으로 해결 방법 찾기 가능
    : 음성 인식(speech recognition)이 그 예시다

  • 유동적인 환경
    : 머신러닝 시스템은 새로운 데이터로 쉽게 재훈련이 가능해서 최신 상태를 유지하는 것이 가능하다 (기존의 상황이었다면 수동으로 하나하나 고쳐주어야 함!)

  • 복잡한 문제와 대량의 데이터에서 insight 얻기
    : 데이터 마이닝(data mining) : 대용량의 데이터를 분석하여 숨겨진 패턴을 발견하는 것, 머신러닝을 잘 활용할 수 있는 분야
    : 머신러닝을 통해 예상치 못한 상관관계새로운 추세 발견해서 문제 이해 가능

1.3 🔥적용 사례

흥미로워 보이는 사례 위주로 정리했다

  • 여러 가지 성과 자료를 바탕으로 회사의 내년도 수익 예측하기

    • (회귀)regression 작업
    • #선형회귀 #다항회귀 #회귀 SVM #회귀 랜덤 포레스트 #인공 신경망
    • 과거 성과 데이터를 고려하고 싶다면
    • #RNN #CNN #Transformer 사용
  • 신용카드 부정 거래 탐지
    이상치 탐지 (outlier detection) 작업이라고 한다
    isolation forest, Gaussian mixture, autoencoder 사용

  • 과거 구매 이력을 기반으로 고객을 나누고 각 집합마다 다른 마케팅 전략 계획하기

    • 군집(clustering) 작업
    • k-means, DBSCAN(밀도 기반 알고리즘) 사용
  • 지능형 게임 봇 만들기

    • 강화 학습(reinforcement learning) 이용
    • 시간이 지나면 주어진 환경에서 보상이 최대가 되는 행동을 선택하는 에이전틀를 훈련하는 머신러닝의 한 분야
    • 알파고가 강화 학습을 사용하여 구축됨

1.4 🔥머신러닝 시스템의 종류

종류가 많으면 항상 분류하는 기준이 존재한다.

  • 1.4.1 ) 훈련 지도 방식 (학습하는 동안의 지도 형태나 정보량에 따라 분류)
    • 지도 학습(supervised learning)
    • 비지도 학습(unsupervised learning)
    • 번외) 준지도 학습(semi-supervised learning)
    • 자기 지도 학습(self-supervised learning)
    • 강화 학습(reinforcement learning)
  • 1.4.2 ) 실시간으로 점진적인 학습을 하는지 아닌지
    • 온라인 학습
    • 배치 학습
  • 1.4.3 ) 예측 방식에 따른 차이
    • 사례 기반 학습(알고 있는 데이터 포인트와 새 데이터 포인트 비교)
    • 모델 기반 학습(훈련 데이터셋에서 패턴 발견하여 예측 모델 구축)

1.5 🔥머신러닝의 주요 도전 과제

1.5.1 충분하지 않은 양의 훈련 데이터

대부분의 머신러닝 알고리즘이 잘 작동하려면 데이터가 많아야 한다!! 아주 간단한 문제라도 수천 개의 데이터가 필요하니, 더 복잡한 분야(이미지나 음성 인식)에서는 더 많은 데이터가 필요하다.

책에서 마이크로소프트 연구자인 Michele Banko와 Eric Brill은 2001년에 발표한 논문을 언급했다.

결론(6.conclusion) 부분을 읽어보면 자연어 분류 작업에서 더 큰 학습데이터를 사용하면 성능이 크게 향상될 수 있음을 보여줄 있다고 언급한다. 따라서 다양한 학습 알고리즘을 비교하는 연구에 집중하기 보다는 더 큰 labeld dataset을 구축하는 데 중점을 두어야 한다고 말하고 있다.

  • corpus : 연구나 학습을 위해 모아놓은 텍스트 데이터의 집합, 보통 NLP에서 사용되며, 언어를 학습하거나 알고리즘을 테스트할 때 필요한 데이터셋을 의미함.

2009년 Peter Norvig 등이 쓴 「The Unreasonbale Effectiveness of Data」논문에서도 비슷한 주장을 언급하고 있다.

1.5.2 대표성 없는 훈련 데이터

일반화가 잘 되려면 훈련 데이터가 일반화하고 싶은 새로운 사례를 대표하는 것이 중요하다. 하지만 이런 훈련 세트를 찾는 것은 어렵다. 결측값이 많은 데이터를 다루어서 그런가 싶었는데, 대표성을 띄는 샘플을 찾기 어려워서 그렇다고 한다.

샘플이 작으면 sampling noise(우연에 의한 대표성 없는 데이터)가, 표본 추출 방법이 잘못되면 아무리 큰 샘플이라도 sampling bias가 일어나서 대표성을 띄지 못할 수 있다고 한다.

1.5.3 낮은 품질의 데이터

정제되어 있지 않은 데이터에서는 특정한 패턴을 찾기 어렵다. (캐글 조금만 해보면 정말 공감할 수밖에 없는 내용일 것 같다. 점수가 안 나와...)

1.5.4 관련 없는 특성

특성 공학(feature engineering) : 훈련에 사용할 좋은 특성을 찾는 것

  • 특성 선택(feature selection)

    • 가지고 있는 특성 중에서 훈련에 가장 유용한 특성 선택
  • 특성 추출(feature extraction)

    • 특성을 결합해서 더 유용한 특성 만들기(차원 축소 알고리즘에도 도움이 될 수 있다고 함!)
  • 데이터 수집

    • 새로운 데이터를 수집해서 새로운 특성을 만든다

    1.5.5 훈련 데이터 과대적합

과대적합(overfitting) : 모델이 훈련 데이터에는 너무 잘 맞지만 일반성이 떨어지는 경우,훈련 데이터의 양과 잡음에 비해 모델이 너무 복잡할 때 일어난다!

과대적합 방지
1. 파라미터 수가 적은 모델 택하기
2. 훈련 데이터 더 많이 모으기
3. 훈련 데이터의 잡음 제거(오류 데이터 수정과 이상치 제거)
4. 규제(regularization) : 제약 가하기
ex) 선형모델에서 파라미터 조절(자유도 degree of freedom)

규제의 양은 hyperparameter가 결정함.
*참고로 이 하이퍼파라미터는 모델이 아닌 학습 알고리즘의 파라미터이기에 훈련 전에 상수로 지정되어 남아 있는다고 한다.

1.5.6 훈련 데이터 과소적합

과소적합(underfitting) : 모델이 너무 단순해서 데이터의 내재된 구조를 학습하지 못할 때 일어남.

과소적합 방지
1. 모델 파라미터가 더 많은 강력한 모델 선택
2. 학습 알고리즘에 더 좋은 특성 제공(특성 공학)
3. 모델의 제약 줄이기(ex. 규제 하이퍼파라미터 감소시키기)

1.6 🔥 테스트와 검증

모델이 샘플에 얼마나 잘 일반화될지 알려면 실제로 적용해보는 수밖에 없다! 하지만 실제로 적용했다가 만약 모델 성능이 않 좋다면 자칫 욕만 얻어먹을 수 있다! 실제 적용하는 대신 더 나은 방법들도 존재한다.

훈련 세트테스트 세트 2개로 나누는 방법이 있다.
일반화 오차(generalization error) = 외부 샘플 오차(out-of-sample error) : 새로운 샘플에 대한 오차 비율

테스트 세트에서 모델을 평가함으로써 이 오차에 대한 추정값(estimation)을 얻을 수 있다. 이 수치를 통해 한 번도 본 적이 없는 새로운 샘플을 모델이 어떻게 작동할 지 볼 수 있다고 한다.

만약 훈련 오차↓, 일반화 오차 ↑ 상황이라면 과대적합이 일어난 상황으로 볼 수 있다.

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

모델 평가 - 테스트 세트를 이용하자!

100개의 하이퍼파라미터 값으로 100개의 다른 모델을 훈련시키는 방법이 있다. 일반화 오차가 가장 낮은 모델을 최적의 하이퍼파라미터를 찾았다고 가정해보자. 이 모델이 실제 서비스에 투입되면 어느 정도의 성능을 낼 수 있을까?

일반화 오차를 테스트 세트에서 여러 번 측정했기에,
이미 테스트 세트에 최적화된 모델이 되버린 상태다.
따라서 모델이 새로운 데이터, 즉 실제 서비스에 투입되면 잘 작동하지 않을 수 있다!

어떻게 해결하지? 홀드아웃 검증 holdout validation

훈련 세트의 일부를 떼어내어 여러 후보 모델을 평가하고 가장 좋은 하나를 선택하는 방법

새로운 홀드아웃 세트 : 검증 세트 (validation set)
개발 세트(development set), 데브 세트(dev set) 라고도 함!

검증 세트가 너무 작거나 너무 크면 당연히 문제가 생긴다. 적절한 양을 찾는 것이 가장 중요하다!

검증 세트가 너무 커서 남은 훈련 세트가 전체 훈련 세트보다 작아지면, 너무 작은 훈련 세트에서 훈련한 모델을 비교하는 것은 이상적이지 않다고 한다. 이를 해결하기 위해 작은 검증 세트를 사용해 여러 개를 사용하는 교차 검증( cross-validation)이라는 방법을 사용할 수 있다.

교차 검증으로 쓰이는 두 기법에 대한 내용을 정리한 글이 있으니 참고하면 좋을 것 같다!

다만, 훈련 시간이 검증 세트의 개수에 비례해서 늘어난다는 단점이 존재한다!

1.6.2 데이터 불일치

데이터를 아무리 많이 얻더라도, 대표성을 띄지 않는다면 무용지물일 수 잇다.

만약에 버섯 사진으로 버섯의 종류를 찾는 모바일 앱을 만든다고 해보자. 웹에서 엄청난 양의 버섯 사진을 구할 수 있으나, 실제로 찍을 사진을 대신하지는 못 한다.

이 경우를 대비하여 대표성을 가진 사진의 반을 검증 세트에, 반을 테스트 세트에 넣었고, 모델 성능을 측정했는데 결과가 실망스러웠다고 생각해보자. 이 경우엔 훈련 세트에 과대적합이 일어난 것인지, 웹 사진과 앱 사진의 데이터가 불일치하기 때문인지 알기 어렵다고 한다.

이를 해결하기 위해 한 가지 방법이 있다. 훈련 사진의 일부를 떼어내 또 다 른 세트, 훈련-개발 세트(train-dev set, 앤드류 응은 이렇게 불렀다고 한다)를 만드는 것이다. 훈련 세트에서 훈련한 후, 훈련-개발 세트에서 잘 작동하는지 평가한다고 한다.

이때 모델 잘 작동 X → 검증 세트에서 평가
모델 성능 X → 데이터 불일치 문제(전처리 필요)

공짜 점심 이론

The Lack of A Priori Distinctions Between Learning Algorithms

특정 종류의 모델을 선택할 때 데이터에 대한 암묵적인 가정(assumption)을 하는 것이 이 이론의 주 내용이다. David Wolpert는 데이터에 대해 완벽하게 아무런 가정도 하지 않으면 한 모델을 다른 모델보다 선호할 근거가 없음을 보였다. 이를 no free lunch(NFL) 이론이라고 한다. 경험하기 전에 더 잘 맞을 것이라 확신할 수 없기에 어떤 모델이 최선인지 확실히 알려면 모든 모델을 평가해보는 것뿐이라고 주장한다.

물론 이건 불가능하기에 실전에서는 데이터에 대한 타당한 가정을 하고 적절한 모델 몇 가지만 평가한다.

profile
호로록

0개의 댓글