创建人工数据的一种直接方法是,从被称为统计分布的、成熟的数学模式中抽取数字。可以把分布看作是描述不同结果出现可能性的规则。如果我们可以用这些规则之一来描述真实数据中的一个特征,或者我们 希望 人工数据遵循特定的模式,我们就可以使用该分布来生成新的数据点。让我们来看看你经常会遇到的两种基础分布。生成等可能性的值:均匀分布想象一下掷一个标准的六面骰子。假设这是一个公平的骰子,那么在任何一次投掷中,从1到6的每个数字都有相同的机会($1/6$)出现。这就是均匀分布的要旨:在一个确定的范围内,每个可能的值都具有相同的可能性。当我们从连续均匀分布生成数据时,我们通常会指定一个最小值($a$)和一个最大值($b$)。然后,这个过程会在$a$和$b$之间随机选择数字,该范围内的任何数字被选中的概率都相同。例如,如果我们 T 生成代表任务完成百分比的人工数据,并且我们没有理由认为任何一个百分比比另一个更可能,我们可以使用0%到100%之间的均匀分布。或者,如果我们想模拟1到5分的用户满意度评分,假设任何分数都同样可能(一个简化的假设!),我们可以从整数1、2、3、4、5中均匀采样。这是一个可视化示例。我们使用0到10之间的均匀分布生成了1000个随机数。注意直方图中的条形高度大致相同,这表示每个小区间内的数字出现次数大致相等。{ "layout": { "title": "均匀分布 (0到10)", "xaxis": { "title": "值" }, "yaxis": { "title": "频率" }, "bargap": 0.1, "template": "simple_white" }, "data": [ { "type": "histogram", "x": [0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 0.8, 1.8, 2.8, 3.8, 4.8, 5.8, 6.8, 7.8, 8.8, 9.8, 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 8.1, 9.1, 0.9, 1.9, 2.9, 3.9, 4.9, 5.9, 6.9, 7.9, 8.9, 9.9, 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 8.2, 9.2, 0.7, 1.7, 2.7, 3.7, 4.7, 5.7, 6.7, 7.7, 8.7, 9.7, 0.3, 1.3, 2.3, 3.3, 4.3, 5.3, 6.3, 7.3, 8.3, 9.3, 0.6, 1.6, 2.6, 3.6, 4.6, 5.6, 6.6, 7.6, 8.6, 9.6, 0.4, 1.4, 2.4, 3.4, 4.4, 5.4, 6.4, 7.4, 8.4, 9.4], "marker": {"color": "#339af0"}, "name": "频率", "xbins": {"start": 0, "end": 10, "size": 1} } ] }一个直方图,显示了从0到10的均匀分布中采样值的频率。每个值范围的频率计数相似。生成围绕平均值集中的值:正态分布许多自然现象都倾向于围绕一个平均值聚集。比如成年人的身高:大多数人接近平均身高,而极高或极矮的人则很少。这种模式通常由正态分布来描述,也被称为高斯分布或“钟形曲线”。正态分布由两个参数定义:均值 ($ \mu $):这是数据点倾向于聚集的中心值。它代表了钟形曲线的峰值。标准差 ($ \sigma $):它衡量数据的离散程度或分散性。较小的标准差表示数据点紧密地围绕均值分布(钟形较窄),而较大的标准差表示数据分布更分散(钟形较宽)。值 $ \sigma^2 $ 被称为方差。当我们从正态分布生成数据时,我们会指定所需的均值($ \mu $)和标准差($ \sigma $)。生成过程会产生最可能接近 $ \mu $ 的数字。随着数值与均值的距离增加,其出现可能性会逐渐降低,呈现出特有的钟形。例如,如果我们知道标准化考试的平均分是100,标准差是15,并且我们认为分数服从正态分布,我们可以使用这些参数生成人工考试分数。大多数生成的分数会接近100,而85或115左右的分数会较少,更远的分数则更少。这是1000个从均值($ \mu $)为5、标准差($ \sigma $)为1.5的正态分布生成数字的可视化。你可以清楚地看到钟形,其中接近5的值出现频率最高。{ "layout": { "title": "正态分布 (均值=5, 标准差=1.5)", "xaxis": { "title": "值" }, "yaxis": { "title": "频率" }, "bargap": 0.1, "template": "simple_white" }, "data": [ { "type": "histogram", "x": [5.0, 6.5, 3.5, 5.1, 4.9, 5.2, 4.8, 5.5, 4.5, 7.0, 3.0, 6.0, 4.0, 5.3, 4.7, 5.8, 4.2, 6.2, 3.8, 5.0, 5.0, 4.9, 5.1, 5.0, 4.8, 5.2, 5.1, 4.9, 5.0, 5.0, 3.9, 6.1, 4.1, 5.9, 4.3, 5.7, 4.4, 5.6, 4.6, 5.4, 2.5, 7.5, 3.2, 6.8, 4.0, 6.0, 5.0, 5.0, 5.1, 4.9, 4.5, 5.5, 5.0, 5.0, 5.2, 4.8, 6.3, 3.7, 4.7, 5.3, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 4.1, 5.9, 4.2, 5.8, 4.3, 5.7, 4.4, 5.6, 4.5, 5.5, 4.6, 5.4, 4.7, 5.3, 4.8, 5.2, 4.9, 5.1], "marker": {"color": "#20c997"}, "name": "频率", "xbins": {"size": 0.5} } ] }一个直方图,显示了从均值$ \mu=5 $、标准差$ \sigma=1.5 $的正态分布中采样值的频率。频率在均值附近最高,并随着距离的增加而降低,形成钟形。为什么要使用分布?从统计分布中采样是人工数据生成中的一种基本技术,因为:它很简单:从均匀分布和正态分布等标准分布生成数字,计算上很容易,并且得到编程库的良好支持。它提供控制:你可以精确地定义所生成数据的特征(如范围、平均值、离散程度)。它易于理解:这些参数(均匀分布的$a, b$;正态分布的$ \mu, \sigma $)具有明确的意义。它是一个构建模块:在转向更复杂的生成方法之前,理解这些基本分布是必要的。需注意的事项"尽管对于简单情况很有用,仅基于单个分布生成数据存在局限性。数据集通常在不同特征(列)之间存在复杂的关系。例如,年龄和收入可能相关;如果独立地使用不同的分布生成它们,可能会忽视这种关联。在下一章讨论生成表格数据时,我们将探讨处理此类依赖关系的方法。"目前,主要的结论是,统计分布提供了一种基本方法,可以根据数学规则生成具有特定、可控属性的人工数据点。Python的NumPy库等常用工具提供了numpy.random.uniform()和numpy.random.normal()等函数,可以轻松地从这些分布中采样,你将在实践操作部分有机会尝试这些。