趋近智
我们已经讨论了使用统计分布和基于规则的系统生成数据的一般思路。现在,让我们将这些思路付诸实践,创建一些简单的数值人工数据。数值数据代表数量或测量值(如年龄、温度或价格),是许多数据集中不可或缺的组成部分。
生成人工数值数据最直接的方法之一是从已知的统计分布中抽取样本。可以将分布视为一个蓝图,它描述了不同数值出现的可能性。
假设您需要为模拟生成客户年龄,但您只知道年龄范围在18到80岁之间,并且没有任何理由认为该范围内某个年龄比其他年龄更有可能出现。均匀分布对此非常适用。它为指定范围 [a,b] 内的所有值分配相同的概率。
要从均匀分布生成数字,您需要定义最小值 (a) 和最大值 (b)。然后,您可以在此区间内随机选择数字,每个数字被选中的机会相同。
例如,要生成18到80岁之间的5个模拟年龄:
# 伪代码示例
import random
min_age = 18
max_age = 80
number_of_samples = 5
synthetic_ages = []
for _ in range(number_of_samples):
# 生成 min_age 和 max_age 之间的随机浮点数
age = random.uniform(min_age, max_age)
# 通常,我们可能需要整数(如年龄)
synthetic_ages.append(int(age))
print(synthetic_ages)
# 可能的输出: [45, 22, 71, 58, 30]
如果我们以这种方式生成大量数据点,它们将相当均匀地分布在18-80的范围内。
如果您需要生成围绕某个中心值聚集的数据怎么办?例如,模拟成年男性的身高,他们的身高往往围绕平均身高波动。正态分布(常称为高斯分布或钟形曲线)在此非常适用。
要使用正态分布,您需要两个参数:
让我们生成5个模拟身高(厘米),假设均值 (μ) 为175厘米,标准差 (σ) 为7厘米。
# 伪代码示例
import random
mean_height = 175
std_dev_height = 7
number_of_samples = 5
synthetic_heights = []
for _ in range(number_of_samples):
# 从正态分布生成随机数
height = random.gauss(mean_height, std_dev_height)
# 四舍五入到合理的精度,例如一位小数
synthetic_heights.append(round(height, 1))
print(synthetic_heights)
# 可能的输出: [178.2, 166.5, 175.1, 184.0, 172.9]
大多数生成的升高将接近175厘米,而较少的值会出现在较远的位置。生成许多值将产生特征性的钟形。
一个直方图,显示了使用均值为175厘米、标准差为7厘米的正态分布生成的模拟身高。大多数值都聚集在175厘米附近。
还存在其他分布(如用于等待时间的指数分布,或用于计数的泊松分布),但均匀分布和正态分布是生成简单数值数据的优秀起点。
有时,数值数据遵循特定的模式或依赖于其他值。基于规则的系统允许您明确定义这些模式。
最简单的规则是生成顺序数字。这对于创建唯一标识符(ID)来说很常见。
# 伪代码示例
start_id = 1001
number_of_records = 5
synthetic_ids = []
for i in range(number_of_records):
synthetic_ids.append(start_id + i)
print(synthetic_ids)
# 输出: [1001, 1002, 1003, 1004, 1005]
您可能需要基于另一个模拟(或真实)值来生成一个值。例如,根据 base_price 和 tax_amount 计算 total_price。
# 伪代码示例
# 假设 base_prices 是之前生成的,例如使用分布生成
base_prices = [50.0, 120.0, 75.5]
synthetic_totals = []
tax_rate = 0.08 # 8% 税率
for price in base_prices:
tax_amount = price * tax_rate
total_price = price + tax_amount
synthetic_totals.append(round(total_price, 2))
print(synthetic_totals)
# 输出: [54.0, 129.6, 81.54]
规则也可以包含条件。例如,传感器读数可能取决于一天中的时间。
# 伪代码示例 - 简化版
# 假设 'hour_of_day' 已生成或已知 (0-23)
synthetic_temperatures = []
hours = [6, 14, 22] # 早上, 下午, 晚上
for hour in hours:
if 6 <= hour < 12: # 早上
# 较低的温度范围
temp = random.uniform(15, 20)
elif 12 <= hour < 18: # 下午
# 较高的温度范围
temp = random.uniform(22, 28)
else: # 傍晚/夜晚
# 温度下降
temp = random.uniform(18, 22)
synthetic_temperatures.append(round(temp, 1))
print(synthetic_temperatures)
# 可能的输出: [17.8, 25.1, 19.5]
这些基于规则的方法使您能够将特定的逻辑或关系直接嵌入到人工数据生成过程中。
通过结合从分布中抽样和应用规则,您可以开始创建反映真实数据集中可能存在的简单模式和特点的数值人工数据。下一节将介绍生成分类数据的类似技术。
这部分内容有帮助吗?
random - Generate pseudo-random numbers, Python Documentation, 2024 - Python random 模块的官方文档,提供了在伪代码示例中用于生成均匀、正态(高斯)和其他分布的数字的详细信息和示例。© 2026 ApX Machine Learning用心打造