반응형
목차
- 데이터
- RandomForest
- ExtraTree
- Gredient Boosting
- Histogram based Gradient Boosting
- XGBoost
- LightGBM
데이터
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
wine = pd.read_csv('https://bit.ly/wine_csv_data')
data= wine[['alcohol', 'sugar', 'pH']].to_numpy()
target = wine[['class']].to_numpy()
train_input,test_input, train_target,test_target = \
train_test_split(data, target, test_size= 0.2, random_state = 42)
RandomForest
부트스트랩 샘플을 이용,노드를 분할할 때 일부 특성을 무작위로 고른다음 이 중에서 최선의 분할을 찾음.(분류: 전체 특성개수의 제곱근, 회귀: 젠체특성) *부트스트랩 : 데이터세트에서 중복을 허용하여 데이터를 샘플리링 하는 방식(1개를 뽑고 다시 가방에 넣어 그 다음 샘플을 뽑는 방식)
from sklearn.model_selection import cross_validate
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_jobs = -1, random_state = 42)
scores = cross_validate(rf, train_input, train_target, return_train_score = True, n_jobs = -1)
#return_train_score 가 True이면 검증점수뿐만아니라 훈련세트에 대한 점수도 같이 반환
#n_job는 cpu의 코어 사용 갯수, -1이면 전부 사용
print(np.mean(scores['train_score']),np.mean(scores['test_score']))
rf.fit(train_input, train_target)
print(rf.feature_importances_)
ExtraTree
랜덤포레스트와 비슷하게 작용, 기본적으로 100개의 결정트리를 훈련. 반면,부트스트랩*샘플을 사용하지 않음. 즉각 결정트리를 만들 때 전체 훈련세트를 사용. 노드를 분할할 때 무작위분할. 특성을 무작위분할하면 성능이 낮아지지만, 과대적합을 막고 검증세트의 점수를 높이는 효과
#엑스트라트리
from sklearn.ensemble import ExtraTreesClassifier
et = ExtraTreesClassifier(n_jobs = -1, random_state = 42)
scores = cross_validate(et, train_input,train_target,return_train_score=True, n_jobs= -1)
print(np.mean(scores['train_score']),np.mean(scores['test_score']))
rf.fit(train_input, train_target)
print(rf.feature_importances_)
GradientBoosting
깊이가 얕은 결정트리를 사용하여 이전 트리의 오차를 보완하는 방법으로 앙상블, GradientBoostingClassifier는 기본적으로 3인결정트리를 100개 사용. 깊이가 얕은 결정트리를 사용하기 때문에 과대적합에 강함. 분류에서는 로지스틱 손실함수를 사용하고, 회귀에서는 평균 제곱 오차함수를 사용.
#그라디언트부스팅
from sklearn.ensemble import GradientBoostingClassifier
gb = GradientBoostingClassifier(random_state = 42)
scores = cross_validate(gb, train_input,train_target,return_train_score=True, n_jobs= -1)
print(np.mean(scores['train_score']),np.mean(scores['test_score']))
gb.fit(train_input, train_target)
print(gb.feature_importances_)
Histogram based Gradient Boosting
입력특성을 256개의 구간으로 나누고 노드를 분할할 때 최적의 분할을 매우 빠르게 찾을 수 있음.
#히스토램 기반 그라디언트 부스팅
from sklearn.ensemble import HistGradientBoostingClassifier
hgb = HistGradientBoostingClassifier(random_state = 42)
scores = cross_validate(gb, train_input,train_target,return_train_score=True, n_jobs= -1)
print(np.mean(scores['train_score']),np.mean(scores['test_score']))
#특성중요도 확인
from sklearn.inspection import permutation_importance
hgb.fit(train_input, train_target)
result = permutation_importance(
hgb, train_input, train_target, n_repeats = 10, random_state = 42, n_jobs= -1)
print(result.importances_mean)
XGBoost
#XG부스트
from xgboost import XGBClassifier
xgb = XGBClassifier(tree_method = 'hist', random_state = 42)
scores = cross_validate(xgb, train_input, train_target,
return_train_score = True)
print(np.mean(scores['train_score']), np.mean(scores['test_score']))
LightGBM
#lightGBM
from lightgbm import LGBMClassifier
lgb = LGBMClassifier(random_state = 42)
scores = cross_validate(lgb, train_input, train_target,
return_train_score = True, n_jobs = -1)
print(np.mean(scores['train_score']), np.mean(scores['test_score']))
- RandomForest
- ExtraTree
- Gredient Boosting
- Histogram- based Gradient Boosting
- XGBoost
- LightGBM
반응형
'코딩 > Python' 카테고리의 다른 글
[코딩] 07-3 신경망 모델 훈련(f.혼자 공부하는 머신러닝 딥러닝) (2) | 2023.05.13 |
---|---|
[코딩] 결정트리(f.혼자 공부하는 머신러닝 딥러닝) (0) | 2023.05.06 |
[코딩] 이진분류,다중분류(f.혼자공부하는 머신러닝 딥러닝) (0) | 2023.05.05 |
[코딩] Neighbors 도미와 빙어 전처리 후 구분(혼자 공부하는 머신러닝 딥러닝) (0) | 2023.04.30 |
[파이썬] 혼자 공부하는 데이터 분석(06 데이터표현, 07 검증,예측) (0) | 2023.04.30 |