Çeyrekleri (Q1, medyan ve Q3) büyük bir veri setinde gözlemleri saklamadan gerçek zamanlı olarak hesaplamam gerekiyor. İlk önce P kare algoritmasını (Jain / Chlamtac) denedim ama memnun kalmadım (biraz fazla cpu kullanımı ve en azından veri setimdeki hassasiyetle ikna olmadım).
Şimdi FAME algoritmasını ( Feldman / Shavitt ) medyanı anında tahmin etmek için kullanıyorum ve Q1 ve Q3'ü de hesaplamak için algoritmayı türetmeye çalışıyorum:
M = Q1 = Q3 = first data value
step =step_Q1 = step_Q3 = a small value
for each new data :
# update median M
if M > data:
M = M - step
elif M < data:
M = M + step
if abs(data-M) < step:
step = step /2
# estimate Q1 using M
if data < M:
if Q1 > data:
Q1 = Q1 - step_Q1
elif Q1 < data:
Q1 = Q1 + step_Q1
if abs(data - Q1) < step_Q1:
step_Q1 = step_Q1/2
# estimate Q3 using M
elif data > M:
if Q3 > data:
Q3 = Q3 - step_Q3
elif Q3 < data:
Q3 = Q3 + step_Q3
if abs(data-Q3) < step_Q3:
step_Q3 = step_Q3 /2
Devam etmek için, veri kümesini ikiye bölmek ve ardından Q1 ve Q3 için aynı algoritmayı yeniden kullanmak için anında elde edilen medyan M'yi kullanır.
Bu bir şekilde çalışıyor gibi gözüküyor ama gösteremiyorum (matematikçi değilim). Kusurlu mu? Soruna uyan herhangi bir öneri veya nihai diğer tekniği takdir ediyorum.
Yardımın için çok teşekkürler !
==== DÜZENLE =====
Bu tür sorularla ilgilenenler için, birkaç hafta sonra, nihayet sadece 100 değerlik bir rezervuar ile Rezervuar Örneklemesi kullanarak sonlandırdım ve çok tatmin edici sonuçlar verdi (bana).