You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

有放回抽样ID直至收集全部个体的模拟与可视化需求

ID有放回抽样累计唯一个体数的模拟与可视化方案

1. 数据预处理

先把ID-个体映射数据整理好,用Python的pandas库加载处理(实际数据可替换为你的文件路径):

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 加载示例数据(实际场景替换为你的数据文件,比如pd.read_csv("your_data.csv"))
data = pd.DataFrame({
    'ID': [1,2,3,4,5,6,7],
    'individual': ['A','B','A','C','D','D','D']
})

# 建立ID到个体的映射字典
id_to_individual = data.set_index('ID')['individual'].to_dict()
# 获取所有唯一个体的总数(用于绘制渐近线)
total_unique_individuals = len(set(data['individual']))
# 提取所有ID作为抽样池
id_pool = data['ID'].tolist()

2. 1000次有放回抽样模拟

核心逻辑是每次从ID池随机抽取一个ID,对应到个体后记录累计收集到的唯一个体数量:

# 初始化变量:已收集的个体集合、累计数量记录列表
collected_individuals = set()
count_record = []

# 执行1000次有放回抽样
for _ in range(1000):
    # 随机抽取一个ID
    sampled_id = np.random.choice(id_pool, replace=True)
    # 获取对应的个体
    sampled_individual = id_to_individual[sampled_id]
    # 将个体加入已收集集合(自动去重)
    collected_individuals.add(sampled_individual)
    # 记录当前累计的唯一个体数
    count_record.append(len(collected_individuals))

3. 可视化结果

绘制抽样次数与累计唯一个体数的趋势图,并添加全个体数的渐近线:

plt.figure(figsize=(10,6))
# 绘制累计数量变化曲线
plt.plot(range(1, 1001), count_record, label='累计唯一个体数')
# 绘制全个体数的渐近线
plt.axhline(y=total_unique_individuals, color='r', linestyle='--', label=f'全部个体数({total_unique_individuals})')
# 设置图表标签与样式
plt.xlabel('ID抽样次数')
plt.ylabel('累计唯一个体数')
plt.title('1000次有放回抽样累计唯一个体数变化趋势')
plt.legend()
plt.grid(alpha=0.3)
plt.show()

结果说明

  • 曲线前期上升较快,随着抽样次数增加,会逐渐逼近全个体数,最终趋于平稳(与红色虚线重合)
  • 横轴严格对应ID抽样次数(1到1000),而非唯一ID数量,完全匹配需求
  • 由于抽样的随机性,每次运行的曲线会有细微差异,但整体趋势一致:从快速收集新个体到逐渐饱和

内容的提问来源于stack exchange,提问作者kalex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 12:23:27