일부 데이터의 Quantile을 추정하고 싶습니다. 데이터가 너무 커서 메모리에 수용 할 수 없습니다. 그리고 데이터는 정적 인 것이 아니며 새로운 데이터가 계속 나오고 있습니다. 누구든지 매우 제한된 메모리 및 계산으로 지금까지 관찰 된 데이터의 Quantile을 모니터링하는 알고리즘을 알고 있습니까? 내가 찾을 수 P2 알고리즘 유용하지만, 매우 꼬리 무거운 분산되어 내 데이터, 아주 잘 작동하지 않습니다.
일부 데이터의 Quantile을 추정하고 싶습니다. 데이터가 너무 커서 메모리에 수용 할 수 없습니다. 그리고 데이터는 정적 인 것이 아니며 새로운 데이터가 계속 나오고 있습니다. 누구든지 매우 제한된 메모리 및 계산으로 지금까지 관찰 된 데이터의 Quantile을 모니터링하는 알고리즘을 알고 있습니까? 내가 찾을 수 P2 알고리즘 유용하지만, 매우 꼬리 무거운 분산되어 내 데이터, 아주 잘 작동하지 않습니다.
답변:
P2 알고리즘은 좋은 발견입니다. 그것은 Quantile의 몇 가지 추정을하고, 주기적으로 갱신하고, 2 차 (입방이 아닌 선형) 보간법을 사용하여 Quantile을 추정함으로써 작동합니다. 저자들은 2 차 보간법이 선형 보간법보다 꼬리에서 더 잘 작동하며 입방체가 너무 까다 롭고 어려워 질 것이라고 주장합니다.
"헤비 테일 (heavy-tailed)"데이터에 대해이 방법이 어떻게 실패하는지 정확하게 설명하지는 않지만 쉽게 추측 할 수 있습니다. 많은 양의 데이터가 수집 될 때까지 헤비 테일 분포에 대한 극단적 인 Quantile의 추정치는 불안정합니다. 그러나 모든 데이터를 저장하더라도 문제가 될 것이므로 기적을 기대하지 마십시오!
어쨌든 보조 마커를 설정하지 말고 과 x 6 이라고 부르십시오.이 범위에서 Quantile이 놓여 있고 x 0 과 x 6 사이에있는 모든 데이터를 저장하는 것이 확실 합니까? 버퍼가 채워지면 항상 x 0 ≤ x 6을 유지하면서 이러한 마커를 업데이트해야합니다 . 이를 수행하는 간단한 알고리즘은 (a) Quantile의 현재 P2 추정치 및 (b) x 0 보다 작은 데이터 수와 x 6 보다 큰 데이터 수의 저장된 개수의 조합으로 구성 할 수 있습니다.. 이러한 방식으로 확실하게 전체 데이터 세트를 항상 사용할 수있는 것처럼 Quantile을 추정 할 수 있지만 상대적으로 작은 버퍼 만 있으면됩니다.
구체적으로, n 개의 데이터 값 x 1 , x 2 , … , x n 의 시퀀스에 대한 부분 정보를 유지하기 위해 데이터 구조 를 제안하고 있습니다 . 여기서 y 는 연결리스트입니다
이 표기법에서 는 지금까지 읽은 n x 값 중 가장 작은 i 번째 값을 나타냅니다 . m 은 상수, 버퍼 y 의 크기입니다 .
알고리즘은 처음으로 발견 된 m 개의 데이터 값으로 를 채우고 가장 작은 것부터 가장 큰 것까지 정렬 된 순서로 배치하는 것으로 시작합니다. q 를 추정 할 Quantile 이라고하자 . 예를 들어, q = 0.99. x n + 1 을 읽으면 가능한 세 가지 동작이 있습니다.
만약 , 증분 K .
경우 , 아무것도하지 않는다.
그렇지 않으면, x n + 1 을 y에 삽입하십시오 .
어쨌든 증가시킵니다 .
삽입 절차 둔다 에 Y 정렬 순서는 다음의 극단 값 중 하나를 제거 Y :
만약 를 제거한 후 , X ( N ) [ K + 1 ] 에서 , Y 및 증분 K ;
사용하여 최대 100,000 개의 값으로 테스트
Press et al., Numerical Recipes 8.5.2 "임의 Quantile의 단일 패스 추정"p. 435, 부분 선형 근사 cdf를 업데이트하는 C ++ 클래스 IQAgent를 제공하십시오.
이것은 온라인에서 데이터 세트의 중앙값을 결정하는 알고리즘에서 조정할 수 있습니다. 자세한 내용은이 stackoverflow 게시물 ( /programming/1387497/find-median-value-from-a-growing-set)을 참조하십시오.
Quantile 회귀 분석을 살펴 보겠습니다. 이를 사용하여보고자하는 Quantile의 파라 메트릭 추정값을 결정할 수 있습니다. 그것은 정규성에 대한 가정을하지 않으므로, 이분산성을 잘 처리하고 롤링 윈도우 단위로 사용될 수 있습니다. 기본적으로 L1-Norm이 처벌 된 회귀이므로 수치 적으로 너무 집중적이지 않으며 완전한 기능을 갖춘 R, SAS 및 SPSS 패키지와 몇 가지 matlab 구현이 있습니다. 자세한 내용 은 기본 및 R 패키지 위키입니다.
편집 :
수학 스택 교환 교차점을 확인하십시오. 어떤 사람은 기본적으로 롤링 주문 통계 창을 사용하여 Quantile을 추정하는 매우 간단한 아이디어를 제시하는 몇 가지 논문을 배치했습니다. 말 그대로해야 할 일은 가장 작은 값에서 가장 큰 값으로 값을 정렬하고 원하는 Quantile을 선택한 다음 해당 Quantile 내에서 가장 높은 값을 선택하는 것입니다. 실제 현재 상태를 더 잘 나타내고 있다고 생각되면 가장 최근의 관측치에 더 많은 가중치를 부여 할 수 있습니다. 이것은 아마도 대략적인 추정치를 줄 것이지만, 수행하기가 매우 간단하며 양이 많은 양력 운동을 거칠 필요가 없습니다. 그냥 생각이야
온라인으로 Quantile을 추정 (추적) 할 수 있습니다 (Quantle Regression의 매개 변수에도 동일하게 적용됨). 본질적으로 이것은 Quantile-Regression (인터셉트 만 포함 된 모델로 표현 된 사 분위수)을 정의하는 체크-로스 함수에서 확률 적 그라디언트 하강으로 요약됩니다.
Bell Labs 논문 "대량 추적을위한 증분 Quantile 추정"( ftp://ftp.cse.buffalo.edu/users/azhang/disc/disc01/cd1/out/papers/kdd/p516-chen.pdf )을 참조하십시오.
또 다른 중요한 알고리즘은 M. Greenwald와 S. Khanna 2004입니다. 공간 요약 온라인 Quantile 요약.