news 2026/4/16 21:43:48

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

作者头像

张小明

前端开发工程师

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/15 18:44:09

收藏!30+程序员别再内耗:零基础转大模型,2个月拿2W+offer

还在纠结要不要转行&#xff1f;捧着大模型理论资料却迟迟不动手&#xff1f;作为一名30北漂程序员&#xff0c;我用2个月时间完成零基础转行&#xff0c;成功拿下月薪2W的大模型岗位offer。今天把我的真实经历和避坑指南全分享出来&#xff0c;尤其适合想跨界的程序员和刚入门…

作者头像 李华
网站建设 2026/4/16 14:02:42

Cocos Creator三消游戏开发终极指南:从零到精通

Cocos Creator三消游戏开发终极指南&#xff1a;从零到精通 【免费下载链接】kaixinxiaoxiaole 使用cocos creator 编写的三消游戏 开心消消乐 项目地址: https://gitcode.com/gh_mirrors/ka/kaixinxiaoxiaole 你是不是也想开发一款像开心消消乐一样风靡的三消游戏&…

作者头像 李华
网站建设 2026/4/16 19:51:57

HunyuanVideo重磅开源:重新定义视频生成开发范式

HunyuanVideo重磅开源&#xff1a;重新定义视频生成开发范式 【免费下载链接】HunyuanVideo 项目地址: https://ai.gitcode.com/hf_mirrors/tencent/HunyuanVideo 在文生视频技术快速迭代的当下&#xff0c;开源与闭源模型的性能鸿沟始终是制约行业发展的关键瓶颈。腾讯…

作者头像 李华
网站建设 2026/4/16 12:15:23

如何高效使用TestDisk:从入门到精通的完整操作指南

当硬盘分区意外丢失、重要文件无法访问时&#xff0c;你是否曾感到束手无策&#xff1f;TestDisk作为一款功能强大的开源数据恢复工具&#xff0c;能够帮助你在数据灾难中快速找回丢失的文件&#xff0c;修复受损的文件系统。无论你是技术新手还是IT专业人士&#xff0c;掌握这…

作者头像 李华
网站建设 2026/4/15 23:07:35

如何用Moonlight for Tizen实现智能电视游戏串流:完整操作指南

如何用Moonlight for Tizen实现智能电视游戏串流&#xff1a;完整操作指南 【免费下载链接】moonlight-chrome-tizen A WASM port of Moonlight for Samsung Smart TVs running Tizen OS (5.5 and up) 项目地址: https://gitcode.com/gh_mirrors/mo/moonlight-chrome-tizen …

作者头像 李华
网站建设 2026/4/16 14:06:33

YY/T0681.15 标准与医疗器械注册

一、标准基本信息YY/T 0681.15-2019《无菌医疗器械包装试验方法 第 15 部分&#xff1a;运输容器和系统的性能试验》&#xff0c;是我国医疗器械包装领域的重要行业标准&#xff0c;由国家药品监督管理局于 2019 年 10 月 23 日发布&#xff0c;2020 年 10 月 1 日实施。该标准…

作者头像 李华