분류모형의 종류
확률적 모형
- 주어진 데이터에 대해 각 카테고리 혹은 클래스가 정답일 조건부 확률(conditional probability)을 계산한다.

확률적 판별 모형: 조건부확률을 계산하는 방법에 따라 직접 조건부 확률 함수의 모양을 추정한다.
LogisticRegression
- 데이터가 어떤 범주에 속할 확률을 0에서 1사이의 값으로 예측하고 그 확률에 따라 가능성이 더 높은 범주에 속하는 것으로 분류해주는 지도 학습 알고리즘이다.
- 스펨 메일 분류기 같은 예시를 생각하면 쉬운데, 어떤 메일을 받았을 때 그 메일이 스팸일 확률이 0.5이상이면 스팸으로 분류하고, 메일이 스팸일 확률이 0.5보다 낮으면 일반 메일로 분류하는 것이다. 이렇게 데이터가 2개의 범주 중 하나에 속하도록 결정하는 것을 Binary Classification (2진 분류)라고 한다.
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
DecisionTreeClassifier
- 분할과 가지치기 과정을 반복하면서 모델을 생성한다.
- 분류와 회귀 모두에 사용할 수 있다.
- 여러개의 모델을 함께 사용하는 앙상블 모델이 존재한다. (RandomForest, GradientBoosting, XGBoost)
- 각 특성이 개별 처리되기 때문에 데이터 스케일에 영향을 받지 않아 특성의 정규화나 표준화가 필요 없다.
- 시계열 데이터와 같이 범위 밖의 포인트는 예측 할 수 없다.
- 과대적합되는 경향이 있다. 이는 본문에 소개할 가지치기 기법을 사용해도 크게 개선되지 않는다.
- 결정 트리는 관측값과 목푯값을 연결시켜주는 예측 모델로서 나무 모양으로 데이터를 분류합니다. 수많은 트리 기반 모델의 기본 모델이 되는 중요 모델입니다. 트리 기반의 모델은 선형 모델과는 전혀 다른 특징을 가지는데, 선형 모델이 각 변수에 대한 기울기값들을 최적화하여 모델을 만들어나갔다면, 트리 모델에서는 각 변수의 특정 지점을 기준으로 데이터를 분류해가며 예측 모델을 만듭니다. 예를 들어 남자/여자로 나눠서 각 목푯값 평균치를 나눈다거나, 나이를 30세 이상/미만인 두 부류로 나눠서 평균치를 계산하는 방식으로 데이터를 무수하게 쪼개어나가고, 각 그룹에 대한 예측치를 만들어냅니다.
구분 : 지도 학습
문제 유형 : 회귀/분류
합한 데이터 유형 : 일반적인 데이터
▼ 장점
- 데이터에 대한 가정이 없는 모델입니다(Non-parametric Model). 예를 들어 선형 모델은 정규분포에 대한 가정이나 독립변수와 종속변수의 선형 관계 등을 가정으로 하는 모델인 반면, 결정 트리는 데이터에 대한 가정이 없으므로 어디에나 자유롭게 적용할 수 있습니다.
- 아웃라이어에 영향을 거의 받지 않습니다.
- 트리 그래프를 통해서 직관적으로 이해하고 설명할 수 있습니다. 즉 시각화에 굉장히 탁월합니다.
▼ 단점
- 트리가 무한정 깊어지면 오버피팅 문제를 야기할 수 있습니다.
- 앞으로 배울 발전된 트리 기반 모델들에 비하면 예측력이 상당히 떨어집니다.
▼ 유용한 곳
- 종속변수가 연속형 데이터와 범주형 데이터 모두에 사용할 수 있습니다.
- 모델링 결과를 시각화할 목적으로 가장 유용합니다.
- 아웃라이어가 문제될 정도로 많을 때 선형 모델보다 좋은 대안이 될 수 있습니다.
from sklearn import tree
clf = tree.DecisionTreeClassifier()
랜덤 포레스트(Random Forest)
- 랜덤 포레스트 모델은 결정 트리의 단점인 오버피팅 문제를 완화시켜주는 발전된 형태의 트리 모델입니다. 랜덤으로 생성된 무수히 많은 트리를 이용하여 예측을 하기 때문에 랜덤 포레스트라 불립니다. 이렇게 여러 모델(여기서는 결정 트리)을 활용하여 하나의 모델을 이루는 기법을 앙상블이라 부릅니다.
구분 : 지도 학습
문제 유형 : 회귀/분류
적합한 데이터 유형 : 일반적인 데이터
▼ 장점
- 결정 트리와 마찬가지로, 아웃라이어에 거의 영향을 받지 않습니다.
- 선형/비선형 데이터에 상관없이 잘 작동합니다.
▼ 단점
- 학습 속도가 상대적으로 느린 편입니다.
- 수많은 트리를 동원하기 때문에 모델에 대한 해석이 어렵습니다.
▼ 유용한 곳
- 앙상블 기법을 사용한 트리 기반 모델 중 가장 보편적인 방법입니다. 이후에 다루게 될 부스팅 모델에 비하면 예측력이나 속도에서 부족한 부분이 있고, 시각화 부분에서는 결정 트리에 못미치나, 다음 단계인 부스팅 모델을 이해하려면 꼭 알아야 할 필수 알고리즘입니다.
확률적 생성 모형: 베이즈 정리를 사용하여 간접적으로 조건부확률을 구한다.

LDA/QDA
LDA:
- LDA의 Decision Boundary(초평면)는 분산대비 평균의 차이를 극대화하는 Boundary이다
- LDA의 가정은 각 집단이 정규분포를 띄는 확률분포를 가지고, 각 집단은 비슷한 형태의 공분산 구조를 가진다고 하였다.
▼ 장점
- 나이브 베이즈 모델과 달리, 설명변수간의 공분산 구조를 반영한다
- 그리고 가정이 위배되더라도 비교적 탄탄한 모델이라는 것이다.
▼ 단점
- 샘플수가 설명변수보다 많아야만 하고
- 정규분포가정을 크게 벗어날 경우 설명력이 떨어지고
- 공분산 구조가 크게 다른경우를 반영하지 못한다.
QDA:
- LDA에서 공통 공분산구조에 대한 가정을 제외시킨 것이다.
- 즉, 공분산 구조가 다른 경우 사용하는 Discriminant Analysis이다.
- QDA를 사용할지 말지 정하는 기준은 y의 범주별 공분산 구조가 확연히 다를때 사용한다. 하지만 설명변수가 많아질 수록 공통 공분산 구조를 사용하지 못하기에 그만큼 추정하는 모수가 많아진다는 것이다. 즉, 샘플이 더욱 많이 필요해지고, LDA에 비해 상대적으로 속도 또한 저하될 가능성이 있다.
- 그렇기에 경우에 따른 사용이 필요하고 항상 QDA가 LDA보다 좋은 모델이라고 말할 수 없다.
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis
나이브베이지안(나이브 베이즈)
- 선형모델과 유사하다.
- NLP에 많이 사용된다.
- 나이브 베이즈는 베이즈 정리를 적용한 조건부 확률 기반의 분류 모델입니다. 여기서 조건부 확률은 A가 일어났을 때 B가 일어날 확률을 의미합니다. 예를 들어 ‘무료라는 단어가 들어 있을 때 해당 메일이 스팸일 확률’ 같은 겁니다. 이러한 특징으로 스팸 필터링을 위한 대표적인 모델로 꼽힙니다. 최근에는 딥러닝 같은 대안이 있어서 나이브 베이즈 모델을 쓰고자 하는 상황이 많지는 않습니다만, 그래도 스팸 메일 필터처럼 자연어 처리가 목적일 때는 여전히 나이브 베이즈 모델이 좋은 선택이 될 수 있습니다(딥러닝이 자연어 처리에 더 탁월한 모습을 보여주지만, 딥러닝보다 간단한 방법으로 자연어 처리를 원할 때).
- LogisticRegression이나 LinearSVC 같은 선형 분류기보다 훈련 속도가 빠른 편이지만, 그 대신 일반화 성능이 조금 뒤집니다.
- 각 특성을 개별로 취급해 파라미터를 학습하고 각 특성에서 클래스별 통계를 단순하게 취합한다.
- cikit-learn에 구현된 나이브 베이즈 분류기는 GaussianNB, BernoulliNB, MultinomialNB 이렇게 세 가지입니다. GaussianNB는 연속적인 어떤 데이터에도 적용할 수 있고 BernoulliNB는 이진 데이터를, MultinomialNB는 카운트 데이터(특성이 어떤 것을 헤아린 정수 카운트로, 예를 들면 문장에 나타난 단어의 횟수입니다)에 적용됩니다. BernoulliNB, MultinomialNB는 대부분 텍스트 데이터를 분류할 때 사용합니다.
- MultinomialNB와 BernoulliNB는 모델의 복잡도를 조절하는 alpha 매개변수 하나를 가지고 있습니다. alpha가 주어지면 알고리즘이 모든 특성에 양의 값을 가진 가상의 데이터 포인트를 alpha 개수만큼 추가합니다. 이는 통계 데이터를 완만하게 만들어줍니다. alpha가 크면 더 완만해지고 모델의 복잡도는 낮아집니다. alpha에 따른 알고리즘 성능 변동은 비교적 크지 않아서, alpha 값이 성능 향상에 크게 기여하지 않습니다. 그러나 이 값을 조정하면 어느 정도는 정확도를 높일 수 있습니다.
- GaussianNB는 대부분 매우 고차원인 데이터셋에 사용하고, 다른 두 나이브 베이즈 모델은 텍스트 같은 희소한 데이터를 카운트하는 데 사용합니다. MultinomialNB는 보통 0이 아닌 특성이 비교적 많은 데이터셋(예를 들어 큰 문서들)에서 BernoulliNB보다 성능이 높습니다.나이브 베이즈 모델과 선형 모델의 장단점은 비슷합니다. 훈련과 예측 속도가 빠르며 훈련 과정을 이해하기 쉽습니다. 희소한 고차원 데이터에서 잘 작동하며 비교적 매개변수에 민감하지 않습니다. 선형 모델로는 학습 시간이 너무 오래 걸리는 매우 큰 데이터셋에는 나이브 베이즈 모델을 시도해볼 만하며 종종 사용됩니다.
구분 : 지도 학습
문제 유형 : 분류
적합한 데이터 유형 : 독립변수의 종류가 매우 많은 경우
▼ 장점
- 비교적 간단한 알고리즘에 속하며 속도 또한 빠릅니다.
- 작은 훈련셋으로도 잘 예측합니다.
▼ 단점
- 모든 독립변수가 각각 독립적임을 전제로 하는데 이는 장점이 되기도 하고 단점이 되기도 합니다. 실제로 독립변수들이 모두 독립적이라면 다른 알고리즘보다 우수할 수 있지만, 실제 데이터에서 그런 경우가 많지 않기 때문에 단점이기도 합니다.
▼ 유용한 곳
- 각 독립변수들이 모두 독립적이고 그 중요도가 비슷할 때 유용합니다.
- 자연어 처리(NLP)에서 간단하지만 좋은 성능을 보여줍니다.
- 범주 형태의 변수가 많을 때 적합하며, 숫자형 변수가 많은 때는 적합하지 않습니다.
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB
판별함수 모형
- 주어진 데이터를 카테고리에 따라 서로 다른 영역으로 나누는 경계면을 찾아낸 다음 이 경계면(decision boundary)으로부터 주어진 데이터가 어느 위치에 있는지를 계산하는 판별함수(discriminant function)를 사용한다.
퍼셉트론: 선형분류기
- 여러 개의 노드를 입력받아 각각 고유한 가중치를 곱해 보내진 총 합이 정해진 한계를 넘어설 때만 1을 출력하고 이 한계를 임계값이라고 부른다.
from sklearn.linear_model import Perceptron
서포트벡터머신(SVM)
- Decision Boundary를 형성한다.
- 분산대비 평균의 차이를 극대화하는 LDA와의 차이점은 적당한 에러를 허용하여 이를 최소화하는 바운더리를 결정한다
- 범주형 변수일 경우 Support Vector Classifier(SVC), 연속형 변수일 경우 Support Vector Regression(SVR)로 SVM의 사용법이 달라진다.
- 커널의 형태를 조정하여 선형이 아닌 2차원이나 3차원, 혹은 다른 곡선형태의 바운더리를 생성하는 SVM을 생성할 수 있다.
선형 분리
하드마진: 두 클래스를 분류할 수 있는 최대마진의 초평면을 찾는 방법입니다. 단, 모든 훈련데이터는 마진의 바깥족에 위치하게 선형으로 구분해야 합니다. 다시 말해서 하나의 오차도 허용하면 안된다는 것을 의미한다.
소프트마진: 하드마진이 가진 한계를 개선하고자 나온 개념으로써 완벽하게 분류하는 초평면을 찾는 것이 아니라 어느 정도의 오분류를 허용하는 방식입니다. 소프트마진에서는 오분류를 허용하고 이를 고려하기 위해 slack variable을 사용합니다. Slack variable*은 해당 결정경계로부터 잘못 분류된 데이터의 거리를 측정하기 위해 사용한다.
clf = svm.LinearSVC
비선형분리
- Radial basis funtion SVC
- polynomial SVC
1. 위와같이 rbf또는 polynomial의 우는 곡선이기에 0과 1사이의 scale parameter가 추가된다. 이는 auto로 설정하여 자동으로 찾게 할 수도 있고, 경험적으로 찾을 수도 있다. 게다가 polynomial의 경우 몇차항까지 고려할건지에 따른 degree설정 또한 필요하다.
▼ 장점
- 과적합을 피할 수 있다
- 분류 성능이 괜찮음
- 저차원, 고차원 공간의 적은 데이터에 대해서 일반화 능력이 우수
- 잡음에 강하다
- 데이터 특성이 적어도 좋은 성능
▼ 단점
- 커널함수 선택이 명확하지 않음
- 파라미터 조절을 적절히 수행하여 최적의 모델을 찾을 수 있음
- 데이터 특성의 스케일링에 민감하다
One Class Classification(ocsvm)
- 데이터들을 N차원의 좌표축으로 뿌린 후 , 원점과의 거리를 기준으로 선(Hyper Plane)을 그어 Classification하는 것입니다.
- SVM은 각 데이터들 속 Support Vector 간의 Margin을 기준으로 Hyper plane을 나누지만, OCSVM은 원점을 기준으로하기에, 조건에 따라 데이터가 아무리 많아도 Class가 1개일 수 있습니다.
- SVDD(Support Vector Data Discription)
- SVDD는 평면이 아니라 Hypersphere(초구)형태로 boundary를 나누는것을 의미합니다.
- 즉, 원 밖은 비정상/ 안은 정상 Support Vector로 보는것이다.
import sklearn.svm as svm
인공신경망(ANN, Artificial Neural Network)
- 사람의 신경망의 원리와 구조를 모방하여 만든 기계학습 알고리즘이다.
- 인간의 뇌에서 뉴런들이 어떤 신호, 자극 등을 받고, 그 자극이 어떠한 임계값(threshold)을 넘어서면 결과 신호를 전달하는 과정에서 착안한 것이다.
▼ 단점
- 학습과정에서 파라미터의 최적값을 찾기 어렵다. :출력값을 결정하는 활성화함수의 사용은 기울기 값에 의해 weight가 결정되었는데 이런 gradient값이 뒤로 갈수록 점점 작아져 0에 수렴하는 오류를 낳기도 하고 부분적인 에러를 최저 에러로 인식하여 더이상 학습을 하지 않는 경우도 있습니다.
- 과적합(Overfitting)
- 은닉층이 많으면 학습 정확도는 올라가지만 연산량이 기하급수적으로 증가하여 학습시간이 오래 걸릴 수 있다.
from tensorflow.keras.models import Sequential
DNN
- ANN기법의 여러문제가 해결되면서 모델 내 은닉층을 많이 늘려서 학습의 결과를 향상시키는 방법이 등장하였고 이를 DNN(Deep Neural Network)라고 합니다. DNN은 은닉층을 2개이상 지닌 학습 방법을 뜻합니다. 컴퓨터가 스스로 분류레이블을 만들어 내고 공간을 왜곡하고 데이터를 구분짓는 과정을 반복하여 최적의 구번선을 도출해냅니다. 많은 데이터와 반복학습, 사전학습과 오류역전파 기법을 통해 현재 널리 사용되고 있습니다.
그리고, DNN을 응용한 알고리즘이 바로 CNN, RNN인 것이고 이 외에도 LSTM, GRU 등이 있습니다.
CNN(합성곱신경망 : Convolution Neural Network)
기존의 방식은 데이터에서 지식을 추출해 학습이 이루어졌지만, CNN은 데이터의 특징을 추출하여 특징들의 패턴을 파악하는 구조입니다. 이 CNN 알고리즘은 Convolution과정과 Pooling과정을 통해 진행됩니다. Convolution Layer와 Pooling Layer를 복합적으로 구성하여 알고리즘을 만듭니다.
-
데이터의 특징을 추출하는 과정으로 데이터에 각 성분의 인접 성분들을 조사해 특징을 파악하고 파악한 특징을 한장으로 도출시키는 과정이다. 여기서 도출된 장을 Convolution Layer라고 한다. 이 과정은 하나의 압축 과정이며 파라미터의갯수를 효과적으로 줄여주는 역할을 합니다.
-
Pooling
-
이는 Convolution 과정을 거친 레이어의 사이즈를 줄여주는 과정입니다. 단순히 데이터의 사이즈를 줄여주고, 노이즈를 상쇄시키고 미세한 부분에서 일관적인 특징을 제공합니다.
-
CNN은 보통 정보추출, 문장분류, 얼굴인식 등의 분야에서 널리 사용되고 있습니다.
RNN(순환신경망 : Recurrent Neural Network)
- RNN 알고리즘은 반복적이고 순차적인 데이터(Sequential data)학습에 특화된 인공신경망의 한 종류로써 내부의 순환구조가 들어있다는 특징을 가지고 있습니다. 순환구조를 이용하여 과거의 학습을 Weight를 통해 현재 학습에 반영합니다. 기존의 지속적이고 반복적이며 순차적인 데이터학습의 한계를 해결하연 알고리즘 입니다. 현재의 학습과 과거의 학습의 연결을 가능하게 하고 시간에 종속된다는 특징도 가지고 있습니다. 음성 웨이브폼을 파악하거나, 텍스트의 앞 뒤 성분을 파악할 때 주로 사용됩니다.
퍼셉트론과 인공신경망의 차이
- 퍼셉트론은 계단함수, 신경망은 렐루 등 활성함수를 사용한다.
- 신경망의 활성화 함수는 비선형함수여야 한다. 선형함수라면 신경망으로 표현하는 의미가 없다.
KNN(K Nearest Neighbors, K-최근접 이웃)
- 거리 기반 모델로 선형관계를 전제로 하지 않는다.
- 각 데이터 건의 거리를 활용해서 새로운 데이터를 예측하는 모델이다.
- 가까이에 있는 데이터를 고려하여 예측값이 결정된다.
구분 : 지도 학습
문제 유형 : 회귀/분류
적합한 데이터 유형 : 아웃라이어가 적은 데이터
▼ 장점
- 수식에 대한 설명이 필요 없을 만큼 직관적이고 간단합니다.
- 선형 모델과 다르게 별도의 가정이 없습니다(예를 들어 선형 회귀는 독립변수와 종속변수의 선형 관계를 가정하고 있기 때문에, 이 가정이 들어맞지 않는 데이터에 취약하나, KNN은 이러한 가정이 없어서 더 자유롭습니다).
▼ 단점
- 데이터가 커질수록 상당히 느려질 수 있습니다.
- 아웃라이어에 취약합니다.
▼ 유용한 곳
- 주로 분류(Classification)에서 사용되며, 로지스틱 회귀(Logistic Regression)로 해결할 수 없는 3개 이상의 목표 변수들도 분류할 수 있습니다.
- 작은 데이터셋에 적합합니다.
참고문헌)
https://joyfuls.tistory.com/60
https://datascienceschool.net/03%20machine%20learning/09.03%20%EB%B6%84%EB%A5%98%EB%AA%A8%ED%98%95.html
QDA/ LDA
https://todayisbetterthanyesterday.tistory.com/25
Logistic Regression
https://idkim97.github.io/machine%20learning/MachineLearning_LogisticRegression/
DecisionTreeClassifier
https://inuplace.tistory.com/548
나이브베이즈
https://tensorflow.blog/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D/2-3-4-%EB%82%98%EC%9D%B4%EB%B8%8C-%EB%B2%A0%EC%9D%B4%EC%A6%88-%EB%B6%84%EB%A5%98%EA%B8%B0/
퍼셉트론
https://dsbook.tistory.com/244
https://wikidocs.net/172951
svm
https://m.blog.naver.com/winddori2002/221662413641
https://limitsinx.tistory.com/147
신경망
https://ebbnflow.tistory.com/119