2012-10-17 4 views
0

데이터 포인트의 추가/제거로 많은 샘플 데이터 세트의 퀴 트릿을 다시 계산하는 대신 갱신 할 수있는 Java 라이브러리가 있습니까? 내 생각 엔 효율적인 알고리즘은 업데이트를위한 일정한 시간이 필요합니다 (이미 존재하는 포인트 수의 함수가 아님).다시 계산하지 않고 분수를 갱신하십시오.

알려진 알고리즘이 나열되어 있지만, 샘플 세트에서 점을 제거하는 방법이 '그나마 :

  • Colt Stream Quantiles :이 하나의 데이터 조각이 한 번
  • Apache Math Percentile을 추가 제거 방법이 없습니다 :이 일을 단순히 배열의 quantile을 계산하며 배열에서 데이터를 제거 할 수 없습니다.

다음은 샘플 문제입니다. 풍속 세트의 임의이지만 일정한 백분위 팬 속도 (풍속의 추정치)를 말하고 싶습니다. 팬 속도는 몇 밀리 초마다 비동기 적으로 업데이트됩니다. 이 라이브러리를 사용하면 중간 값을 다시 계산하지 않고 한 번에 하나의 풍차의 풍속을 업데이트 할 수 있습니다.

답변

2

데이터의 갱신 가능 정렬 된 표현을 유지 보수하는 경우, Quantile을 확보하는 것은 h 열 길이를 사용하는 것만으로 쉽고 효율적입니다. 예를 들어 N 개의 요소가있는 경우 중앙값은 N/2 위치에 있습니다. 데이터 구조에 새 요소를 삽입하면이 요소는 계속 유지됩니다. 효율성은 새로운 요소 삽입에만 달려 있습니다.

+0

네, 이론적으로는 쉽지만, 나는 털이 많습니다. 그래서, 이것을하는 라이브러리 나 무언가가 있습니다 ... 코드 작성과 테스트를 피하고 싶습니다. – fodon

+0

+1 http://stackoverflow.com/a/2329236/49246 – starblue

1

여러 개의 데이터 일괄 처리를 할 수 있습니다. 이러한 배치의 백분위 수/4 분위수를 결합하여 집계를 추정 할 수 있습니다. 이점은 다른 배치를 다시 계산할 필요없이 여러 배치를 효율적으로 폐기 할 수 있다는 것입니다.

+0

일괄 처리 아이디어는 동일한 개체의 통계에 대해서는 작동하지만 이것은 개체 컬렉션에 대한 통계입니다 ... 질문에 예제를 추가했습니다. – fodon

+0

한 번에 하나씩 추가/제거 하시겠습니까? 링 버퍼와 샘플 수를 유지하면됩니다. 제거 된 값에 대한 감소를 제거하고 추가 된 값의 카운트를 증가시키기 위해. –

+0

그렇습니다. 그렇지만 백분위 수를 계산할 때마다 계산해야합니까? – fodon

관련 문제