【问题标题】:High Validation AUC - Low Test AUC高验证 AUC - 低测试 AUC
【发布时间】:2020-10-04 17:58:03
【问题描述】:

我正在处理来自 kaggle(课堂竞赛)的名为 HR Attrition 的数据集,它包含 1628 行和 27 列。 大多数特征本质上都是分类的,我使用随机森林并使用分层 K 折(10 折)进行验证,我的验证 AUC 相当高,大约为 0.98-99。在提交时,我无法获得超过 0.85 的 AUC,这是一个巨大的偏差。我尝试了很多东西,比如 PCA 和特征选择,但我的验证不可信,提交分数没有提高。

train_data = pd.read_csv('train.csv')
# label encoding
lbl = LabelEncoder()
cat_feats = [f for f in train_data.columns if train_data[f].dtype == object]
for f in cat_feats:
train_data[f] = lbl.fit_transform(train_data[f])
test_data[f] = lbl.transform(test_data[f])

train_id = train_data.Id
train_data = train_data.drop(['Behaviour','Id'],axis = 1) # behaviour has 
# only 1 value

X = train_data.drop('Attrition',axis = 1)
y = train_data.Attrition

# Standard Scaling
skf = StratifiedKFold(n_splits = 10,random_state=42,shuffle=True)

numeric = ['Age','MonthlyIncome','EmployeeNumber']
# target encoding
categorical = [f for f in X.columns if f not in numeric]
pre_pipe = make_column_transformer((TargetEncoder(),categorical), 
(StandardScaler(),numeric))
pipe_rf = make_pipeline(pre_pipe,RandomForestClassifier())

print('RF:',np.mean(cross_val_score(X=X,y=y,cv=skf,estimator=pipe_rf,scoring='accuracy')))

使用目标编码我的验证给了我平均 98% 的准确度(数据是平衡的,因此使用准确度 AUC 几乎为 1),但提交分数最高为 85%。我该怎么办?

【问题讨论】:

  • 欢迎来到 SO!由于您的问题更多是关于改进模型,而不是具体的编码问题,因此您的问题似乎更适合 CrossValidated

标签: python machine-learning data-science kaggle


【解决方案1】:

我在这里只是天真,因为通常交叉验证分数不应该与测试分数相差那么远。

我只是想确保我们谈论的是相同的指标。

  1. 交叉验证分数返回准确度
  2. 也许比赛在 AUC(曲线下面积)上

准确度可以达到 98%,但 AUC 仍然只有 85% 如果你想在交叉验证中使用 auc 预测更新最后一行

print('RF:',np.mean(cross_val_score(X=X,y=y,cv=skf,estimator=pipe_rf,scoring='roc_auc')))

【讨论】:

    猜你喜欢
    • 2018-04-16
    • 2017-09-25
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 2018-04-16
    • 2015-11-05
    相关资源
    最近更新 更多