모멘트를 사용하여 정수 스트림에 대한 대략적인 Quantile을 계산합니까?


20

math.stackexchange 에서 마이그레이션되었습니다 .

정수의 긴 스트림을 처리하고 있으며 많은 데이터를 저장하지 않고 스트림의 다양한 백분위 수를 대략적으로 계산할 수 있도록 몇 가지 순간을 추적하는 것을 고려하고 있습니다. 잠시 후에 백분위 수를 계산하는 가장 간단한 방법은 무엇입니까? 적은 양의 데이터 만 저장하는 더 나은 방법이 있습니까?


2
스트림의 분포 속성에 대해 구체적인 정보가 있습니까? 예를 들어, 그들은 긍정적입니까? 바운드? 귀하가 제공 할 수있는 다른 세부 사항이 도움이 될 것입니다. 모멘트는 스트림을 계산하고 저장하기가 매우 쉽습니다. 스트림에서 Quantile 을 직접 추정 하는 방법 에 대한 이전의 질문도 있습니다. 실제로 하려고 하는 것처럼 들립니다 . 그것들을 검색하고 살펴볼 수 있습니다.
추기경

이들은 처리 시간을 나타내므로 시스템에 기술적 문제 나 과부하가 발생하지 않는 한 긍정적이고 대부분 밀접하게 클러스터됩니다. 나는 사소한 질문을 찾아 볼 것이다. 그들은 충분히 좋을 수도 있습니다. 아직도 나는 임의의 백분위 수와 관련된 가치를 계산하는 순간에 이르는 방법이 궁금합니다. 나는 순간을 저장하는 것이 쉽다는 것을 알고, 내가 모르는 순간을 사용하는 방법입니다.
jonderry

이 질문을 보셨습니까 ?
추기경

답변:


15

명시 적으로 언급하지는 않지만 문제에 대한 설명을 통해 바이어스가 많은 Quantile 세트 (예 : 50, 90, 95 및 99 백분위 수)를 겪고있는 것 같습니다.

이 경우, Cormode et al.의 "데이터 스트림에 대한 편향된 Quantiles의 효과적인 계산"에 설명 된 방법으로 많은 성공을 거두었습니다 . 메모리가 적고 구현하기 쉬운 빠른 알고리즘입니다.

이 방법은 샘플의 값 순위에서 상한 및 하한과 함께 입력 스트림의 작은 샘플을 유지하는 Greenwald 및 Khanna의 이전 알고리즘을 기반으로합니다. 몇 순간의 수집보다 더 많은 공간이 필요하지만 분포의 흥미로운 꼬리 영역을 정확하게 설명하는 데 훨씬 좋습니다.


1
그렇습니다, 이것은 실제로가는 길입니다. 사실 높은 Quantile의 추정치를 얻는 것이 좀 더 쉽습니다. 특히 형식의 순위에서 오류를 용인하려는 경우, 여기서 은 총 항목 수이며 \ epsilon> 0 $은 일부 사용자입니다. 정의 된 오류 용어ϵ
Suresh Venkatasubramanian

2

극단적 인 Quantile의 아주 좋은 추정치를 제공하는 더 최근의 훨씬 간단한 알고리즘이 있습니다.

기본적인 아이디어는 데이터 구조의 크기를 제한하고 작거나 큰 대해 더 높은 정확도를 보장하는 방식으로 작은 빈을 극단적으로 사용하는 것입니다 . 이 알고리즘은 여러 언어와 다양한 패키지로 제공됩니다. MergingDigest 버전에는 동적 할당이 필요하지 않습니다. 일단 MergingDigest가 인스턴스화되면 추가 힙 할당이 필요하지 않습니다.

https://github.com/tdunning/t-digest를 참조 하십시오

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