正文
为和比赛保持一致,本次分享在描述相关算法时,仅考虑两个领域间的迁移学习,即将一个源领域(记为 Ds)中的知识,迁移到一个目标领域(记为 Dt)中。源领域和目标领域分别对应的学习任务记为 Ts 和 Tt。以比赛为例,业务 A 对应源领域 Ds 和学习任务 Ts,业务 B 对应目标领域 Dt 和学习任务 Tt。
本次比赛的解题流程如下图所示:首先,我们对原始数据预处理并提取特征,然后运用迁移学习模型对问题建模,最后将不同的模型结果融合,得到最终的预测结果。因特征工程和业务强相关,不同的问题对应的特征提取方法可能相差很大,为了最大化本次解决方案的可扩展性,在参赛过程中,我们并未在特征工程上花费较多精力,仅是简单的将所有特征作为连续值特征处理和缺失值填充。
图 1 解题流程
根据 Sinno Jialin Pan 和 Qiang Yang 在 TKDE 2010 上的文章,可将迁移学习算法,根据所要迁移的知识表示形式(即 “what to transfer”),分为四大类:
1)基于样本的迁移学习(instance-transfer);
2)基于参数的迁移学习(parameter-transfer);
3)基于特征表示的迁移学习(feature-representation-transfer);
4)基于关系知识的迁移(relational-knowledge-transfer)。
其中,基于关系知识的迁移认为样本之间具有相关性,而非独立同分布,如知识图谱,主要应用统计关系学习的方法如马尔科夫逻辑网(markov logic network),不在我们本次分享的范围内。我们将结合比赛,重点阐述前三类方法。
基于样本的迁移学习是通过从源领域中,选取对目标领域建模有用的样本,和目标领域的样本一起使用,来实现迁移学习的效果。在此我们分享两种方法:
1)通过提升(boosting)算法,对样本设置不同权重;
2)通过一定的过滤规则,只选取和目标领域相近的样本。
第一种方法的代表性工作为 TrAdaBoost,第二种方法是我们从 PU-Learning 中借鉴而来,记为 SPY。
“挑肥拣瘦”的 TrAdaBoost
TrAdaBoost 是戴文渊等人基于 AdaBoost 算法,在 ICML 2007 上提出的一种针对迁移学习的提升算法。它适用于源领域 Ds 和目标领域 Dt 均有标签信息,且特征空间和目标空间均一致,但 Ds 和 Dt 中样本分布不一致的情况。与 AdaBoost 相似,它需要首先选择一种基学习器(base learner),然后根据之前一些基学习器的表现,来训练当前的基学习器,并迭代的调整样本权重。和 AdaBoost 主要区别在于:
-
TrAdaBoost 的输入是 Ds 和 Dt 对应的两个数据集,并从 Ds 中只选取对学习任务 Tt 最有用的知识;
-
TrAdaBoost 在计算模型误差时,仅考虑在 Dt 上的误差;
-
TrAdaBoost 在 Ds 和 Dt 中使用不同的样本调权方式;
-
TrAdaBoost 仅使用学习到的所有基学习器中,后训练的半数基学习器来预测模型效果。
关于该算法的更多细节和理论可参阅对应论文。
在应用 TrAdaBoost 解决赛题时,我们发现:样本的初始权重设置和基分类器选取比较关键。初始权重设置是较强的先验信息,而且,如果初始权重设置不当,也会影响计算稳定性。我们可以通过不同领域的样本比例,或根据不同类别样本对应的比例,或综合考虑前二者来设置初始权重。另外,基分类器的选取也会影响迭代轮数、计算稳定性和模型最终效果。在本次比赛时,我们最后选取了梯度提升机(GBM)作为基学习器。和其他选手交流后,发现最优初始权重设置为:Ds 中初始权重均设为 1;Dt 中正样本权重设为 6,负样本权重设为 3。
“里应外合”的 SPY