【发布时间】:2019-02-19 05:31:23
【问题描述】:
我正在尝试执行 K-Fold Cross Validation 和 GridSearchCV 来优化我的 Gradient Boost 模型——点击链接—— https://www.analyticsvidhya.com/blog/2016/02/complete-guide-parameter-tuning-gradient-boosting-gbm-python/
我对下面的模型报告截图有几个问题:
1) 0.814365的精度是如何计算的?它在脚本中的哪个位置进行训练测试拆分?如果将 cv_folds=5 更改为 cv_folds=any 整数,那么精度仍然是 0.814365。事实上,删除 cv_folds 并输入 performCV=False 也可以提供相同的精度。
(注意我的 sk learn No CV 80/20 train test 的准确度约为 0.79-0.80)
2) 同样,AUC 分数(训练)是如何计算的?这应该是 ROC-AUC 而不是 AUC 吗?我的 sk learn 模型给出的 AUC 约为 0.87。与准确性一样,这个分数似乎是固定的。
3) 为什么平均 CV 分数比 AUC(训练)分数低这么多?看起来他们都在使用 roc_auc(我的 sklearn 模型为 ROC AUC 提供了 0.77)
df = pd.read_csv("123.csv")
target = 'APPROVED' #item to predict
IDcol = 'ID'
def modelfit(alg, ddf, predictors, performCV=True, printFeatureImportance=True, cv_folds=5):
#Fit the algorithm on the data
alg.fit(ddf[predictors], ddf['APPROVED'])
#Predict training set:
ddf_predictions = alg.predict(ddf[predictors])
ddf_predprob = alg.predict_proba(ddf[predictors])[:,1]
#Perform cross-validation:
if performCV:
cv_score = cross_validation.cross_val_score(alg, ddf[predictors], ddf['APPROVED'], cv=cv_folds, scoring='roc_auc')
#Print model report:
print ("\nModel Report")
print ("Accuracy : %f" % metrics.accuracy_score(ddf['APPROVED'].values, ddf_predictions))
print ("AUC Score (Train): %f" % metrics.roc_auc_score(ddf['APPROVED'], ddf_predprob))
if performCV:
print ("CV Score : Mean - %.5g | Std - %.5g | Min - %.5g | Max - %.5g" % (npy.mean(cv_score),npy.std(cv_score),npy.min(cv_score),npy.max(cv_score)))
#Print Feature Importance:
if printFeatureImportance:
feat_imp = pd.Series(alg.feature_importances_, predictors).sort_values(ascending=False)
feat_imp.plot(kind='bar', title='Feature Importances')
plt.ylabel('Feature Importance Score')
#Choose all predictors except target & IDcols
predictors = [x for x in df.columns if x not in [target, IDcol]]
gbm0 = GradientBoostingClassifier(random_state=10)
modelfit(gbm0, df, predictors)
【问题讨论】:
-
这里发生了很多事情。您是否期望在您的代码中,当您调整
cv_folds时,accuracy_score和auc的计算会随着这些折叠而改变并且不会保持不变? -
@vealkind 准确性和 auc 是固定的不是问题,但我发现了解它们为何固定以及如何计算它们很有用。主要问题是 CV 分数为何如此之低以及为何如此之低。
标签: python machine-learning scikit-learn cross-validation roc