코린이 성장일기

[WIL] 지끈한 주 본문

멋사 AI스쿨8기

[WIL] 지끈한 주

JJouni 2023. 3. 23. 17:49

상담을 공부하다가 온 나는, 사실 멋사에서 공부하는 것들이 재미있다. 

미지의 세계에 머물러 있어야 했던 시절과 달리, 

미지의 세계를 파헤쳐서 눈에 보여주도록 만든다.

모르면 약이지만, 아는 게 힘일 수 있는 세상에서, 나는 아는 게 힘이 되는 게 좋다.

 

그렇게 재밌게 공부해왔는데, 머신러닝에 들어와서 머리가 지끈지끈하다 . . 

하기 싫은 저항에 이번 한 주는 종종 꿈 속을 러닝했다 ^0^

머신러닝을 잘 뛰어보고 싶다 . . . .. . 체중감량해야지 . . .


 

 

이번 주는 캐글의 벤츠 데이터를 가지고 실습했다.

https://www.kaggle.com/c/mercedes-benz-greener-manufacturing

 

Mercedes-Benz Greener Manufacturing | Kaggle

 

www.kaggle.com

데이터를 보면, 컬럼만 378개이다. 

데이터 확인만도 쉽지 않은 수치였다.

조은 강사님께서 함께해주셔서 해낼 수 있었다. . . . 도륵. . . 

 

지끈 1. 더블 디스크라이브(기술통계에 대한 기술통계)

인포만 보아도, 컬럼이 너무 많아서 다 뜨지 않는다 ?0?

 

그래서 어떤 변수부터 자세히 볼지 의사결정을 위해 기술통계의 기술통계를 쓴다고 하셨다.

그래서 만들어낸. train.drop(columns="y").describe().T.describe()

index와 columns의 이름이 똑같아서 이걸 어떻게 내 머릿속에서 작동시켜야할지 돌리다가 꺼졌다. 

결국 강사님께 다시 설명해달라고 요청드렸고, 그 과정을 친절히 설명해주셨다.

 

결론적으로는,

행의 mean => 0.157672 수치 데이터 기술통계에 대한 전반적인 평균
행의 min => 모든 변수에 대한 기술통계의 min 값이 전부 0입니다.
행의 max => 모든 변수에 대한 기술통계의 max 값의 1사분위수 이상의 값(25%이상)이 전부 1입니다.
=> 이 내용을 통해 min, max 가 둘 다 0이라면 다 같은 값이 들어있는 변수도 있을 것이고,
=> 모든 수치 변수가 0~1 사이값으로 되어 있습니다. => benz 데이터는 이미 스케일링이 되어 제공된 데이터다.

전체 변수가 368개니까, 유일값을 하나 하나 다 보려면 시간이 오래걸리기 때문이라고 . . .

 

지끈 2. 부스팅 3대장

XGBoost, LightGBM, CatBoost

사실 아직 랜덤포레스트도 제대로 숙지하지 않은 상태에서 넘어가서 인지 지끈지끈 했던 것 같다. 다양한 파라미터들이 몰려와서 내 머릿속에 때려박으려니 , , 입력 초과 . . 모르는 단어들이 여기저기 돌아디니니 정신 없었다. 

 

✔️ 구글 트랜드에서 XGBoost, LightGBM, CatBoost의 인기를 검색해보았다.

왼쪽 : 한국에서 부스팅 삼대장 인기, 오른쪽 : 전세계에서 부스팅 삼대장 인기

음,,, 일단 XGBoost가 가장 인기가 높았다. 

배운 순서대로 차근차근 학습해보고자 한다. 

 

그래서 그 전에 기초를 쌓기 위해 성신여대 교수님의 강의를 먼저 보면서 기초를 쌓고 다시 보고자 했다.

왜냐하면 rmse, 모델링, 손실함수 등부터 막히니까 모델을 이해하는 게 어려웠기 때문. . . 

https://jounkim.tistory.com/22

 

[ML] 머신러닝의 학습, Learning

머신러닝에 대해서 이해 없이 나무를 만들고 숲을 만들고 부스팅을 돌려보려니 정신이 혼미해진다. . . 성신여대 김영훈 교수님의 '실습으로 배우는 머신러닝'을 다시 켰다 .. 설명이 아주깔끔하

jounkim.tistory.com

그래도 1주차 학습을 하고 다시 보니 볼만했다. 

 

 

먼저 XGBoost 실습해본 것을 복습해보았다. . . 

import xgboost as xgb

model_xgb = xgb.XGBRegressor(objective='reg:squarederror', 
                             n_estimators=1000, 
                             max_depth=3,
                             random_state=42, 
                             n_jobs=-1, )
model_xgb

모델을 학습시켜주고, 

from xgboost.callback import EarlyStopping
# fit
es = EarlyStopping(
    rounds=5,
    save_best=True,
    maximize=False,
    data_name="validation_0",
    metric_name="rmse",
)

model_xgb.fit(X_train, y_train, 
              eval_set=[(X_valid, y_valid)], callbacks=[es])

EarlyStopping 도 해주고(요것도 다시 정확하게 익혀봐야겠다 . .)

# 검증해보기
y_valid_predict = model_xgb.predict(X_valid)
y_valid_predict[:5]

# 피처중요도 뽑아보기
fi = pd.Series(model_xgb.feature_importances_)
fi.index = model_xgb.feature_names_in_
fi.nlargest(20).plot.barh()

검증해보고 피처 중요도도 뽑아 보았다. 

그런데 XGBoost의 plot_importance 함수에서는 importance_type 인수를 설정하여 feature importance를 구할 수 있다.

# model_xgb.plot_importance
xgb.plot_importance(model_xgb, max_num_features=20);

요렇게 예뿌게 출력댐 ! !

 

그리고 성능검사를 하고 바로 예측 돌리고 점수를 내보는 실습이었다 . .. !

Learderboard에서 몇 순위인지 찾아봐보려했으나 , ,, 저 아래... 성능을 좀 더 높여봐야겠다. 

우선 아직 XGBoost에 대해서도 낯설어서 , , 좀 더 친해져봐야겠다. 

 

아무튼 이렇게 XGBoost를 한 번 돌려보았고, 비슷하게 LightGBM, CatBoost도 돌려보았다.

 

아직 나무와 숲도 익숙해지지 않았는데 많은 정보가 들어와서, 요번 주말에는 더욱 열심히 공부해야겠다고 생각이 들었ㄷㅏ . .

머신러닝 재밌는데, 잘 쓰려면 수학과 통계에도 능통해야하나 싶다 . . . . 

 

중요한 것은 꺾이지 않는 마음 . . . .!

화이팅 하련다.