繁体   English   中英

K折交叉验证查询

[英]K-fold Cross Validation Queries

我试图执行K-折交叉验证和GridSearchCV优化我的梯度加速模型- -链接以下https://www.analyticsvidhya.com/blog/2016/02/complete-guide-parameter-tuning-gradient-boosting -gbm的Python /

我对以下模型报告的屏幕截图有一些疑问:

1)如何计算0.814365的精度? 脚本在哪里进行火车测试拆分? 如果将cv_folds = 5更改为cv_folds =任何整数,则精度仍为0.814365。 实际上,删除cv_folds并输入performCV = False也会得到相同的精度。

(请注意,我的sk Learn No CV 80/20火车测试给出的准确性约为0.79-0.80)

2)同样,如何计算AUC分数(训练)? 这应该是ROC-AUC而不是AUC吗? 我的sk学习模型给出的AUC约为0.87。 就像准确性一样,这个分数似乎是固定的。

3)为什么平均简历分数比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_score偏低的主要原因是因为将其与训练准确性进行比较不是一个公平的比较。 您的训练准确性是使用与模型拟合相同的数据来计算的,而cv_score是来自交叉验证中测试折痕的平均分数。 您可以想象,模型将使用已经训练过的数据进行更好的预测,而不必根据模型从未见过的新数据进行预测。

accuracy_scoreauc ,因为你总是使用相同的输入(计算出现固定ddf["APPROVED"] ddf_predictionsddf_predprob )到计算中。 performCV部分实际上不会转换任何这些数据集,因此,如果您使用相同的模型,模型参数和输入数据,则将获得与计算相同的预测。

根据您的评论,有很多原因会导致cv_score精度低于完整测试集的精度。 主要原因之一是使用完整的训练集而不是使用每个cv折叠使用训练数据的子集时,您允许模型访问更多数据进行训练。 如果您的数据大小不那么大,则尤其如此。 如果您的数据集不大,则该数据在训练中将更为重要,并且可以提供更好的性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM