Kuantilleri dinamik olarak izlemek için algoritma


24

Bazı verilerin miktarını tahmin etmek istiyorum. Veriler o kadar büyüktür ki bellekte barındırılamazlar. Ve veriler statik değildir, yeni veriler gelmeye devam eder. Çok sınırlı bellek ve hesaplama ile şu ana kadar gözlemlenen verilerin miktarlarını izlemek için herhangi bir algoritma bilen var mı? P2 algoritmasını yararlı buluyorum , ancak aşırı derecede kuyruklu dağıtılmış verilerim için çok iyi çalışmıyor.


Bazı fikirler için (medyanları tahmin etme bağlamında), istatistik.stackexchange.com/q/346/919 adresindeki başlığa bakın .
whuber

3
Bu soru matematik üzerine yazılmıştır.
kardinal

Yanıtlar:


16

P2 algoritması güzel bir keşif. Kuantiliğin birkaç tahminini yaparak, periyodik olarak güncelleyerek ve kuvantili tahmin etmek için ikinci dereceden (doğrusal değil, kübik değil) enterpolasyon kullanarak çalışır. Yazarlar ikinci dereceden enterpolasyonun kuyruklarda doğrusal enterpolasyondan daha iyi sonuç verdiğini ve kübiklerin çok telaşlı ve zor olacağını iddia ediyorlar.

Bu yaklaşımın "ağır kuyruklu" verileriniz için tam olarak nasıl başarısız olduğunu belirtmezsiniz, ancak tahmin edilmesi kolaydır: ağır kuyruklu dağıtımlar için aşırı miktar tahminleri, büyük miktarda veri toplanana kadar kararsız olacaktır. Ancak tüm verileri saklasanız bile bu bir problem olacak (daha az ölçüde), bu yüzden mucizeler beklemeyin!

Her halükarda, neden yardımcı belirteçleri ayarlamıyorsunuz - onlara ve x 6 diyelim - kuantillerin yatacağı konusunda kesinlikle eminiz ve x 0 ile x 6 arasında kalan tüm verileri saklayalım ? Tamponunuz dolduğunda, bu işaretleri daima güncellemelisiniz, daima x 0x 6 tutunuz . Bunu yapmak için basit bir algoritma, (a) miktarın mevcut P2 tahmini ve (b) x 0'dan küçük veri sayısının ve x 6'dan büyük veri sayısının depolanan sayılarının bir kombinasyonundan oluşturulabilir.x0x6x0x6x0x6x0x6. Bu şekilde, kesin olarak, tüm veri kümesini her zaman kullanılabilir durumda tuttuğunuz gibi miktarını da tahmin edebilirsiniz, ancak yalnızca nispeten küçük bir tampon belleğe ihtiyacınız vardır.

Spesifik olarak, bir veri yapısı teklif am bir dizi ilgili kısmi bilgiler sağlamak için , n veri değerleri X 1 , x 2 , ... , x , n . Burada, y bağlantılı bir listedir(k,y,n)nx1,x2,,xny

y=(x[k+1](n)x[k+2](n)x[k+m](n)).

Bu gösterimde O anlamına gelir i inci küçük n x değerleri kadar okuyun. m sabittir, tamponun boyutu y .x[i](n)ithn xmy

Algoritma, , karşılaşılan ilk m veri değerleriyle doldurularak ve bunları en küçükten en büyüğe doğru sıralanmış sırayla yerleştirerek başlar. Q tahmin edilecek nicelik olsun ; örneğin, q = 0.99. X n + 1 okunması üzerine üç olası eylem vardır:ymqqxn+1

  • Eğer , k değerini artırın .xn+1<x[k+1](n)k

  • Eğer ise hiçbir şey yapmayın.xn+1>x[k+m](n)

  • Aksi takdirde, sokma içine y .xn+1y

Herhangi bir durumda, bu artış .n

Sokma prosedürü koyar içine y sıralanmış sırayla ve aşırı değerlerinden biri ortadan kaldırır y :xn+1yy

  • Eğer , x ( n ) [ k + 1 ] 'i y'den kaldırın ve k değerini artırın ;k+m/2<nqx[k+1](n)yk

  • Aksi takdirde, ' yi y'den kaldırın .x[k+m](n)y

Sunulmuştur yeterince büyük, bu prosedür yüksek olasılıkla dağılım gerçek quantile ayraç. Herhangi bir aşamasında , n o açısından bilinen şekilde tahmin edilebilir x ( n ), [ q n] ve x ( n ) [ q n] olası uzanacaktır, y . ( M'nin yalnızca maksimum veri miktarının karekökü gibi ölçeklenmesi gerektiğine inanıyorum ( Nmnx[qn](n)x[qn](n)ymN), Ancak kanıtlamak için sıkı bir analiz gerçekleştirilmiştir değil.) Herhangi bir oranda, algoritma karşılaştırarak (başarılı olup olmadığının tespit edecektir ve ( k + m ) / n için q ).k/n(k+m)/nq

M = 2 kullanarak 100.000 değere kadar test veq=.5(en zor durumda) bu algoritma doğru değerini elde etmek için bir% 99.5 başarı oranına sahip olduğunu gösterir x ( n ) [ q n] . Bir akışı için, N=10 12 değerleri, yani, (daha iyi bir seçim olacaktır ama üç ya da dört milyon), sadece iki milyon tampon gerektirir. Arabellek için sıralı olarak bağlantılı bir liste kullanmakOgerektirir(log(m=2Nq=.5x[qn](n)N=1012=O(log(N))eforu belirlerken ve silerken maksimum veya minO(1)işlemleridir. Nispeten pahalı yerleştirme tipik olarak sadeceO( √) yapılmalıdır.O(log(N))O(log(N))O(1)kere. Dolayısıyla bu algoritmanın hesaplama maliyetleriO(N+O(N-)veO(O(N-+N-günlük(N-))=O(N-)depoda.O(N-)


Bu, P2 algoritmasının genişletilmiş bir çalışmasıdır. [link] sim.sagepub.com/content/49/4/159.abstract . Toplam 10K RAM'e sahip küçük sensörler üzerinde çalışan uygulamam için depolama hala çok fazla. Yalnızca nicel tahmin için en çok birkaç yüz bayt tüketebilirim.
sinoTrinity

@whuber Aslında genişletilmiş P2'yi uygularım ve homojen ve üssel gibi çeşitli dağıtımlardan üretilen numunelerle test ederim, mükemmel çalışır. Ancak, dağılımı bilinmeyen uygulamamdaki verilere karşı uyguladığımda, bazen yakınsama yapamıyor ve% 300'e kadar göreceli hata (abs (tahmin - fiili) / gerçek) veriyor.
sinoTrinity

2
@sino Algoritmanın tüm verileri kullanmaya kıyasla kalitesi, yazıların ağırlığına bağlı olmamalıdır. Hatayı ölçmek için daha adil bir yol şudur: deneysel cdf olsun. Bir tahmin için q hakkındaki q yüzdelik arasındaki fark ne F ( q ) ve F ( k ) ? 1 / n sırasına göre ise çok iyi yapıyorsun. Başka bir deyişle, P2 algoritmasının verileriniz için döndürdüğü yüzde kaç yüzde? Fq^qF(q^)F(q)1/n
whuber

Haklısın. Az önce bahsettiğim durumda F (qˆ) ve F (q) değerlerini% 300'e kadar göreceli hatayla ölçtüm. 0,7 q için, q almost yaklaşık 0,7'dir ve bu ihmal edilebilir hatayla sonuçlanır. Ancak, 0,9 q için qˆ 0,95 civarında gibi görünüyor. Sanırım bu yüzden% 300'e kadar büyük bir hatam var. 0,95 değil neden 0,95 olduğu hakkında fikrin var mı? BTW, buraya rakam yazabilir miyim ve sizin gibi matematiksel formülü nasıl gönderebilirim?
sinoTrinity

2
@whuber Uygulamamın genişletilmiş P2'ye uygun olduğuna eminim. Aynı anda 0,8, 0,85, 0,9, 0,95 miktarını tahmin ettiğimde 0,9 hala 0,95 ya da daha da büyür. Bununla birlikte, eğer aynı anda 0.8, 0.85, 0.9, 0.95 ve 1.0 kuantikleri izlenirse , 0.9, 0.9'a çok yaklaşır .
sinoTrinity

5

Bence Whuber'in önerisi harika ve önce bunu denerdim. Ancak, gerçekten bulursanız, depolama veya başka bir nedenden dolayı işe yaramazsa, burada P2'nin farklı bir genellemesi için bir fikir. Whuber'un önerdiği kadar ayrıntılı değil - daha çok çözüm yerine bir araştırma fikri gibi.O(N-)

Orijinal P2 algoritmasının önerdiği gibi , nicelikleri , p / 2 , p , ( 1 + p ) / 2 ve 1'de izlemek yerine, daha fazla niceliği (ancak yine de sabit bir sayıyı) tutabilirsiniz. Algoritma buna çok basit bir şekilde izin veriyor gibi gözüküyor; Yapmanız gereken tek şey, gelen noktalar için doğru "kepçe" yi ve miktarları güncellemenin doğru yolunu hesaplamaktır (bitişik sayıları kullanarak dörtlü olarak).0p/2p(1+p)/21

puan takip ettiğinizi söyleyin . En quantile izleme deneyebilirsiniz 0 , p / 12 , ... , p 11 / 12 , s , p + ( 1 - p ) / 12 , ... , p + 11 ( 1 - p ) / 12 , 1 (toplama eşit uzaklıkta arasında puan 0 ve p ve aralarında s250p/12p11/12pp+(1p)/12p+11(1p)/1210ppve ), ya da hatta kullanılarak 22 Chebyshev düğümleri formunun p / 2 ( 1 + cos ( 2 I - 1 ) π122 vep+(1-p)/2(1+cos(2i-1)πp/2(1+cos(2i1)π22). Eğerp,0veya1'eyakınsa, daha az olasılık kütlesi olan ve diğer tarafa daha fazla olan taraflara daha az nokta koymayı deneyebilirsiniz.p+(1p)/2(1+cos(2i1)π22)p01

Bunu sürdürmeye karar verirseniz, ben (ve muhtemelen bu sitedeki diğerleri) çalışıp çalışmadığını bilmek isterim ...


+1 OP’nin kısıtlamaları göz önüne alındığında bunun harika bir fikir olduğunu düşünüyorum. Herkesin bir umut edebileceği bir yaklaşımdır, bu yüzden püf noktası, dar olma ve istenen kuantili içeren olasılığı yüksek olan kutuları toplamaktır.
whuber



2

Kuantil regresyona bakardım. Bakmak istediğiniz miktarın parametrik bir tahminini belirlemek için kullanabilirsiniz. Normallik ile ilgili bir varsayımda bulunmaz, bu yüzden heteroskedastisiteyi oldukça iyi idare eder ve bunlara yuvarlanan bir pencere olarak kullanılabilir. Temel olarak bir L1-Norm cezalandırılmış regresyondur, bu yüzden sayısal olarak yoğun değildir ve oldukça iyi özelliklere sahip bir R, SAS ve SPSS paketleri ile birlikte birkaç matlab uygulaması vardır. İşte ana ve R paketi daha fazla bilgi için wiki'leri.

Düzenlendi:

Matematik yığını değişimi çapraz bağlantıya göz atın: Birisi, miktarları tahmin etmek için sadece basit bir sıralı istatistik istatistiği penceresini kullanma fikrini ortaya koyan bir kaç kağıda oturmuş. Kelimenin tam anlamıyla yapmanız gereken, değerleri en küçüğünden en büyüğüne göre sıralamak, istediğiniz niceliği seçmek ve bu nicelik içindeki en yüksek değeri seçmektir. Gerçek güncel koşulları daha iyi temsil ettiklerini düşünüyorsanız, en son gözlemlere daha fazla ağırlık verebilirsiniz. Bu muhtemelen zorlu tahminler verecek, ancak yapılması oldukça basit ve nicel ağır kaldırma hareketlerinden geçmek zorunda değilsiniz. Sadece bir düşünce.


1

Maddeleri çevrimiçi olarak tahmin etmek (ve izlemek) mümkündür (aynısı kuantil regresyon parametreleri için de geçerlidir). Temel olarak, bu, kuantil regresyonu tanımlayan kontrol kaybı fonksiyonunda (sadece bir kesişme içeren bir model tarafından temsil edilen kuantiller), örn. Gözlemlerin geldiği zaman ve olduğu zaman güncellenmesi gibi stokastik gradyan inişine kadar kaymaktadır.

Bell Laboratuarları makalesine bakın "Masif İzleme için Artan Miktarsal Tahmin" ( ftp://ftp.cse.buffalo.edu/users/azhang/disc/disc01/cd1/out/papers/kdd/p516-chen.pdf )


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.