পর্যবেক্ষণগুলি সংরক্ষণ না করে কোয়ার্টাইলগুলির অনলাইন অনুমান


13

আমার পর্যালোচনাগুলি সংরক্ষণ না করে রিয়েল-টাইমে কোয়েলটিস (কিউ 1, মিডিয়ান এবং কিউ 3) গণনা করা দরকার। আমি প্রথমে পি স্কোয়ার অ্যালগোরিদম (জৈন / ক্ল্যামটাক) চেষ্টা করেছিলাম তবে আমি এতে সন্তুষ্ট নই (কিছুটা বেশি সিপিইউ ব্যবহার করে এবং আমার ডেটাসেটে নির্ভুলতার দ্বারা নিশ্চিত নই)।

আমি এখন ফ্লাই অ্যালগরিদম ( ফিল্ডম্যান / শ্যাভিট ) ফ্লাইতে মিডিয়েনটি অনুমান করার জন্য ব্যবহার করি এবং কিউ 1 এবং কিউ 3 কেও গণনা করতে অ্যালগরিদমটি উত্পন্ন করার চেষ্টা করব:

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

পুনরায় শুরু করতে, এটি ফ্লাইটে প্রাপ্ত মিডিয়ান এম ব্যবহার করে ডেটা সেটটিকে দুটি করে বিভক্ত করতে এবং তারপরে Q1 এবং Q3 উভয়ের জন্য একই অ্যালগরিদম পুনরায় ব্যবহার করতে।

এটি কোনওভাবে কাজ করে বলে মনে হচ্ছে তবে আমি প্রদর্শন করতে পারছি না (আমি গণিতবিদ নই)। এটি ত্রুটিযুক্ত? আমি কোনও পরামর্শ বা চূড়ান্তভাবে অন্যান্য সমস্যার জন্য উপযুক্ত কৌশলগুলি প্রশংসা করব।

আপনার সাহায্যের জন্য আপনাকে অনেক ধন্যবাদ !

==== সম্পাদনা =====

যারা এই জাতীয় প্রশ্নে আগ্রহী তাদের জন্য, কয়েক সপ্তাহ পরে, আমি অবশেষে কেবলমাত্র 100 টি মূল্যবোধের রিভারভায়ার সহ জলাধার স্যাম্পলিং ব্যবহার করে শেষ করেছি এবং এটি খুব সন্তোষজনক ফলাফল দিয়েছে (আমার কাছে)।


আপনি যে প্রমাণটি সন্ধান করছেন আপনি কি স্লাইডগুলিতে লিঙ্কভুক্ত চেইন বিশ্লেষণের অনুরূপ পদ্ধতিতে উদাহরণের সংখ্যা বাড়ার সাথে সাথে Q1 এবং Q2 সত্য কোয়ান্টাইলগুলিতে রূপান্তরিত হয়েছে? বাস্তবায়নের ক্ষেত্রে, উপরের অ্যালগরিদমটি ত্রুটিযুক্ত বলে মনে হচ্ছে না (আমি আর স্ট্যান্ডার্ড স্বাভাবিকের জন্য প্রায় কোয়ান্টাইলগুলি পরীক্ষা করেছি এবং অ্যালগোরিদম সূক্ষ্মভাবে কাজ করে)।
থিজা

1
@ ওজা আপনাকে ধন্যবাদ, আমি কোনও প্রমাণ (খুব বেশি কাজ) খুঁজছি না তবে কেবল পরামর্শ এবং মন্তব্য করছি, আমি যে প্রধান সমস্যাটি দেখছি তা হ'ল মিডিয়ানের চলমান অনুমানের উপর ভিত্তি করে গণনাটি ভিত্তিক করা, যেমন ভুবার ইঙ্গিত করেছে।
লুই হিউজস

উত্তর:


3

মিডিয়ান হ'ল সেই বিন্দুতে যেখানে ১/২ টি পর্যবেক্ষণগুলি নীচে এবং উপরে ১/২ হয়। একইভাবে, 25 তম পেরেনসটাইল হ'ল মিনিট এবং মিডিয়ানের মধ্যে ডেটার জন্য মিডিয়ান এবং 75 তম পারসেন্টাইল হ'ল মিডিয়ান এবং সর্বাধিকের মধ্যে মধ্যম, সুতরাং হ্যাঁ, আমি মনে করি আপনি প্রথমে যে মিডিয়ান অ্যালগরিদম ব্যবহার করবেন তা প্রয়োগ করার ক্ষেত্রে আপনি দৃ ground় ভিত্তিতে রয়েছেন I সম্পূর্ণ ডেটা এটি বিভাজন সেট করে, এবং তারপরে দুটি ফলস টুকরা।

আপডেট :

স্ট্যাকওভারফ্লো সম্পর্কিত এই প্রশ্নটি এই কাগজটির দিকে নিয়ে যায়: রাজ জৈন, ইমরিচ ক্ল্যামটাক: স্টোর অবজারভেশন ছাড়াই কোয়ান্টাইলস এবং হিস্টোগ্রামগুলির গতিশীল গণনার জন্য পিও অ্যালগরিদম। কলাম। এসিএম 28 (10): 1076-1085 (1985) যার বিমূর্ততা এটি সম্ভবত আপনার জন্য খুব আগ্রহের ইঙ্গিত দেয়:

মিডিয়েন এবং অন্যান্য কোয়ান্টাইলের গতিশীল গণনা QF এর জন্য একটি হিউরিস্টিক অ্যালগরিদম প্রস্তাবিত। পর্যবেক্ষণগুলি তৈরি হওয়ার সাথে সাথে অনুমানগুলি গতিময়ভাবে উত্পাদিত হয়। পর্যবেক্ষণগুলি সংরক্ষণ করা হয় না; অতএব, পর্যবেক্ষণের সংখ্যা নির্বিশেষে অ্যালগরিদমের খুব ছোট এবং স্থিত স্টোরেজ প্রয়োজন। এটি এটিকে একটি কোয়ান্টিল চিপ বাস্তবায়নের জন্য আদর্শ করে তোলে যা শিল্প নিয়ন্ত্রণকারী এবং রেকর্ডারগুলিতে ব্যবহার করা যেতে পারে। অ্যালগরিদম আরও হিস্টগ্রাম প্লট করতে প্রসারিত করা হয়। অ্যালগরিদমের যথার্থতা বিশ্লেষণ করা হয়।


4
এই জবাবটি দুটি সূক্ষ্ম পয়েন্টকে অগ্রাহ্য করে, একটি গুরুত্বহীন তবে অন্যটি সম্ভবত খুব গুরুত্বপূর্ণ। গুরুত্বহীন একটি হ'ল ডাবল-বিভক্তকরণের কৌশলটি উপরের এবং নীচের কব্জাগুলি গণনা করে যা নমুনা আকারের উপর নির্ভর করে মধ্য থেকে কিছুটা পৃথক হতে পারে। গুরুত্বপূর্ণটি হ'ল ডাবল-বিভাজকটি মধ্যযুগের চলমান অনুমানের উপর ভিত্তি করে প্রদর্শিত হয় । এই অনুমানের সাথে প্রকৃত মধ্যকের মধ্যে যে কোনও প্রকারের পার্থক্য হ'ল কব্জাগুলিও আলাদা হতে পারে। স্বজ্ঞাতভাবে, এটি কোনও সমস্যা হওয়া উচিত নয় কারণ ডেটার পরিমাণ আরও বড় হয়, তবে এটি এমন একটি বিষয় যাটির জন্য কিছু বিশ্লেষণ প্রয়োজন।
হোবার

n1:32:21:1n

2
@ অভ্রাহাম, কাগজটি নির্দেশ করার জন্য ধন্যবাদ, যেমন আমি উল্লেখ করেছি যে আমি ইতিমধ্যে চেইন এবং ক্ল্যামট্যাক থেকে পি-স্কোয়ার অ্যালগরিদম চেষ্টা করেছি। আমার ডেটা অ্যালগো সেট করে আমি ডিক্রিবিড আরও ভাল ফলাফল দেয় (এমএসই) এবং দ্রুত। আমি তবুও প্রশ্ন ছিল যে এটি তবুও কিছু সমস্যা হতে পারে। যেহেতু হুবুহু মন্তব্য করেছে যে এটি একটি চলমান প্রাক্কলন ব্যবহার করে এটি একটি সম্ভাব্য সমস্যা; তবে আমি জানি না এটি সত্যিই গুরুত্বপূর্ণ কিনা।
লুই হিউজস

উফফফ, এটি দেখে এবং এটি ভুলে গেছি। আমার ক্ষমা।
অভ্রাহাম

0

আপনি পোস্ট করেছেন এমন পদ্ধতিতে খুব সামান্য পরিবর্তন এবং আপনি সমস্ত কোয়ান্টাইলকে গণনা না করে যেকোন স্বেচ্ছাসেবী পারসেন্টাইল গণনা করতে পারেন। পাইথন কোডটি এখানে:

class RunningPercentile:
    def __init__(self, percentile=0.5, step=0.1):
        self.step = step
        self.step_up = 1.0 - percentile
        self.step_down = percentile
        self.x = None

    def push(self, observation):
        if self.x is None:
            self.x = observation
            return

        if self.x > observation:
            self.x -= self.step * self.step_up
        elif self.x < observation:
            self.x += self.step * self.step_down
        if abs(observation - self.x) < self.step:
            self.step /= 2.0

এবং একটি উদাহরণ:

import numpy as np
import matplotlib.pyplot as plt

distribution = np.random.normal
running_percentile = RunningPercentile(0.841)
observations = []
for _ in range(1000000):
    observation = distribution()
    running_percentile.push(observation)
    observations.append(observation)

plt.figure(figsize=(10, 3))
plt.hist(observations, bins=100)
plt.axvline(running_percentile.x, c='k')
plt.show()

1 টি এসডি পারসেন্টাইল সহ সাধারণ বিতরণ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.