Bir kümenin bir örneğini kullanarak birden çok kümenin kesişim boyutunun tahmin edilmesi


10

En az 2 kümenin kesişimleri tarafından oluşturulan bir kümenin boyutunu hesaplamak için gereken bir algoritma üzerinde çalışıyorum. Daha spesifik olarak:

z=|A0An|

Kesişen kümeler SQL sorguları tarafından oluşturulur ve işleri hızlı tutma çabasıyla, her sorgudan önce bir sayı alırım, sonra en düşük sayıyı (A0) ve bu kimlikleri büyük sorguların geri kalanında sınır olarak kullanın, böylece kavşak etkili bir şekilde olur:

z=|(A0A1)(A0An)|

Bu strateji bile beni çalıştırmam için oldukça büyük sorgular bırakıyor |A0|bazen büyük olabilir. Bununla başa çıkma fikrimi rastgele bir örnek almakA0 ve uygun bir tahmine geri dönmeden önce setlerin geri kalanıyla kesişmesi z. Sorum şu: örnekleme ve sonra bir değere geri dönmek için tahmin etmek gitmek için en iyi yolu nedirz yani, tam olarak doğru değilse, öngörülebilir bir hata aralığı vardır?


İşte şimdiye kadar denedim (sözde kod, tür):

sample_threshold := 10000
factor := 1
if (len(A0) > sample_treshold) {
    factor = sample_threshold / len(A0)
}

// Take a random sample of size 10000 from A0

// Intersect all the other sets with the A0 sample, then with each other
working_set := A0
for i, a := range A {
    a = intersect(A0, a)
    working_set = intersect(working_set, a)
}

z := len(working_set) * (1 / factor)

Bu kod işe yarıyor, ancak sürekli olarak fazla tahmin ediyor gibi görünüyor z, daha düşük bir örnek boyutu daha yüksek bir tahmin sağlıyor. Ayrıca, bunun kesişecek ikiden fazla kümeyle nasıl ölçekleneceğinden emin değilim.

Umarım bu soru mantıklıdır, daha fazla netleştirebilir miyim, bana bildirin. Ayrıca, bu soru konuyla ilgili değilse veya başka bir yere aitse, lütfen bana bildirin ve taşımaktan mutluluk duyuyorum.


Başına Bill'in yorumun , ben örnek büyüklüğü vs hatayı gösterme bazı hızlı testler yaptı. Her numune boyutu kovası 20 kez çalıştırıldı ve gördüğünüz gibi oldukça açık bir trend var:

Arsa


Bence yedek olmadan basit rastgele örnekleme çalışması gerekir. Fazla tahmin aldığınız için şaşırdım. Bu, rastgele bir örnekten örnek ortalaması kullanarak bir popülasyon ortalamasını tahmin etmekle tam olarak eşleşiyor gibi görünüyor. Bir unsurun nüfus olasılığını tahmin etmeye çalışıyorsunuzA0 diğerinin kesişim noktasında As. Basit bir örnekle eriştim ve işe yarıyor. Sürekli olarak fazla tahmin ettiğinden emin misin? 20'de 15 kez mi yoksa 200'de 150 kez mi oldu? Örnek gerçekten rastgele mi?
Bill

1
@ Fatura, gördüğüm şeyi gösteren hataya karşı örneklem büyüklüğü grafiği ekledim. Rastgele numuneye gelince ORDER BY RAND(), mükemmel değil, ancak bu görev için uygun olması gereken rastgele .
Jimmy Sawczuk

@JimmySawczuk "Kesişme (A0, a)" yerine "çalışma kümesini" doğrudan "a" ile kesmek daha iyi olmaz mıydı? "A0" muhtemelen ilk çalıştırmadan sonra algoritmadaki geçerli "çalışma kümesinden" daha büyük olacaktır ... Bunu doğru anlıyor muyum?

Gerçekten çoklu kümeleri değil, kümeleri kastettiğinizi (yani kümelerde yineleme olmadığını) doğrulayabilir misiniz? Çünkü, varsa, "kavşak" boyutunu yönteminizle abartmak kolaydır. (Nerede olduğunu düşününA0aynı öğenin yalnızca 100 kopyasıdır ve bunların yarısını örneklemişsinizdir.)
Innuo

Ayrıca, kesişimin boyutunun, orijinal setlerin boyutuna göre son derece küçük olup olmadığını sorabilir miyim? Eğer öyleyse, bunun sorununuzu açıklayacağını hissediyorum. Bazı simülasyonlar yaptım (daha küçük setlerle) ve aynı zamanda küçük de olsa, oldukça fazla tahmin yapıyorum.

Yanıtlar:


3

Setiniz A0yinelenen öğelere sahiptir (yani, aslında bir çoklu kümedir), kesişimin boyutu prosedürünüz tarafından fazla hesaplanacaktır çünkü ölçeklendirme faktörünüz örneklenen öğelerin sayısını değil, örneklenen öğelerin sayısını kullanır. Rastgele örneğinizdeki benzersiz öğelerin sayısının tam kümedeki benzersiz öğelerin sayısına oranı olarak faktörü hesaplayarak tahmini düzeltebilirsiniz.A0.


0

Innuo'nun işaret ettiği gibi , sorunum örneklenmiş setimdeki kopyalardan kaynaklanıyorduA0Bu, factorsahte kodumun düşük olmasına neden oldu, bu da son ekstrapolasyonunun zçok yüksek olmasına neden oldu çünkü tersi tarafından üretildi factor. Yinelenenleri kaldırmak bu sorunu çözdü ve şimdi algoritma beklediğim satırlarda daha fazla delta ile örnek boyutu grafiği oluşturur (çizgiler toplam popülasyona karşı bu örnek boyutu için% 95 güven düzeyinde hata payını gösterir ):

Arsa

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.