혼자공부하는 머신러닝 딥러닝 4주차 후기 및 미션 완료

 

@혼자공부하는 머신러닝 딥러닝




@혼자공부하는 머신러닝 딥러닝



  • 챕터 5 : 트리 알고리즘

이번시간에 학습한 결정트리는 기존에 학습 했던 모델들에 비해서 트리 모양으로 나타내서 보여주기 때문에 결정트리의 깊이가 너무 깊지 않는 이상 비교적 설명하기가 쉬우며, 이전에 학습한 로지스틱 회귀 모델보다 성능이 더 좋다.


이전에는 훈련세트 80%와 테스트세트 20%를 만들던 것을 훈련세트 60%와 검증세트 20%, 그리고 테스트 세트 20%로 나눠서 20% 모델을 훈련하고 검증하는 방법에 대해서 학습했습니다.


그리고 마지막으로 앙상블 학습에 대해서 배우게 되었는데, 여기에는 여러가지가 있고, 그 중에 랜덤 프레스트, 엑스트라 트리, 그레디언트 부스팅, 그리고 히스토그램 기반 그레디언트 부스팅 알고리즘에 대해서 학습하고 실습을 하였습니다.




  • 기본 미션 : 교차 검증을 그림으로 설명하기


@혼자공부하는 머신러닝 딥러닝


교차 검증은 위에 그림과 같이 훈련세트와 검증세트를 나눈후, 검증세트를 여러번 반복 평가하여, 이 점수를 평균하여 최정 검수 점수를 얻을수 있으며, 위에 그림은 훈련 세트를 세부분으로 나눠서 교차 검증을 실시 하여서 3-폴드 교차검증 이라고 합니다.




  • 선택 미션 : Ch05(05-3) 앙상블 모델 손코딩 코랩 화면 인증하기


# 전처리
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)

# 랜덤 포레스트
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)
print(np.mean(scores['train_score']), np.mean(scores['test_score']))

rf.fit(train_input, train_target)
print(rf.feature_importances_)

rf = RandomForestClassifier(oob_score=True, n_jobs=-1, random_state=42)
rf.fit(train_input, train_target)
print(rf.oob_score_)

# 엑스트라 트리
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']))

et.fit(train_input, train_target)
print(et.feature_importances_)

# 그레이디언트 부스팅
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 = GradientBoostingClassifier(n_estimators=500, learning_rate=0.2, 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_)

# 히스토그램 기반 그레이디언트 부스팅
from sklearn.experimental import enable_hist_gradient_boosting
from sklearn.ensemble import HistGradientBoostingClassifier
hgb = HistGradientBoostingClassifier(random_state=42)
scores = cross_validate(hgb, train_input, train_target, return_train_score=True)
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)

result = permutation_importance(hgb, test_input, test_target, n_repeats=10, random_state=42, n_jobs=-1)
print(result.importances_mean)

hgb.score(test_input, test_target)

# XGBoost 라이브러리
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 라이브러리
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']))



#혼공학습단 #혼공단 #혼공머신

댓글 쓰기

0 댓글