মেশিন লার্নিং ফিচার ট্রান্সফর্মেশন, একটি শিক্ষানবিশ গাইড

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

নিম্নলিখিত পোস্টে, আমি চারটি সাধারণ ধরণের ভেরিয়েবলগুলি সনাক্ত ও রূপান্তর করতে যে প্রক্রিয়াটি চালিয়ে যাচ্ছি তার বর্ণনা করব। আমি https://www.drivendata.org/ এ হোস্ট করা হার্ট ওয়ার্ম-আপ প্রতিযোগিতা সহ মেশিন লার্নিংয়ের একটি ডেটাসেট ব্যবহার করব। সম্পূর্ণ ডেটাসেটটি এখানে ডাউনলোড করা যাবে: https://www.drivendata.org/competitions/54/machine-learning-with-a-heart/data/। ড্রাইভেনডেটা নিয়মিত অনলাইন সামাজিক সমস্যা সমাধানের উপর ভিত্তি করে অনলাইন চ্যালেঞ্জগুলি হোস্ট করে। আমি সম্প্রতি আমার কিছু দক্ষতা ভাল ব্যবহারের জন্য রাখার জন্য এবং ডেটাসেট এবং বিষয়গুলির সাথে অভিজ্ঞতা অর্জন করার জন্য যা আমি সাধারণত আমার প্রতিদিনের কাজে আসি না তার জন্য কিছু প্রতিযোগিতায় অংশ নিয়েছিলাম।

পরিবর্তনশীল প্রকারগুলি সনাক্ত করুন

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

  • অবিচ্ছিন্ন ভেরিয়েবলগুলি এমন ভেরিয়েবল যা কেবলমাত্র একটি নির্দিষ্ট পরিসরের মান থাকতে পারে এমন বিচ্ছিন্ন ভেরিয়েবলের বিপরীতে অসম্ভব সম্ভাব্য মান থাকতে পারে। অবিচ্ছিন্ন ভেরিয়েবলের উদাহরণ হ'ল গাড়ি তার জীবদ্দশায় চালানো মাইল সংখ্যা।
  • নামমাত্র পরিবর্তনশীলগুলি 2 বা ততোধিক সম্ভাব্য মান সহ শ্রেণীবদ্ধ মান হয় তবে তাদের ক্রমটি অপ্রাসঙ্গিক। উদাহরণস্বরূপ, আমরা গাড়ির প্রকারের ব্যাখ্যার জন্য একটি সংখ্যক উপস্থাপনা ব্যবহার করতে পারি যে বলে যে কমপ্যাক্টের মান 1, MPV এর মান 2 এবং রূপান্তরযোগ্যটির মান 3 থাকে। 2 মানের সাথে রূপান্তরযোগ্য গাণিতিকভাবে এই রূপান্তরিত গ্রুপ নয় এমপিভির চেয়ে কিছুটা বড়। এটি বিভাগের কেবল একটি সাংখ্যিক উপস্থাপনা।
  • দ্বিধাত্বক ভেরিয়েবলগুলি আবার শ্রেণীবদ্ধ হয় তবে সাধারণত কেবল 2 টি সম্ভাব্য মান থাকে, 0 এবং 1 উদাহরণস্বরূপ, আমরা গাড়ির মালিকানা 1 (মানে হ্যাঁ) বা 0 (মানে না) হিসাবে শ্রেণিবদ্ধ করতে পারি। যদি আমরা ভেরিয়েবলগুলি ডামি কলামগুলিতে রূপান্তর করি (যা আমরা এই পোস্টে পরে করব), নতুন বৈশিষ্ট্যগুলি পাশাপাশি দ্বৈত হয়ে উঠবে।
  • অর্ডার ভেরিয়েবলগুলি নামমাত্র অনুরূপ যেগুলিতে তাদের 2 বা ততোধিক সম্ভাব্য মান রয়েছে। মূল পার্থক্য হ'ল এই মানগুলির একটি অর্থবহ শৃঙ্খলা বা র‌্যাঙ্ক থাকে। আমাদের গাড়ির উদাহরণে, এটি একটি ইঞ্জিনের আকার হতে পারে যেখানে এই বিভাগগুলি পাওয়ার হিসাবে, 1.2, 1.6, 1.8 পদে স্থান দেওয়া যায় can

ডেটা প্রস্তুত করুন

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

পিডি হিসাবে পান্ডস আমদানি করুন
Def quick_analysis (df): মুদ্রণ ("ডেটা টাইপস:") মুদ্রণ (df.dtyype) মুদ্রণ ("লাইন এবং কলাম:") মুদ্রণ (df.shape) মুদ্রণ ("কলামের নাম:") মুদ্রণ (df.collines) মুদ্রণ (" নাল মান: ") মুদ্রণ (df.apply (ল্যাম্বদা এক্স: যোগফল (x.isnull ()) / লেন (df))
দ্রুত বিশ্লেষণ (ট্রেন)

এটি নিম্নলিখিত আউটপুট উত্পাদন করে।

এটি আমাকে বলে যে আমার কাছে কেবলমাত্র 180 টি সারির একটি ছোট ডেটা সেট রয়েছে এবং 15 টি কলাম রয়েছে। ফাংশনগুলির একটি হ'ল সংখ্যাসূচক নয়, সুতরাং বেশিরভাগ মেশিন লার্নিং লাইব্রেরি প্রয়োগ করার আগে এটি পরিবর্তন করতে হবে। কোনও নাল মান নেই তাই আমাকে এগুলি চিকিত্সা করার বিষয়ে চিন্তা করতে হবে না। ডেটা সেটটি প্রক্রিয়া করার আগে, আমি প্রথমে "রোগী_আইডি" কলামটিও মুছুন, কারণ এটি সংখ্যাসূচক নয় এবং কোনও প্রশিক্ষণ বা ভবিষ্যদ্বাণী পর্যায়ে ব্যবহৃত হয় না।

তারপরে আমি কিছু দ্রুত বর্ণনামূলক পরিসংখ্যান করতে পান্ডস বর্ণনা ফাংশন চালাচ্ছি।

ট্রেন.ডিসক্রাইব ()

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

প্ল্যাট ট্রেন হিসাবে matplotlib.pyplot আমদানি করুন [train.dtyype [(train.dtyype == "ফ্লোট 64") | (train.dtyype == "int64")] .index.values]। হিস্ট (ডুমুর আকার = [১১,১১])

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

ডামি ভেরিয়েবল

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

এই কৌশলটি সাধারণত নামমাত্র ভেরিয়েবলগুলিতেও সেরা প্রয়োগ করা হয়। এগুলির কোনও অভ্যন্তরীণ ক্রম নেই বলে মেশিন লার্নিং অ্যালগরিদম ভুলভাবে এই মানগুলির ক্রমানুসারে একটি সম্পর্কের সন্ধান করতে পারে যদি আমরা প্রথমে এটি প্রয়োগ না করি।

পান্ডসের এই নাম_গৃহের () নামে একটি দুর্দান্ত ফাংশন রয়েছে। নীচের কোডটিতে, আমি সমস্ত নামমাত্র এবং অ-সংখ্যাযুক্ত বৈশিষ্ট্যগুলিকে নতুন কলামে রূপান্তর করতে এটি ব্যবহার করেছি। আপনি আউটপুট থেকে দেখতে পাচ্ছেন যে বেশ কয়েকটি নতুন কলাম তৈরি হয়েছে এবং মূল কলামগুলি মোছা হয়েছে।

ডামি_ক্লস = ['থাল', 'বুক_পেন_প্রতিবন্ধ', 'নাম_মজোর_ভ্যাসেল', 'অনুশীলন_অন্ধি_আঙ্গিনা', 'রোজা_দেহ_সাগর_জিটি_২০_মিজি_পুর_ডিএল', 'বিশ্রাম_ইকজি_প্রতিক্রিয়া', 'opeালু_আপনি_প্রেমিক_অধিকার প্রশিক্ষণ]

ক্রিয়ামূলক স্কেলিং

আমাদের ডেটা সেটে অবিচ্ছিন্ন ভেরিয়েবলগুলি আলাদাভাবে মাপা হয়। উদাহরণস্বরূপ, যদি আপনি উপরের হিস্টোগ্রামগুলিতে ফিরে যান, আপনি দেখতে পাবেন যে পরিবর্তনশীল "oldpeak_eq_st_depression" 0 থেকে 6 এর মধ্যে থাকে যখন "ম্যাক্স_হার্ট_রেট_চিভিড" চূড়ান্ত পূর্বাভাস দেওয়ার জন্য ডেটা পয়েন্টগুলির মধ্যে 100 থেকে 200 এর মধ্যে থাকে। সমস্ত ধ্রুবক ভেরিয়েবলের পরিমাপের মানককরণ মেশিন লার্নিং মডেলগুলির কার্য সম্পাদনকে প্রায়শই উন্নত করতে পারে।

পাইথনে ফিচার স্কেলিংয়ের জন্য অনেকগুলি পদ্ধতি রয়েছে। আমার পছন্দের পদ্ধতিটি হ'ল সাইন-কিট লার্ন মিনিম্যাক্সস্কেলার বৈশিষ্ট্যটি ব্যবহার করা। যা স্কেলিং পরিবর্তন করে যাতে বৈশিষ্ট্যগুলির সমস্ত মান 0 থেকে 1 এর মধ্যে থাকে। আমি নীচে কোড অন্তর্ভুক্ত করেছি যা এটি করে।

স্কলারন আমদানি প্রিপ্রোসেসিং থেকে
n_test = ট্রেন [[ 'serum_cholesterol_mg_per_dl', 'max_heart_rate_achieved', 'oldpeak_eq_st_depression', 'resting_blood_pressure']] cols_to_norm = [ 'serum_cholesterol_mg_per_dl', 'resting_bodeplo' '_ pressiedeplo'] _ heart_rate_rate_dl ',' max_heart_rate_rate_dl ',' max_heart_rate_rate_dl ',' max_heart_rate_dl ',' max_heart_rate]
x = n_test.values ​​min_max_scaler = preprocessing.MinMaxScaler () x_scaled = min_max_scaler.fit_transfor (x) n_test = pd.DataFrame (x_scaled, কলামগুলি = col_____________________________________________________________________________________________________________________________t , 'বিশ্রাম_ব্লুড_প্রেসার'], অক্ষ = 1) ট্রেন = পিডি কোডক্যাট ([n_est, l_test], অক্ষ = 1) ট্রেনের কলামগুলি

বিনিং

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

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

ধারক = [30, 40, 50, 60, 70, 80]
গোষ্ঠী_নাম = ['30 -39 ', '40 -49', '50 -59 ', '60 -69', '70 -79 ']
বয়স_শ্রেণী = পিডি কোড (ট্রেন ['বয়স'], ধারক, লেবেল = গোষ্ঠী_নাম) ট্রেন ['বয়স_শ্রেণীসমূহ'] = পিডি.কুট (ট্রেন ['বয়স'], বিন, লেবেল = গোষ্ঠী_নাম) বয়স_শ্রেণীসমূহ
পিডি.ভ্যালু_ অ্যাকাউন্টস (ট্রেন ['বয়স_শ্রেণীসমূহ'])

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