变量处理及单模型的构建见本系列前一篇,此处略处
# 模型融合 model_list = [Lr_cv, svc_cv, dt_cv, rf_cv, xgb_cv] S_train, S_test = stacking(model_list, x_train, y_train, x_test, regression=False, n_folds=5) # # Initialize 2-nd level model model = GradientBoostingClassifier(learning_rate = 0.1, n_estimators = 100, max_depth = 3) # # Fit 2-nd level model model_s = model.fit(S_train, y_train) # # Predict y_pred = model_s.predict(S_test) # Final prediction score # print('Final prediction score: [%.8f]' % metrics.accuracy_score(y_test, y_pred)) acc_score_test = metrics.accuracy_score(y_pred, y_test) precision_score_test = metrics.precision_score(y_pred, y_test) recall_score_test = metrics.recall_score(y_pred, y_test) f1_score_test = metrics.f1_score(y_pred, y_test) roc_auc_score_test = metrics.roc_auc_score(y_pred, y_test) print('Final 测试集准确率:{}\n'.format(acc_score_test)) print('Final 测试集精确率:{}\n'.format(precision_score_test)) print('Final 测试集召回率:{}\n'.format(recall_score_test)) print('Final 测试集f1评分:{}\n'.format(f1_score_test)) print('Final 测试集AUC值:{}\n'.format(roc_auc_score_test)) # model_est(model_dict_s, x_train, x_test, y_train, y_test) Final 测试集准确率:0.7701471618780659 Final 测试集精确率:0.24512534818941503 Final 测试集召回率:0.6068965517241379 Final 测试集f1评分:0.3492063492063492 Final 测试集AUC值:0.6977540480929582 # from mlxtend.classifier import StackingClassifier sclf = StackingClassifier(classifiers=[Lr_cv, dt_cv, rf_cv, xgb_cv, svc_cv], meta_classifier=xgb_cv) model_dict_mlxtend = {'融合模型':sclf} model_est(model_dict_mlxtend, x_train, x_test, y_train, y_test) 融合模型 训练集准确率:0.8935978358881875 融合模型 测试集准确率:0.7764540995094604 融合模型 训练集精确率:0.6390887290167866 融合模型 测试集精确率:0.3342618384401114 融合模型 训练集召回率:0.909556313993174 融合模型 测试集召回率:0.6 融合模型 训练集f1评分:0.7507042253521128 融合模型 测试集f1评分:0.42933810375670844 融合模型 训练集AUC值:0.8998711887368278 融合模型 测试集AUC值:0.7026079869600651