일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- machineleaning
- Data Scientist
- SQL
- machinelearing
- AISCHOOL
- CNN
- python
- data analyst
- numpy
- ai
- deep learning
- data
- Machine Learning
- MachineLearning
- data analysis
- EDA
- 데이터분석가
- DNN
- 파이썬
- 데이터 사이언티스트
- Data Science
- pandas
- 데이터 분석가
- 범죄통계
- 멋쟁이사자처럼
- Tableau
- Deeplearning
- Today
- Total
Molybdenum의 개발기록
[Python] MachineLearning_Ensemble 본문
Ensemble
: 앙상블 기법이란 여러 머신러닝 모델을 연결하여 더 강력한 모델을 만드는 기법
- 랜덤포레스트
- 그래디언트 부스팅
Bagging
: 배깅은 bootstrap aggregating의 약자로 부트스트랩을 통해 조금씩 다른 훈련 데이터에 대해 훈련된 기초 분류기들을 결합시키는 방법으로 배깅은 서로 다른 데이터셋들에 대해 훈련 시킴으로써 트리들을 비상관화시켜주는 과정
bootstrap : 부트스트랩이란 주어진 훈련 데이터에서 중복을 허용하여 원 데이터셋과 같은 크기의 데이터셋을 만드는 과정
-=> 부트스트랩 과정은 트리들의 편향을 유지하면서 분산은 감소시키기 때문에 포레스트의 성능을 향상시켜 한 개의 결정 트리의 경우 훈련 데이터에 있는 노이즈에 대해서 매우 민감하지만 트리들이 서로 상관화 되어 있지 않다면 여러 트리들의 평균은 노이즈에 대해 강인하다.
배깅을 통한 랜덤포레스트 과정
1. 부트스트랩 방법을 통해 T개의 훈련 데이터셋을 생성
2. T개의 기초 분류기(트리)들을 훈련
3. 기초 분류기(트리)들을 하나의 분류기(랜덤 포레스트)로 집계(평균이나 과반수투표 방식 이용)
랜덤포레스트
1. 성능이 뛰어나고 매개변수 튜닝을 많이 필요로 하지 않는다.
2. 결정 트리와 달리 시각화가 불가능하고 비전문가가 이해하기 어려울 수 있다.
3. 데이터의 크기가 커지면 다소 시간이 걸릴 수 있다.
4. 랜덤성이 있기 때문에 random_state 변수를 지정하지 않으면 매번 결과가 달라질 수 있다.
5. 차원이 높고 희소한 데이터에는 잘 작동하지 않을 수 있다.
랜덤포레스트 주요 파라미터
max_features : 최선의 분할을 탐색할 때 고려할 feature의 숫자를 결정
n_estimators : 트리의 개수를 결정한다.(default=100)
criterion : 가지의 분할의 품질을 측정하는 기능
max_depth : 트리의 최대 깊이
min_samples_split : 내부 노드를 분할하는 데 필요한 최소 샘플 수
random_state : 추정기의 무작위성을 제어한다. 실행했을 때 같은 결과가 나오도록 한다.
엑스트라 트리 모델(Extra Tree)
: 엑스트라 트리 모델은 극도로 무작위화된 모델
=> 랜덤포레스트와 같이 후보 기능의 무작위 하위 집합이 사용되지만 가장 차별적인 임계값을 찾는 대신 각 후보 기능에 대해 임계값이 무작위로 그려지고 무작위로 생성된 임계값 중 가장 좋은 것이 분할 규칙으로 선택된다.
1. 분기 지점을 랜덤으로 선택하기 때문에 랜덤포레스트보다 속도가 더 빠르다.
2. 랜덤포레스트보다 더 많은 특성을 고려할 수 있다.
3. 랜덤포레스트와 동일한 원리를 이용하기 대문에 많은 특징을 공유한다.
4. 랜덤포레스트와 비교해 성능이 미세하게 우위에 있다.
엑스트라 트리 모델 주요 파라미터
n_estimators : 숲에 있는 나무 수
criterion : 분할의 품질을 측정하는 기능
max_depth : 트리의 최대 깊이
min_samples_split : 내부 노드를 분할하는 데 필요한 최소 샘플 수
max_features : 최상의 분할을 찾을 때 고려해야 할 기능의 수
Boosting
: 부스팅 기법은 여러 얕은 트리를 연결하며 편향과 분산을 줄여 강력한 트리를 생성하는 기법으로 이전 트리에서 틀렸던 부분에 가중치를 주며 지속적으로 학습해나간다. 약한 가습기를 여러 개 결합하여 강한 가습기를 만드는 앙상블 학습 방법 중 하나이다.
- 순차적 학습 : 부스팅 모델은 이전 모델의 오차를 보완하는 방식으로 순차적으로 학습한다. 이전 모델이 잘못 예측한 샘플에 대해서는 다음 모델이 더 많은 가중치를 부여하여 학습하게 된다.
- 앙상블 방식 : 여러 개의 약한 학습기를 결합하여 강한 학습기를 만드는 방식으로 다양한 학습 알고리즘과 모델을 결합할 수 있어 모델의 다양성이 높아져서 예측력이 좋아진다.
- 과적합 방지 : 부스팅 모델은 이전 모델이 잘못 예측한 샘플에 대해서 더 많은 가중치를 부여하므로 이전 모델에서 잘못 학습한 샘플을 보완하게 된다. 일반화 능력이 높아져 과적합을 방지할 수 있다.
- 예측력이 높음 : 부스팅 모델은 다양한 학습기를 결합하여 예측력이 높아진다. 특히 AdaBoost와 Gradient Boosting은 뛰어난 성능을 보임
- 학습시간이 오래 걸림 : 부스팅 모델은 순차적으로 학습하므로 학습 시간이 오래 걸릴 수 있다. 또한 하이퍼파라미터 튜닝이 어렵다는 단점이 있다.
Gradient Boosting Tree(그래디언트 부스팅 트리)
1. 랜덤 포레스트와 다르게 무작위성이 없다.
2. 매개변수를 잘 조정해야 하고 훈련시간이 길다.
3. 데이터의 스케일에 구애받지 않는다.
4. 고차원의 희소한 데이터에 잘 작동하지 않는다.
그래디언트 부스팅 트리 주요 파라미터
loss : 최적화시킬 손실 함수
learning_rate : 각 트리의 기여도를 제한하는 파라미터
n_estimators : 부스팅 단계를 지정하는 파라미터
subsample : 개별 기본 학습자를 맞추는데 사용할 샘플의 비율
XGBoost
: XGBoost sms C++, java, python, R, Julia, Perl 및 Scala 용 정규화 그래디언트 부스팅 프레임워크를 제공하는 오픈소스 소프트웨어 라이브러리
- 장점 : GBM 대비 빠른 수행시간(병렬 처리), 과적합 규제, 광범위한 영역, 조기 종료, 다양한 옵션 제공
- 단점 : 학습시간이 느림, Hyper Parameter 튜닝 시 시간이 더욱 오래 걸림, 모델의 Overfitting
=> hyper parameter의 종류가 많음
부스팅 파라미터
- learning_rate : learning rate가 높을수록 과적합되기 쉬움
- n_estimators : 생성할 weaker learner 수, learning_rate가 낮을 땐, n_estimators를 높여야 과적합이 방지된다. value가 낮으면 underfitting이 되고 이는 낮은 정확성의 prediction이 되는 반면 value가 높으면 overfitting이 되고 training data에는 정확한 prediction을 보이지만 test data에서는 정확성이 낮은 prediction을 가진다.
- max_depth : 트리의 maximum depth, 적절한 값이 제시되어야 하고 보통 3~10 사이 값이 적용된다. 높을수록 모델의 복잡도가 커져 과적합되기 쉽다.
- min_child_weight : 관측치에 대한 가중치 합의 최소를 말한다. 값이 높을수록 과적합이 방지된다.
- gamma : 리프노드의 추가분할을 결정할 최소손실 감소값으로 해당값보다 손실이 크게 감소할 때 분리된다. 값이 높을수록 과적합이 방지된다.
- subsample : weak learner가 학습에 사용하는 데이터 샘플링 비율로 보통 0.5 ~ 1 사용된다. 값이 낮을수록 과적합이 방지된다.
- colsample_bytree : 각 tree별 사용된 feature의 퍼센트, 보통 0.5 ~ 1 사용된다. 값이 낮을수록 과적합이 방지된다.
일반 파라미터
- booster : 어떤 부스터 구조를 쓸지 결정한다(gbtree, gblinear, dart)
- n_jobs : xgboost를 실행하는데 사용되는 병렬 스레드 수
- verbosity : 로그출력여부 0(무음), 1(경고), 2(정보), 3(디버그)
- early_stopping_rounds : 손실함수 값이 n번정도 개선이 없으면 학습을 중단
lightgbm
: lightgbm은 원래 microsoft에서 개발한 머신 러닝을 위한 오픈 소스 분산 그래디언트 부스팅 프레임워크
=> xgboost와 비교해 정확도는 유지하며, 학습 시간을 상당히 단축시킨 모델
- 장점 : 더 빠른 훈련속도와 더 높은 효율성, 적은 메모리 사용량, 더 나은 정확도, 병렬과 분산 및 GPU 학습 지원, 대규모 데이터를 처리
- 단점 : overfitting에 민감하고 작은 데이터에 대해 과적합되기 쉬움
=> GOSS(Gradient based One Side Sampling) 기울기 기반 단측 샘플링 -> 대규모 데이터 인스턴스를 다루기 위한 것
EFB(Exclusive Feature Bundling) 배타적 특성 묶음 -> 대규모 features 수를 다루기 위한 것
GBDT(Gradient Boosting Decision Tree)는 feature 차원이 높고 데이터 크기가 클 경우, 가능한 모든 분할 지점의 information grain 을 추정하기 위해 모든 데이터 인스턴스를 탐색해야 될 때 많은 시간을 소비해야한다는 문제가 있음
부스팅 파라미터
- max_depth : 나무의 깊이
- min_data_in_leaf : 잎이 가질 수 있는 최소 레코드 수, 기본값은 20, 과적합을 다루기 위해 사용
- feature_fraction : 부스팅 대상 모델이 랜덤포레스트일때, 랜덤포레스트는 feature의 일부만을 선택하여 훈련하는데, 이를 통제하기 위한 파라미터
- bagging_fraction : 데이터의 일부만을 사용하는 bagging의 비율
- early_stopping_round : 더 이상 validation데이터에서 정확도가좋아지지 않으면 멈춰버린다. 훈련데이터는 거의 에러율이 0에 가갑게 좋아지기 마련인데 validation데이터는 훈련에 사용되지 않기 때문에 일정이상 좋아지지 않기 때문이다.
- lambda : 정규화에 사용되는 파라미터로 일반적인 값의 범위는 0~1
- min_gain_to_split : 분기가 되는 최소 정보이득으로 트리에서 유용한 분할 수를 제어하는 데 사용된다.
- max_cat_group : 범주형 변수가 많으면, 하나로 퉁쳐서 처리하게끔 만드는 최소 단위
catboost
: catboost는 yandex에서 개발한 오픈 소스 소프트웨어 라이브러리로 기존 알고리즘과 비교하여 순열 기반 대안을 사용하여 범주형 기능을 해결하려고 시도하는 그래디언트 부스팅 프레임워크를 제공한다.
=> 빠른 GPU 훈련과 더 빠른 실행을 위해 무시 트리 또는 대칭 트리를 사용한다.
- 장점 : 과적합을 극복하기 위한 부스팅 정렬
- 단점 : 희소행렬 지원X, 상대적으로 많은 시간 소요
=> 수평트리, 정렬된 부스팅, 임의순열, 정렬된 대상 인코딩, 범주형 feature 조합, 원핫 인코딩, 최적화된 파라미터 튜닝
'Python' 카테고리의 다른 글
[Python] Numpy (0) | 2023.03.29 |
---|---|
[Python] MachineLearning_SVD (0) | 2023.03.29 |
[Python] MachineLearning_Tree (0) | 2023.03.27 |
[Python] MachineLearning (0) | 2023.03.27 |
[Python] Online_Retail (0) | 2023.03.27 |