이 솔루션은 질문에 대한 의견으로 @Innuo의 제안을 구현합니다.
지금까지 본 모든 데이터에서 크기가 100 또는 1000 인 균일하게 샘플링 된 임의의 하위 집합을 유지할 수 있습니다. 이 세트와 관련 "울타리"는 시간에 업데이트 할 수 있습니다 .O(1)
이 부분 집합을 유지하는 방법을 알고 나면 그러한 표본에서 모집단의 평균을 추정하기 위해 원하는 방법을 선택할 수 있습니다 . 이것은 표준 통계 샘플링 공식을 사용하여 예측할 수있는 정확도 내에서 모든 입력 스트림 과 작동하는 가정을 전혀 사용하지 않는 보편적 인 방법 입니다. (정확도는 표본 크기의 제곱근에 반비례합니다.)
이 알고리즘은 입력으로서 데이터 스트림 수락 샘플 사이즈 하고, 샘플들의 스트림을 출력하는 있는 각 인구 나타낸다 . 구체적으로 , 는 에서 크기가 간단한 랜덤 표본입니다 (대체 없음).x(t), t=1,2,…,ms(t)X(t)=(x(1),x(2),…,x(t))1≤i≤ts(i)mX(t)
이를 위해서는 의 모든 요소 서브 세트가 에서 의 인덱스가 될 가능성이 동일해야 합니다. 이 가능성을 의미하는 에 와 동일 제공 .m{1,2,…,t}xs(t)x(i), 1≤i<t,s(t)m/tt≥m
처음에는 요소가 저장 될 때까지 스트림을 수집합니다 . 이 시점에서 가능한 샘플은 하나뿐이므로 확률 조건이 거의 충족됩니다.m
때 알고리즘이 대신 합니다. 유도 적으로 는 대한 의 단순한 랜덤 표본 이라고 가정합니다 . 임시적으로 . 하자 (구성하는 데 사용되는 이전의 독립 변수 균일 랜덤 변수 일 수 ). 경우 다음에 대체 임의로 선택된 요소 에 의해 . 그것은 전체 절차입니다!t=m+1s(t)X(t)t>ms(t+1)=s(t)U(t+1)s(t)U(t+1)≤m/(t+1)sx(t+1)
분명히 확률 갖는다 로되는 . 또한, 유도 가설에 의해, 는 때 있을 확률 를 가졌다 . 확률 = 으로 남아있을 확률은 에서 제거됩니다.x(t+1)m/(t+1)s(t+1)x(i)m/ts(t)i≤tm/(t+1)×1/m1/(t+1)s(t+1)
mt(1−1t+1)=mt+1,
정확히 필요한만큼. 유도함으로써, 에서 의 모든 포함 확률 은 정확하며 이러한 포함 사이에 특별한 상관 관계가 없음이 분명합니다. 알고리즘이 올바른지 확인합니다.x(i)s(t)
알고리즘 효율은 입니다. 각 단계에서 최대 2 개의 임의의 숫자가 계산되고 값 배열의 최대 하나의 요소 가 대체되기 때문입니다. 저장 요구 사항은 입니다.O(1)mO(m)
이 알고리즘의 데이터 구조는 샘플링 하는 모집단 의 인덱스 와 함께 샘플 로 구성됩니다 . 처음에는 을 취하고 대한 알고리즘을 진행합니다 다음은 을 생성하기 위해 값으로 를 업데이트 하는 구현 입니다. (인수 의 역할을 담당 하고 있다 . 인덱스 호출자에 의해 유지된다.)stX(t)s=X(m)t=m+1,m+2,….R
(s,t)x(s,t+1)n
tsample.size
mt
update <- function(s, x, n, sample.size) {
if (length(s) < sample.size) {
s <- c(s, x)
} else if (runif(1) <= sample.size / n) {
i <- sample.int(length(s), 1)
s[i] <- x
}
return (s)
}
이를 설명하고 테스트하기 위해 평범한 (비 강건한) 평균 추정값을 사용하고 에서 추정 한 평균을 의 실제 평균 각 단계에서 보이는 누적 데이터 집합 과 비교합니다. ). 나는 꽤 매끄럽게 변경되지만 주기적으로 극적인 점프를 겪는 다소 어려운 입력 스트림을 선택했습니다. 의 표본 크기 는 상당히 작으므로 이러한 도표에서 표본 변동을 볼 수 있습니다.s(t)X(t)m=50
n <- 10^3
x <- sapply(1:(7*n), function(t) cos(pi*t/n) + 2*floor((1+t)/n))
n.sample <- 50
s <- x[1:(n.sample-1)]
online <- sapply(n.sample:length(x), function(i) {
s <<- update(s, x[i], i, n.sample)
summary(s)})
actual <- sapply(n.sample:length(x), function(i) summary(x[1:i]))
이 시점 online
에서이 러닝 샘플을 값 으로 유지하여 생성 된 평균 추정치 시퀀스가되는 반면 각 순간에 사용 가능한 모든 데이터 에서 생성 된 평균 추정치 시퀀스가 있습니다. 플롯은 데이터 (회색), (검정색) 및이 샘플링 절차의 두 가지 독립적 인 응용 프로그램 (색상)을 보여줍니다. 계약이 예상되는 샘플링 오류 내에 있습니다.50actual
actual
plot(x, pch=".", col="Gray")
lines(1:dim(actual)[2], actual["Mean", ])
lines(1:dim(online)[2], online["Mean", ], col="Red")
평균의 강력한 추정량을 얻으려면 사이트를 검색하십시오. 국외자관련 용어. 고려할만한 가치 중 하나는 Winsorized 평균 및 M 추정기입니다.