回归问题中,训练集和当前测试集1的目标值分布差距较大(后期会换成测试集2,分布未知),请问这种情况下,有好的处理办法吗?样本并不大,训练集有5000个样本,测试集1有1000个,数据中的特征有40几列


不同情况处理办法都不一样

第一,分布差距大是重要特征数值差距大,比如一个是 0-1,另外一个 0.5-2,如果是这种情况无解,你能做的只能扩大训练集合,因为重要特征一旦偏离,哪怕数学上都是有交集,现实上下文都是差距极大的,这和数据采集流程和规范等非技术问题有关。

第二,重要特征数据差距不大,不太重要的差距较大,这种情况可以屏蔽这些特征,或者利用类似迁移学习 prototype 那种思路约束特征输入不过于偏离训练集。

第三,所有特征数值差距都不大,但是特征之间相关性统计差距大,比如训练集当中 A 和 B 相关性更加强,但是测试集合 A 和 C 的相关性更加强,这对你模型本身高阶组合就要约束,比如上DNN 的话,前期就不是明智的选择。

第四,特征数值差距不大,特征相关性差距也不大,但是目标数值差距过大,这个好办,改变任务设置共同的中间目标,比如你说的目标值是否可以采取相对值,增长率,夏普等,而非绝对值

第五,你心大,感觉差距大,但是懒得论证那里大,这时候,for 循环所有已知模型,找最好的交差。


当然要用迁移学习啦。搜索迁移学习简明手册吧。


这个时候当然要关注一下迁移学习来解决你遇到的问题。迁移学习的研究背景就是应对训练样本与测试样本的分布不一致的:

当目标任务(对应的领域称为目标领域)很难准备足够多的训练数据,此时如果有一个相关任务(对应的领域称为源领域)已经有了大量的训练数据,迁移学习实现把从源领域学习到的东西应用到目标领域上去(源领域的数据和目标领域的数据往往遵循不同的分布)。

我推荐的读物有杨强老师的《迁移学习》

我可以简单介绍一下迁移学习的演算法一般的想法(也参考了上面杨老师的书):

基于样本的迁移学习方法:从源域中筛选出符合目标域数据的相似分布的样本将它们运用于训练以降低新模型的偏差和方差。

基于特征的迁移学习方法:将数据映射到一个特征空间上,在这个特征空间上,源域和目标域样本的分布差异得以缩小

基于模型的迁移学习方法:也称为基于参数的迁移学习(parameter-based transfer learning),其假设是在模型层次上源任务和目标任务共享模型参数等知识。

------------------------

如果你是做这方面的理论研究的,现在比较流行通过深度学习技术来解决迁移学习,可以尝试在这上面做创新工作。如果你只是应用,可以先从简单的基于样本的迁移学习方法开始。


可以使用Adversarial Validation确定验证集。只选择和测试集分布最像的那部分训练数据作为验证集。参考https://www.kdnuggets.com/2016/10/adversarial-validation-explained.html


样本同分布是机器学习有效性的前提。

可以通过train-test的psi稳定性指标对特征进行筛选,对分布不稳定的特征剔除。

特征选择可以参考

Python特征选择(全)机器学习中,特征选择是一个重要步骤,用以筛选出显著特征、摒弃非显著特征。 1 特征选择的目的减少特征(避免维度灾难),提高训练速度,降低运算开销;减少干扰杂讯,降低过拟合风险,提升模型效果;更少的特征,模型可解释性更好;2 特征选择方法特征选…9 赞同 · 0 评论查看完整文章


可参考一下这篇文章:

Covariate Shift - Unearthing hidden problems in Real World Data Science?

www.analyticsvidhya.com图标

提供几种研究的思路。

一是使用影响函数识别差异来源的样本数据,进行删除或其他处理,具体可以看Percy Liang在17年的论文Understanding black-box predictions via influence function,大概是叫这个。缺点是复杂网路影响函数估计效果比较差,而且要在模型已经收敛基础上才能计算。

另一种思路是通过影响函数构造入样概率对数据子抽样,相当于对数据隐性加权纠正分布差异,具体看Less Is Better: Unweighted Data Subsampling via Influence Function这篇。缺点是训练时间长,效果提升不明显(分布差异大的话可能优势更明显),同时也有上一条的局限。

还有一种思路是提供一小个干净的验证集,让演算法学习对样本点赋权,效果似乎比上一种优秀:Learning to reweight examples for robust deep learning。缺点也是训练时间长,但是除了分布差异以外,这种方法还能减少人工调整超参数的时间。


不是应该首先解决为什么差距大的问题吗?我觉得是划分问题,按分布特征划分怎么会差距大呢?也可能我孤陋寡闻了


推荐阅读:
相关文章