clf = RandomForestClassifier(max_depth=2, random_state=0)
clf.fit(X, y)
와 같이 xgb 라는 변수에 XGBRegressor() 와 같은 모델을 할당해주는 이유는
1) 코드를 읽기 쉽게 하고
2) 학습된 모델을 변수에 할당해 다른 데이터도 예측할 수 있도록 하고,
3) 만들어진 모델을 분석할 수 있게 하기 위해서이다.
predict(X), predict_proba(X), score(X, y)
등의 메소드를 clf.predict(X) 로 적용할 수 있다.
y_pred = clf.predict(X_test)
RandomForestClassifier().fit(X, y).predict(X_test)
사실 위 코드를 이렇게 한 줄로 쓸 수도 있지만 바람직하지 않은 코드이다.
y_pred 변수를 생성하지 않았기 때문에, 결과를 보고 싶으면 매번 이 코드를 써야 하며
모델 자체가 변수로 들어가있지 않아 다른 데이터에 모델을 쓰거나, 모델을 분석할 수 없기 때문이다.
다른 예로, RandomizedSearchCV를 돌린 후 실행하는 다음 코드에서
print('최적 하이퍼파라미터: ', search.best_params_)
print('CV RMSE: ', -search.best_score_)
best_model = search.best_estimator_ # 가장 뛰어난 성능을 내는 모델을 변수로 할당)
가장 뛰어난 성능을 내는 best_estimator_를 best_model에 할당함으로써
위 모델을 다른 데이터셋에 재활용할 수 있게 된다.
아래 파이프라인도 마찬가지이다.
pipe_xg = make_pipeline(
OrdinalEncoder(),
#SimpleImputer(), #xgboost에서는 결측치 처리 해줌
model_xg)
# Fitting the model
pipe_xg.fit(X_train, y_train)
다른 모델을 사용할 때마다 변수명을 다르게 해 주면,
어떤 모델인지 손쉽게 구분하면서
한 데이터셋에 서로 다른 모델의 성능을 비교할 수 있다.
참조
'머신러닝, 딥러닝' 카테고리의 다른 글
spacy [E050] Can't find model 'en_core_web_sm' 에러 해결 (0) | 2021.04.12 |
---|---|
초등학생도 이해하는 역전파 (0) | 2021.04.09 |
모델의 score - accuracy, f1, rmse, roc_auc, 뭐가 디폴트지? (0) | 2021.02.19 |
Permutation Importances (0) | 2021.02.18 |
multi-label 분류 문제에서 f1 score는 못 사용하는 걸까? (3) | 2021.02.16 |