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