SVM与神经网络的Late Fusion实现逻辑及训练数据使用问题咨询
线性SVM与神经网络Late Fusion正确实现流程
你当前的操作存在严重的数据泄露问题:用测试集输出的拼接分数训练融合模型、再用同批数据测试的方式完全错误,得到的性能结果没有任何参考价值,测试集全程不能参与任何模型(包括基模型、融合模型)的训练环节。
正确的实现流程如下:
1. 原始数据集拆分
首先将全量原始数据拆分为三个无重叠的独立子集:训练集、验证集(可选)、测试集,测试集完成拆分后单独封存,直到最终性能评估环节才能调用。
2. 训练两个固定参数的基模型
- 仅使用原始训练集数据训练线性SVM模型,训练完成后固定
clf的所有参数,后续流程不再修改 - 仅使用原始训练集数据训练NN模型,训练完成后固定
Model的所有参数,后续流程不再修改
3. 生成融合模型的训练特征
为了避免基模型在自己的训练数据上输出的概率过拟合,需要用Out-of-Fold(折外)输出构造融合训练集:
对原始训练集做K折交叉拆分,每次取K-1折重新训练对应基模型,用剩下1折数据输出预测概率,循环K次后得到整个原始训练集对应的两类预测结果:
- SVM的
clf.predict_prob输出 - NN的
Model.predict输出
将同一样本的两个基模型输出按维度拼接,作为融合模型的训练特征,对应样本的原始标签作为融合模型的训练标签。
若算力不足无法执行K折交叉验证,也可以将原始训练集额外拆分出10%~20%的独立子集,用两个已固定参数的基模型在该子集上输出预测概率,拼接后作为融合模型的训练数据,效果略差于K折方案,但不会产生数据泄露问题。
4. 训练融合模型
使用上一步生成的拼接特征和对应标签训练融合模型,优先选择逻辑回归、线性回归这类低复杂度模型,避免在低维拼接特征上出现过拟合。
5. 最终性能评估
只有到该环节才能调用封存的测试集:
用两个固定参数的基模型分别在测试集上输出预测概率,按同样规则拼接后输入训练完成的融合模型,得到最终预测结果,和测试集的真实标签计算各类性能指标,该结果才具备参考性。
注意事项
- 两个基模型的输出维度需要对齐,比如二分类任务均输出正类概率,或均输出[负类概率, 正类概率]的二维向量,避免拼接时特征错位
- 若最终融合效果反而不如单个基模型,可优先尝试两个基模型输出的加权平均方案,不需要额外训练融合模型,泛化性通常更稳定
内容的提问来源于stack exchange,提问作者Karla
相关产品推荐
相关产品推荐

