하이퍼로그 로그

HyperLogLog

HyperLog카운트-간명성 문제에 대한 알고리즘으로, 멀티셋의 고유 요소 수에 근접한 값이다.[1]멀티셋의 정확카디널리티를 계산하려면 카디널리티에 비례하는 메모리 양이 필요하며, 이는 매우 큰 데이터 세트에서는 비현실적이다.HyperLog 알고리즘과 같은 확률론적 카디널리티 추정기는 카디널리티의 근사치만 얻는 비용으로 이보다 훨씬 적은 메모리를 사용한다.HyperLog 알고리즘은 1.5kB의 메모리를 사용하여 2%의 일반적인 정확도(표준 오차)로 10의9 기본값을 추정할 수 있다.[1]HyperLog는 1984년 Flajolet-Martin 알고리즘에서 파생된 이전 LogLog 알고리즘의 확장이다.[2][3]

용어.

Flajolet 등이 작성한 원본 논문과 계수-간결함 문제에 관한 관련 문헌에서 "카르디날리티"라는 용어는 반복적인 요소가 있는 데이터 스트림에서 구별되는 요소의 수를 의미하기 위해 사용된다.[1]그러나 멀티셋 이론에서 용어는 멀티셋의 각 멤버의 승수의 합을 가리킨다.이 기사는 출처와의 일관성을 위해 Flajolet의 정의를 사용한다.

알고리즘.

HyperLog 알고리즘의 기본은 균일하게 분포된 랜덤 숫자의 다중 집합의 카디널리티를 집합에 있는 각 숫자의 이진 표현에서 선행 0의 최대 수를 계산하여 추정할 수 있다는 관측이다.관측된 최대 선행 0 수가 n인 경우 집합의 고유 원소 수에 대한 추정치는 2이다n.[1]

HyperLog 알고리즘에서는 원래 다중값의 각 요소에 해시 함수를 적용하여 원래 다중값과 동일한 카디널리티로 균일하게 분포된 랜덤 숫자의 다중값을 얻는다.이 랜덤하게 분포된 세트의 카디널리티는 위의 알고리즘을 사용하여 추정할 수 있다.

위의 알고리즘을 사용하여 얻은 카디널리티의 단순 추정치는 큰 분산이라는 단점이 있다.HyperLog 알고리즘에서는 멀티셋을 여러 하위 집합으로 분할하고, 이러한 하위 집합의 각 하위 집합의 숫자에 있는 선행 0의 최대 수를 계산하고, 조화 평균을 사용하여 이러한 하위 집합의 카디널리티 추정치를 결합함으로써 분산을 최소화한다.[4]

운영

HyperLog는 세트에 새 요소를 추가하기 위해 추가, 세트의 카디널리티를 얻기 위해 카운트, 그리고 두 세트의 결합을 얻기 위해 병합하는 세 가지 주요 작업을 가지고 있다.일부 파생 연산은 교차로의 카디널리티 또는 병합 및 카운트 연산을 결합한 두 HyperLogs 간의 차이의 카디널리티와 같은 포함-제외 원리를 사용하여 계산할 수 있다.

HyperLog의 데이터는 초기 상태에서 0으로 설정된 크기 m 레지스터라고 하는 카운터의 어레이 M에 저장된다.

추가하다

추가 작업은 해시함수 h로 입력 데이터 v의 해시를 계산하여 첫 번째 b 비트(b (m) 를 얻은 후 1을 추가하여 수정할 레지스터의 주소를 얻는 것으로 구성된다.나머지 비트로 ( w ) {\을(를 계산하여 가장 왼쪽 1의 위치를 반환하십시오.레지스터의 새 값은 레지스터의 현재 값과 사이의 최대값이 될 것이다

카운트

카운트 알고리즘은 m 레지스터의 고조파 평균을 계산하고 상수를 사용하여 카운트의 추정 {\}을(를) 도출하는 방식으로 구성된다.

직관은 nM의 알 수 없는 카디널리티가 되는 것이며, 각 Mj {\{j / 요소를 갖는다.그런 다음 M (x ) (x은(는) (n/ )에 가까워야 한다이 수량에 대한 2의 조화 평균은 에 가까워야 하는 m {\ n/m}이므로 m 2 Z {\textstyle m은(는 대략 n이어야 한다

마지막으로 해시 충돌로 인한 2 에 존재하는 체계적 승법편향을 교정하기 위해 상수 m를 도입한다.

현실적 고려

상수 계산이 간단하지 않으며, 공식으로[1] 근사치를 구할 수 있다.

그러나 HyperLog 기술은 임계값 미만의 작은 추기경에게 치우쳐 있다본 논문은 Linear Counting이라고 알려진 작은 추기경들에 대해 다른 알고리즘을 사용할 것을 제안한다.[5]위에서 제공한 추정치가 임계값 < 보다 작은 경우 대체 계산을 사용할 수 있다.

  1. 을(를) 0과 같은 레지스터의 개수로 설정하십시오.
  2. = 인 경우 위의 표준 HyperLog E 을(를) 사용하십시오.
  3. 그렇지 않으면 선형 카운팅을 하십시오. E = log (V ){\

또한, 레지스터의 크기 한계에 근접하는 매우 큰 추기경(32비트 레지스터의 경우 > 2 에 대해서는 다음과 같이 카디널리티를 추정할 수 있다.

하한과 상한에 대해 위의 보정을 통해 오차는 = / m 로 추정할 수 있다

병합

두 HLLs , l l }})에 대한 병합 작업은 레지스터 : 의 각 쌍에 대한 최대값을 얻는 데 있다

복잡성

그 복잡함를 분석하여, 데이터(ϵ, δ){\displaystyle(,\delta\epsilon)}model[6]스트리밍, 그 공간은 고정 성공 확률 1−δ{1-\delta\displaystyle}1±ϵ{\displaystyle 1\pm \epsilon}근사를 얻는 데 필요한 분석한다. HLL의 상대적 오류는 1.04/m{\dis 사용된다.pla() 필요하며, O - + ) O 설정된 카디널리티이고 m은 레지스터 수(일반적으로 1바이트 크기 미만)이다.

추가 연산은 해시함수의 출력 크기에 따라 달라진다.이 크기가 고정되어 있으므로 추가 작업의 실행 시간을 ( O 로 간주할 수 있다

카운트병합 연산은 레지스터 m의 수에 따라 달라지며 원가는 O( ) O이다 일부 구현(Redis)[7]에서는 레지스터 수가 고정되어 있고, 설명서에서는 레지스터 수가 ( ) O(1)로간주된다.

HLL++

HyperLog++ 알고리즘은 메모리 요구사항을 줄이고 일부 범위의 추기경에서 정확도를 높이기 위해 HyperLog 알고리즘의 몇 가지 개선을 제안한다.[6]

  • 원래 종이에 사용된 32비트 대신 64비트 해시함수가 사용된다.이렇게 하면 큰 범위의 보정을 제거할 수 있는 큰 추기경의 해시 충돌이 감소한다.
  • 선형 계수에서 HLL 계수로 전환할 때 작은 기질에 대해 일부 치우침이 발견된다.문제를 완화하기 위해 경험적 편향 보정을 제안한다.
  • 작은 추기경의 기억 요건을 줄이기 위해 레지스터의 희박한 표현이 제안되며, 카디널리티가 커지면 나중에 밀집된 표현으로 변환될 수 있다.

스트리밍 HLL

데이터가[8][9] 단일 스트림에 도착하면 HLL 스케치의 정확도를 크게 향상시키고 36% 적은 메모리를 사용하여 주어진 오류 수준을 달성한다.이 추정기는 단일 스트림에서 중복된 무감각 근사치 고유 계수 스케치에 대해 최적으로 적합하다.

단일 스트림 시나리오는 또한 HLL 스케치 구조에 변형을 초래한다.HLL-TailCut+는 원래 HLL 스케치보다 메모리 사용량이 45% 적지만 데이터 삽입 순서에 의존하고 스케치를 병합할 수 없는 비용이다.[10]

추가 읽기

  • "Probabilistic Data Structures for Web Analytics and Data Mining". highlyscalable.wordpress.com. May 2012. Retrieved 2014-04-19.
  • "New cardinality estimation algorithms for HyperLogLog sketches" (PDF). Retrieved 2016-10-29.

참조

  1. ^ a b c d e Flajolet, Philippe; Fusy, Éric; Gandouet, Olivier; Meunier, Frédéric (2007). "Hyperloglog: The analysis of a near-optimal cardinality estimation algorithm" (PDF). Discrete Mathematics and Theoretical Computer Science Proceedings. Nancy, France. AH: 127–146. CiteSeerX 10.1.1.76.4286. Retrieved 2016-12-11.
  2. ^ Durand, M.; Flajolet, P. (2003). "LogLog counting of large cardinalities." (PDF). In G. Di Battista and U. Zwick (ed.). Lecture Notes in Computer Science. Annual European Symposium on Algorithms (ESA03). Vol. 2832. Springer. pp. 605–617.
  3. ^ Flajolet, Philippe; Martin, G. Nigel (1985). "Probabilistic counting algorithms for data base applications" (PDF). Journal of Computer and System Sciences. 31 (2): 182–209. doi:10.1016/0022-0000(85)90041-8.
  4. ^ S Heule, M Nunkesser, A Hall (2013). "HyperLogLog in Practice: Algorithmic Engineering of a State of The Art Cardinality Estimation Algorithm" (PDF). sec 4.{{cite web}}: CS1 maint: 작성자 매개변수 사용(링크)
  5. ^ Whang, Kyu-Young; Vander-Zanden, Brad T; Taylor, Howard M (1990). "A linear-time probabilistic counting algorithm for database applications". ACM Transactions on Database Systems. 15 (2): 208–229. doi:10.1145/78922.78925.
  6. ^ a b "HyperLogLog in Practice: Algorithmic Engineering of a State of The Art Cardinality Estimation Algorithm". Retrieved 2014-04-19.
  7. ^ "PFCOUNT – Redis".
  8. ^ Cohen, E. (March 2015). "All-distances sketches, revisited: HIP estimators for massive graphs analysis". IEEE Transactions on Knowledge and Data Engineering. 27 (9): 2320–2334. arXiv:1306.3284. doi:10.1109/TKDE.2015.2411606.
  9. ^ Ting, D. (August 2014). "Streamed approximate counting of distinct elements: beating optimal batch methods". Proceedings of the 20th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD '14): 442–451. doi:10.1145/2623330.2623669. ISBN 9781450329569.
  10. ^ Xiao, Q.; Zhou, Y.; Chen, S. (May 2017). "Better with fewer bits: Improving the performance of cardinality estimation of large data streams". IEEE INFOCOM 2017 - IEEE Conference on Computer Communications: 1–9. doi:10.1109/INFOCOM.2017.8057088. ISBN 978-1-5090-5336-0.