스태킹 모델 생성 후 새로운 데이터에 적용 문의드립니다.
454
작성한 질문수 5
안녕하세요 강사님, 스태킹 모델 관련 질문 다시한번만 드리겠습니다 ㅠ
현재 xgb,lgbm, 랜덤포레스트, 결정트리 4가지 모델에 대한 stacking 모델을 만들고자 합니다.
각 모델에 대한 학습은 완료되었으며, pkl 파일로 추출하였습니다
강의에 사용된 get_stacking_base_datasets() 함수의 경우 아래 예시처럼 y_train을 인자로 받고 있는데,
xgb_train, xgb_test = get_stacking_base_datasets(xgb_clf, X_train, y_train, X_test, 7)만약 경연 등의 목적으로 정답이 주어지지 않은 새로운 데이터가 주어졌을 경우, y_train값은 존재하지 않게 되는데, 이럴 경우 어떤 식으로 예측 코드를 작성해야 할 지 감이 잡히지 않아 다시 여쭙게 되었습니다..!
xgb_train, xgb_test = get_stacking_base_datasets(xgb_clf, X_train, y_train, X_test, 7)
lgbm_train, lgbm_test = get_stacking_base_datasets(lgbm_clf, X_train, y_train, X_test, 7)
rf_train, rf_test = get_stacking_base_datasets(rf_clf, X_train, y_train, X_test, 7)
dt_train, dt_test = get_stacking_base_datasets(dt_clf, X_train, y_train, X_test, 7)
Stack_final_X_train = np.concatenate((xgb_train, lgbm_train, rf_train, dt_train), axis=1)
Stack_final_X_test = np.concatenate((xgb_test, lgbm_test, rf_test, dt_test), axis=1)
lr_final = LogisticRegression()
lr_final.fit(Stack_final_X_train, y_train)
stack_final = lr_final.predict(Stack_final_X_test)
답변 2
1
안녕하십니까,
y_train은 학습 데이터의 타겟값입니다.
그러니까 아래의 코드라면 X_train은 학습 데이터의 피처 데이터, y_train은 학습 데이터의 타겟값, 그리고 X_test가 경연대회 테스트 피처 데이터 입니다.
xgb_train, xgb_test = get_stacking_base_datasets(xgb_clf, X_train, y_train, X_test, 7)그리고 반환되는 xgb_test는 경연 대회 테스트 피처 데이터를 기반으로 새롭게 테스트 데이터를 생성하는 것입니다. 그래서 아래와 같이 xgb_test, lgbm_test, rf_test, dt_test 데이터가 만들어지면,
xgb_train, xgb_test = get_stacking_base_datasets(xgb_clf, X_train, y_train, X_test, 7)
lgbm_train, lgbm_test = get_stacking_base_datasets(lgbm_clf, X_train, y_train, X_test, 7)
rf_train, rf_test = get_stacking_base_datasets(rf_clf, X_train, y_train, X_test, 7)
dt_train, dt_test = get_stacking_base_datasets(dt_clf, X_train, y_train, X_test, 7) 아래 Stack_final_X_test가 최종적으로 만들어지는 경연대회용 테스트 데이터 이며,
Stack_final_X_test = np.concatenate((xgb_test, lgbm_test, rf_test, dt_test), axis=1)이 테스트 데이터 데이터를 기반으로 최종 예측을 아래와 같이 할 수 있습니다.
stack_final = lr_final.predict(Stack_final_X_test)
요약하자면 경연 대회 테스트 데이터를 스태킹 메타 모델에서 사용하기 위해서 가공을 get_stacking_base_datasets()와 np.concatenate()를 이용해서 다시 만들어 줘야 합니다.
감사합니다.
0
아하 그러면 스태킹에 베이스가 되는 xgb, lgbm 등의 모델만 먼저 준비 후, X_test를 제외한 값은 훈련에 사용했던 데이터를 그대로 넣어주면 되는거군요..!!
감사합니다~
혹시 강의에서 사용하셨던 hyperopt 모듈과는 별개로, optuna 라는 모듈도 사용해 보셨을까요?
목적함수를 거의 동일하게 설정 후, 하이퍼파라미터를 구해봤는데, 두 모듈이 서로 다른 값을 반환하더라구요..
머신러닝 모델의 성능지표로 precision 점수를 사용하다고 했을 때, 목적함수의 roc_auc_list에 append되는 score를 auc_roc_score가 아닌 precision_score를 사용할 경우, 결과적으로 precision점수가 높은 모델을 생성할 수 있을까요?
ex)
score = precision_score(y_val, xgb_clf.predict(X_val),average="macro")
0
혹시 강의에서 사용하셨던 hyperopt 모듈과는 별개로, optuna 라는 모듈도 사용해 보셨을까요?
목적함수를 거의 동일하게 설정 후, 하이퍼파라미터를 구해봤는데, 두 모듈이 서로 다른 값을 반환하더라구요..
=> 두 모듈은 조금 다른 베이지안 최적화를 사용하므로 다른 값을 반환할 수 있습니다.
머신러닝 모델의 성능지표로 precision 점수를 사용하다고 했을 때, 목적함수의 roc_auc_list에 append되는 score를 auc_roc_score가 아닌 precision_score를 사용할 경우, 결과적으로 precision점수가 높은 모델을 생성할 수 있을까요?
=> 원칙적으로는 모델의 목적함수 평가지표로 테스트에 사용되는 성능지표를 사용하는게 맞습니다. 그러니까 테스트 데이터의 평가 지표가 precision_score이면 모델의 목적함수 학습/검증 평가 지표도 precision_score로 하는게 맞습니다. 그런데 문제가 lightgbm, xgboost 모두 목적함수 지표로 precision_score를 default로 제공하지는 않습니다.
이걸 precision_score로 변경하는 방법도 있는데(오랜전에 해봐서 잘 기억이 나지는 않습니다만), 실제로 roc_auc가 아닌 precsion_score로 적용해 봐도 큰 차이는 없었던것 같습니다.
모델 서빙과 관련된 강좌가 출시되는지 질문드립니다.
0
24
2
안녕하세요 열심히 수강중인 학생입니다
0
68
2
정수 인덱싱
0
71
2
넘파이 오류
0
88
2
11강 numpy의 axis 축 질문 드립니다.
0
89
2
Kaggle 에서 Santander customer satisfaction data 를 다운로드 되지가 않습니다.
0
80
2
Feature importances 를 보여주는 barplot 이 그래프로 안보여져요.
0
71
2
타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.
0
76
2
타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.
0
65
2
5강 강의 오류가 있어요.
0
86
1
실무에서 LTV 관련 모델 선택 질문입니다!
0
74
2
14강 강의 듣는중에 궁금한게 있어서 질문합니다~
0
70
3
파이썬 다운그레이 후 사이킷런 재설치
0
122
2
좋은 강의 감사합니다.
0
75
2
scoring 함수 음수값
0
68
2
6번 강의에 사이킷런, 파이썬, 아나콘다 각각 버전 일치 안 시키고 진행해도 강의 따라가 지나요?
0
104
2
분류 평가 정확도 예측
0
80
2
안녕하세요. 강의 들으면서 업무에 적용하고 싶은 수강생입니다.
0
100
1
카카오톡 채널 있나요
0
110
1
혹시 강의에서 사용하시는 ppt 받을 수 있는건가요
0
191
2
pca 스케일링 관련하여 질문드립니다.
0
102
2
주피터 대신 구글 코랩
0
174
2
강의에서 사용하는 pdf or ppt자료는 따로 없는 건가요?
0
149
2
실루엣 스코어..
0
87
2





