한 세트의 표본을 사용하여 여러 세트의 교집합의 크기 추정


10

적어도 2 세트의 교집합에 의해 생성 된 세트의 크기를 계산 해야하는 알고리즘을 연구 중입니다. 더 구체적으로:

z=|A0An|

교차 된 집합은 SQL 쿼리에 의해 생성되며, 빠른 속도를 유지하기 위해 각 쿼리 수를 미리 얻은 다음 가장 낮은 수 ( )로 집합을 가져 와서 해당 ID를 경계로 사용합니다. 나머지 큰 쿼리이므로 교차로가 효과적으로됩니다.A0

z=|(A0A1)(A0An)|

이 전략조차도때로는 클 수 있습니다. 그것을 다루기위한 나의 생각은 의 무작위 샘플을 취하여 그것을 의 적절한 추정치로 외삽하기 전에 나머지 세트와 교차시키는 것입니다 . 내 질문은 : 샘플링과 외삽을 수행하여 값으로 되돌릴 수있는 가장 좋은 방법은 무엇 입니까? 즉, 완전히 정확하지는 않지만 예측 가능한 오류 범위가 있습니까?|A0|A0zz


여기 내가 지금까지 시도한 것이 있습니다 (의사 코드에서 일종의).

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)

이 코드는 작동하지만 z표본 크기가 작을수록 추정치가 높아져 지속적으로 과대 평가되는 것 같습니다 . 또한, 이것이 두 개 이상의 세트로 어떻게 확장되는지 잘 모르겠습니다.

이 질문이 이해되기를 바랍니다. 더 명확하게 할 수 있으면 알려주세요. 또한이 질문이 다른 주제이거나 다른 곳에 속한 경우 알려 주시면 기꺼이 도와 드리겠습니다.


빌의 코멘트 , 내가 샘플 크기 대 오류를 보여주기 위해 몇 가지 빠른 시험을 달렸다. 각 샘플 크기 버킷은 20 회 실행되었으며 알 수 있듯이 꽤 명확한 추세가 있습니다.

음모


대체없이 간단한 무작위 샘플링이 작동해야한다고 생각합니다. 나는 당신이 과대 평가 받고 있다는 당황 스럽다. 이것은 임의 표본의 표본 평균을 사용하여 모집단 평균을 추정하는 것과 정확히 일치하는 것처럼 보입니다. 요소가 다른 의 교집합에있을 모집단 확률을 추정하려고합니다 . 간단한 예를 들어 보았지만 제대로 작동합니다. 지속적으로 과대 평가하고 있는가? 20에서 15 번이나 200에서 150 번처럼 일어 났습니까? 샘플이 실제로 무작위입니까? A0A
Bill

1
@Bill 나는 내가보고있는 것을 보여주는 샘플 크기 대 오류 그림을 추가했습니다. 랜덤 샘플의 경우,이 샘플 ORDER BY RAND()은 완벽하지는 않지만이 작업에 적합해야합니다.
Jimmy Sawczuk

@JimmySawczuk "intersect (A0, a)"대신 "a"를 사용하여 "작업 세트"를 단순히 교차시키는 것이 낫지 않습니까? "A0"은 아마도 첫 번째 실행 후 알고리즘의 현재 "작업 세트"보다 클 것입니다. 이것을 올바르게 이해하고 있습니까?

실제로 다중 집합이 아닌 집합을 의미 함을 확인할 수 있습니까 (즉, 집합에 중복이 없음)? 존재하는 경우, 방법으로 "교차점"의 크기를 과대 평가하기가 쉽기 때문입니다. ( 이 동일한 요소의 100 개 사본에 불과하고 절반을 샘플링 한 경우를 고려하십시오 .)A0
Innuo

또한 원래 세트의 크기에 비해 교차 크기가 매우 작은 지 물어볼 수 있습니까? 그렇다면 귀하의 문제를 설명하는 것 같습니다. 더 작은 세트로 일부 시뮬레이션을 실행했으며 작지만 과대 평가되었지만 상당히 일관성이 있습니다.

답변:


3

세트 에 요소가 반복 된 경우 (즉, 실제로 다중 세트 인 경우) 스케일링 계수는 샘플링 된 요소의 수가 아니라 샘플링 된 요소의 수를 사용하기 때문에 절차에 따라 교차 크기가 과대 평가됩니다. 랜덤 세트의 고유 요소 수와 전체 세트 의 고유 요소 수의 비율로 계수를 계산하여 추정값을 수정할 수 있습니다 .A0A0


0

Innuo가 지적한 바와 같이 , 내 문제는 샘플 세트 의 중복으로 인해 의사 코드가 낮아져서 의 역 외삽을 통해 생성되기 때문에 최종 외삽 이 너무 높아 졌습니다. 중복을 제거하면이 문제가 해결되었으며 이제 알고리즘은 내가 기대하는 선을 따라 델타 대 샘플 크기 플롯을 더 생성합니다 (선은 전체 모집단에 대해 해당 표본 크기의 95 % 신뢰 수준에서 오차 한계를 나타냅니다) ) :A0factorzfactor

음모

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.