我正在使用kaggle的HR Attrition数据集(在班级竞赛中),它包含1628行和27列。大多数功能在本质上是分类的,我使用随机森林并使用Stratified K fold (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%。我该怎么办?
发布于 2020-06-18 20:45:41
我在这里只是天真的,因为通常交叉验证分数不应该离测试分数那么远。
我只想确保我们谈论的是相同的指标。
上
准确率可以达到98%,但如果希望交叉验证中的AUC预测更新最后一行,则auc仍然只能达到85%
print('RF:',np.mean(cross_val_score(X=X,y=y,cv=skf,estimator=pipe_rf,scoring=‘roc_auc’)
https://stackoverflow.com/questions/62386250
复制相似问题