math.stackexchange 에서 마이그레이션되었습니다 .
정수의 긴 스트림을 처리하고 있으며 많은 데이터를 저장하지 않고 스트림의 다양한 백분위 수를 대략적으로 계산할 수 있도록 몇 가지 순간을 추적하는 것을 고려하고 있습니다. 잠시 후에 백분위 수를 계산하는 가장 간단한 방법은 무엇입니까? 적은 양의 데이터 만 저장하는 더 나은 방법이 있습니까?
math.stackexchange 에서 마이그레이션되었습니다 .
정수의 긴 스트림을 처리하고 있으며 많은 데이터를 저장하지 않고 스트림의 다양한 백분위 수를 대략적으로 계산할 수 있도록 몇 가지 순간을 추적하는 것을 고려하고 있습니다. 잠시 후에 백분위 수를 계산하는 가장 간단한 방법은 무엇입니까? 적은 양의 데이터 만 저장하는 더 나은 방법이 있습니까?
답변:
명시 적으로 언급하지는 않지만 문제에 대한 설명을 통해 바이어스가 많은 Quantile 세트 (예 : 50, 90, 95 및 99 백분위 수)를 겪고있는 것 같습니다.
이 경우, Cormode et al.의 "데이터 스트림에 대한 편향된 Quantiles의 효과적인 계산"에 설명 된 방법으로 많은 성공을 거두었습니다 . 메모리가 적고 구현하기 쉬운 빠른 알고리즘입니다.
이 방법은 샘플의 값 순위에서 상한 및 하한과 함께 입력 스트림의 작은 샘플을 유지하는 Greenwald 및 Khanna의 이전 알고리즘을 기반으로합니다. 몇 순간의 수집보다 더 많은 공간이 필요하지만 분포의 흥미로운 꼬리 영역을 정확하게 설명하는 데 훨씬 좋습니다.
극단적 인 Quantile의 아주 좋은 추정치를 제공하는 더 최근의 훨씬 간단한 알고리즘이 있습니다.
기본적인 아이디어는 데이터 구조의 크기를 제한하고 작거나 큰 대해 더 높은 정확도를 보장하는 방식으로 작은 빈을 극단적으로 사용하는 것입니다 . 이 알고리즘은 여러 언어와 다양한 패키지로 제공됩니다. MergingDigest 버전에는 동적 할당이 필요하지 않습니다. 일단 MergingDigest가 인스턴스화되면 추가 힙 할당이 필요하지 않습니다.