지금까지 선형회귀와 로지스틱회귀를 배웠는데,
이 외에 자주 쓰는 분류와 회귀에 대한 알고리즘들을 학습하는 시간을 가졌다.
✳️ 의사결정나무(Decision Tree, DT)
: 의사결정규칙을 나무 구조로 나타내어 전체 자료를 몇 개의 소집단으로 분류하거나 예측을 수행하는 분석 방법
💟 명칭
- 루트 노드(Root Node) : 의사결정나무의 시작점. 최초의 분할조건
- 리프 노드(Leaf Node) : 루트 노드로부터 파생된 중간 혹은 최종 노드
- 분류기준(criteria) : sex는 여성인 경우 0, 남성인 경우 1로 인코딩. 여성인 경우 좌측 노드로, 남성인 경우 우측 노드로 분류
- 불순도(impurity)
- 불순도 측정 방법 중 하나인 지니 계수는 0과 1사이 값으로 0이 완벽한 순도(모든 샘플이 하나의 클래스), 1은 완전한 불순도(노드의 샘플의 균등하게 분포) 나타냄
- 리프 노드로 갈수록 불순도가 작아지는(한쪽으로 클래스가 분류가 잘되는)방향으로 나무가 자람
- 샘플(samples) : 해당 노드의 샘플 개수(891개의 관측치)
- 값(value) : Y변수에 대한 배열. 549명이 죽었고(Y = 0), 342명이 살았음(Y = 1)
- 클래스(class)
- 가장 많은 샘플을 차지하는 클래스를 표현
- 위에서는 주황색(Y = 0 다수), 파란색(Y=1 다수)를 표현
😇 장점
- 쉽고 해석하기 용이
- 다중분류와 회귀에 모두 적용이 가능
- 이상치에 견고하며, 데이터 스케일링이 불필요(데이터의 상대적인 순서를 고려해서)
👿 단점
- 나무가 성장을 너무 많이하면 과대 적합의 오류에 빠질 수 있음
- 훈련 데이터에 민감하게 반응하여 작은 변화가 노이즈에도 나무의 구조가 크게 달라짐(불안정성)
🐍 Python 라이브러리
- sklearn.tree.DecisionTreeClassifier : 분류
- sklearn.tree.DecisionTreeRegressor : 회귀
▼ sklearn.tree.DecisionTreeClassifier에 대한 공식 문서
https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html
✳️ 랜덤포레스트(RandomForest)
의사결정 나무는 과적합과 불안정성 대한 문제가 대두 되어, 이를 해결하기 위한 아이디어는 바로 나무(tree)를 여러 개 만들어 숲(Forest)를 만드는 것을 고안했다.
💟 배깅(Bagging)의 원리
- 데이터의 부족으로 인한 문제 해결을 위해 만든 Bootstrapping + Aggregating 방법론
- Bootstrapping : 데이터를 복원 추출해서 유사하지만 다른 데이터 집단을 생성하는 것
- Aggregating : 데이터의 예측,분류 결과를 합치는 것
- Ensemble(앙상블) : 여러 개의 모델을 만들어 결과를 합치는 것
이렇게 생성한 데이터 샘플들은 모집단의 분포를 유사하게 따라가고 있으니 다양성을 보장하면서 데이터의 부족한 이슈를 해결하게 되었다.
💟 나무를 숲으로! (Tree to Forest)
- 여러 개의 데이터 샘플에서 각자 의사결정트리를 만들어서 다수결 법칙에 따라 결론을 냄
- ex) 1번 승객에 대해서 모델 2개는 생존, 모델 1개는 사망을 분류하였다면, 1번 승객은 최종적으로 생존으로 분류
- 이렇게 되면 의사결정모델이 훈련 데이터에 대해 민감한 점을 극복할 수 있다.
😇 장점
- Bagging 과정을 통해 과적합을 피할 수 있음
- 이상치에 견고하며 데이터 스케일링이 불필요
- 변수 중요도를 추출하여 모델 해석에 중요한 특징을 파악 할 수 있음
👿 단점
- 컴퓨터 리소스 비용이 큼
- 앙상블 적용으로 해석이 어려움
🐍 Python 라이브러리
- sklearn.ensemble.RandomForestClassifer : 분류
- sklearn.ensemble.RandomForestRegressor : 회귀
▼ sklearn.tree. RandomForestClassifer 에 대한 공식 문서
https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html
✳️ 최근접 이웃(K-Nearest Neighbor, KNN)
유유상종! 주변의 데이터를 보고 알고 싶은 데이터를 예측하는 방식
💟 KNN의 기본 원리
확인할 주변 데이터 K개를 선정 후에 거리 기준으로 가장 많은 것으로 예측하는 것
- K=3이라면 별 1개와 세모 2개이므로 ? 는 세모로 예측될 것
- K=7이라면 별 4개와 세모 3개이므로 ?는 별로 예측될 것
💟 하이퍼 파라미터의 개념
- 파라미터(Parameter) : 머신러닝 모델이 학습 과정에서 추정하는 내부 변수이며 자동으로 결정 되는 값
- Ex) 선형회귀에서 가중치와 편향
- (혼동주의) Python에서는 함수 정의에서 함수가 받을 수 있는 인자(입력 값)를 지정하는 개념
- 하이퍼 파라미터(Hyper parameter) : 데이터 과학자가 기계 학습 모델 훈련을 관리하는데 사용하는 외부 구성변수이며 모델 학습과정이나 구조에 영향을 미침
- 모델의 하이퍼 파라미터 변수를 바꾸면서 좋은 평가 지표가 나올 때까지 실험하고 원리를 밝혀내는 것이 바로 데이터 사이언스 기반!
💟 거리의 개념
- 두 점의 좌표가 주어지면 피타고라스의 정리로 거리를 구할 수 있다. (유클리드 거리(Euclidean Distance))
- 그 외에도 맨해튼 거리 등 다양한 거리 계산법 존재
- 머신러닝에서는 데이터간의 유사도를 측정할 때 자주 등장!
- 유클리드 거리 공식
- 표준화 필수 (스케일링부분에서 다뤘음!)
- 단위의 영향을 크게 받기 때문에 피처에 대한 표준화가 필요함
😇 장점
- 이해하기 쉽고 직관적
- 모집단의 가정이나 형태를 고려하지 않음
- 회귀, 분류 모두 가능함
👿 단점
- 차원 수가 많을 수록 계산량이 많아짐
- 거리 기반의 알고리즘이기 때문에 피처의 표준화가 필요함
🐍 Python 라이브러리
- sklearn.neighbors.KNeighborsClassifier
- sklearn.neighbors.KNeighborsRegressor
▼ sklearn.neighbors.KNeighborsClassifier 에 대한 공식 문서
https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html
✳️ 부스팅 알고리즘(Boosting Algorithm)
여러 개의 약한 학습기(weak learner)를 순차적으로 학습하면서 잘못 예측한 데이터에 가중치를 부여하여 오류를 개선해나가는 학습 방식
다시 말해 못난 놈 혼내기 !
- 1번째 학습기를 보면 1개를 제대로 구별하지 못했다.
- 그래서 1번 학습기에 '야, 저거 틀렸어. 저거 중요한거야~ 알아들었음 끄덕여.' 라고 잔소리를 해주고 2번 학습기를 돌려봤다.
- 처음에 혼난 부분은 잘 구별했지만 다른 하나를 또 구별을 못했다.
- 그렇지만 1번 학습기와 2번 학습기를 합쳐보니 구별을 잘 해냈다.
💟 종류
1️⃣ Gradient Boosting Model
- 특징
- 가중치 업데이트를 경사하강법 방법을 통해 진행
- Python 라이브러리
- sklearn.ensemble.GradientBoostingClassifier
- sklearn.ensemble.GradientBoostingRegressor
▼ sklearn.neighbors.GradientBoostingClassifier 에 대한 공식 문서
https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html
2️⃣ XGBoost
- 특징
- 트리기반 앙상블 기법으로, 가장 각광받으며 Kaggle의 상위 알고리즘
- 병렬학습이 가능해 속도가 빠름
- Python 라이브러리
- xgboost.XGBRClassifier
- xgboost.XGBRegressor
▼ xgboost.XGBRClassifier 에 대한 공식 문서
https://xgboost.readthedocs.io/en/stable/python/python_api.html#xgboost.XGBClassifier
3️⃣ LightGBM
- 특징
- XGBoost와 함께 가장 각광받는 알고리즘
- XGBoost보다 학습시간이 짧고 메모리 사용량이 작음
- 작은 데이터(10,000건 이하)의 경우 과적합 발생
- Python 라이브러리
- lightgbm.LGBMClassifier
- lightgbm.LGBMRegressor
▼ lightgbm.LGBMClassifier 에 대한 공식 문서
https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.LGBMClassifier.html
'📒 Today I Learn > 🤖 Machine Learning' 카테고리의 다른 글
[머신러닝 심화] 비지도 학습 이론 (0) | 2024.08.14 |
---|---|
[머신러닝 심화] 분류와 회귀 모델링 심화 실습 (0) | 2024.08.13 |
[머신러닝 심화] 프로세스 적용 실습 (0) | 2024.08.13 |
[머신러닝 기초] 로지스틱회귀 실습 (0) | 2024.08.12 |
[머신러닝 기초] 로지스틱회귀(분류 분석) 이론 (0) | 2024.08.12 |