Software Hyena::

Classification Methods - 분류 방법 요약 및 라이브러리 정리 본문

Machine Learning

Classification Methods - 분류 방법 요약 및 라이브러리 정리

bluehyena 2022. 4. 13. 18:12
반응형

Classification Methods

 

Anomaly Detection 에 Classification을 많이 사용하는 것을 발견하고 Classification의 정리가 한번 필요할 것 같다고 생각하여 이 포스트를 작성한다.

 

Anomaly Detection 이란?

이상탐지(Anomaly Detection)는 일반적인 값과 다른 특이한 값(Outlier)나 드문 사건을 탐지하는 기법이다. 침입, 사기, 결함, 건강 이상, 범죄 등 다양한 것을 탐지할 수 있다.

 

1. Classification

Classification은 한글로는 분류로 Supervised learning 지도학습의 일종이다. 기존에 존재하는 데이터의 Category 관계를 파악하고, 새롭게 관측된 데이터의 Category를 스스로 판별하는 과정을 말한다.

 

예를 들어 문자를 판별하여, 스팸 보관함으로 분류하는것과 같은 Binary Classification 단일분류와 , 수능 점수가 몇 등급에 해당하는지 판별하는 종류의 Multi Class Classification 다중분류가 있다. 다중분류는 비지도학습의 Clustering과 비슷하지만, 가장 큰 차이점은 Category의 도메인이 정의되어있는가 그렇지 않은가이다.

 

지도학습의 Classification은 이미 정해진 category 안에서 학습하여 새로운 데이터를 분류하지만,

비지도학습의 Clustering은 정해지지 않은 category를 원하는 만큼 생성하여, 분류하는것이 가장 큰 차이점이다

 

게임봇이나 핵과 같은 것을 Classification 하는 것은, Human, Bot 이런식으로 Binary 한 단일분류문제가 될 수 도 있고, 어떤 핵을 사용하고 있는가, 에임핵, 스피드핵, ESP등등의 다중분류가 될 수 도 있다.

 

2. Classification Model

대표적인 Classification Model은 다음과 같다.

 

- KNN (K-nearest neighbor)

- Logistic Regression

- Decision Tree

- Random Forest

- Naive Bayes

- SVM (Support Vector Machine)

- Ensemble

 

(1)  KNN (k-nearest neighbor)

k-nearest neighbor는 데이터를 분류하고 새로운 데이터 포인트의 카테고리를 결정할 때 K 개의 가장 가까운 포인트를 선점하고 그중 가장 많이 선택된 포인트의 카테고리로 이 새로운 데이터를 분류하는 방법이다.

K-Nearest Neighbor

 k-nearest neighbor에서 고려해야 할 사항은 알고리즘의 핵심 부분이 대상 포인트와의 거리에 대한 측정이고, 이를 계산하는 방법으로 무조건 유클리드 거리 측정 방식을 사용하는 것을 자제해야 한다. 모든 데이터 열을 이처럼 같은 방식으로 처리하면 생각하지 못한 변수에 의해 오류가 생길 수 있으므로 거리의 제곱을 합산하기 전 각 카테고리에 대한 평균 거리를 빼고 계산하는 방식과 같은 다양한 거리 계산 알고리즘에 대한 논의가 필요하다.

예를 들어 실수 데이터의 경우 유클리드 거리 측정 방식을 사용하고, 범주형 혹은 이진 데이터와 같은 유형의 데이터는 해밍 거리 측정 방식을 사용해야한다.

 

사이킷런의 KNN은 아래 링크에서 확인할 수 있다.

https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html

 

sklearn.neighbors.KNeighborsClassifier

Examples using sklearn.neighbors.KNeighborsClassifier: Release Highlights for scikit-learn 0.24 Release Highlights for scikit-learn 0.24, Classifier comparison Classifier comparison, Plot the decis...

scikit-learn.org

 

(2) 로지스틱 회귀(Logistic Regression)

로지스틱 회귀는 일반적이고 효과적인 분류 알고리즘이다. 이름에 회귀라는 단어가 종종 회귀 분석에만 사용될 것처럼 헷갈리곤 하지만 범주형 자료를 분류하는데 매우 강력한 알고리즘이다. 독립변수와 종속변수의 선형 관계성을 기반으로 만들어졌다.

 

Logistic Regression

 

위의 사진을 보면 선형 회귀(Linear Regression)와 로지스틱 회귀(Logistic Regression)는 공통적으로 독립변수와 종속변수의 관계로 생성되며 데이터 값을 0에서 1사이의 값으로 매핑시켜 사용한다. 하지만 선형 회귀는 연속형 변수를 예측하는 데 사용하는 반면 로지스틱 회귀는 범주형 변수를 예측하게 된다.

 

https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html

 

sklearn.linear_model.LogisticRegression

Examples using sklearn.linear_model.LogisticRegression: Release Highlights for scikit-learn 1.0 Release Highlights for scikit-learn 1.0, Release Highlights for scikit-learn 0.23 Release Highlights ...

scikit-learn.org

 

(3) Decision Tree(의사결정 트리)

가장 단순한 classifier 중 하나로, 모델을 그래프로 그리는 매우 단순한 구조로 되어 있다. 여러 개여 질문을 던져서 대상을 좁혀나가는 방식이다.

이 트리의 장점은 누구나 쉽게 이해할 수 있고, 결과를 해석할 수 있다는 것이다.

, yes를 선택했던 것을 no로 바꾸기만 하면 간단하게 로직을 바꿀 수 있다.

https://scikit-learn.org/stable/modules/tree.html

 

1.10. Decision Trees

Decision Trees (DTs) are a non-parametric supervised learning method used for classification and regression. The goal is to create a model that predicts the value of a target variable by learning s...

scikit-learn.org

 

(4) Random Forest

Decision tree가 여러개 모여 Forest를 이룬 것이다.

Decision tree보다 작은 Tree가 여러개 모이게 되어, 모든 트리의 결과들을 합하여 더 많은 값을 최종결과로 본다.

Random Forest

https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html

 

sklearn.ensemble.RandomForestClassifier

Examples using sklearn.ensemble.RandomForestClassifier: Release Highlights for scikit-learn 0.24 Release Highlights for scikit-learn 0.24, Release Highlights for scikit-learn 0.22 Release Highlight...

scikit-learn.org

 

(5) Naive Bayes (나이브 베이즈)

Naïve Bayes 는 확률을 사용하는 방법이다. 대표적인 예시가 아래와 같다. Drew 라는 이름을 갖고 있는 사람이 많을 때, 아래 처럼 여자의 이름일수도 남자의 이름일수도 있다. 남자의 그룹을 c1, 여자의 그룹을 c2라고 할 떄 drew라는 이름을 가진 사람이 남자그룹인 c1에 속할 확률은 어떻게 구할까? 바로 아래 식을 통해 구할 수 있다.

그렇다면 데이터가 다음과 같이 주어졌을 때, 이 문제의 답은 어떻게 될까?

P(male | drew)P(female | drew)를 구해서 큰 쪽을 선택하면 되는 문제이다. Bayes의 법칙에 따라 계산을 했을 떄, P(drew)는 어떤 경우든 동일하다. 분자만을 보게 되면, P(male | drew) = 1/3 * 3/8 = 0.125, P(female | drew) = 2/5 * 5/8 = 0.25 가 되므로 여성일 경우가 많다.

 

https://scikit-learn.org/stable/modules/naive_bayes.html

 

1.9. Naive Bayes

Naive Bayes methods are a set of supervised learning algorithms based on applying Bayes’ theorem with the “naive” assumption of conditional independence between every pair of features given the val...

scikit-learn.org

 

(6) SVM (Support Vector Machine)

 

서포터 벡터 머신(SVM)은 기본적으로 Decision Boundary라는 직선이 주어진 상태이다.

Decision boundary를 긋는 방법은 Binary Classification(Logistic regression문제)에서

feature 2개이므로, z(x) = w1x1 + w2x2 일 때, activation(x) = sigmoid (z(x))이고,
이 때, a(x) = h(x) , 단순 선형회귀일 경우에,
예측값이 0도 아니고 1도 아닌, h(x) = 0.5를 만들게 하는 경우이다.

, h(x) = a( z(x)) = sigmoid( z(x) )= 0.5

z(x) = 0

w1x1 + w2x2 = 0을 만족시키는 w1 w2에 의해 결정된다.
x2 = - w1x1 / w2
이므로, 기울기는 -w1/w2일 것이다.

 

가운데 실선이 하나 그어져있는데, 이게 바로결정 경계. 그리고 그 실선으로부터 검은 테두리가 있는 빨간점 1, 파란점 2개까지 영역을 두고 점선을 그어놓았다. 점선으로부터 결정 경계까지의 거리가 바로마진(margin)이다.

여기서 일단 결론을 하나 얻을 수 있다최적의 결정 경계는 마진을 최대화한다.

그리고 위 그림에서는 x축과 y 2개의 속성을 가진 데이터로 결정 경계를 그었는데, 3개의 데이터 포인트(서포트 벡터)가 필요했다. , n개의 속성을 가진 데이터에는 최소 n+1개의 서포트 벡터가 존재한다는 걸 알 수 있다.

 

대부분의 머신러닝 지도 학습 알고리즘은 학습 데이터 모두를 사용하여 모델을 학습한다. 그런데 SVM에서는 결정 경계를 정의하는 게 결국 서포트 벡터이기 때문에 데이터 포인트 중에서 서포트 벡터만 잘 골라내면 나머지 쓸 데 없는 수많은 데이터 포인트들을 무시할 수 있다. 그래서 매우 빠르다는 장점을 갖는다.

 

https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

 

sklearn.svm.SVC

Examples using sklearn.svm.SVC: Release Highlights for scikit-learn 0.24 Release Highlights for scikit-learn 0.24, Release Highlights for scikit-learn 0.22 Release Highlights for scikit-learn 0.22,...

scikit-learn.org

 

(7) 앙상블(Ensemble)

 

어떤 데이터의 값을 예측한다고 할 때, 하나의 모델만을 활용하는데 여러 개의 모델을 조화롭게 학습시켜 그 모델들의 예측 결과들을 이용한다면 더 정확한 예측값을 구할 수 있다.

 

앙상블 학습은 여러 개의 결정 트리(Decision Tree)를 결합하여 하나의 결정 트리보다 더 좋은 성능을 내는 머신러닝 기법이다. 앙상블 학습의 핵심은 여러 개의 약 분류기 (Weak Classifier)를 결합하여 강 분류기(Strong Classifier)를 만드는 것 이다.

 

앙상블 학습법에는 배깅(Bagging)과 부스팅(Boosting)이 있다.

Ensemble - bagging boosting

위 그림으로 배깅과 부스팅의 차이를 알 수 있다. 배깅은 병렬로 학습하는 반면, 부스팅은 순차적으로 학습한다. 한번 학습이 끝난 후 결과에 따라 가중치를 부여하고 부여된 가중치가 다음 모델의 결과 예측에 영향을 준다.

 

오답은 높은 가중치를 부여하고, 정답에는 낮은 가중치를 부여한다. 따라서 오답을 정답으로 맞추기 위해 오답에 더 집중할 수 있게 되는 원리이다

 

부스팅은 성능이 좋지만 속도가 느리고 오버 피팅이 될 가능성이 있다. 그렇다면 실제 사용할 때는 배깅과 부스팅 중 어떤 것을 선택해야 할까? 개별 결정 트리의 낮은 성능이 문제라면 부스팅이 적합하고, 오버 피팅이 문제라면 배깅이 적합하다.

 

앙상블의 경우 내가 가장 많이 접했던 XGBoost와 AdaBoost의 라이브러리 링크를 첨부하겠다.

https://xgboost.readthedocs.io/en/stable/python/python_api.html 

 

Python API Reference — xgboost 1.5.2 documentation

Python API Reference This page gives the Python API reference of xgboost, please also refer to Python Package Introduction for more information about the Python package. Global Configuration xgboost.config_context(**new_config) Context manager for global X

xgboost.readthedocs.io

https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html

 

sklearn.ensemble.AdaBoostClassifier

Examples using sklearn.ensemble.AdaBoostClassifier: Classifier comparison Classifier comparison, Two-class AdaBoost Two-class AdaBoost, Multi-class AdaBoosted Decision Trees Multi-class AdaBoosted ...

scikit-learn.org

 

 Appendix

 

위에서 소개한 Classification Method 외에도 scikit-learn은 수 많은 Machine Learning Tool들을 제공한다. 링크는 아래와 같다.

https://scikit-learn.org/

 

scikit-learn: machine learning in Python — scikit-learn 0.16.1 documentation

 

scikit-learn.org

 

반응형
Comments