এই সমাধানটি প্রশ্নের উত্তরটিতে @ ইন্নু দ্বারা করা একটি পরামর্শ কার্যকর করে:
আপনি এ পর্যন্ত দেখা সমস্ত ডেটা থেকে 100 বা 1000 আকারের অভিন্ন নমুনাযুক্ত এলোমেলো উপসেটটি বজায় রাখতে পারেন। এই সেট এবং সম্পর্কিত "বেড়া" আপডেট করা যেতে পারেO(1) সময়।
একবার এই উপসেটটি কীভাবে বজায় রাখা যায় তা জানার পরে, আমরা এই জাতীয় নমুনা থেকে জনসংখ্যার গড় অনুমান করতে আমাদের যে কোনও পদ্ধতি বেছে নিতে পারি। এটি একটি সর্বজনীন পদ্ধতি, যা কোনও অনুমানই না করে, এটি কোনও নির্ভুলতার মধ্যে কোনও ইনপুট স্ট্রিমের সাথে কাজ করবে যা স্ট্যান্ডার্ড স্ট্যাটিস্টিকাল স্যাম্পলিং সূত্রগুলি ব্যবহার করে ভবিষ্যদ্বাণী করা যেতে পারে। (যথার্থতা নমুনা আকারের বর্গমূলের সাথে বিপরীতভাবে আনুপাতিক।
এই অ্যালগরিদম ডেটা স্ট্রিম ইনপুট হিসাবে গ্রহণ করে x(t), t=1,2,…, একটি নমুনা আকার m, এবং নমুনার একটি স্ট্রিম আউটপুট s(t) যার প্রতিটি জনসংখ্যার প্রতিনিধিত্ব করে X(t)=(x(1),x(2),…,x(t))। বিশেষত, জন্য1≤i≤t, s(i) আকারের একটি সাধারণ এলোমেলো নমুনা m থেকে X(t) (প্রতিস্থাপন ছাড়াই)
এটি হওয়ার জন্য, এটি যথেষ্ট যে প্রতিটি m-সামেন্ট সাবলেট {1,2,…,t} এর সূচক হওয়ার সমান সম্ভাবনা রয়েছে x ভিতরে s(t)। এটি সেই সুযোগটি বোঝায়x(i), 1≤i<t, ভিতরে আছে s(t) সমান m/t প্রদত্ত t≥m।
শুরুতে আমরা কেবল অবধি স্ট্রিম সংগ্রহ করি mউপাদান সংরক্ষণ করা হয়েছে। সেই সময়ে কেবলমাত্র একটি সম্ভাব্য নমুনা রয়েছে, সুতরাং সম্ভাবনার শর্তটি তুচ্ছভাবে সন্তুষ্ট।
অ্যালগরিদম যখন নেয় তখন t=m+1। সূক্ষ্মভাবে মনে করুন যেs(t) এর একটি সাধারণ এলোমেলো নমুনা X(t) জন্য t>m। অস্থায়ীভাবে সেট করা হয়েছেs(t+1)=s(t)। দিনU(t+1) অভিন্ন র্যান্ডম ভেরিয়েবল (নির্মাণের জন্য ব্যবহৃত পূর্ববর্তী কোনও ভেরিয়েবলের চেয়ে পৃথক) s(t))। যদিU(t+1)≤m/(t+1) তারপরে একটি এলোমেলোভাবে নির্বাচিত উপাদানটি প্রতিস্থাপন করুন s দ্বারা x(t+1)। এটাই পুরো পদ্ধতি!
পরিষ্কারভাবে x(t+1) সম্ভাবনা আছে m/(t+1) মধ্যে থাকার s(t+1)। অধিকন্তু, আবেশ অনুমান দ্বারা,x(i) সম্ভাবনা ছিল m/t মধ্যে থাকার s(t) কখন i≤t। সম্ভাবনা সহm/(t+1)×1/m = 1/(t+1) এটি থেকে সরানো হবে s(t+1), যেহেতু এটির সমান সম্ভাবনা
mt(1−1t+1)=mt+1,
ঠিক যেমন প্রয়োজন। অন্তর্ভুক্তি দ্বারা, তারপর, সমস্ত অন্তর্ভুক্তি সম্ভাবনাx(i) মধ্যে s(t)সঠিক এবং এটি পরিষ্কার যে এই অন্তর্ভুক্তির মধ্যে কোনও বিশেষ সম্পর্ক নেই। এটি প্রমাণ করে যে অ্যালগোরিদমটি সঠিক।
অ্যালগরিদম দক্ষতা হয় O(1) কারণ প্রতিটি পর্যায়ে সর্বাধিক দুটি এলোমেলো সংখ্যা গণনা করা হয় এবং এর অ্যারের বেশিরভাগ এক উপাদান mমান প্রতিস্থাপন করা হয়। স্টোরেজ প্রয়োজনীয়তাO(m)।
এই অ্যালগরিদমের ডেটা কাঠামো নমুনা নিয়ে গঠিত consists s সূচকের সাথে একসাথে t জনগনের X(t)যে এটি নমুনা। প্রাথমিকভাবে আমরা নিতেs=X(m) এবং এর জন্য অ্যালগরিদম নিয়ে এগিয়ে যান t=m+1,m+2,….R
আপডেট করার জন্য এখানে একটি বাস্তবায়ন দেওয়া আছে(s,t) একটি মান সহ x উৎপাদন করা (s,t+1)। (যুক্তি n
ভূমিকা পালন করেtএবং sample.size
হয়m। সূচকt কলার দ্বারা রক্ষণাবেক্ষণ করা হবে।)
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
চলমান নমুনা বজায় রেখে উত্পাদিত গড় অনুমানের ক্রম50মানগুলি যখন প্রতিটি মুহুর্তে উপলব্ধ সমস্ত ডেটা actual
থেকে উত্পাদিত গড় অনুমানের ক্রম হয় । প্লটটি ডেটা (ধূসর), এবং (কালো রঙের) দেখায় এবং এই নমুনা পদ্ধতির দুটি পৃথক প্রয়োগ (রঙে) দেখায় । চুক্তিটি প্রত্যাশিত নমুনা ত্রুটির মধ্যে রয়েছে:actual
plot(x, pch=".", col="Gray")
lines(1:dim(actual)[2], actual["Mean", ])
lines(1:dim(online)[2], online["Mean", ], col="Red")
গড় শক্তিশালী অনুমানের জন্য, দয়া করে আমাদের সাইটটি অনুসন্ধান করুন Outlierএবং সম্পর্কিত পদ। বিবেচনা করার মতো সম্ভাবনার মধ্যে রয়েছে উইনসরাইজড মাধ্যম এবং এম-এসেসটেক্টর।