特征选择一共有两种方法:filter和wrapper,前者根据指标(如相关系数),后者通过模型(如随机森林)筛选
超参数搜索也有三种方法——网格搜索和TPE搜索、贝叶斯优化器搜索等,后两者可以进行一定程度的先验计算,并在实际搜索中不断调整先验判断。
在完成上述过程后,还要用交叉验证来看超参数选择是否合理
模型融合方法:交叉验证——把数据集分五等分,每份分别作为验证集,其它作为训练集,得到验证结果可以参与到后续模型融合中,而在实际测试集上则根据模型融合结果输出结果
具体代码如下:
# 实例化交叉验证评估器
kf = KFold(n_splits=5, random_state=22, shuffle=True) #shuffle参数决定数据是否重新划分
# 执行交叉验证过程
for train_part_index, eval_index in kf.split(train[features], train['target']):
# 在训练集上训练模型
best_clf.fit(train[features].loc[train_part_index].values, train['target'].loc[train_part_index].values)
# 模型训练完成后,输出测试集上预测结果并累加至prediction_test中
prediction_test += best_clf.predict(test[features].values)
# 输出验证集上预测结果,eval_pre为临时变量
eval_pre = best_clf.predict(train[features].loc[eval_index].values)
# 输出验证集上预测结果评分,评估指标为MSE
score = np.sqrt(mean_squared_error(train['target'].loc[eval_index].values, eval_pre))
# 将本轮验证集上的MSE计算结果添加至cv_score列表中
cv_score.append(score)
print(score)
# 将验证集上的预测结果放到prediction_train中
prediction_train = prediction_train.append(pd.Series(best_clf.predict(train[features].loc[eval_index]),
index=eval_index))
# 打印每轮验证集得分、5轮验证集的平均得分
print(cv_score, sum(cv_score) / 5)
# 验证集上预测结果写入本地文件
pd.Series(prediction_train.sort_index().values).to_csv(\ preprocess/train_randomforest.csv\ , index=False)
# 测试集上平均得分写入本地文件
pd.Series(prediction_test / 5).to_csv(\ preprocess/test_randomforest.csv\ , index=False)
# 在测试集上加入target,也就是预测标签
test['target'] = prediction_test / 5
# 将测试集id和标签组成新的DataFrame并写入本地文件,该文件就是后续提交结果
test[['card_id', 'target']].to_csv(\ result/submission_randomforest.csv\ , index=False)
return
提交后发现模型从3.654到了3.651,效果略微上升
标签:实战,index,竞赛,验证,kaggle,prediction,train,test,集上 From: https://blog.csdn.net/m0_60792028/article/details/139383730