উত্তর:
আমি এই বিষয়টিও শিখছিলাম, এবং এগুলি আমি খুঁজে পেয়েছি:
এই জাতীয় এনকোডিংকে সম্ভাবনা এনকোডিং , ইমপ্যাক্ট কোডিং বা টার্গেট কোডিং বলা হয়
লক্ষ্যটি ভেরিয়েবল (টাস্কের উপর নির্ভর করে ধারাবাহিক বা শ্রেণিবদ্ধ) এর সাথে আপনার শ্রেণিবদ্ধ ভেরিয়েবলকে এনকোড করছে। উদাহরণস্বরূপ, আপনার যদি রিগ্রেশন টাস্ক থাকে তবে আপনি আপনার শ্রেণিবদ্ধ ভেরিয়েবলটিকে টার্গেটের গড় দিয়ে এনকোড করতে পারেন। প্রতিটি বিভাগের জন্য, আপনি লক্ষ্যটির সাথে সম্পর্কিত গড় গণনা করুন (এই বিভাগের মধ্যে) এবং এই গড় দিয়ে কোনও বিভাগের মান প্রতিস্থাপন করুন।
আপনার যদি শ্রেণিবদ্ধকরণের কাজ থাকে তবে আপনি প্রতিটি বিভাগের মানের সাথে আপনার টার্গেটের আপেক্ষিক ফ্রিকোয়েন্সি গণনা করুন।
গাণিতিক দৃষ্টিকোণ থেকে, এই এনকোডিংটির অর্থ প্রতিটি শ্রেণীর মানের শর্তসাপেক্ষে আপনার টার্গেটের সম্ভাবনা।
আপনি যদি এটি সহজ পদ্ধতিতে করেন তবে আমি কীভাবে উপরে বর্ণিত, আপনি সম্ভবত একটি পক্ষপাতদুষ্ট অনুমান পাবেন। এজন্য কাগল সম্প্রদায় তারা সাধারণত 2 স্তরের ক্রস-বৈধতা ব্যবহার করে। রেড্ডারের এই মন্তব্যটি এখানে পড়ুন । সম্পর্কিত নোটবুক এখানে ।
উদ্ধৃতি:
এটি y এর গড় মূল্য নিচ্ছে। তবে সরল মানে নয়, ক্রস-বৈধকরণের মধ্যে ক্রস-বৈধকরণে;
ধরা যাক আমাদের 20-গুণ ক্রস বৈধতা আছে। আমাদের কেবল # 2- # 20 ফোল্ড থেকে তথ্য ব্যবহার করে # 1 ফোল্ডের জন্য বৈশিষ্ট্যের গড় মান গণনা করতে হবে।
সুতরাং, আপনি # 2- # 20 ভাঁজ নেন, এর মধ্যে অন্য ক্রস বৈধতা সেট তৈরি করুন (আমি 10-ভাঁজ করেছি)। প্রতিটি ছুটি-এক-আউট ভাঁজের জন্য গণনা করা (শেষ পর্যন্ত আপনি 10 টি উপায় পান)। আপনি এই 10 টি গড় উপায়ে গড়ে তোলেন এবং আপনার প্রাথমিক # 1 বৈধতা সেটটির জন্য সেই ভেক্টরটি প্রয়োগ করুন। বাকি 19 ভাঁজগুলির জন্য পুনরাবৃত্তি করুন।
এটি ব্যাখ্যা করা শক্ত, বোঝা শক্ত এবং গুরুত্ত্বপূর্ণ :) তবে সঠিকভাবে করা গেলে এটি অনেক সুবিধা বয়ে আনতে পারে :)
এই এনকোডিংয়ের আর একটি বাস্তবায়ন এখানে ।
আর লাইব্রেরি vtreat এ তারা ইমপ্যাক্ট এনকোডিং প্রয়োগ করে। এই পোস্টটি দেখুন ।
ইন CatBoost গ্রন্থাগার তারা লক্ষ্য এনকোডিং সহ নিঃশর্ত পরিবর্তনশীল এনকোডিং-এর বিকল্প একটি অনেক আছে।
স্কেলেরনে এ জাতীয় কোনও এনকোডিং নেই।
সাইকিট শিখতে সম্ভাবনা এনকোডিং এখনও পাওয়া যায় না। আপনি অভিধান তৈরি করে এটি করতে পারেন এবং তারপরে একটি প্রতিস্থাপন ফাংশন করতে পারেন।
dict1 = {'cate1':1,'cate2':1,'cate3':2,'cate4':2}
for i in df.shape[0]:
df.iloc[i] = dict1[df.iloc[i]]