比赛中的差距排行榜得分和模型得分

数据挖掘 机器学习 Python
2022-02-23 18:34:52

我正在处理 Ens Data Challenge ens-data(相当于 Kaggle)的 Veolia 挑战,目标是对 2014 年和 2015 年(y={2014,2015})非常罕见的二进制事件(管道故障)进行分类。在输入中,我们有 5 个特征、3 个分类特征(我把它变成了虚拟变量)和两个连续的。分数是平均 AUC,0.6AUC1+0.4AUC2.

我的问题如下,当我使用分层 kfold 交叉验证计算每个 AUC(2014 年和 2015 年)并计算平均 AUC 时,我得到大约 0.88,当我在网站上提交时,我最终得到 0.67,我猜有我的代码中的一个问题。

这是我选择 2014 年最佳模型的代码:

Rk:在测试集上进行预测(2014,2015未知),我首先用所有5个特征预测,2014。然后我将2014的预测添加到我的特征中以预测2015

# Spot Check Algorithms
models = []
models.append(('LG', LogisticRegression()))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('RF', RandomForestClassifier()))
models.append(('GBC', GradientBoostingClassifier()))
models.append(('SVM', SVC()))
# evaluate each model in turn
results = []
names = []

# stratifiedkfold is defined by default when there is an integer
scoring = 'roc_auc'
num_folds = 10

for name, model in models:
    cv_results = cross_validation.cross_val_score(model, X, Y, cv=num_folds, scoring=scoring)
    results.append(cv_results)
    names.append(name)
    msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
    print(msg)
1个回答

正如您所评论的,您担心过度拟合。

事实上,交叉验证有助于削弱过拟合,但并不能消除过拟合。TRAIN 数据集上的模型评分有时会超过 TEST 数据集上的评分。以下是我可以找到的一些示例:

  1. Deep Residual Learning for Image Recognition(著名的 ResNet 论文)。结帐图1
  2. Kaggle两个西格玛金融建模挑战核心说:

我们得到了 0.0169 的公开分数,比之前的分数略好。将此模型提交给 LB 给了我 0.006 分

在我的实践中,我更愿意关注 TRAIN、VALIDATION(DEVELOP) 和 TEST 数据集之间的得分差距。个人来说,TRAIN>VALIDATION=TEST 比 TRAIN=VALIDATION>TEST 好。

编辑:对于类不平衡问题,有一些资源:

  1. 对抗机器学习数据集中不平衡类的 8 种策略这个博客展示了一个处理不平衡类问题的常见工作流程。

  2. 数据挖掘中的类不平衡问题:回顾本文比较了为解决类不平衡问题而创建的几种算法。