오늘부터 "핸즈온 머신러닝 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
- (1) 군집(Clustering)
- 대표적인 비지도 학습
3. 준지도 학습(Semi-supervised Learning)
- 일반적으로 실제 데이터는 레이블(label)이 없는 샘플이 많고, 레이블(label)된 샘플은 적은 경우가 대다수이다.
- 이처럼 일부만 레이블(label)이 있는 데이터를 다루는 방법을 "준지도 학습"이라고 한다.
- 대부분의 준지도 학습 알고리즘은 지도 학습과 비지도 학습의 조합으로 이루어져 있다.
- ex) 심층 신뢰 신경망(Deep Belief Network; DBN)
4. 강화 학습(Reinforcement Learning)
- 어떤 환경 안에서 정의된 에이전트(어떤 행동을 할지 판단을 내리는 주체)가 현재의 상태를 인식하여, 선택 가능한 행동들 중 보상을 최대화(벌점을 최소화)하는 행동 혹은 행동 순서를 선택하는 방법이다.
- ex) 보행 로봇, 알파고
▶ 배치 학습(Batch Learning)과 온라인 학습
- 배치 학습
- 시스템이 점진적으로 학습할 수 없다.
- 가용한 데이터를 모두 사용해 훈련시켜야 한다.
- 이는 시간과 자원이 많이 소모되므로, 보통 오프라인에서 수행된다.
- 오프라인 학습
- 먼저 시스템을 훈련시키고, 그 다음에 제품 시스템에 적용시킨다.
- 즉, 학습한 것을 단지 적용만 한다.
- 오프라인 학습
- 배치 학습 시스템은 시간이 많이 소요된다.
- 시스템이 빠르게 변하는 데이터에 적응하기에는(ex. 주식가격) 적합하지 않다.
- 컴퓨팅 자원이 제한된 경우에도 적합하지 않다.
- 온라인 학습
- 시스템이 점직적으로 학습할 수 있다.
- 데이터를 순차적으로 한 개씩 또는 "미니배치"라 부르는 작은 묶음 단위로 주입하여 시스템을 훈련시킨다.
- 매 학습 단계가 빠르고 비용이 적게 든다.
- 연속적으로 데이터를 받고(ex. 주식가격), 빠른 변화에 스스로 적응해야 하는 시스템에 적합하다.
- 컴퓨팅 자원이 제한된 경우에도 적합하다.
- 변화하는 데이터에 얼마나 빠르게 적응할 것인지를 나타내는 파라미터를 "학습률(Learning Rate)"이라고 한다.
- 학습률을 높게 하면 시스템이 데이터에 빠르게 적응하지만, 예전 데이터를 금방 잊어버릴 것이다.
- 반대로 학습률을 낮게 하면 시스템의 관성이 더 커져서 더 느리게 학습하지만, 새로운 데이터에 있는 잡음이나 대표성 없는 데이터 포인트에 덜 민감해질 것이다.
- 온라인 학습에서의 문제점은 시스템에 나쁜 데이터가 주입되면, 시스템 성능이 점진적으로 감소한다는 것이다.
- 때문에 시스템을 면밀히 모니터링하고, 성능 감소가 감지되면 즉각 학습을 중지시켜야 한다.
▶ 사례 기반 학습과 모델 기반 학습
- 사례 기반 학습
- 시스템이 훈련 샘플을 기억함으로써 학습을 하는 방법이다.
- ex) 스팸 메일 분류에서 유사도 측정을 통해, 스팸 메일과 유사한 메일을 분류한다. 즉, 스팸 메일과 공통으로 갖고 있는 단어가 많으면 스팸으로 분류한다.
- 시스템이 훈련 샘플을 기억함으로써 학습을 하는 방법이다.
- 모델 기반 학습
- 샘플들의 모델을 만들어서 예측에 사용하는 방법이다.
- ex) 집 값 예측을 위해 선형 회귀 모델을 만들고, 모델 파라미터를 조정하면서 최적의 모델을 선택한다.
- 샘플들의 모델을 만들어서 예측에 사용하는 방법이다.
※ <머신러닝 프로젝트 작업 흐름 요약>
- 데이터를 분석
- 모델을 선택
- 훈련 데이터로 모델을 훈련 (즉, 학습 알고리즘이 비용 함수를 최소화하는 모델 파라미터를 찾기)
- 새로운 데이터에 모델을 적용해서 예측을 수행
▶ 머신러닝을 수행하며 마주할 수 있는 주요 문제들
- 충분하지 않은 양의 훈련 데이터
- 일반적으로 데이터의 양이 많을수록 모델의 예측 성능이 높아진다고 알려져 있다.
- 하지만 실제로 엄청나게 많은 양의 훈련 데이터를 모으는 것은 어려운 일이다.
- 대표성 없는 훈련 데이터
- 일반화하려는 사례들을 대표하는 훈렌 데이터 셋을 사용하는 것이 매우 중요하지만, 생각보다 어려울 때가 많다.
- 샘플이 작으면 "샘플링 잡음(우연에 의한 대표성 없는 데이터)" 이 생기고, 매우 큰 샘플도 표본 추출 방법이 잘못되면 대표성을 띠지 못한다 (즉, 샘플링 편향).
- 일반화하려는 사례들을 대표하는 훈렌 데이터 셋을 사용하는 것이 매우 중요하지만, 생각보다 어려울 때가 많다.
- 낮은 품질의 데이터
- 당연한 얘기지만 훈련 데이터가 에러, 이상치, 잡음으로 가득하다면 머신러닝 알고리즘의 예측 성능이 떨어진다.
- 이와 같은 이유로 훈련 데이터 정제에 많은 시간을 투자하는 것이다.
(데이터 전처리 지옥...)
- 관련 없는 특성(feature)
- 훈련 데이터에 관련 없는 특성(feature)는 적고, 관련 있는 특성(feature)는 충분해야 성공적인 학습이 이루어 질 것이다.
- 때문에 훈련에 사용할 좋은 특성(feature)들을 찾아내야 한다. 이를 "특성 공학(Feature Engineering)"이라고 한다.
- 특성 선택(Feature Selection)
- 가지고 있는 특성 중, 훈련에 가장 유용한 특성을 선택한다.
- 특성 추출(Feature Extraction)
- 특성을 결합하여 더 유용한 특성을 만든다.
- ex) 차원 축소 알고리즘
- 새로운 데이터를 수집해서 새로운 특성을 만든다.
- 특성 선택(Feature Selection)
- 훈련 데이터 과대적합(Overfitting)
- 훈련 데이터에는 모델 적합도가 뛰어나지만, 새로운 데이터들에 대한 모델 적합도는 떨어지는 현상을 말한다.
- 과대적합은 훈련 데이터에 있는 잡음의 양에 비해 모델이 너무 복잡할 때 발생한다.
- <과대적합 해결 방법>
- 파라미터 수가 적은 모델을 선택하기
- 훈련 데이터에 있는 특성(feature) 수 줄이기
- 모델에 제약을 가하여 단순화 시키기
- 모델을 단순하게 하고 과대적합의 위험을 감소시키기 위해 모델에 제약을 가하는 것을 "규제"라고 한다.
- 대표적인 규제 모델로는 Ridge 회귀, Lasso 회귀, Elasticnet 회귀가 있다.
- 더 많은 훈련 데이터를 모으기
- 훈련 데이터의 잡음을 줄이기 (ex. 오류 데이터 수정, 이상치 제거)
- <과대적합 해결 방법>
- 훈련 데이터 과소적합(Underfitting)
- 모델이 너무 단순해서 데이터의 내재된 구조를 제대로 학습하지 못하는 현상을 말한다.
- <과소적합 해결 방법>
- 모델 파라미터가 더 많은 강력한 모델을 선택하기
- 학습 알고리즘에 더 좋은 특성(feature)을 제공하기 (특성 공학)
- 모델의 제약을 줄이기 (ex. 규제 하이퍼파라미터 감소시키기)
- <과소적합 해결 방법>
- 모델이 너무 단순해서 데이터의 내재된 구조를 제대로 학습하지 못하는 현상을 말한다.
▶ 모델 테스트와 검증
- 일반적으로 모델 테스트 및 검증은 훈련 데이터를 "훈련 세트"와 "테스트 세트" 2개로 나눠서 수행한다.
- "훈련 세트"를 사용해서 모델을 훈련시킨다.
- "테스트 세트" 사용해서 모델을 테스트한다.
- 일반적으로 데이터의 80%를 "훈련 세트"로 사용하고, 20%를 "테스트 세트"로 사용한다.
- 그러나 위의 비율은 주어진 데이터의 크기에 따라 달라질 수 있다.
- 주어진 데이터의 크기가 크면, 테스트 세트의 비율은 훨씬 줄어들 수 있다.
- 새로운 샘플에 대한 오류 비율을 "일반화 오차"라고 하며, 테스트 세트에서 모델을 평가함으로써 이 오차에 대한 추정값을 얻을 수 있다.
- 일반화 오차 값은 이전에 본 적이 없는 새로운 샘플에 대해 모델이 얼마나 잘 작동할지 알려준다.
- 훈련 오차가 낮지만, 일반화 오차가 높다면 이는 모델이 훈련 데이터에 과대적합(overfitting)되었다는 뜻이다.
▶ 하이퍼파라미터 튜닝과 모델 선택
- 일반화 오차를 테스트 세트에서 여러 번 측정하게 되면, 모델과 하이퍼파라미터가 테스트 세트에 최적화된 모델이 만들어진다.
- 이는 모델이 새로운 데이터에 잘 작동하지 않을 수도 있다는 말이다.
- 마치 우리가 모의고사 시험을 치기 전에, 미리 여러 번 풀어본 후 시험을 치는 것과 동일하다.
- 이러한 문제를 해결하기 위해 "홀드아웃 검증" 방법을 사용한다.
- 훈련 세트의 일부를 떼어내서 여러 후보 모델을 평가하고 가장 좋은 하나를 선택하는 것이다.
- 이 때, 새로운 홀드아웃 세트를 "검증 세트"라고 부른다.
- <모델 선택 과정 요약>
- 즉, 줄어든 훈련 세트(전체 훈련 세트 - 검증세트)에서 다양한 하이퍼파라미터 값을 가진 여러 모델을 훈련시키고, 검증 세트에서 가장 높은 성능을 내는 모델을 선택하는 것이다.
- 위의 홀드아웃 검증 과정이 끝나면, 선택된 최선의 모델을 (검증 세트를 포함한) 전체 훈련 세트에서 다시 훈련시켜 최종 모델을 만든다.
- 마지막으로 최종 모델을 테스트 세트에서 평가하여 일반화 오차를 추정한다.
- 하지만 검증 세트가 너무 작거나 너무 크면, 모델이 정확하게 평가되지 않을 것이다.
- 이러한 문제를 해결하기 위해 "교차 검증"을 수행한다.
- 검증 세트마다 나머지 데이터에서 훈련한 모델을 해당 검증 세트에서 평가한다.
- 모든 모델의 평가를 평균하면 더 정확한 성능을 측정할 수는 있으나, 시간이 많이 걸린다는 단점이 있다.
- 이러한 문제를 해결하기 위해 "교차 검증"을 수행한다.
▶ 데이터 불일치
- 훈련 세트의 분포와 검증 세트의 분포의 차이 때문에 오차가 커진 것인지, 아니면 일반화가 부족해서 생긴 분산 문제인지 구별하기가 어려울 경우가 있다.
- "훈련-개발 세트"는 훈련 세트 중 일부를 떼어내서 또 다른 세트를 만드는 것으로, 위의 문제를 알아보기 위한 도구이다.
- 모델을 (훈련-개발 세트가 아니라 훈련 세트에서) 훈련시킨 다음, 훈련-개발 세트에서 평가한다.
- 이 모델이 검증 세트에서 좋지 않은 성능을 보인다면, 데이터 불일치로 인해 발생한 문제이다.
- 즉, 훈련-개발 세트와 검증 세트의 오차 차이가 크다면, "데이터 분포의 차이 문제"이다.
- 반대로 모델이 훈련-개발 세트에서 잘 작동하지 않는다면, 이는 훈련 세트에 과대적합된 것이다.
- 즉, 훈련-개발 세트와 오차가 훈련 세트와 크게 차이가 없다면, "분산 문제"이다.
- 이 모델이 검증 세트에서 좋지 않은 성능을 보인다면, 데이터 불일치로 인해 발생한 문제이다.
- 모델을 (훈련-개발 세트가 아니라 훈련 세트에서) 훈련시킨 다음, 훈련-개발 세트에서 평가한다.
위 설명에 대한 이해를 돕기 위해, 아래에 이미지 하나를 첨부하였다.
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
처음 책을 펼치기 전에는 1장의 내용이 30페이지 밖에 안되서 단순히 introduction 정도로만 생각했다.
하지만 생각보다 꽤나 많은 내용들이 나와있었다. (1장이라고 절대 무시해서는 안 될 정도의 양...)
다음에 포스팅할 2장에서는 "머신러닝 프로젝트가 전반적으로 어떻게 이루어지는지"에 대해 자세하게 다뤄볼 예정이다!
★ 참고 자료
- 핸즈온 머신러닝 2/E 교재
- 파이썬 머신러닝 완벽 가이드 교재
'Data Science > Machine Learning' 카테고리의 다른 글
[핸즈온 머신러닝 2/E] 5장. 서포트 벡터 머신 (0) | 2020.07.08 |
---|---|
[핸즈온 머신러닝 2/E] 4장. 모델 훈련 (0) | 2020.06.27 |
[핸즈온 머신러닝 2/E] 3장. 분류 (0) | 2020.06.19 |
[핸즈온 머신러닝 2/E] 2장. 머신러닝 프로젝트 처음부터 끝까지_Part 2 (0) | 2020.06.15 |
[핸즈온 머신러닝 2/E] 2장. 머신러닝 프로젝트 처음부터 끝까지_Part 1 (0) | 2020.06.07 |