尽管通过从统计分布(如我们之前看到的正态分布或均匀分布)中采样来生成数据很有用,但它通常无法体现真实数据中已知的具体限制或关系。设想生成客户数据;简单地从正态分布中采样年龄可能会产生负数年龄,这不合理。我们需要方法来为生成的数据设定结构和逻辑。这一点上,基于规则的系统就发挥作用了。基于规则的系统提供了一种不同的方式:我们不纯粹依赖统计概率,而是定义合成数据必须遵守的明确规则、条件或逻辑。这就像为生成每个数据点提供一份“食谱”或一系列“指示”,确保它满足特定要求。规则的设定基于规则的系统,其核心在于通过遵循预设的限制集合来生成数据。这些规则可以有多种形式:值限制: 指定某个特征的允许范围或集合。例子: 生成年龄,使其满足 $18 \le 年龄 \le 99$。例子: 生成产品类别,使其必须是 {'电子产品', '服装', '日用百货'} 之一。条件逻辑(如果-则): 定义不同特征之间的依赖关系。例子: 如果账户类型是'免费',则月度支出必须是 $0$。例子: 如果国家是'美国',则邮政编码格式必须符合美国5位或ZIP+4格式。数学关系: 定义连接特征的公式。例子: 总价 = 数量 * 单价 * (1 - 折扣率)。这些规则直接将领域知识或期望的特性写入生成过程。实际操作方式使用基于规则的系统生成数据通常包括:规则集的设定: 明确规定数据必须满足的所有条件。这通常是核心一步,需要仔细思考数据结构。生成基础值: 通常,你可能会从生成初始值开始(可能是随机的或来自简单分布)。应用规则: 根据规则检查生成的值并根据需要进行调整,或者重新生成值,直到它们满足限制。比如,为了生成合成用户资料:规则1: 年龄必须在18到75之间。规则2: 国家必须是'美国'或'加拿大'。规则3: 如果国家是'美国',州必须是有效的美国州缩写(例如,'CA'、'NY')。规则4: 如果国家是'加拿大',省份必须是有效的加拿大省份缩写(例如,'ON'、'QC')。规则5: 如果年龄小于21岁并且国家是'美国',是否购买过酒精必须是'否'。你可能首先生成一个随机的年龄、国家和地点。然后,你会按顺序应用这些规则:年龄有效吗?国家有效吗?根据国家,州/省份是否在列表中有效?年龄/国家组合是否符合酒精购买规则?如果任何规则不符合,你可能会丢弃该数据点并重试,或者调整冲突的值。简单规则的图示我们可以用图来展示基于规则的简单决策过程。比如,根据用户的订阅类型决定其状态。digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="sans-serif", fontsize=10]; edge [fontname="sans-serif", fontsize=10]; "开始" [shape=ellipse]; "订阅类型?" [shape=diamond]; "状态 = 活跃" [color="#40c057", fontcolor="#ffffff", style=filled]; "状态 = 非活跃" [color="#fa5252", fontcolor="#ffffff", style=filled]; "状态 = 试用" [color="#ff922b", fontcolor="#ffffff", style=filled]; "开始" -> "订阅类型?"; "订阅类型?" -> "状态 = 活跃" [label=" 付费 "]; "订阅类型?" -> "状态 = 试用" [label=" 试用 "]; "订阅类型?" -> "状态 = 非活跃" [label=" 过期/无 "]; }一张简单的图表,说明了规则如何根据订阅类型决定用户状态。基于规则系统的优缺点基于规则的生成方式有一些优点,特别是对于简单任务而言:明确控制: 你可以直接控制生成数据的属性,确保满足特定限制。领域知识融入: 易于融入已知事实或业务逻辑(例如,物理限制、法规)。简单性(适用于某些情况): 当关系清晰且不多时,设定规则可能很直接。确保有效性: 可以保证生成的数据点符合设定的逻辑(例如,没有年龄小于0的客户)。然而,也存在一些局限:复杂性: 设定和管理大量相互关联的规则可能变得非常复杂且容易出错。脆弱性: 如果规则过于僵硬,生成的数据可能缺乏真实数据中存在的自然变化和未预料到的模式。它可能无法很好地捕捉微小的统计相关性。繁琐: 手动指定每条规则可能很耗时,特别是对于具有许多特征或复杂关系的数据集。发现能力: 基于规则的系统是根据已知规则生成数据的。它们无法轻易发现或复制真实数据中存在但你未明确设定的隐藏模式。基于规则的系统为生成具有特定结构和限制的合成数据提供了一种基本方法。当你需要直接执行已知逻辑或领域知识时,它们特别有用。通常,它们与统计方法结合使用,以达到两全其美的效果:既确保有效性,又保留一些统计特性。在后续内容中,我们将看到这些基本思想如何应用于表格数据和图像等不同数据类型。