Data Blending
数据融合会先将不同来源的数据分别汇总到共享字段,再进行匹配;这既用于 BI 工具,也用于混合式 ML 训练集。
数据混合是指将两个或多个不同来源的数据组合成一个视图或数据集,通常先将各来源的数据汇总到共同的关联字段(例如日期、商店或地区),再进行匹配。这个术语源自商业智能工具:通过混合,来自一个系统的月度营销预算可以与另一个系统的每日销售额并列展示,而无需先将两者加载到同一个数据库中。在机器学习中,数据混合也指将多个数据集混合成一个训练集,例如将真实图像与合成数据混合,或将公开的基准数据集与公司自有摄像头采集的图像混合。
数据混合如何工作#
在 Tableau 的实现方式中,视图使用的第一个数据源是主数据源,它定义视图;每个辅助数据源则单独查询,汇总到关联字段所表示的粒度,再附加到匹配的行上。其结果类似左连接,但处理顺序不同:连接是先合并行再汇总,而混合是先分别汇总各数据源再合并。当数据源的粒度不同时,这种顺序就很重要;下面的 pandas示例展示了每日收入和每月广告支出的情况:
import numpy as np
import pandas as pd
# Source 1: daily revenue from a store database
rng = np.random.default_rng(0)
orders = pd.DataFrame({"date": pd.date_range("2026-01-01", "2026-03-31")})
orders["revenue"] = rng.integers(200, 400, len(orders))
orders["month"] = orders["date"].dt.strftime("%Y-%m")
# Source 2: monthly ad spend from a marketing tool
ads = pd.DataFrame({"month": ["2026-01", "2026-02", "2026-03"], "ad_spend": [3000, 2000, 4000]})
# A row-level join copies each month's spend onto every daily row
joined = orders.merge(ads, on="month")
print(f"ad spend after a row-level join: {joined['ad_spend'].sum():,}")
# A blend aggregates to the linking field (month) first, then combines the sources
blended = orders.groupby("month", as_index=False)["revenue"].sum().merge(ads, on="month", how="left")
blended["revenue_per_ad_dollar"] = (blended["revenue"] / blended["ad_spend"]).round(2)
print(blended)按行连接后显示广告支出为 273,000,而非实际的 9,000,因为每个月的预算都会重复出现在该月 28 到 31 天的每日记录中。数据混合会让每个月只保留一行,并得出每广告美元收入:1 月为 3.17,2 月为 4.06,3 月为 2.41。
数据混合适用于探索性数据分析和数据可视化仪表板;在这些场景中,数据源位于不同系统,而分析问题需要将它们组合起来。关联字段中的值必须完全一致,因此,如果一个数据源中写的是“Lt. Blue”,另一个写的是“Light Blue”,在清理或设置别名之前,两者无法匹配。
混合训练数据集#
机器学习团队会混合数据集,以覆盖任何单一数据源都无法涵盖的更多情况。大型语言模型会使用这类混合数据进行训练:The Pile由 EleutherAI 于 2020 年发布,将从学术论文到代码的 22 个来源混合成一个 825 GiB 的英文文本语料库,并为每个来源设定独立的采样权重。在计算机视觉中,混合来自多台摄像机、多个地区和多个季节的数据集,可以减少对单一环境的过拟合,并缓解数据集偏差。
训练数据混合需要像 BI 数据混合一样进行协调。类别名称必须映射到统一的分类体系,因此,“car”、“automobile”和“vehicle”要么归为同一个类别,要么有意保持区分。数据标注格式和约定必须一致,因为一个数据源可能会围绕被遮挡人物的可见部分绘制边界框,而另一个数据源则会框出完整轮廓;数据清洗会移除在多个数据源中重复出现的图像。团队会将测试数据从部署领域中抽取出来,使指标反映目标领域,而不是混合数据中最容易处理的数据源。
Ultralytics YOLO 在训练时通过数据集 YAML混合数据源,其中 train 字段接受图像目录列表,或包含图像路径的 .txt 文件;因此,单次训练就能同时使用真实数据集和合成数据集,而 val 只列出真实图像。
数据混合与相关术语的区别#
- 数据连接:在单个查询中按匹配键逐行合并记录,并在汇总之前执行;当数据源的粒度不同时,这样做会造成数值重复。
- 数据集成:通常通过提取、转换和加载(ETL)流水线,将多个来源永久整合到具有共享架构的数据仓库或数据湖中。
- 集成学习中的混合:通过在留出集上训练的元模型组合多个模型的预测,这是 Netflix Prize 获奖方案采用的方法,与合并数据源无关。










