基于联合概率分布用Python随机生成新数据集的方法
基于联合概率表随机生成新数据集的Python实现
首先,你的示例原始数据集可通过以下代码加载为DataFrame:
import pandas as pd data = {'state': {7192: 'healthy', 7193: 'healthy', 7194: 'healthy', 7195: 'healthy', 7196: 'Non healthy', 7197: 'Non healthy', 7198: 'Non healthy'}, 'type': {7192: 'W', 7193: 'A', 7194: 'W', 7195: 'W', 7196: 'Y', 7197: 'N', 7198: 'Y'}, 'tier': {7192: '1', 7193: '1', 7194: '1', 7195: '1', 7196: '3', 7197: '1', 7198: '1'}, 'color': {7192: 'red', 7193: 'blue', 7194: 'red', 7195: 'red', 7196: 'yellow', 7197: 'yellow', 7198: 'yellow'} } df = pd.DataFrame(data)
下面提供两种实用方法生成符合联合分布的新数据集,均允许一定随机性:
方法一:直接基于原始DataFrame有放回抽样
无需提前计算联合概率表,直接对原始数据的行进行随机有放回采样,结果自然贴合原始数据的联合分布,自带随机性。
代码示例:
# 生成100条新数据,replace=True表示有放回抽样 new_data = df.sample(n=100, replace=True, random_state=42).reset_index(drop=True)
n:指定生成的新数据行数replace=True:开启有放回抽样,允许重复抽取同一行,模拟随机分布random_state:可选参数,设置随机种子保证结果可复现
方法二:基于已计算的联合概率表抽样
若你已得到包含各特征组合及其对应概率的联合概率表(结构示例:[state, type, tier, color, prob]的DataFrame),可通过概率权重抽样生成新数据:
假设联合概率表为joint_prob_df,代码示例:
import numpy as np # 提取所有特征组合的列表 combinations = joint_prob_df[['state', 'type', 'tier', 'color']].values.tolist() # 提取对应的概率权重 probs = joint_prob_df['prob'].values # 生成100条新数据:按概率随机选择组合 selected_indices = np.random.choice(len(combinations), size=100, p=probs) new_data = pd.DataFrame([combinations[i] for i in selected_indices], columns=['state', 'type', 'tier', 'color'])
这种方法灵活性更高,你可手动调整概率表中的数值,生成符合自定义分布的数据集。
内容的提问来源于stack exchange,提问作者PineNuts0
相关产品推荐
相关产品推荐

