ฉันจะประเมินเหตุการณ์ที่ไม่ซ้ำนับจากการสุ่มตัวอย่างข้อมูลได้อย่างไร


15

สมมติว่าฉันมีค่าSซึ่งบางครั้งก็ทำซ้ำ ฉันต้องการประเมินจำนวนรวมของค่าที่ไม่ซ้ำกันในชุดใหญ่

หากฉันสุ่มตัวอย่างค่าและพิจารณาว่ามีค่าที่ไม่ซ้ำกันของฉันสามารถใช้สิ่งนี้เพื่อประเมินจำนวนค่าที่ไม่ซ้ำในชุดขนาดใหญ่ได้หรือไม่T uTTยู


1
คุณสามารถนับจำนวนสำเนาของแต่ละค่าที่ไม่ซ้ำกันในตัวอย่างได้หรือไม่ นัดฉันที่อาจช่วย
onestop

@estop ใช่ฉันสามารถทำได้
สติ

คำตอบ:


11

นี่คือบทความทั้งหมดเกี่ยวกับปัญหาโดยสรุปวิธีการต่าง ๆ มันเรียกว่าการประมาณค่าที่แตกต่างในวรรณคดี

ถ้าฉันต้องทำสิ่งนี้ด้วยตัวเองโดยไม่ต้องอ่านเอกสารแฟนซีฉันจะทำสิ่งนี้ ในการสร้างแบบจำลองภาษาเรามักจะต้องประเมินความน่าจะเป็นในการสังเกตคำที่ไม่รู้จักก่อนหน้านี้โดยให้ข้อความเป็นจำนวนมาก แนวทางที่ดีในการแก้ปัญหานี้สำหรับแบบจำลองภาษาโดยเฉพาะคือการใช้จำนวนคำที่เกิดขึ้นเพียงครั้งเดียวหารด้วยจำนวนโทเค็นทั้งหมด มันเรียกว่าการคาดการณ์ที่ดี

ให้ u1 เป็นจำนวนค่าที่เกิดขึ้นหนึ่งครั้งในตัวอย่างของรายการ m

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

ให้คุณเป็นจำนวนรายการที่ไม่ซ้ำกันในตัวอย่างขนาด m

หากคุณเข้าใจผิดว่าอัตรา 'รายการใหม่ถัดไป' ไม่ลดลงเมื่อคุณได้รับข้อมูลเพิ่มเติมจากนั้นใช้ Good Turing คุณจะมี

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

สิ่งนี้มีพฤติกรรมที่น่ารังเกียจเนื่องจาก u1 มีขนาดเล็กมาก แต่นั่นอาจไม่เป็นปัญหาสำหรับคุณในทางปฏิบัติ


สิ่งที่อยู่sในกรณีนี้หรือไม่? จำนวนทั้งหมดของ 'คำ'?
นาธาน

แท้จริงแล้วsเกิดขึ้นสองครั้งในเรื่องนี้ทั้งขนาดซ้ายและขวาใช่ไหม
PascalVKooten

1

กลยุทธ์การจำลอง

เก็บmสุ่มตัวอย่างขนาดnจากชุดS สำหรับตัวอย่างmแต่ละตัวให้คำนวณจำนวนuของค่าที่ไม่ซ้ำกันและหารด้วยnเพื่อทำให้เป็นมาตรฐาน จากการแจกแจงแบบจำลองของ normalized u , คำนวณสถิติสรุปความสนใจ (เช่นค่าเฉลี่ย, ค่าความแปรปรวน, ช่วง interquartile) คูณค่าเฉลี่ยของการจำลองของu ที่ทำให้เป็นมาตรฐานโดย cardinality ของSเพื่อประมาณจำนวนค่าที่ไม่ซ้ำกัน

ยิ่งค่ายิ่งใหญ่คือmและnยิ่งค่าเฉลี่ยที่จำลองขึ้นของคุณนั้นตรงกับจำนวนที่แท้จริงของค่าที่ไม่ซ้ำกันมากขึ้น


1
นี่เป็นวิธีแก้ปัญหาไม่ได้หรือ มันไม่ได้คำนึงถึงผลกระทบความอิ่มตัวของสีเลย
rrenaud

@rrenaud เปรียบเทียบกับโซลูชันของคุณฉันเห็นด้วยว่าฉันดูด้อยกว่า
Brash Equilibrium

@rrenaud ฉันยังคงสนับสนุนกลยุทธ์การจำลองซึ่งคุณสามารถคำนวณความน่าจะเป็นของรายการที่ไม่ซ้ำกันโดยใช้ GTFE ในตัวอย่างที่มีขนาดใหญ่ที่สุดเท่าที่เป็นไปได้เพื่อให้ได้ข้อผิดพลาดการสุ่มตัวอย่างสำหรับความน่าจะเป็นของรายการที่ไม่ซ้ำ หรือมีสูตรชัดเจนในการคำนวณทุกช่วงเวลา? ฉันไม่คิดว่ามันเป็นลบทวินามเนื่องจากการแจกแจงทวินามอ้างอิงจาก Wikipedia ไม่ได้ระบุลักษณะการกระจายของจำนวนรายการที่ไม่ซ้ำกัน แต่น่ากลัว! ฉันจะยื่นเรื่องนี้ในภายหลัง
Brash Equilibrium

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.