【发布时间】: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