Machine Learning/Case Study ๐ฉ๐ป๐ป
[๐ฆ ๊ฒ ๋์ด ์์ธก(3)] Baseline Modeling(Hist Gradient Boosting)
ISLA!
2023. 9. 24. 23:16
------>> ๊ธฐ๋ณธ์ ์ธ ์ ์ฒ๋ฆฌ ์ฝ๋๋ ์ ํฌ์คํ ๊ณผ ๋์ผํ๊ฒ ์ด์ด์ง๋๋ค.
๐ Hist Gradient Boosting ์ด๋?
- ์ฌ์ดํท๋ฐ์ Gradient Boosting ์ ๋ณํ ์ค ํ๋๋ก, ์ผ๋ฐ Gradient Boosting(ํ๊ท/๋ถ๋ฅ)๊ณผ ๋น๊ตํ์ฌ ํจ์จ์ ์ธ ๊ตฌํ์ ์ ๊ณต
- ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์ ์ ํฉํ๋ฉฐ, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ Gradient Boosting๋ณด๋ค ๋น ๋ฅธ ํ์ต๊ณผ ์์ธก์ ์ ๊ณต
- ์ฅ์
- ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ ๋ถํ : ๋ฐ์ดํฐ๋ฅผ ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ ๋ถํ ์ ์ฌ์ฉํ์ฌ, ์ฐ์ํ ํน์ฑ์ ๋น ๋ฅด๊ฒ ์ด์ฐํํ๊ณ ์ด์ฐ์ ์ธ ๊ฐ์ ์ฌ์ฉํ์ฌ ๋ถํ ์ ์ํํ์ฌ ํ์ต๊ณผ ์์ธก์ ๊ฐ์ํ ํจ
- ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ : ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ถ/์ ์ฅํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ๋์ด ๋ฎ์์ง
- ๋ณ๋ ฌ ์ฒ๋ฆฌ : ๋ฉํฐ์ฝ์ด CPU์์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅ
- ๋น ๋ฅธ ํ์ต ๋ฐ ์์ธก : ํจ์จ์ ์ธ ๋ถํ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ก ๊ธฐ์กด Gradient Boosting ๋ณด๋ค ๋น ๋ฅธ ํ์ต๊ณผ ์์ธก ์ ๊ณต
- ๋ถ๋ฅ ๋ฐ ํ๊ท ์ง์
- ์ค์ผ์ผ ๋ถ๋ณ์ฑ : ํน์ฑ ์ค์ผ์ผ์ ๋ ๋ฏผ๊ฐํ๋ฉฐ, ๋ฐ์ดํฐ ์ค์ผ์ผ ์กฐ์ ์ด ํ์ํ์ง ์์ ์ ์์
- Gradient Boosting ๊ณผ ๋น๊ตํ์ฌ ๋ชจ๋ธ ์ฑ๋ฅ์ ์ ์ฌํ๊ฑฐ๋ ๋ ์ฐ์ํ ์ ์์ผ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ฒ๋ฆฌ ์๊ฐ ์ธก๋ฉด์์ ์ด์ ์ด ์์!
Modeling code
skf = KFold(n_splits = 10, random_state = 42, shuffle = True)
for i, (train_ix, test_ix) in enumerate(skf.split(X, Y)):
X_train, X_test = X.iloc[train_ix], X.iloc[test_ix]
Y_train, Y_test = Y.iloc[train_ix], Y.iloc[test_ix]
print(f'----------------------------------------------------------------')
# histGradientBoosting
hist_md = HistGradientBoostingRegressor(loss = 'absolute_error',
l2_regularization = 0.01,
early_stopping = False,
learning_rate = 0.01,
max_iter = 1000,
max_depth = 15,
max_bins = 255,
min_samples_leaf = 70,
max_leaf_nodes = 115)
hist_md.fit(X_train, Y_train)
hist_pred_1 = hist_md.predict(X_test[X_test['generated'] == 1])
hist_pred_2 = hist_md.predict(test_baseline)
hist_score_fold = mean_absolute_error(Y_test[X_test['generated'] == 1], hist_pred_1)
hist_cv_scores.append(hist_score_fold)
hist_preds.append(hist_pred_2)
print('Fold', i, '==> HistGradient of MAE is ==>', hist_score_fold)
728x90