কণা ফিল্টার: পুনরায় মডেলিং কীভাবে করবেন?


24

আমি একটি কণা ফিল্টারের মূল নীতিটি বুঝতে পারি এবং এটি প্রয়োগের চেষ্টা করেছি। যাইহোক, আমি পুনর্নির্মাণের অংশে স্তব্ধ হয়ে গেলাম।

তাত্ত্বিকভাবে বলতে গেলে এটি বেশ সহজ: পুরাতন (এবং ভারিত) কণাগুলির সেট থেকে, প্রতিস্থাপনের সাথে নতুন কণার একটি সেট আঁকুন। এমনটি করার সময়, উচ্চতর ওজনযুক্ত কণাগুলির পক্ষে favor উচ্চ ওজনযুক্ত কণাগুলি প্রায়শই টানা হয় এবং কম ওজনযুক্ত কণা প্রায়শই কম হয়। সম্ভবত শুধুমাত্র একবার বা না। পুনঃনির্মাণের পরে, সমস্ত ওজন একই ওজন হিসাবে নির্ধারিত হয়।

এটি কীভাবে বাস্তবায়ন করা যায় সে সম্পর্কে আমার প্রথম ধারণাটি মূলত এটি ছিল:

  1. ওজন স্বাভাবিক করুন
  2. প্রতিটি ওজনকে মোট কণার সংখ্যা দ্বারা গুণ করুন
  3. সেই মাপানো ওজনকে নিকটতম পূর্ণসংখ্যার দিকে গোল করে (যেমন int()পাইথন সহ)

এখন প্রতিটি কণা কতবার আঁকতে হবে তা আমার জানা উচিত, তবে রাউন্ডঅফ ত্রুটির কারণে আমার পুনরায় মডেলিং পদক্ষেপের চেয়ে কম কণা থাকতে হবে।

প্রশ্ন: পুনর্নির্মাণের পদক্ষেপের আগের মতো একই সংখ্যক কণা পেতে আমি কীভাবে অনুপস্থিত কণাগুলি "পূরণ" করব? বা, যদি আমি এখানে পুরোপুরি ট্র্যাক থেকে দূরে থাকি তবে আমি কীভাবে সঠিকভাবে পুনরায় নমুনা করব?

উত্তর:


19

আপনি যে ইস্যুতে চলেছেন তা প্রায়শই নমুনা দারিদ্র্য হিসাবে উল্লেখ করা হয়। মোটামুটি সহজ উদাহরণ সহ আপনার পন্থাটি কেন এটি ভোগ করে তা আমরা দেখতে পারি। ধরা যাক আপনার কাছে 3 টি কণা রয়েছে এবং সেগুলির ওজন স্বাভাবিককরণের ওজন 0.1, 0.1, 0.8। তারপরে প্রতিটি ওজনকে তিনটি 0.3, 0.3 এবং 2.4 দিয়ে গুণমান। তারপরে গোল, 0, 0, 2 উপার্জন করবে এর অর্থ আপনি প্রথম দুটি কণা বাছাই করবেন না এবং শেষটি দুটি বার বাছাই করা হবে। এখন আপনি দুটি কণায় নেমে গেছেন। আমার সন্দেহ হয় আপনি যখন বলছেন তখন এটিই আপনি দেখতে পেয়েছেন "রাউন্ডফ ত্রুটির কারণে, আমি কম কণা রেখেছি"।

একটি বিকল্প নির্বাচন পদ্ধতি নিম্নরূপ হবে।

  1. ওজন স্বাভাবিক করুন।
  2. ওজনের যোগফলের যোগফলের একটি অ্যারের গণনা করুন।
  3. এলোমেলোভাবে একটি সংখ্যা উত্পন্ন করুন এবং সংখ্যার সাথে সম্পর্কিত যে ক্রমবর্ধমান ওজন অ্যারেতে কোন ব্যাপ্তি রয়েছে তা নির্ধারণ করুন।
  4. এই ব্যাপ্তির সূচকটি তৈরি হওয়া কণার সাথে মিল রাখে।
  5. আপনার পছন্দসই সংখ্যার নমুনা না পাওয়া পর্যন্ত পুনরাবৃত্তি করুন।

সুতরাং, উপরের উদাহরণটি ব্যবহার করে আমরা সাধারণ ওজন দিয়ে শুরু করব। তারপরে আমরা অ্যারে গণনা করব [0.1, 0.2, 1], সেখান থেকে আমরা 3 টি এলোমেলো সংখ্যা গণনা করি 0.15, 0.38 এবং 0.54 বলে। এটি আমাদের দ্বিতীয় কণা একবার এবং তৃতীয় কণা দু'বার বাছাই করতে চাই। মুল বক্তব্যটি এটি ছোট কণাগুলি প্রচারের সুযোগ দেয়।

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


1
অন্তর্দৃষ্টিপূর্ণ প্রতিক্রিয়া জন্য ধন্যবাদ! আপনার প্রস্তাবিত নির্বাচন পদ্ধতিটি পরিচিত বলে মনে হচ্ছে। যদি আমি সঠিকভাবে স্মরণ করি তবে এটি ছিল নমুনা দারিদ্র্যের সমস্যাটির চিকিত্সার একটি সাধারণ উপায়। আমি এটি আগে দেখেছি কিন্তু এই পদ্ধতির কারণটি সত্যই বুঝতে পারি নি। এখন আমি আরও ভাল জানি!
ড্যানিয়েল এবার্টস

2
আমি মনে করি দারিদ্র্যের নমুনা দেওয়ার আপনার ব্যাখ্যাটি কিছুটা বিভ্রান্তিকর হতে পারে। পোস্টারটি কণা হারিয়েছে এমন বিষয়টি পুনরায় মডেল করার জন্য অনুপযুক্ত পদ্ধতির কারণে। কণা দারিদ্র্যতা তখন যখন আপনার উত্তরোত্তর বিতরণ যথাযথভাবে কণাগুলি দ্বারা প্রতিনিধিত্ব না করা হয়।
Jakob

9

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

পুনঃনির্মাণটি সঠিকভাবে সম্পাদন করার জন্য বেশ কয়েকটি উপায় রয়েছে। বিভিন্ন পদ্ধতির তুলনা করে কণা ফিল্টারগুলির জন্য পুনরায় মডেলিং অ্যালগরিদম নামে একটি সুন্দর কাগজ রয়েছে । কেবল একটি দ্রুত ওভারভিউ দিতে:

  • বহুজাতিক পুনঃনির্মাণ: কাগজের একটি স্ট্রিপ কল্পনা করুন যেখানে প্রতিটি কণার একটি বিভাগ রয়েছে, যেখানে দৈর্ঘ্য তার ওজনের সাথে সমানুপাতিক। স্ট্র্যাপে এলোমেলোভাবে একটি অবস্থান বাছাই করুন এন, এবং বিভাগের সাথে যুক্ত কণাটি চয়ন করুন।

  • অবশিষ্ট পুনঃনির্মাণ: এই পদ্ধতিটি প্রথমে প্রতিটি কণাকে প্রত্যাশিত মানের তাদের পূর্ণসংখ্যার তল বরাদ্দ করে নমুনাটির বৈচিত্রটি হ্রাস করার চেষ্টা করে এবং বাকী অংশটি বহুজাতিক পুনর্নির্মাণে ছেড়ে দেয়। উদাহরণস্বরূপ, 2.5 এর প্রত্যাশিত মানযুক্ত একটি কণার পুনরায় স্যাম্প্লেড সেটে 2 টি অনুলিপি এবং অপেক্ষাকৃত 0.5 টির প্রত্যাশিত মান থাকবে।

  • সিস্টেমেটিকাল রিসম্পলিং: নিয়মিত ব্যবধানযুক্ত চিহ্ন সহ কোনও শাসককে নিন, যেমন এন চিহ্নগুলি আপনার কাগজের স্ট্রিপের সমান দৈর্ঘ্য। এলোমেলোভাবে আপনার স্ট্রিপের পাশে শাসককে রাখুন। চিহ্নগুলিতে কণা নিন।

  • স্ট্র্যাটেড রিম্যাম্পলিং: নিয়মিত পদ্ধতিতে পুনরায় মডেলিংয়ের সমান, বাদে যে শাসকের উপর চিহ্নগুলি সমানভাবে স্থাপন করা হয় না, তবে ব্যবহূত ০.১ / এন থেকে এন এলোমেলো প্রক্রিয়াগুলির নমুনা হিসাবে যোগ করা হয়।

সুতরাং আপনার প্রশ্নের জবাব দিতে: আপনি যা প্রয়োগ করেছেন তা অবশেষের নমুনার আকারে বাড়ানো যেতে পারে। আপনি অনুস্মারকগুলির বহুবার্ষিক বিতরণের ভিত্তিতে স্যাম্পলিং করে নিখোঁজ স্লটগুলি পূরণ করুন।


ইতিমধ্যে আমার ফলো-আপ প্রশ্নের উত্তর দেওয়ার জন্য +1 :)
ড্যানিয়েল এবার্টস

5

পাইথন কোডের উদাহরণের জন্য যা পুনরায় স্যাম্পলিংকে যথাযথভাবে প্রয়োগ করে, আপনি এই গিথুব প্রকল্পটি কার্যকর হতে পারেন: https://github.com/mjl/particle_filter_demo

এছাড়াও, এটি পুনরায় মডেলিং প্রক্রিয়াটির নিজস্ব ভিজ্যুয়াল উপস্থাপনার সাথে আসে, এটি আপনাকে নিজের বাস্তবায়ন ডিবাগ করতে সহায়তা করে। কণা ফিল্টার অপারেশন

এই ভিজ্যুয়ালাইজেশনে, সবুজ কচ্ছপ প্রকৃত অবস্থানটি দেখায়, বড় ধূসর বিন্দুটি আনুমানিক অবস্থান দেখায় এবং রূপান্তরিত হয়ে সবুজ হয়ে যায়। ওজন সম্ভাবনা (লাল) থেকে অসম্ভব (নীল) হয়ে যায়।


লিঙ্কের জন্য ধন্যবাদ। অন্যান্য ব্যক্তি কীভাবে একটি অ্যালগরিদম বাস্তবায়িত করে তা দেখতে সর্বদাই অন্তর্দৃষ্টিপূর্ণ।
ড্যানিয়েল এবার্টস

এটি একটি কণা ফিল্টার রূপান্তরিতকরণের একটি দৃশ্য ization নিশ্চিত নয় যে এটি কোন অন্তর্দৃষ্টি প্রশ্নের সাথে সম্মান সরবরাহ করে।
Jakob

আমি পোস্ট করা কোড দ্বারা উত্পাদিত হওয়ায় এটি ভিজ্যুয়ালাইজেশনকে অন্তর্ভুক্ত করেছি - কীভাবে পুনর্নির্মাণের সঠিকভাবে প্রয়োগ করা যায় তার একটি উদাহরণ।
ইয়ান

1

এটি করার একটি সহজ উপায় হল numpy.random.choice (এন, এন, পি = ডাব্লু, প্রতিস্থাপন = সত্য) যেখানে এন হ'ল নয়। কণা এবং ডাব্লু = স্বাভাবিক ওজন।


নারায়ণ রোবোটিক্সে আপনাকে স্বাগতম । আপনি দয়া করে এই উত্তর কিছু প্রসারিত করতে পারেন? উদাহরণস্বরূপ, কেন এলোমেলো পছন্দ ব্যবহার করবেন? কি pআপনার ফাংশনে? আপনি আপনার উত্তরটি আরও বিস্তারিতভাবে তৈরি করতে পারবেন, ভবিষ্যতের দর্শকদের জন্য একই সমস্যাটি তত বেশি কার্যকর।
চক

1

আমি আমার কণা ফিল্টারটি প্রয়োগ করতে @ নারায়ণের পদ্ধতির ব্যবহার করছি:

new_sample = numpy.random.choice(a=particles, size=number_of_particles, replace=True, p=importance_weights)

নমুনাতে আপনার কণাগুলির ভেক্টর হ'ল আকার, কণার গণনা এবং পি হ'ল তার স্বাভাবিক ওজনগুলির ভেক্টর। প্রতিস্থাপনের সাথে সত্য = সত্যই হ্যান্ডল বুটস্ট্র্যাপ নমুনা। রিটার্ন মানটি নতুন কণা অবজেক্টগুলির একটি ভেক্টর।

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