📖 이번 포스팅에서는 다양한 머신러닝의 알고리즘을 간단명료하게 비교해주신 글을 퍼와 정리해보았습니다.
기존 글에서 약간의 수정과 추가를 했습니다.
출처
좋은 글 감사합니다.🙏 문제가 된다면 삭제하겠습니다.
알고리즘 | 장점 | 단점 | 비고 |
---|---|---|---|
K-NN | 이해하기 매우 쉬운 모델이다. 그리고 많이 조정하지 않아도 자주 좋은 성능을 발휘한다. | 훈련 세트가 매우 크면 (특성의 수나 샘플의 수가 클 경우) 예측이 느려진다. 이해하긴 쉽지만, 예측이 느리고 많은 특성을 처리하는 능력이 부족해 현업에서는 잘 쓰지 않는다. | 주로 k-NN의 이러한 단점을 없앤 선형 모델을 사용하곤 한다. k값이 작을 때는 훈련 데이터 하나하나가 출력에 주는 영향이 크기 때문에 모델의 예측값이 훈련 데이터 포인트를 모두 지나간다. k값이 증가하면 훈련 데이터에는 잘 맞지 않지만 더 안정적인 모델이 된다. (k가 증가하면 결정 경계는 부드러워지면서 더욱 단순한 모델이 된다.) |
:-----: | :-----: | :-----: | :-----: |
선형 모델 | 학습 속도가 빠르고 예측도 빠르다. 매우 큰 데이터셋과 희소한 데이터셋에도 잘 작동한다. 또한 예측이 어떻게 만들어 지는지 수식 등을 통해 비교적 쉽게 이해할 수 있다. | 하지만 계수의 값들이 왜 그런지 명확하지 않을 때가 종종 있다. 특히 데이터셋의 특성들이 서로 깊게 연관되어 있을 때 그러하다. | 분류에도 널리 사용된다. 가장 널리 알려진 두 개의 선형 분류 알고리즘은 Logistic Regression과 support vector machine이다. 많은 선형 분류 모델은 태생적으로 이진 분류만을 지원한다. 즉 다중 클래스를 지원하지 않는다. 선형 모델은 샘플에 비해 특성이 많을 때 잘 작동한다. 그러나 저차원의 데이터셋에서는 다른 모델들의 일반화 성능이 더 좋다. |
:-----: | :-----: | :-----: | :-----: |
나이브 베이즈(Naive Bayes)분류기 | Logistic Regression과 support vector machine같은 선형 분류기보다 훈련 속도가 빠른 편이다. 훈련과 예측 속도는 빠르며 훈련 과정을 이해하기 쉽다. 희소한 고차원 데이터에서 잘 작동하며 비교적 매개변수에 민감하지 않다. 선형 모델로 학습 시간이 너무 오래 걸리는 매우 큰 데이터셋에는 나이브 베이즈 모델을 시도해볼 만하다. | 대신 일반화 성능이 조금 뒤진다. 데이터의 특성들이 각각 독립적이고 동등하게 중요하다는 'Naive(순진한)' 가정이 들어간다. 그러나 실제 문제에서 모든 특성이 동등하게 중요하지 않는 경우가 많다. | 나이브 베이즈(Naive Bayes)분류기는 선형 모델과 매우 유사하다. 선형 모델(y=wx+b)과 형태가 같으나, 나이브 베이즈 모델의 계수 w는 기울기가 아니라서 선형 모델과는 의미가 다르다. 나이브 베이즈 모델과 선형 모델의 장단점은 비슷하다. 다항분포 나이브 베이즈는 클래스별로 특성의 평균을 계산하는데 반해, 가우시안 나이브 베이즈는 클래스별로 각 특성의 표준편차와 평균을 저장하여 이를 데이터 포인트와 비교해 예측 값을 출력한다. |
:-----: | :-----: | :-----: | :-----: |
결정 트리(decision tree) | 트리를 시각화하면 알고리즘의 예측이 어떻게 이뤄지는지 잘 이해할 수 있으며 비전문가에게 머신러닝 알고리즘을 설명하기에 좋다. 만들어진 모델을 쉽게 시각화할 수 있어서 이해하기 쉽다. 데이터의 스케일에 구애받지 않는다. 각 특성이 개별적으로 처리되어 데이터를 분할하기 때문에, 데이터 스케일의 영향을 받지 않으므로 데이터가 특정 범위 안에 들어오도록 하는 정규화(Normalization)나 표준화(Standardization)같은 데이터 전처리 과정이 필요가 없다. 특히나 특성의 스케일이 서로 다르거나 이진 특성과 연속적인 특성이 혼합되어 있을 때에도 잘 작동한다. | 훈련 데이터에 과대적합되는 경향이 있다. 트리의 깊이가 4정도만 되어도 트리는 매우 장황해진다. 트리가 더욱 깊어지면 한눈에 보기가 힘들어진다. 트리 모델은 훈련 데이터 밖의 새로운 데이터를 예측할 능력이 없다. 이는 모든 트리 기반 모델의 공통된 단점이다. 트리 모델은 시계열 데이터엔 잘 맞지 않는다. 사전 가지치기를 사용함에도 불구하고 과대적합되는 경향이 있어 일반화 성능이 좋지 않다. 이 대안으로 앙상블 방법을 사용한다. | 분류와 회귀 문제에 널리 사용하는 모델로서, 기본적으로 결정 트리는 결정에 다다르기 위해 예/아니오 질문을 이어 나가면서 학습한다. |
:-----: | :-----: | :-----: | :-----: |
앙상블(ensemble) | 앙상블(ensemble)은 여러 머신러닝 모델을 연결하여 더 강력한 모델을 만드는 기법이다. 머신러닝의 여러 앙상블 기법 중 랜덤 포레스트(random forest)와 그래디언트 부스팅(gradient boosting)이 분류와 회귀 문제의 다양한 데이터셋에서 효과적으로 입증되어 있다. 이 두 모델 모두 모델을 구성하는 기본 요소로 결정 트리를 사용한다. | ||
:-----: | :-----: | :-----: | :-----: |
앙상블(ensemble) - 랜덤 포레스트(random forest) | 결정 트리의 주요 단점은 훈련 데이터에 과대적합되는 경향이 있다는 것이다. 랜덤 포레스트는 서로 다른 방향으로 과대적합된 트리를 많이 만들고 앙상블시켜 그 결과를 평균내어 과대적합을 줄인다. 이렇게 하면 트리 모델의 예측 성능은 유지되면서 과대적합이 줄어들 수 있다는 것이 증명되었다. 아무런 매개변수 튜닝 없이도 선형 모델이나 단일 결정 트리보다 높은 정확도를 낸다. 회귀와 분류에 있어서 랜덤 포레스트는 현재 가장 널리 사용되는 머신러닝 알고리즘이다. 성능이 매우 뛰어나고 매개변수 튜닝을 많이 하지 않아도 잘 작동하며 데이터의 스케일을 맞출 필요도 없다. 기본적으로 랜덤 포레스트는 단일 트리의 단점을 보완하고 장점은 그대로 가지고 있다.대량의 데이터셋에서 랜덤 포레스트를 만들 때 다소 시간이 걸릴 수 있지만 CPU 코어가 많다면 손쉽게 병렬 처리할 수 있다. | 랜덤 포레스트는 텍스트 데이터 같이 매우 차원이 높고 희소한 데이터에는 잘 작동하지 않는다. 이런 데이터에는 선형 모델이 더 적합하다. 랜덤 포레스트는 선형 모델보다 많은 메모리를 사용하며 훈련과 예측이 느리다. 속도와 메모리 사용에 제약이 있는 애플리케이션이라면 선형 모델이 적합할 수 있다. 더 많은 트리를 평균하면 과대적합을 줄여 더 안정적인 모델을 만든다. 하지만 더 많은 트리는 더 많은 메모리와 긴 훈련 시간으로 이어진다. | 랜덤 포레스트라는 이름에서 알 수 있듯이 트리 생성 시 무작위성을 주입한다. 랜덤 포레스트에서 트리를 랜덤하게 만드는 방법은 두 가지이다. 하나는 트리를 만들 때 사용하는 데이터 포인트를 무작위로 선택하는 방법이고, 다른 하나는 노드가 분기하는 테스트(질문)에서 사용하는 특성을 무작위로 선택하는 방법이다. |
:-----: | :-----: | :-----: | :-----: |
앙상블(ensemble) - 그래디언트 부스팅 회귀 트리 | 그래디언트 부스팅 트리는 보통 하나에서 다섯 정도의 깊지 않은 트리를 사용하므로 메모리를 적게 사용하고 예측도 빠르다. 지도 학습에서 가장 강력하고 널리 사용되는 모델 중 하나이다. 매개변수를 잘 조정하면 더 높은 정확도를 제공한다. 다른 트리 기반 모델처럼 특성의 스케일을 조정하지 않아도 되고 이진 특성이 연속적인 특성에서도 잘 동작한다. | 랜덤 포레스트보다는 매개변수 설정에 조금 더 민감하다. 가장 큰 단점은 매개변수를 잘 조정해야 한다는 것(--> 그래서 grid search 방식을 활용하여 적합한 매개변수를 찾아내야 한다. )과 훈련 시간이 길다는 것이다. 트리 기반 모델의 특성상 희소한 고차원 데이터에는 잘 작동하지 않는다. residaul을 줄이는 방향으로 weak learner를 결합해 강력한 성능을 자랑하지만, 해당 train data에 residual을 계속 줄이니까 overfitting이 되기 쉽다는 문제점이 있다. (이를 해결하기 위해 GBM에 regularization term을 추가한 XGBoost 알고리즘을 사용한다.) | 그래디언트 부스팅 회귀 트리는 여러 개의 결정 트리를 묶어 강력한 모델을 만드는 또 다른 앙상블 방법이다. 이름이 회귀지만 이 모델은 회귀와 분류 모두에 사용할 수 있다. 무작위의 데이터로 한꺼번에 다른 트리들을 만들어 결합하는 랜덤 포레스트와는 달리, 그래디언트 부스팅은 이전 트리의 오차를 보완하는 방식으로 작동하기에 결정 트리를 순차적으로 만들어나간다. 이전에 만든 트리의 예측과 타겟 값 사이의 오차를 줄이는 방향으로 새로운 트리를 추가하는 알고리즘이다. 이를 위해 손실 함수(Cost Function)를 정의하고 경사 하강법(Gradient Descent)을 사용하여 다음에 추가될 트리가 예측해야 할 값을 보정해나간다. 기본적으로 그래디언트 부스팅 트리에는 무작위성이 없다. 대신 강력한 사전 가지치기가 사용된다. |
:-----: | :-----: | :-----: | :-----: |
커널 기법(kernel trick) | 직선과 초평면은 유연하지 못하여(구부러지지 않아서) 저차원 데이터셋에서는 선형 모델에 매우 제한적이다. 선형 모델을 유연하게 만드는 한 가지 방법은 특성끼리 곱하거나 특성을 거듭 제곱하는 식으로 새로운 특성을 추가하는 것이다. 분류를 위한 선형 모델은 직선으로만 데이터 포인트를 나눌 수 있다. 데이터셋에 비선형 특성을 추가하여 선형 모델을 강력하게 만들 수 있다. 하지만 많은 경우 어떤 특성을 추가해야 할지 모르고 특성을 많이 추가하면 연산 비용은 커진다. 다행히 커널 기법(kernel trick)을 이용하면 실제로 데이터를 확장하지 않고 확장된 특성에 대한 데이터 포인트들의 거리(더 정확히는 스칼라 곱)을 계산한다. | ||
:-----: | :-----: | :-----: | :-----: |
커널 기법(kernel trick) - SVM | 데이터의 특성이 몇 개 안 되더라도 작동한다. 저차원과 고차원의 데이터(즉 특성이 적을 때와 많을 때)에 모두 잘 작동한다. | 샘플이 많을 때는 잘 맞지 않는다. 10,000개의 샘플 정도면 SVM 모델이 잘 작동하겠지만 그 이상의 데이터셋에서는 속도와 메모리 관점에서 도전적인 과제이다. 데이터 전처리와 매개변수 설정에 신경을 많이 써야 한다. 그리하여 요즘엔 대부분이 랜덤 포레스트나 그래디언트 부스팅 같은 (전처리가 거의 또는 전혀 필요 없는) 트리 기반 모델을 사용한다. SVM 모델은 분석하기도 어렵다. 예측이 어떻게 결정되었는지 이해하기 어렵고 비전문가에게 모델을 설명하기가 난해하다. | SVM은 서로 다른 클래스를 지닌 데이터 사이의 간격이 최대가 되는 선이나 평면을 찾아 이를 기준으로 각 데이터들을 분류하는 모델이다. 다시 말해 데이터 사이에 존재하는 여백(margin)을 최대화하여 일반화하는 성능을 극대화한 모델이다. 데이터의 특성이 몇 개 안 되더라도 복잡한 결정 경계를 만들 수 있다. |