数据集的两种漂移


今天闲逛 github 发现了一个很有意思的project: divelab/GOOD: GOOD: A Graph Out-of-Distribution Benchmark

该项目里的概念 OOD(Out-of-Distribution) 值得关注,后面我又浅浅调研了一下,现做小结如下:

数学定义

首先,我们回顾一下有监督机器学习的任务。我们可以将其抽象为:从输入 X ∈ X X\in\mathcal{X} XX 预测输出 Y ∈ Y Y\in\mathcal{Y} YY。二者的联合分布 P ( Y , X ) P(Y,X) P(Y,X) 是我们所关心的,它可以被写为: P ( Y ∣ X ) P ( X ) P(Y|X)P(X) P(YX)P(X)

其中 P ( X ) P(X) P(X) 是通常意义下的输入的分布, P ( Y ∣ X ) P(Y|X) P(YX) 可以看作是机器学习模型需要学习的映射关系, P ( Y , X ) P(Y,X) P(Y,X) 是最终的 target 。

第一种数据集漂移是concept drift(shift),概念空间的漂移。这种情况下 P t r a i n ( X ) = P t e s t ( X ) P^{\mathrm{train}}(X)= P^{\mathrm{test}}(X) Ptrain(X)=Ptest(X), 但是 P t r a i n ( Y ∣ X ) ≠ P t e s t ( Y ∣ X ) P^{\mathrm{train}}(Y|X)\neq P^{\mathrm{test}}(Y|X) Ptrain(YX)=Ptest(YX)

第一种数据集漂移是covariate drift(shift),协变量的漂移。这种情况下 P t r a i n ( X ) ≠ P t e s t ( X ) P^{\mathrm{train}}(X)\neq P^{\mathrm{test}}(X) Ptrain(X)=Ptest(X), 但是 P t r a i n ( Y ∣ X ) = P t e s t ( Y ∣ X ) P^{\mathrm{train}}(Y|X)=P^{\mathrm{test}}(Y|X) Ptrain(YX)=Ptest(YX)

通俗理解

我在下面这个网站里找了一个非常利于理解的图:
https://www.iguazio.com/glossary/concept-drift/

在这里插入图片描述

从左至右依次是a,b,c

第一个漂移:concept drift,很容易理解 (图a,b) 。

P t r a i n ( X ) = P t e s t ( X ) P^{\mathrm{train}}(X)= P^{\mathrm{test}}(X) Ptrain(X)=Ptest(X) 是类似的,但同样的 x x x 坐标得到了不同的 y y y 值。也就是说,映射 y = f ( x ) y=f(x) y=f(x) 中的 f f f 变了(图中的虚线)。我们在训练集上训练的模型在实际应用场景下作出了错误的预测,这个错误是因为映射学习的有问题。

这是所有有监督学习的死穴,也是相关研究者感到无能为力的情景。因为这种情况下,我们的训练集是错误的,无论模型怎么变化,我们永远无法拟合出一个正确的模型。

第二个漂移:covariate drift 是图 a 和 c 之间的区别。

映射 y = f ( x ) y=f(x) y=f(x) 中的 f f f 并未发生改变(图中的虚线),这表明, P t r a i n ( Y ∣ X ) = P t e s t ( Y ∣ X ) P^{\mathrm{train}}(Y|X)=P^{\mathrm{test}}(Y|X) Ptrain(YX)=Ptest(YX) 是不变的。但是 P t r a i n ( X ) ≠ P t e s t ( X ) P^{\mathrm{train}}(X)\neq P^{\mathrm{test}}(X) Ptrain(X)=Ptest(X) 发生了显著的变化,在理想情况下,由于映射并未发生改变,我们的模型依然会做出正确的预测,比如图 a 中的模型在图 c 中做出了完全正确的分类预测。

但真实情况要更加复杂,这种漂移可以翻译为“训练重点的不同”。在此例中,我们的训练输入分布 P t r a i n ( X ) P^{\mathrm{train}}(X) Ptrain(X) 是相对广谱的,但测试输入分布仅局限于特定领域 P t e s t ( X ) P^{\mathrm{test}}(X) Ptest(X)。一个针对普通(general)领域训练的模型,应用于一个特殊(specific)领域时,测试精度往往会下降。

与第一种漂移不同的是,covariate drift 是可以通过提高模型泛化能力解决的。

OOD 领域在关注什么?

机器学习公司怎么炒概念

经过前两个小节的介绍,我想读者已经大概理解并学会了如何区分两种数据集漂移的概念。我本人并不是这个领域的研究人员,下面提供一些个人见解,纰漏之处请见谅。

首先,两种数据集漂移是完全不同的概念,但经常被混淆。比如,很多机器学习公司会打广告:

传统的机器学习模型是基于静态数据集训练的,无法满足生产生活中,动态的使用场景,而我们公司可以根据实时数据动态调整模型!

所谓静态,就是训练一次就不再调整了。所谓动态,就是部署以后,根据模型的实时反馈进行微调。显然后种模型更具有吸引力。

在介绍动态模型的优越性时,这些公司往往会拉出数据集漂移的概念,有的说是 concept drift, 有的用 covariate drift 举例。(下两链接)

https://www.seldon.io/what-is-covariate-shift

https://www.iguazio.com/glossary/concept-drift/

两种说法从原理上都说得通,都是实时机器学习模型的优势领域。但这些公司的宣传都多多少少有点模糊,没有说得很清楚。

学术界的关注点

在 good 的 paper 中: divelab/GOOD: GOOD: A Graph Out-of-Distribution Benchmark

作者认为,我们在进行模型训练前往往会将手中的数据集划分为训练集、验证集和测试集。这种划分往往是随机的。然而,数据集中的不同数据点之间是存在 OOD 的,这种粗暴的随机划分的方式,无法有效检验 OOD 的数据点。

作者提出,通过设立一定的规则,我们可以按照 concept drift 和 covariate drift 两种方式,对已有数据集进行人为划分,从而体现出,数据集和测试集之间分布的差异。

作者指出,这种形式的划分可以有效检验模型的泛化能力。作者在设计数据集时定下了两条原则:

  1. 确保现有模型在 IID(independent and identically distributed) 测试集和 OOD(Out-of-Distribution) 测试集上存在显著差异。
  2. 确保人为制造的数据集漂移是可以 solvable 的

据我本人粗浅的理解,第二条对于 concept drift 是不成立的,因为 concept drift 本身就是指,训练集的分布是错误的,数据集的偏差无法通过训练模型来修正。

作者也在原文中花了很大的篇幅去打圆场,感兴趣的读者可以自行查看。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值