如何从随机数据采样中估算唯一出现次数?


15

假设我有很多S值,有时会重复。我希望估算大集合中唯一值的总数。

如果我对T值进行随机抽样,并确定其中包含Tu唯一值,是否可以用它来估计大集合中唯一值的数量?


1
您还可以保留样本中每个唯一值的副本数吗?打击我,可能会有所帮助。
一站式

@onestop,是的,我可以那样做
理智的

Answers:


11

这是有关该问题的全文,并总结了各种方法。在文献中,这被称为“ 不同价值估计 ”。

如果我必须自己做,而又不看花哨的论文,那我会做。在建立语言模型中,给定一堆文本,通常必须估计观察到一个先前未知单词的概率。特别是对于语言模型,解决此问题的一种很好的方法是使用刚出现一次的单词数除以标记总数。这就是所谓的好图灵估计

令u1为m个项目的样本中恰好发生一次的值的数量。

P[new item next] ~= u1 / m.

令u为大小为m的样本中唯一项的数量。

如果您错误地认为随着获得更多数据,“下一个新项目”的比率并没有降低,那么使用Good Turing,您将拥有

total uniq set of size s ~= u + u1 / m * (s - m) 

当u1变得很小时,这会产生一些讨厌的行为,但实际上这对您来说不是问题。


是什么s在这种情况下?“单词”的总数?
内森

的确,s在左右手大小上都发生两次吗?
PascalVKooten

1

仿真策略

从集合S中收集大小为n的m个随机样本。对于m个样本中的每个样本,计算唯一值的数量u并除以n进行归一化。从归一化u的模拟分布,计算出感兴趣的摘要统计信息(例如,均值,方差,四分位间距)。将标准化u的模拟平均值乘以S的基数,以估计唯一值的数量。

mn越大,您的模拟均值将越接近真实值的唯一值。


1
这种解决方案不是of脚吗?它根本没有考虑饱和效应。
rrenaud

@rrenaud与您的解决方案相比,我同意我的表现要逊色。
垃圾平衡

@rrenaud我仍然提倡一种模拟策略,通过该策略,您可以在尽可能多的可行样本中使用GTFE计算唯一项的概率,从而获得关于唯一项概率的抽样误差感。还是有一个明确的公式可以计算所有时刻?我不认为这是负二项式,因为根据Wikipedia的参考,二项式分布不能描述唯一项数量的分布。太棒了!我将其归档以备后用。
垃圾平衡

0

这是熊猫的实现:

import math
import numpy as np
from collections import Counter

def estimate_uniqueness(df, col, r=10000, n=None):
    """ Draws a sample of size r from column col from dataframe df and 
        returns an estimate for the number of unique values given a
        population size of n """
    n = n or df.shape[0]
    sample = df[col][np.random.randint(0, n, r)]
    counts = sample.value_counts()
    fis = Counter(counts)
    estimate = math.sqrt(n / r) * fis[1] + sum([fis[x] for x in fis if x > 1])
    return estimate

依赖于本文的第2和第4部分:http : //ftp.cse.buffalo.edu/users/azhang/disc/disc01/cd1/out/papers/pods/towardsestimatimosur.pdf

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.