https://www.kaggle.com/c/mercedes-benz-greener-manufacturing
train = pd.read_csv(f'{base_path}/train.csv.zip', index_col="ID")
test = pd.read_csv(f'{base_path}/test.csv.zip', index_col="ID")
submission = pd.read_csv(f'{base_path}/sample_submission.csv.zip', index_col="ID")
벤츠 데이터셋을 불러옵니다 !
2.타입전환
cat_col = train.select_dtypes(include="object").columns
cat_col
lightGBM, CatBoost 에서는 범주형 피처를 인코딩 없이 사용할 수 있습니다.
따로 범주형 피처를 지정해서 사용할수 있습니다
3.Feature Engineering
3-1 원핫 인코딩
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(handle_unknown="ignore")
train_ohe = ohe.fit_transform(train.drop(columns="y"))
test_ohe = ohe.transform(test)
여기서 (train.drop(columns="y"))을 해주는 이유는 최종적으로 예측해야할 y를
인코딩하지 않기위해 제외해줍니다 (잊지말자!)
3-2 x,y값 나누기
# Hold-out-valiation을 위해 train 값으로 나누기
X = train_ohe
y = train["y"]
3-3 학습, 검증 세트 나누기
Hold-out-valiation을 위해 train, valid 세트로 나누기
train_test_split을 이용해 X, y 값을 X_train, X_valid, y_train, y_valid 으로 나눠줍니다.
X_train , X_valid, y_train, y_valid = train_test_split(
X,y,test_size=0.1,random_state=42)
test_size=0.1 => 이름은 test지만 train으로 나눠주었기 때문에 valid 사이즈를 지정한 것입니다.
사이킷런 이외의 모델들
부스팅 3대장
xgboost, lightgbm, catboos
이는
- GBT에서 단점을 보완하고 개선한 모델
- 결정트리, 그래디언트 부스팅 트리, 랜덤 포레스트에 비하면 비교적 최신 모델들
최신 모델이라고 해서 앞에 소개한 모델들을 완전히 대체한다는 것은 아닙니다 - 소개할 세 모델은 Kaggle이나 Dacon에서 높은 성적을 거두는 참가자들이 많이 사용해왔고 좋은 성과를 보여왔습니다.
1,
XGBoost 모델
- xgboost는 GBT에서 병렬 학습을 지원하여 학습 속도가 빨라진 모델입니다.
- GBT에서 병렬 학습을 지원하여 학습 속도가 빨라진 모델입니다.
- 기본 GBT에 비해 더 효율적이고, 다양한 종류의 데이터에 대응할 수 있으며 이식성이 높습니다.
- 모든 가능한 트리를 나열하여 최적 트리를 찾는 것은 거의 불가능하기 때문에, 2차 근사식을 바탕으로 한 손실함수를 토대로 매 iteration마다 하나의 leaf로부터 가지를 늘려나가는 것이 효율적
- 손실 함수가 최대한 감소하도록 하는 split point(분할점)를 찾는 것이 XGBoost의 목
장점 | 단점 |
- GBM 대비 빠른 수행시간(병렬 처리) - 과적합 규제(Regularization) 표준 GBM 경우 과적합 규제기능이 없으나, XGBoost는 자체에 과적합 규제 기능으로 강한 내구성을 지님 - 분류와 회귀영역에서 뛰어난 예측 성능 발휘(광범위한 영역) - Early Stopping(조기 종료) 기능이 있음 - 다양한 옵션(Hyper Parameter)을 제공하며 Customizing이 용이 |
- XGBoost는 GBM에 비해 좋은 성능을 보여주고 비교적 빠르지만 그래도 여전히 학습시간이 느림 - Hyper Parameter 수가 많아 Hyper Parameter 튜닝을 하게되면 시간이 더욱 오래 걸림 - 모델의 Overfitting |
XGBoost Parameter |
||
부스팅 파라미터 | 일반 파라미터 | 학습과정 파라미터 eval_metri - 검증에 사용되는 함수정의 - 회귀 분석인 경우 'rmse'를, 클래스 분류 문제인 경우 'error' |
|
|
|
라이브러리 불러오기
# xgboost는 gradient boosting tree(GBT)의 병렬 학습을 구현한 라이브러리입니다.
import xgboost as xgb
model_xgb = xgb.XGBRegressor(random_state=42, n_jobs=1)
model_xgb
시각화
xgb.plot_importance(model_xgb)
# 부스팅 모델은 시각화 가 가능하다!
xgb.plot_tree(model_xgb, num_trees=1)
fig = plt.gcf()
fig.set_size_inches(30, 20)
이렇게 시각화가 가능한 것은 왜냐하면 부스팅 모델은 순차적으로 직렬 실행 되기 떄문이다
예측하는법
y_pred_xgb = model_xgb.predict(X_test)
부스팅은 전처리를 따로 안해줘도 돌아간다!
lightgbm 모델
- XGBoost에 비해 성능은 비슷하지만 학습 시간을 단축시킨 모델이다.
- XGBoost에 비해 더 적은 시간, 더 적은 메모리를 사용한다.
장점 | 단점 |
- 더 빠른 훈련 속도와 더 높은 효율성 - 적은 메모리 사용량 - 더 나은 정확도 - 병렬, 분산 및 GPU 학습 지원 - 대규모 데이터를 처리 |
- LightGBM은 overfitting (과적합)에 민감하고 작은 데이터에 대해서 과적합되기 쉬움 |
특징 - GOSS (Gradient based One Side Sampling) 기울기 기반 단측 샘플링 - 데이터에서 큰 Gradient를 가진 모든 인스턴스를 사용해서 무작위로 Sampling을 수행함 - 많이 틀린 데이터 위주로 샘플링 => 행을 줄입니다. - 대규모 데이터 인스턴스를 다루기 위한 것 - EFB (Exclusive Feature Bundling) 배타적 특성 묶음 - 대규모 Features 수를 다루기 위한 것 => 열을 줄입니다. |
LightGBM Parameters
|
라이브러리 불러오기
import lightgbm as lgbm
# model_lgbm
model_lgbm = lgbm.LGBMRegressor(random_state=42)
model_lgbm
시각화 하기
lgbm.plot_importance(model_lgbm)
lgbm.plot_tree(model_lgbm, figsize=(20, 20), tree_index=0,
show_info=['split_gain', 'internal_value', 'internal_count', 'leaf_count'])
CatBoost 모델
- 의사결정 트리 상의 그래디언트 부스팅(Gradient Boosting)용 알고리즘
- catboost는 기존 GBT의 느린 학습 속도와 과대적합 문제를 개선한 모델입니다.
- 과대적합이란 모델이 지나친 학습으로 인해 경향이 학습용 세트에 쏠려 있는 현상을 말합니다.
- 학습용 세트에서는 예측을 잘 하지만(특수한 상황), 일반적인 상황에서 예측 능력이 떨어지는 것입니다.
- 범주형 데이터를 따로 인코딩할 필요가 없지만 모델 훈련시 어떤 데이터가 범주형인지 알려주어야 합니다
장점 | 단점 |
|
|
특징
|
CatBoostParameters
|
https://catboost.ai/en/docs/references/training-parameters/common
라이브러리 불러오기
import catboost
model_cat = catboost.CatBoostRegressor(eval_metric="R2", verbose=False)
model_cat
'TIL > 머신러닝' 카테고리의 다른 글
11/28 월 머신러닝 "불균형 데이터 SMOTE" -2 (0) | 2022.11.30 |
---|---|
11/28 월 머신러닝 불균형 데이터 SMOTE -1 (혼동행렬) (0) | 2022.11.29 |
11.24일 얕은복사,깊은복사 / 혼동행렬 (0) | 2022.11.24 |
11.22 오후 Learning rate ,bgd, SGD,모멘텀 (2) | 2022.11.22 |
11.22 오전 머신러닝 최적화 ,경사하강법 (1) | 2022.11.22 |
댓글