우당탕탕 개발일지
[대기오염 예측모델 개발] XGBoost 모델을 사용하여 다중 클래스 분류 문제를 해결 본문
XGBoost 모델이란?
위 영상이 그라디언트 부스팅에 대해 이해하기 쉬워서 좋았다.
- 각 이터레이션(반복)에서 맞추지 못한 데이터에 가중치를 부여해서 모델을 학습
- 부스팅(Boosting) 계열의 트리 모델
- 그라디언트 부스팅 모델에 비해 빠른 속도
- 과적합을 막고, 자체 교차 검증 알고리즘과 결측치 처리 기능 보유
XGBoost의 대표적인 파라미터
- n_estimators (int) : 내부에서 생성할 결정 트리의 개수
- max_depth (int) : 생성할 결정 트리의 높이
- learning_rate (float) : 훈련량, 학습 시 모델을 얼마나 업데이트할지 결정하는 값
- colsample_bytree (float) : 열 샘플링에 사용하는 비율
- subsample (float) : 행 샘플링에 사용하는 비율
- reg_alpha (float) : L1 정규화 계수
- reg_lambda (float) : L2 정규화 계수
- booster (str) : 부스팅 방법 (gblinear / gbtree / dart)
- random_state (int) : 내부적으로 사용되는 난수값
- n_jobs (int) : 병렬처리에 사용할 CPU 수
XGBoost 파이썬 코드
1. 회귀 문제에서의 XGBoost
from xgboost import XGBClassifier
# XGBoost 모델 선언
xgbc = XGBClassifier
xgbc.fit(X_train, Y_train)
y_pred = xgbc.predict(x_valid)
2. 분류 문제에서의 XGBoost
from xgboost import XGBRegressor
# XGBoost 모델 선언
xgbr = XGBRegressor
xgbr.fit(X_train, Y_train)
y_pred = xgbr.predict(x_valid)
대기오염 데이터 XGBoost 모델 훈련
X = df.drop(columns=['ID', 'gu', 'address', 'a_d_classification', 'Y']).to_numpy()
y = df['Y']
X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size = 0.2, random_state = 42)
먼저 불필요한 열을 제거해주고, train_test_split을 통해 훈련 세트와 검증 세트를 나눈다.
y_train -= 1
xgb = XGBClassifier(tree_method='hist', random_state=42)
scores = cross_validate(xgb, X_train, y_train, return_train_score=True)
xgb.fit(X_train, y_train) # 학습 데이터를 이용해 모델 학습
y_train += 1
# 모델 저장
with open('xgb_model.pkl', 'wb') as file:
pickle.dump(xgb, file)
print(np.mean(scores['train_score']), np.mean(scores['test_score']))
print(y_train)
그 다음에 XGBClassifier를 이용해서 학습을 진행해준다.
교차 검증을 통해 훈련 데이터 점수 도출한다.
왜인지 모르겠지만 y_train이 1, 2, 3일 때 학습이 안되길래 0, 1, 2로 바꿔주고 학습 후 다시 1, 2, 3으로 바꿔줬다.
모델을 저장하고, 테스트 데이터에 대해서 다시 수행한다.
XGBoost로 예측
# 모델 불러오기
with open('xgb_model.pkl', 'rb') as file:
loaded_model = pickle.load(file)
# 새로운 테스트 데이터 예측
y_pred = loaded_model.predict(X_test)
y_pred += 1
# 예측 결과 확인
print(y_pred)
끝!
'인공지능' 카테고리의 다른 글
ㄹㄹ (0) | 2024.10.04 |
---|---|
[대기오염 예측모델 개발] 연도별 자치구별 대기오염물질 농도 히트맵 그리기 (1) | 2024.10.03 |
[혼공머신] 4-1. 로지스틱 회귀 (0) | 2024.07.21 |
[혼공머신] 3-3 다중 회귀, 특성 공학, 사이킷런의 변환기 클래스 PolynomialFeatures (0) | 2024.07.14 |
[혼공머신] 3-2 K-최근접 이웃의 한계, 선형 회귀, 모델 파라미터, 다항 회귀 (0) | 2024.07.13 |