결정트리(Decision Tree)
- 데이터에 있는 규칙을 학습을 통해 찾아내 트리 기반의 분류 규칙을 만든다. 최종적으로 만들어진 리프 노드가 클래스 값을 가지며, 예측할 데이터는 도달한 마지막 노드의 값으로 분류된다.
- 정보 균일도가 높은 데이터 세트를 선택(== 이득이 높음 == 엔트로피가 낮음 == 지니 계수가 낮음)
- 데이터 전처리 작업이 필요없다.
- 과적합으로 정확도가 떨어져 성능 튜닝이 필요하다(max_depth 혹은 min_samples_leaf 조절)
- 주요 파라미터 : criteron(gini/entropy, 균일도 계산 방법), max_depth(최대 트리 높이), min_samples_leaf 등
- 내장된 feature_importance() 함수로 feature의 중요도를 확인할 수 있다.
dt_clf = DecisionTreeClassifier(min_samples_leaf=6, random_state=156).fit(X_features, y_labels)
- 트리 기반 알고리즘들은 대부분 결정 트리의 주요 파라미터 사용이 가능하다.
- RandomForest, GBM, XGBoost, LightGBM 등..
나이브 베이즈(Naive Bayes)
- feature 끼리 서로 독립이며, 동등한 중요도라는 강한 조건이 필요하다.
- 데이터가 각 클래스에 속할 확률을 계산하는 조건부 확률 기반 분류이다.
- 변수에 따라 범주형(CategicalNB)/빈도수(MultinomialNB)/연속형(GaussianNB) 등으로 나뉜다.
- 주요 파라미터 : alpha(Laplace Smoothing, 모델의 복잡도 조절)
https://zephyrus1111.tistory.com/230
로지스틱 회귀(Logistic Regression)
- 회귀로 연속적인 결과를 sigmoid 함수로 표준화 한 후, 특정 값을 기준으로 분리한다.
- 일반적이고 효과적인 분류 알고리즘, 범주형 자료 분류에 사용
- 주요 파라미터 : solver(최적화 문제를 풀기위한 알고리즘 선택. 즉, 비용 또는 손실을 최소화하는 최상의 가중치 찾기)
- solver는 크게 뉴튼 랩슨과 경사하강법으로 나뉜다. 지원 패널티와 데이터 셋에 따라 적절하게 선택하기
https://blog.naver.com/PostView.nhn?blogId=bnormal16&logNo=222070548262
서포트 벡터 머신(Support Vector Machine)
- 정확도가 높지만 결정 트리와 같이 직관적인 해석(데이터 분류 기준)이 어렵다.
- 클래스를 분류할 수 있는 다양한 경계선이 존재하며, 그중 최적의 라인을 찾는다. 고차원 공간에서 효과적
- 다차원에서의 경계선인 초평면(Hyperplane)과 초평면과 가장 인접한 데이터(서포트 벡터) 사이의 거리인 마진(Margin)값을 최대로 만들었을 때가 최적의 분류 조건이다.
- 주요 파라미터 : kernel(dataset에 따라 사용), C(오차 허용 범위), Gamma(비선형 커널에서 표준 편차 조정), degree(다항식 커널의 차수 결정)
- kernel 종류 : linear(선형), rbf(비선형, 가우시안), poly(비선형, 다항), sigmoid(비선형)
https://for-my-wealthy-life.tistory.com/37
K-최소 근접 알고리즘(K-Nearest Neighbor)
- 예측할 데이터와 이웃 데이터들 간의 특징을 파악하고 가장 유사한 데이터 그룹으로 분류한다.
- 간단하며, 추천 시스템이나 의사 결정 시스템에서 주로 사용한다.
- 주요 파라미터 : n_neighbors(K, 검색할 이웃의 수), metric(거리 측정 방식)
- metric 종류 : euclidean(실수 데이터), Manhattan(이진 데이터) 등
https://minding-deep-learning.tistory.com/95
신경망(Neural Network)
- 인간의 신경망에서 착안, 입력값에 대해 가중치를 곱해 총합을 구한 다음 함수를 통해 총합이 기준을 충족하면 처리.
- 이러한 심층 연결 기반의 신경망을 학습하는 과정을 딥러닝(Deep Learning)이라 한다.
- 하나의 뉴런 == 하나의 퍼셉트론이며, 이를 연결한 "다층 퍼셉트론" 으로 구성된다.
- 퍼셉트론 : inputs, weights, transfer function(inputs과 weights 연결하는 함수), activation function(transfer function을 거친 값을 이용해 출력값을 구하는 함수)
- activation function : sigmoid, step, ReLU, ELU 등 다양하게 존재한다.
- 신경망에서는 Gradient Descent(경사 하강법)을 이용하여 weights를 업데이트 한다. loss가 낮은 방향으로 학습.
- 주요 파라미터 : solver(activation function 종류), alpha(학습 제약 정도, L2 규)
https://heytech.tistory.com/360
https://todayisbetterthanyesterday.tistory.com/41
중요해서 activation function에 대한 참고 링크도 추가로 넣었다...
앙상블 학습(Ensemble Learning)
- 여러 분류기를 생성하고, 그 예측을 결합하여 보다 정확한 최종 예측을 도출한다
- 트리 기반 알고리즘이므로 결정 트리의 주요 파라미터 사용이 가능하다.
- 보팅(Voting), 배깅(Bagging), 부스팅(Boosting), 스태킹(Stacking) 등 다양한 방식이 존재한다.
1. 보팅(Voting)
- 여러 개의 분류기가 투표를 통해 최종 예측 결과를 결정하는 방식
- 하나의 데이터 셋에서 서로 다른 알고리즘을 여러 개 결합하여 사용한다.
- 하드 보팅(다수의 분류기가 예측한 결과값을 최종 결과로 선정), 소프트 보팅(모든 분류기가 예측한 레이블 값의 결정 확률 평균을 구한 뒤 가장 확률이 높은 레이블 값을 최종 결과로 선정)으로 나뉜다.
- 주요 파라미터 : estimatos(보팅에 사용될 알고리즘, 튜플 형태), voting(voting 종류)
2. 배깅(Bagging)
- 주어진 데이터 셋에서 random split으로 여러 데이터 셋을 만든 뒤, 하나의 알고리즘으로 학습 후 voting 실시
- 대표적인 알고리즘으로 랜덤 포레스트(Random Forest)가 있다.
- 주요 파라미터 : n_estimators(결정 트리 개수), n_jobs(-1로 설정 시 모든 CPU 코어 사용)
3. 부스팅(Boosting)
- 여러 알고리즘을 학습 하면서 앞서 예측을 진행한 분류가 예측이 틀린 데이터에 대해 가중치를 부여하여 다음 분류기의 학습을 진행시키는 방식
- 보통 성능이 뛰어나지만, 속도가 느리고 과적합 발생 가능성이 있다.
- 대표적인 알고리즘으로 Gradient Boost(GBM), XGBoost, LightGBM이 있다.
- GBM : 경사하강법에 기반한 부스팅 방식으로, 순차적으로 학습하여 속도가 느리가.
- XGBoost : GBM의 단점을 보완하여, 병렬적으로 처리가 가능하다. 또한 교차 검증과 조기 중단이 가능하다.
- LightGBM : 일반적인 결정 트리와 달리 Leaf-Wise-tree를 사용한다. 대용량 데이터 처리에 적합하고, 병렬적인 처리와 조기 중단 또한 가능하다. 메모리를 적게 사용하며 빠른 속도를 가짐.
- XGBoost와 LightGBM은 learning_rate 파라미터를 이용해 조기 중단이 가능하다.
4. 스태킹(Stacking)
- 개별 알고리즘으로 예측한 데이터를 기반으로 다시 예측을 수행한다.
- 반환된 데이터를 concatenate()를 이용해 합친 후 최종 알고리즘 모델로 예측한다.
- 과적합 방지를 위해 주로 K-fold 교차 검증을 이용한다.
https://techblog-history-younghunjo1.tistory.com/102
[Week3] 04. 분류(2) (tistory.com)
# 회고
파머완 분류 파트를 끝낸 기념으로 전체적인 분류 알고리즘들의 비교 및 정리를 했다!
주로 실습 위주로 정리하고, 참고 사이트도 실습이 많은 사이트를 이용했다.
기계학습 시간에 더 자세한 이론을 배우게 되면 추가로 정리해야겠다.
'기타' 카테고리의 다른 글
인류문명과환경공학 정리 (0) | 2024.01.09 |
---|---|
[Sklearn] 회귀 알고리즘 정리 (1) | 2023.10.31 |
[Sklearn] 알고리즘 학습/예측 기본 (0) | 2023.09.25 |
[AWS] EC2 docker container exited 이유 (0) | 2023.09.16 |
[AWS] RDS 접속하기&DB 초기화 (0) | 2023.09.06 |