이 포스트는 Hands-On Machine Learning with Scikit-Learn & Tensorflow 를 기초로 제작되었습니다.
요약/정리 및 개인 공부를 목적으로 하고 있습니다.
책의 내용은 https://www.oreilly.com/library/view/hands-on-machine-learning/9781491962282/ch01.html 에 영문으로 기술되어 있으며, 조금 더 자세히 보고 싶으신 분은 번역자님의 블로그를 참고하시면 좋을 것 같습니다.
머신러닝이란?
- 명시적인 프로그래밍 없이 컴퓨터가 학습하는 능력을 갖추게 하는 연구 분야
- 어떤 작업 T에 대한 컴퓨터 프로그램의 성능을 P로 측정했을 때 경험 E로 성능이 향상됐다면, 이 컴퓨터 프로그램 은 작업 T와 성능 측정 P에 대해 경험 E로 학습한 것이다
쉽게 말하면, 어떤 작업(T: Task)에 대하여 T를 수행했던 경험(E: Experience)를 바탕으로 T의 해결책을 학습하는 프로그램을 의미합니다. 프로그램의 평가는 성능(P: Performace)를 통해 이루어집니다.
왜 머신러닝을 사용하는가?
전통적 프로그래밍 방식은 어떠한 문제가 발생하면 해당 문제에 직접 대응하는 코드를 작성하여 처리하는 방식입니다. 이는 문제 발견 시 처리 코드 수의 증가로 이어지며, 종국에는 유지보수가 힘든 복잡한 코드로 변할 가능성을 내포합니다.
전통적 방식 vs 머신러닝 방식
이를 통해 정리할 수 있는 머신러닝의 장점은 다음과 같습니다.
- 전통적 방식보다 유지보수가 쉽다.
- 새로운 문제에 대해 대응하기 쉽다.
- 코드가 더 간단하고 수행능력이 높을 수 있다.
- 기존의 접근방식으로는 너무 복잡하거나 알려진 알고리즘이 없는 문제의 경우에도 대응할 수 있다.
- 복잡한 문제와 대량의 데이터에 데이터 마이닝을 적용하여 인간의 학습에 도움을 줄 수 있다.
머신러닝 시스템의 종류
머신러닝 분류 기준 :
- 사람의 감독 하에 있는가? (지도, 비지도, 준지도, 강화 학습)
- 실시간으로 학습하는가? (온라인, 배치 학습)
- 단순 비교를 하는가? 패턴 발견을 통한 예측 모델을 만드는가? (사례 기반, 모델 기반 학습)
지도 학습과 비지도 학습
사람의 감독 여부 또는 정보량에 따라 지도, 비지도, 준지도, 강화 학습 등 크게 네가지 범주로 나눌 수 있습니다.
지도 학습 (Supervised Learning)
지도 학습은 각 샘플(Data, Instance)들이 레이블(Lable, 원하는 답)을 가지고 있는 경우를 말합니다.
지도 학습의 전형적인 예로 분류와 회귀가 있습니다.
- 분류 (Classification)
기존 샘플, 즉 기존 데이터를 훈련 세트로 설정한 후 레이블의 유무에 따라 어떤 것이 레이블로써 사용될 수 있을지 학습하는 작업입니다. 학습한 데이터를 통해 새로운 데이터의 유입 시 레이블의 유무를 판별하여 분류할 수 있습니다.
- 회귀 (Regression)
예측 변수(Predictor variable)라고 하는 특성을 사용하여 목표 수치 값을 예측하는 작업입니다.
+ 중요 지도 학습 알고리즘
중요 지도 학습 알고리즘
- k-최근접 이웃 (k-Nearest Neighbors)
- 선형 회귀 (Linear Regression)
- 로지스틱 회귀 (Logistic Regression)
- 서포트 벡터 머신 (SVM : Support Vector Machines)
- 결정 트리와 랜덤 포레스트 (Decision Tree, Random Froests)
- 신경망 (Neural networks)
비지도 학습 (Unsupervised Learning)
말 그대로 지도되지 않는 학습입니다. 훈련 데이터에 레이블(원하는 답)이 없습니다. 때문에 시스템이 직접 학습해야 합니다. 기존의 데이터가 어떤 형태를 띄고 있는지를 보고 판단합니다.
중요한 비지도 학습 알고리즘은 크게 세 분류로 나눌 수 있으며, 군집, 시각화와 차원 축소, 연관 규칙 학습이 있습니다.
- 군집 (Clustering)
- k - 평균 (k-Means)
- 계층 군집 분석 (HCA: Hierarchical Cluster Analysis)
- 기댓값 최대화 (Expectation Maximization)
군집 알고리즘의 경우 알고리즘이 직접 데이터 사이의 연관성을 찾습니다. 계층 군집 알고리즘을 사용하면 각 그룹을 더 작은 그룹으로 세분화할 수 있습니다.
- 시각화 (Visualization)와 차원 축소 (Dimensionality reduction)
- 주성분 분석 (PCA: Principal Component Analysis)
- 커널 PCA (Kernel PCA)
- 지역적 선형 임베딩 (LLE: Locally-Linear Embedding)
- t - SNE (t-distrubuted Stochastic Neighbir Embedding)
시각화 알고리즘은 레이블이 없는 대규모의 고차원 데이터를 넣으면 도식화가 가능한 2D나 3D 표현을 만들어줍니다. 데이터가 어떻게 조직되어 있는지 이해할 수 있고 예상치 못한 패턴을 발견할 수도 있습니다.
차원 축소 알고리즘은 너무 많은 정보를 잃지 않으면서 데이터를 간소화하려는 알고리즘입니다. 상관관계가 있는 여러 특성을 하나로 합쳐 데이터를 간소화하는 방법을 사용합니다. 이를 특성 추출이라고 합니다.
- 연관 규칙 학습 (Association rule learning)
- 어프라이어리 (Apriori)
- 이클렛 (Eclat)
데이터의 연관성을 학습하여, 연관된 범위를 통해 의미있는 정보를 추출하거나 연관된 범위 밖의 정보를 탐지하는 작업을 수행합니다.
준지도 학습 (Semisupervised Learning)
레이블이 일부만 있는 경우 사용하는 방법을 준지도 학습이라고 합니다. 대부분의 데이터는 레이블이 없고, 소수의 데이터에만 레이블이 존재하는 경우가 많습니다. 대부분의 준지도 학습 알고리즘은 지도 학습과 비지도 학습의 조합으로 이루어져 있습니다.
강화 학습 (Reinforcement Learning)
타 알고리즘과는 매우 다른 성격을 지니고 있습니다. 학습하는 시스템을 에이전트(Agent)라고 칭하고, 환경을 관찰하여 행동을 실행하고 그 결과로 보상(Reward) 또는 벌점(Penalty)을 받습니다. 시간이 지나면서 가장 큰 보상을 얻기 위해 정책(Policy)라고 부르는 최사의 전략을 스스로 학습합니다. 정책은 주어진 상황에서 에이전트가 어떤 행동을 선택해야 할지 정의합니다.
배치 학습과 온라인 학습
입력 데이터 스트림으로부터 점진적으로 학습할 수 있는지 여부입니다.
배치 학습 (Batch Learning)
시스템이 점진적으로 학습할 수 없습니다. 오프라인에서 먼저 시스템을 수행시킨 후 실행 중에는 더이상의 학습이 없습니다. 오프라인 학습이라고도 합니다.
온라인 학습 (Online Learning)
데이터를 순차적으로 한 개씩 또는 미니 배치(mini-batch)라고 부르는 작은 묶음 단위로 주입하여 시스템을 훈련시킵니다. 데이터가 도착하는 즉시 학습합니다.
대량의 데이터를 처리할 때에도 유용하게 사용할 수 있습니다. 외부 메모리 학습(out-of-core Learning)이라고 합니다.
온라인 학습 시스템에서 중요한 파라미터 중 하나는 변화하는 데이터에 얼마나 빠르게 적응할 것인지이며, 이를 학습률(Learning Rate)라고 합니다. 이는 높을 경우와 낮을 경우로 나누어 볼 수 있습니다.
- 학습률이 높을 경우 시스템이 데이터에 빠르게 적응하지만, 예전 데이터를 금방 잊어버립니다.
- 학습률이 낮을 경우 시스템의 관성이 더 커져서 더 느리게 학습합니다. 하지만 새로운 데이터에 있는 잡음이나 대표성 없는 데이터 포인트에 덜 민감해집니다.
사례 기반 학습과 모델 기반 학습
일반화 여부에 따라 분류가 가능합니다. 머신러닝은 예측을 만드는 작업이며, 새로운 샘플(본 적 없는 문제)에 잘 작동하고자 하는 것이 주된 목표입니다.
사례 기반 학습
단순히 기억하는 형태의 학습입니다. 가장 간단하며, 최악은 아니나 최선 또한 아닙니다. 훈련 샘플과 유사도(Similarity)를 측정하여 샘플을 학습하며, 이를 통해 새로운 데이터에 일반화합니다.
모델 기반 학습
샘플들의 모델을 만들어 예측에 사용합니다.
머신러닝의 해결해야 할 과제
머신러닝은 학습 알고리즘을 어떤 데이터에 훈련시키는 것이므로, 만일 나쁜 데이터 또는 나쁜 알고리즘이 등장할 경우 문제가 생깁니다.
충분하지 않은 양의 훈련 데이터
기본적으로 머신러닝 알고리즘이 잘 작동하기 위해서는 많은 양의 데이터를 필요로 합니다. 아주 간단한 문제라도 수천 개의 데이터를 필요로 하며, 복잡한 데이터의 경우에는 수백만을 넘나드는 데이터를 필요로 하기도 하지요.
대표성 없는 훈련 데이터
데이터의 일반화를 위해서는 훈련 데이터가 해당 사례에서 대표성을 띄고 있어야 합니다. 그렇지 않으면 올바른 결과값이 나오지 않게 됩니다. 때문에 사례를 대표하는 훈련 세트를 사용하는 것이 매우 중요하나, 이는 생각보다 어려운 작업입니다. 샘플이 작으면 샘플링 잡음(Sampling noise)이 생기고, 매우 큰 샘플도 표본 추출 방법이 잘못되면 대표성을 띄지 못할 수 있습니다. 이를 샘플링 편향(Sampling bias)라고 합니다
낮은 품질의 데이터
훈련 데이터가 에러, 이상치, 잡음 등으로 오염되어 있다면 머신러닝 시스템은 제대로 작동하지 않을 것입니다. 때문에 훈련 데이터의 정제는 매우 중요한 작업입니다.
관련 없는 특성
훈련 데이터에 관련없는 특성이 있으면 올바른 결과값이 도출되는 데에 큰 제약을 부여합니다. 성공적인 머신러닝 프로젝트의 핵심 요소는 훈련에 사용할 좋은 특성을 찾는 것이며, 이 과정을 특성 공학(Feature engineering)이라고 합니다. 특성 공학은 다음 작업을 포함합니다.
- 특성 선택 (Feature selection): 가지고 있는 특성 중 가장 유용한 특성을 선택합니다.
- 특성 추출 (Feature extraction): 특성을 결합하여 더 유용한 특성을 만듭니다. (차원 축소 알고리즘)
- 새로운 데이터를 수집하여 새 특성을 만듭니다
훈련 데이터 과적합
성급한 일반화의 오류, 지나친 일반화를 과적합(Overfitting)이라고 합니다. 모델이 훈련 데이터에 너무 잘 맞아 떨어지면 일반성이 떨어진다는 뜻입니다. 오히려 특수한 상황에 적합한 알고리즘이 되어버린다는 말이 되지요.
- 규제 (Regularization) : 모델을 단순하게 하고 과적합의 위험을 감소시키기 위해 모델에 제약을 가하는 작업입니다.
학습하는 동안 적용할 규제의 양은 하이퍼파라미터(Hyperparameter)가 결정합니다. 하이퍼파라미터는 훈련 전에 사람이 지정하는 상수이며, 잘못 설정하면 과적합 또는 과소적합(Underfitting)을 불러일으킬 수 있습니다. 때문에 머신러닝 시스템 구축 시 하이퍼파라미터 튜닝이 매우 중요합니다.
훈련 데이터 과소적합
과적합의 반대입니다. 모델이 너무 단순하여 데이터의 내재된 구조를 학습하지 못할 때 발생합니다.
해결 주요 기법은 다음과 같습니다.
- 모델 파라미터가 더 많은 강력한 모델을 선택합니다.
- 학습 알고리즘에 더 좋은 특성을 제공합니다. (특성 공학 적용)
- 모델의 제약을 줄입니다. (하이퍼파라미터를 감소시킵니다.
Reference
1. 텐서플로우 블로그 - 핸즈온 머신러닝 : https://tensorflow.blog/
2. DAVINCI-AI - 머신러닝을 사용하는 이유와 분류 그리고 문제점 : https://davinci-ai.tistory.com/m/10?category=876949
3. OREILLY - Hands On Machine Learning Scikit-Learn and TensorFlow : https://www.oreilly.com/library/view/hands-on-machine-learning/9781491962282/ch01.html
4. 참고서적 - Hands-On Machine Learning with Scikit-learn & Tensorflow , Aurélien Géron, O'Reilly