মাল্টি ক্যাটাগরিকাল ভেরিয়েবলের জন্য কিভাবে ওয়ান-হট এনকোডিং করা যায়

উত্স নোড: 841101

এই প্রবন্ধে, আমরা শিখব কিভাবে আমরা ফিচার ইঞ্জিনিয়ারিং টেকনিক ওয়ান হট এনকোডিং ব্যবহার করে মাল্টি ক্যাটাগরিকাল ভেরিয়েবল পরিচালনা করতে পারি।

তবে এগিয়ে যাওয়ার আগে, আসুন ফিচার ইঞ্জিনিয়ারিং এবং ওয়ান হট এনকোডিং নিয়ে একটি সংক্ষিপ্ত আলোচনা করি।

ফিচার ইঞ্জিনিয়ারিং

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

মেশিন লার্নিং মডেলের জন্য স্বচ্ছতার ধারণা একটি জটিল বিষয় কারণ বিভিন্ন মডেলের বিভিন্ন ধরণের ডেটার জন্য প্রায়ই বিভিন্ন পদ্ধতির প্রয়োজন হয়। যেমন:-

  • ক্রমাগত ডেটা
  • শ্রেণীবদ্ধ বৈশিষ্ট্য
  • অনুপস্থিত মানের
  • সাধারণীকরণ
  • তারিখ এবং সময়

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

শ্রেণীগত ভেরিয়েবলগুলি পরিচালনা করার জন্য অনেক কৌশল রয়েছে, কিছু হল:

  • লেবেল এনকোডিং বা অর্ডিনাল এনকোডিং
  • একটি গরম এনকোডিং
  • ডামি এনকোডিং
  • ইফেক্ট এনকোডিং
  • বাইনারি এনকোডিং
  • বাসেল এনকোডিং
  • হ্যাশ এনকোডিং
  • টার্গেট এনকোডিং

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

এক হট এনকোডিং

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

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

উদাহরণ স্বরূপ লিঙ্গ উপর তথ্য আকারে হয় 'পুরুষ' এবং 'মহিলা'.

কিন্তু যদি আমরা ওয়ান-হট এনকোডিং ব্যবহার করি তাহলে এনকোডিং এবং মডেলটিকে বিভাগগুলির মধ্যে একটি স্বাভাবিক ক্রম অনুমান করার অনুমতি দিলে খারাপ কর্মক্ষমতা বা অপ্রত্যাশিত ফলাফল হতে পারে।

এক-হট এনকোডিং পূর্ণসংখ্যা উপস্থাপনে প্রয়োগ করা যেতে পারে। এখানেই পূর্ণসংখ্যা এনকোডেড ভেরিয়েবলটি সরানো হয় এবং প্রতিটি অনন্য পূর্ণসংখ্যা মানের জন্য একটি নতুন বাইনারি ভেরিয়েবল যোগ করা হয়।

উদাহরণস্বরূপ, আমরা রঙ পরিবর্তনশীল এনকোড করি,

লাল রং  নীল রঙ
0 1
1 0
0 1

এখন আমরা আমাদের যাত্রা শুরু করব। প্রথম ধাপে, আমরা বাড়ির দামের পূর্বাভাসের একটি ডেটাসেট নিই।

ডেটা সেটটি

এখানে আমরা house_price এর ডেটাসেট ব্যবহার করব যা এলাকার আকার অনুযায়ী বাড়ির দামের পূর্বাভাস দিতে ব্যবহৃত হয়।

আপনি যদি বাড়ির দামের পূর্বাভাস ডেটাসেট ডাউনলোড করতে চান তাহলে ক্লিক করুন এখানে.

মডিউল আমদানি করা হচ্ছে

এখন, আমাদের পাইথন থেকে গুরুত্বপূর্ণ মডিউলগুলি আমদানি করতে হবে যা এক-হট এনকোডিংয়ের জন্য ব্যবহার করবে

# ইম্পোর্টিং পান্ডা ইম্পোর্ট পান্ডাগুলি pd হিসাবে # importing numpy import numpy np হিসাবে # sklearn.preprocessing import OneHotEncoder() থেকে OneHotEncoder আমদানি করা

এখানে, আমরা পান্ডা ব্যবহার করি যা ডেটা বিশ্লেষণের জন্য ব্যবহার করা হয়, NumPyused n-মাত্রিক অ্যারেগুলির জন্য এবং sklearn থেকে, আমরা শ্রেণীবদ্ধ এনকোডিংয়ের জন্য একটি গুরুত্বপূর্ণ ক্লাস ওয়ান হট এনকোডার ব্যবহার করব।

এখন আমাদের পাইথন ব্যবহার করে এই ডেটা পড়তে হবে।

ডেটাসেট পড়া

সাধারণত, ডেটাসেটটি CSV আকারে থাকে এবং আমরা যে ডেটাসেটটি ব্যবহার করি সেটিও CSV আকারে থাকে। CSV ফাইল পড়ার জন্য আমরা pandas read_csv() ফাংশন ব্যবহার করব। নিচে দেখ:

# রিডিং ডেটাসেট df = pd.read_csv('house_price.csv') df.head()

আউটপুট:-

কিন্তু আমাদের শুধুমাত্র একটি হট এনকোডারের জন্য শ্রেণীগত ভেরিয়েবল ব্যবহার করতে হবে এবং আমরা সহজে বোঝার জন্য শুধুমাত্র শ্রেণীগত ভেরিয়েবল দিয়ে ব্যাখ্যা করার চেষ্টা করব।

ডেটা থেকে শ্রেণীগত ভেরিয়েবলকে বিভাজন করার জন্য আমাদের পরীক্ষা করতে হবে কতগুলি বৈশিষ্ট্যের শ্রেণীগত মান রয়েছে।

শ্রেণীগত মান পরীক্ষা করা হচ্ছে

মান পরীক্ষা করার জন্য আমরা pandas select_dtypes ফাংশন ব্যবহার করি যা ভেরিয়েবলের ডেটা প্রকার নির্বাচন করতে ব্যবহৃত হয়।

# চেকিং বৈশিষ্ট্য cat = df.select_dtypes(include='O').keys() # প্রদর্শন ভেরিয়েবল বিড়াল

আউটপুট:-

 

এখন আমাদের ডেটাসেট থেকে সেই সংখ্যাসূচক কলামগুলি বাদ দিতে হবে এবং আমরা আমাদের ব্যবহারের জন্য এই শ্রেণীগত পরিবর্তনশীলটি ব্যবহার করব। এক-হট এনকোডিং প্রয়োগ করার জন্য আমরা ডেটাসেট থেকে শুধুমাত্র 3-4টি শ্রেণীবদ্ধ কলাম ব্যবহার করি।

নতুন ডেটাফ্রেম তৈরি করা হচ্ছে

এখন, শ্রেণীগত ভেরিয়েবল ব্যবহার করার জন্য আমরা নির্বাচিত শ্রেণীবদ্ধ কলামগুলির একটি নতুন ডেটাফ্রেম তৈরি করব।

# নতুন df তৈরি করা # কলাম সেটিং আমরা new_df = pd.read_csv('house_price.csv',usecols=[' ব্যবহার করি)প্রতিবেশী','বাহ্যিক 1ম', 'বহিরাগত 2য়']) new_df.head()

আউটপুট:-

এখন আমাদের প্রতিটি শ্রেণীবদ্ধ কলামে কতগুলি অনন্য বিভাগ রয়েছে তা খুঁজে বের করতে হবে।

অনন্য মান খোঁজা

অনন্য মান খোঁজার জন্য আমরা pandas unique() ফাংশন ব্যবহার করব।

new_df.columns-এ x-এর জন্য প্রতিটি কলামে # অনন্য মান: #prinfting অনন্য মান প্রিন্ট(x ,':', len(new_df[x].unique()))

আউটপুট:-

প্রতিবেশী: 25
বাহ্যিক ১ম : ১৫
বাহ্যিক ২য় : ১৬

এখন, আমরা মাল্টি ক্যাটাগরিকাল ভেরিয়েবলে ওয়ান-হট এনকোডিং প্রয়োগ করার জন্য আমাদের কৌশলটি নিয়ে যাব।

মাল্টি ক্যাটাগরিক্যাল ভেরিয়েবলের জন্য টেকনিক

কৌশলটি হল যে আমরা এক-হট এনকোডিংকে পরিবর্তনশীলের 10টি ঘন ঘন লেবেলে সীমাবদ্ধ করব। এর মানে হল যে আমরা 10টি সর্বাধিক ঘন ঘন লেবেলের প্রতিটির জন্য একটি বাইনারি ভেরিয়েবল তৈরি করব, এটি একটি নতুন বিভাগের অধীনে অন্য সমস্ত লেবেলকে গোষ্ঠীভুক্ত করার সমতুল্য, যা এই ক্ষেত্রে বাদ দেওয়া হবে। এইভাবে, 10টি নতুন ডামি ভেরিয়েবল নির্দেশ করে যে 10টি ঘন ঘন লেবেলের মধ্যে একটি উপস্থিত থাকে কিনা 1 বা না তারপর 0 একটি নির্দিষ্ট পর্যবেক্ষণের জন্য।

সর্বাধিক ঘন ঘন পরিবর্তনশীল

এখানে আমরা 20টি সবচেয়ে ঘন ঘন ভেরিয়েবল নির্বাচন করব।

ধরুন আমরা একটি শ্রেণীগত পরিবর্তনশীল নিই আশপাশ.

# শীর্ষ 20টি বিভাগ নতুন_df.Neighborhood.value_counts().sort_values(ascending=False).head(20) খোঁজা

আউটপুট:

আপনি যখন এই আউটপুট ইমেজ দেখতে পাবেন আপনি লক্ষ্য করবেন যে নাম নেবারহুড কলামগুলিতে লেবেল 225 বার পুনরাবৃত্তি হচ্ছে এবং আমরা নিচে যাই এই সংখ্যাটি কমছে।

তাই আমরা শীর্ষ থেকে শীর্ষ 10টি ফলাফল নিয়েছি এবং আমরা এই শীর্ষ 10টি ফলাফলকে এক-হট এনকোডিং-এ রূপান্তরিত করি এবং বাম লেবেলগুলি শূন্যে পরিণত হয়৷

আউটপুট:-

 

সর্বাধিক ঘন ঘন শ্রেণীগত ভেরিয়েবলের তালিকা

# শীর্ষ 10 ভেরিয়েবলের সাথে তালিকা তৈরি করুন top_10 = [x এর জন্য x new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

আউটপুট:-

['নাম',
'CollgCr',
'পুরাতন শহর',
'এডওয়ার্ডস',
'সুমর্স্ট',
'গিলবার্ট',
'NridgHt',
'সায়ার',
'NWAmes',
'SawyerW']

নেইবারহুড কলামে শীর্ষ 10টি শ্রেণীবদ্ধ লেবেল রয়েছে৷

বাইনারি তৈরি করুন

এখন, আমাদের top_10 লেবেলের 10টি বাইনারি ভেরিয়েবল তৈরি করতে হবে:

# লেবেলের বাইনারি তৈরি করুন

শীর্ষ_10 এ লেবেলের জন্য:

new_df = np.where(new_df['প্রতিবেশী']==লেবেল,1,0)

new_df[['প্রতিবেশী']+top_10]


আউটপুট:-

নাম CollgCr পুরাতন শহর এডওয়ার্ডস সোমারস্ট গিলবার্ট NridgHt করাতী NWAmes SawyerW
0 CollgCr 0 1 0 0 0 0 0 0 0 0
1 ভিনকার 0 0 0 0 0 0 0 0 0 0
2 CollgCr 0 1 0 0 0 0 0 0 0 0
3 ক্রফর 0 0 0 0 0 0 0 0 0 0
4 নোরিজ 0 0 0 0 0 0 0 0 0 0
5 মিচেল 0 0 0 0 0 0 0 0 0 0
6 সোমারস্ট 0 0 0 0 1 0 0 0 0 0
7 NWAmes 0 0 0 0 0 0 0 0 1 0
8 পুরাতন শহর 0 0 1 0 0 0 0 0 0 0
9 BrkSide 0 0 0 0 0 0 0 0 0 0
10 করাতী 0 0 0 0 0 0 0 1 0 0
11 NridgHt 0 0 0 0 0 0 1 0 0 0

আপনি দেখতে পারেন কিভাবে top_10 লেবেল এখন বাইনারি বিন্যাসে রূপান্তরিত হয়।

একটি উদাহরণ দেওয়া যাক, টেবিলে দেখুন যেখানে 1 সূচক ভিনকার যা আমাদের শীর্ষ_10 বিভাগের লেবেলের অন্তর্গত ছিল না তাই এটির ফলাফল হবে 0 সমস্ত কলাম।

এখন আমরা উপরে নির্বাচিত সমস্ত শ্রেণীগত ভেরিয়েবলের জন্য এটি করব।

OneHotEncoding-এ সমস্ত নির্বাচিত পরিবর্তনশীল

# সমস্ত শ্রেণীগত ভেরিয়েবলের জন্য আমরা def top_x(df2,variable,top_x_labels) নির্বাচন করেছি: top_x_labels-এ লেবেলের জন্য: df2[variable+'_'+label] = np.where(data[variable]==label,1,0) # পড়ুন ডেটা আবার ডেটা = pd.read_csv('D://xdatasets/train.csv',usecols = ['প্রতিবেশী','Exterior1st','Exterior2nd']) #নেবারহুডকে 10টি ঘন ঘন শ্রেণীতে এনকোড করুন top_x(ডেটা, 'প্রতিবেশী',top_10) # ডিসপ্লে ডেটা data.head()

আউটপুট:-

এখন, এখানে আমরা সমস্ত মাল্টি ক্যাটাগরিকাল ভেরিয়েবলে ওয়ান-হট এনকোডিং প্রয়োগ করি।

এখন আমরা মাল্টি ভেরিয়েবলের জন্য ওয়ান হট এনকোডিংয়ের সুবিধা এবং অসুবিধাগুলি দেখব।

উপকারিতা

  • বাস্তবায়নের জন্য সোজা
  • পরিবর্তনশীল অন্বেষণের জন্য অনেক সময় প্রয়োজন হয় না
  • বৈশিষ্ট্য স্থান ব্যাপকভাবে প্রসারিত না.

অসুবিধা সমূহ

  • ভেরিয়েবলকে আরও ভবিষ্যদ্বাণীমূলক করে তুলতে পারে এমন কোনো তথ্য যোগ করে না
  • উপেক্ষিত ভেরিয়েবলের তথ্য রাখবেন না।

শেষ নোট

সুতরাং, এর সংক্ষিপ্তসার হল যে আমরা মাল্টি ক্যাটাগরিকাল ভেরিয়েবলগুলিকে কীভাবে পরিচালনা করতে হয় তা শিখেছি, যদি আপনি এই সমস্যাটির মুখোমুখি হন তবে এটি একটি খুব কঠিন কাজ। তাই এই নিবন্ধটি পড়ার জন্য আপনাকে ধন্যবাদ.

Linkedin এ আমার সাথে সংযোগ করুন: প্রোফাইল

আমার অন্যান্য নিবন্ধ পড়ুন: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

ধন্যবাদ 😎

এই নিবন্ধে প্রদর্শিত মিডিয়াগুলি অ্যানালিটিক্স বিদ্যা মালিকানাধীন নয় এবং এটি লেখকের বিবেচনার ভিত্তিতে ব্যবহৃত হয়।

আপনি আমাদের মোবাইল অ্যাপে এই নিবন্ধটি পড়তে পারেন এটা গুগল প্লে তে পাবেন

সম্পরকিত প্রবন্ধ

সূত্র: https://www.analyticsvidhya.com/blog/2021/05/how-to-perform-one-hot-encoding-for-multi-categorical-variables/

সময় স্ট্যাম্প:

থেকে আরো বিশ্লেষণ বিদ্যা