news 2026/4/30 11:15:18

一只菜鸟学机器学习的日记:入门分布偏移

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一只菜鸟学机器学习的日记:入门分布偏移

入数据分布(环境)时,若基于模型自身的决策,可能会破坏模型。

如果训练集、测试集的差异很大,就是发生了 分布偏移 。

分布偏移分为 3 种:

协变量偏移:特征分布变化,但特征与标签映射(条件分布)不变。换句话说,输入数据的样貌改变,决定结果的规则未变。

如在判断猫、狗模型中,虽然决定判别的因素始终不变(脸型、胡须、尾巴),但来自写实与动漫这些因素有不同的分布特征。

标签偏移:标签分布发生变化, 但是条件分布不变。各类结果出现的频率、占比改变了,但是结果对应的特征不变。

比如春秋季节流感高发,但是如果用这数据预测夏季可能会导致大量假阳性。

概念偏移:条件分布,也就是映射改变了。

如现在扁平化、Flutter UI的美学设计风靡,而千禧年间的铬核美学色彩搭配设计逐渐过时。

数量偏移:不同信息来源提供的数据信息量差比巨大。就是各数据源的权重因数据量差别过大而不均匀。

我们先认识一下名词:

协变量:一个独立变量,不受实验者操控即不可控,但仍影响结果,如一个人的性别。

经验风险:模型对所有训练样本的拟合能力,是局部的、可求的。计算后会使用合适的优化方法(如梯度下降法)来最小化这个损失,从而获得具有某种最优的模型参数。

期望风险:模型对所有样本(训练样本+测试样本+等待预测的未知样本)的拟合能力,是全局的、不可求的。

真实分布:真实应用场景中的该协变量和标签的组合常见程度。

标签分布:每个标签在数据集中出现的概率。

先说说我们应该如何解决协变量偏移呢?

我们现在想要测量一下期望风险

\[E_{p(\mathbf{x}, y)} [l(f(\mathbf{x}), y)] = \int\int l(f(\mathbf{x}), y) p(\mathbf{x}, y) \;d\mathbf{x}dy \]

这里的 \(p(\mathbf x,y)\) 是真实分布,然而,我们的观测值 \(\mathbf x_i\) 是从训练数据中得出的,并不是从目标分布中得出的。所以我们最开始使用 \(q(\mathbf x)\) ,即源分布。不过,我们可以在真实风险的计算中,随时更正这个概率:

\[\begin{aligned} \int\int l(f(\mathbf{x}), y) p(y \mid \mathbf{x})p(\mathbf{x}) \;d\mathbf{x}dy = \int\int l(f(\mathbf{x}), y) q(y \mid \mathbf{x})q(\mathbf{x})\frac{p(\mathbf{x})}{q(\mathbf{x})} \;d\mathbf{x}dy \end{aligned} \]

也就是说我们可以用重要性采样重新衡量每个数据样本的权重:

\[\beta_i \stackrel{\mathrm{def}}{=} \frac{p(\mathbf{x}_i)}{q(\mathbf{x}_i)} \]

这里 \(p(x_i)\) 是目标分布,来自真实生产环境;

\(q(x_i)\) 是源分布,来自我们当前实际拥有的,如公开数据集、采集的数据。

因此如果一个 \(x\) 在 \(p(x)\) 中很常见,但是在 \(q(x)\) 中很罕见, \(\beta_i\) 权重会很大。

将其作为加权,来训练模型,就是

\[\mathop{\mathrm{minimize}}_f \frac{1}{n} \sum_{i=1}^n \beta_i l(f(\mathbf{x}_i), y_i) \]

但是很显然,我们无法直接计算得到前后分布的概率比率 \(\beta\) ,我们可以这样估计:

先从两个分布中抽取数量相同的样本,真实的分布\(p\),训练集\(q\),这里我们只需要特征\(\mathbf x\)。

我们这里使用对数几率回归,一种用于二元分类的Softmax回归的特例。

设置一个 \(flag\) ,用\(1\)表示\(p\)中的数据,用\(-1\)表示\(q\)中的数据。可以把现在的数据集想象为一个很大的unordered_map<sample, flag>。则混合数据集中的概率可表示为:

\[\begin{split} P(flag=1 \mid \mathbf{x}) &= \frac{p(\mathbf{x})}{p(\mathbf{x})+q(\mathbf{x})} \\ \frac{P(flag=1 \mid \mathbf{x})}{P(flag=-1 \mid \mathbf{x})} &= \frac{p(\mathbf{x})}{q(\mathbf{x})}=\beta_i\end{split} \]

用 \(c\) 修正一下过大的权重,

\[\beta_i=min(exp(log(\frac{p(\mathbf x)}{q(\mathbf x)})),c) \]

当然,以上推导成立的条件是,目标分布中的样本不能从未在训练集中出现过,否则这个 \(\beta _k\) 将会趋近于正无穷。

我们应该如何解决标签偏移呢?

运用什么协同量偏移的例子,我们依旧可以得到:

\[\beta_i \stackrel{\mathrm{def}}{=} \frac{p(y_i)}{q(y_i)} \]

我们首先创建一个 \(k \times k\) 的混淆矩阵 \(\mathbf{C}\) ,列为标签,行为模型预测,即 \(c_{i, j}\) 表示真实标签为 \(j\) 时被模型预测为 \(i\) 的样本数量所占的比例。

然后就可以得到计算模型在测试集上的平均预期分布 \(\mu(\hat y)\) 的公式:

\[\mu(\hat{y}_i)=\sum_{j=1}^k c_{ij} p(y_j) \]

例如,若分类器完美,\(\mathbf C\) 就是单位矩阵,平均预期分布=真实分布。

如上, \(p(y_j)\) 是真实标签分布,换句话说,我们完全可以反推真实分布 \(p(y_i)\):

\[p(\mathbf{y}) = \mathbf{C}^{-1} \mu(\hat{\mathbf{y}}) \]

然后自然而然就可以计算出权重比率 \(\beta\) 了。

这节很抽象,让我们简单举个例子吧:

我们有一个简单的二分类问题,诊断流感。

源域(春秋季):流感高发期。假设在训练数据中,流感病例占30%,非流感病例占70%。即:

q(流感) = 0.3

q(非流感) = 0.7

目标域(夏季):流感低发期。真实标签分布中,流感病例仅占5%,非流感占95%。即:

p(流感) = 0.05

p(非流感) = 0.95

假设我们在源域(春秋季)上训练一个流感分类器,并在一个带标签的验证集上评估它。验证集包含100个样本(30个流感,70个非流感),分类器的预测结果如下:

在30个流感病例中:

27个被正确预测为流感(真阳性) ····0.9

3个被错误预测为非流感(假阴性) ····0.1

在70个非流感病例中:

66个被正确预测为非流感(真阴性) ····0.943

4个被错误预测为流感(假阳性) ····0.057

\[\mathbf C= \begin{equation} \left[ \begin{array}{ccc} 0.9 & 0.057 \\ 0.1 & 0.947 \\ \end{array} \right] \end{equation} \]

在目标域(夏季),我们无法直接获得真实标签,但我们可以运行分类器得到预测分布。假设在夏季数据上,分类器的预测结果为:

\(\mu(预测流感) = 0.15\)(即15%的样本被预测为流感)

\(\mu(预测非流感) = 0.85\)(即85%被预测为非流感)

这个预测分布 \(\mu(\hat y)\) 并不等于真实分布\(p(y)\)。我们可以使用公式\(p(y) = C^{-1} \mu(\hat y)\)来估计真实分布,算出 \(p(流感) ≈ 0.11, p(非流感) ≈ 0.89\)

就可以算出:

对于流感样本:\(\beta_{流感} = \frac{p(流感)}{q(流感)} = \frac{0.05}{0.3} ≈ 0.1667\)

对于非流感样本:\(\beta_{非流感} = \frac {p(非流感)}{q(非流感) }= \frac{0.95}{0.7} ≈ 1.3571\)

所以,我们应用 \(\beta\) 权重后的训练过程:

假设批量大小 \(B = 10\),按源域分布:

流感样本:\(10 \times 0.3 = 3\) 个

非流感样本:\(10 \times 0.7 = 7\) 个

损失函数也会在加权后改变:

\[\begin{align} L_{\text{原始}} &= \frac{1}{10} \sum_{b=1}^{10} \ell_{\text{CE}}(y_b, \hat{y}_b) \\ L_{\text{加权}} &= \frac{1}{10} \left[ 0.1667 \cdot \sum_{b=1}^{3} \ell_{\text{CE}} + 1.3571 \cdot \sum_{b=4}^{10} \ell_{\text{CE}} \right] \end{align} \]

而根据 \(\beta\) 加权也改变了梯度贡献:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 6:38:16

最新版小红书私信协议

更新时间&#xff1a;2025-12-17使用私信协议可实现群发私信&#xff0c;懂的都懂&#xff0c;就不多说了测试给陌生人发送私信&#xff1a;

作者头像 李华
网站建设 2026/4/27 17:18:15

国内首个!千问APP接入万相2.6,实现“角色合拍”能力

来源&#xff1a;维度网-全球简讯 12月16日&#xff0c;阿里千问APP同步上线最新视频生成模型万相2.6&#xff0c;并向所有用户免费开放。万相2.6是国内首个支持角色扮演功能的视频模型&#xff0c;具备音画同步、多镜头生成及声音驱动等多种功能。基于模型核心能力&#xff0…

作者头像 李华
网站建设 2026/5/1 8:39:26

.NET 实现雪花算法:高效生成分布式唯一 ID

雪花算法&#xff08;Snowflake&#xff09;Twitter 开源的一种分布式 ID 生成算法能够生成全局唯一的 64 位整数 ID。在分布式系统中&#xff0c;唯一 ID 的生成至关重要&#xff0c;它广泛应用于数据库主键、消息队列、订单号等场景。具体实现可参考NetCoreKevin中的Kevin.Sn…

作者头像 李华
网站建设 2026/4/18 17:14:51

LFM线性调频和脉冲压缩的理论总结与仿真

一、背景使用雷达探测物体时&#xff0c;雷达发射电磁波&#xff0c;电磁波撞到物体后反射回来&#xff0c;雷达接收回波信号来判断物体的位置。想象一下&#xff0c;如果雷达发出的信号非常弱&#xff0c;信号还没有到达物体处或者回波还没回来就衰减差不多了&#xff0c;雷达…

作者头像 李华
网站建设 2026/5/1 8:40:09

APP如何快速上架Apple Store:完整上架流程与常见问题解析

APP如何快速上架Apple Store?Apple Store上架流程及常见问题 在移动应用开发的征程中&#xff0c;将 APP 成功上架 Apple Store 是至关重要的一环。这不仅意味着应用能够触达广大 iOS 用户群体&#xff0c;更是对应用质量与合规性的一种认可。本文将深入探讨 APP 上架 Apple S…

作者头像 李华
网站建设 2026/5/1 7:19:30

医药类电商平台搭建公司有哪些?

说到医药类电商平台搭建公司&#xff0c;我们之前讲过几点判断的方法&#xff0c;我们以此来分析商联达&#xff1a;首先&#xff0c;我们看商联达的公司规模商联达成立有多年时间&#xff0c;技术总部在北京、分别在上海、广州、深圳、南京、成都等地都设立了分公司&#xff0…

作者头像 李华