How To CV and How To Ensemble OOF Files
一、怎么做交叉验证
将完整的数据集划分成N份(如五份,称为Fold1, Fold2, Fold3, Fold4, Fold5),然后我们训练出五个模型,比如用2-5的fold做训练,fold1做预测验证,一次进行五次训练验证。
这样我们就对所有的训练集进行过一次预测,这个预测结果称之为OOF(out of fold),CV的分数就是用所有的训练集以及预测的结果来计算得到
OOF_AUC = roc_auc_score( train.target, oof.prediction)
来自 https://www.kaggle.com/c/siim-isic-melanoma-classification/discussion/175614
这个CV结果比Public LB更具有指示性。
二、怎么提交
因为我们训练出了五个模型,所以在提交给官方测试时,对测试集会有五种预测结果,我们对这五个结果进行平均后保存到submission.csv提交。此时我们的LB分数应该与CV分数相似。
三、模型融合
我们分别交叉训练两次,可以得到两个模型,我们找到一个参数W来融合两个模型的预测。
w * oof_1.predictions + (1-w) * oof_2.predictions
来自 https://www.kaggle.com/c/siim-isic-melanoma-classification/discussion/175614
all = []
for w in [0.00, 0.01, 0.02, …, 0.98, 0.99, 1.00]:
ensemble_pred = w * oof_1.predictions + (1-w) * oof_2.predictions
ensemble_auc = roc_auc_score( oof.target , ensemble_pred )
all.append( ensemble_auc )
best_weight = np.argmax( all ) / 100.
最优W通过上面的代码求出
四、最终的模型
我们参加比赛过程中会有许多的模型产生,选择一个模型,然后遍历其余所有模型用模型融合的方法找到得分最高的一个模型与之相匹配,再用相同的方法从剩余模型中找出与当前确定的两个模型中最匹配的一个模型,知道分数不再提高为止。