Verilerin rastgele örneklenmesinden kaynaklanan benzersiz oluşum sayılarını nasıl tahmin edebilirim?


15

Diyelim ki bazen tekrar eden geniş bir değerleri kümem var. Büyük kümedeki toplam benzersiz değerlerin sayısını tahmin etmek istiyorum .S

Ben sıradan bir örneğini ele alırsak değerleri ve içerdiği olduğunu belirlemek T u bu büyük sette benzersiz değerlerin sayısını tahmin etmek için kullanabileceğiniz, benzersiz değerleri?TTu


1
Numunedeki her bir benzersiz değerin kopya sayısını da tutabilir misiniz? Bana yardımcı olabilecek grevler .
onestop

@onestop, evet bunu yapabilirdim
aklı

Yanıtlar:


11

İşte çeşitli yaklaşımların bir özeti ile sorun hakkında bir makale. Buna Farklı Değer Tahmini denir literatürde .

Bunu kendim yapmak zorunda olsaydım, süslü kağıtlar okumak zorunda kalmadan yapardım. Dil modelleri oluştururken, bir grup metin verildiğinde daha önce bilinmeyen bir kelimeyi gözlemleme olasılığını tahmin etmek gerekir. Özellikle dil modelleri için bu problemi çözmede oldukça iyi bir yaklaşım, tam olarak bir kez meydana gelen kelime sayısının toplam jeton sayısına bölünmesidir. Buna İyi Turing Tahmini deniyor .

U1, m öğelerinin bir örneğinde tam olarak bir kez meydana gelen değerlerin sayısı olsun.

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

U m örneğinizdeki benzersiz öğelerin sayısı olsun.

Yanlışlıkla 'yeni öğe sonraki' oranının daha fazla veri aldıkça düşmediğini varsayarsanız, İyi Turing'i kullanırsanız,

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

U1 gerçekten küçüldükçe bu kötü bir davranışa sahiptir, ancak bu pratikte sizin için bir sorun olmayabilir.


sbu durumda ne var ? toplam 'kelime' sayısı?
Nathan

Gerçekten, sbu iki kez oluşur, hem sol hem de sağ el boyutunda?
PascalVKooten

1

Simülasyon stratejisi

S setinden n boyutunda m rastgele örnek toplayın . M örneklerinin her biri için , benzersiz değerlerin u sayısını hesaplayın ve normalleştirmek için n'ye bölün . Normalize edilmiş u'nun simüle edilmiş dağılımından, ilgilenilen özet istatistikleri (ör. Ortalama, varyans, kartiller arası aralık) hesaplayın. Benzersiz değerlerin sayısını tahmin etmek için normalleştirilmiş u'nun simüle edilmiş ortalamasını S'nin kardinalitesiyle çarpın .

M ve n ne kadar büyük olursa, simüle edilmiş ortalamanız gerçek değerlerin gerçek sayısına o kadar yakın olacaktır.


1
Bu çözüm biraz topal değil mi? Doygunluk etkilerini hiç dikkate almaz.
rrenaud

@rrenaud Çözümünüzle karşılaştırıldığında, benimkinin daha düşük göründüğüne katılıyorum.
Kaza Dengesi

@rrenaud Hala benzersiz öğelerin olasılığı için bir örnekleme hatası duygusu elde etmek için mümkün olduğunca çok sayıda mümkün olduğu kadar GTFE kullanarak benzersiz öğelerin olasılığını hesapladığınız bir simülasyon stratejisini savunuyorum. Yoksa tüm anları hesaplamak için açık bir formül var mı? Wikipedia referansına göre binom dağılımı, benzersiz öğelerin sayısının dağılımını karakterize etmediğinden, bunun negatif binom olduğunu düşünmüyorum. Ama harika! Bunu sonradan dosyalayacağım.
Kaza Dengesi

0

İşte pandalar için bir uygulama:

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

Bu makalenin 2. ve 4. bölümlerine dayanmaktadır: http://ftp.cse.buffalo.edu/users/azhang/disc/disc01/cd1/out/papers/pods/towardsestimatimosur.pdf

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.