ভূমিকা
র্যান্ডম ফরেস্ট অ্যালগরিদম হল সবচেয়ে নমনীয়, শক্তিশালী এবং ব্যাপকভাবে ব্যবহৃত অ্যালগরিদমগুলির মধ্যে একটি শ্রেণীবিভাগ এবং রিগ্রেশন, একটি হিসাবে নির্মিত সিদ্ধান্ত গাছের সমাহার.
আপনি যদি এইগুলির সাথে পরিচিত না হন - কোন চিন্তা নেই, আমরা এই সমস্ত ধারণাগুলি কভার করব৷
এই গভীরভাবে হ্যান্ডস-অন গাইডে, আমরা একটি তৈরি করব স্বজ্ঞা সিদ্ধান্ত গাছগুলি কীভাবে কাজ করে, কীভাবে এনসেম্বলিং পৃথক শ্রেণীবদ্ধকারী এবং রিগ্রেসারকে বাড়িয়ে তোলে, র্যান্ডম ফরেস্ট কী এবং পাইথন এবং স্কিট-লার্ন ব্যবহার করে একটি এন্ড-টু-এন্ড মিনি-প্রজেক্টের মাধ্যমে একটি র্যান্ডম ফরেস্ট ক্লাসিফায়ার এবং রিগ্রেসর তৈরি করুন এবং একটি গবেষণা প্রশ্নের উত্তর দিন।
বিবেচনা করুন যে আপনি বর্তমানে একটি গবেষণা গোষ্ঠীর অংশ যা মহিলাদের সম্পর্কে ডেটা বিশ্লেষণ করছে৷ গোষ্ঠীটি 100টি ডেটা রেকর্ড সংগ্রহ করেছে এবং মহিলাদেরকে বিভাগগুলিতে ভাগ করে সেই প্রাথমিক রেকর্ডগুলি সংগঠিত করতে সক্ষম হতে চায়: গর্ভবতী হওয়া বা না হওয়া এবং গ্রামীণ বা শহুরে এলাকায় বসবাস করা। গবেষকরা বুঝতে চান প্রতিটি বিভাগে কতজন মহিলা থাকবেন।
একটি কম্পিউটেশনাল কাঠামো আছে যা ঠিক যে করে, এটি হল বৃক্ষ গঠন একটি গাছের কাঠামো ব্যবহার করে, আপনি প্রতিটি বিভাগের জন্য বিভিন্ন বিভাগের প্রতিনিধিত্ব করতে সক্ষম হবেন।
সিদ্ধান্ত গাছ
আপনি কিভাবে একটি গাছের নোড জনবহুল করবেন? এইটি যেখানে সিদ্ধান্ত গাছ ফোকাসে আসা
প্রথমত, আমরা গর্ভাবস্থার দ্বারা রেকর্ডগুলিকে ভাগ করতে পারি, তারপরে, আমরা শহুরে বা গ্রামীণ এলাকায় বসবাস করে তাদের ভাগ করতে পারি। লক্ষ্য করুন, আমরা এটি একটি ভিন্ন ক্রমে করতে পারি, প্রাথমিকভাবে মহিলারা কোন এলাকায় বাস করে এবং পরে তাদের গর্ভাবস্থার অবস্থা দ্বারা ভাগ করে। এটি থেকে, আমরা দেখতে পারি যে গাছের একটি অন্তর্নিহিত শ্রেণিবিন্যাস রয়েছে। তথ্য সংগঠিত করার পাশাপাশি, একটি গাছ একটি শ্রেণিবদ্ধ পদ্ধতিতে তথ্যকে সংগঠিত করে - যে ক্রমটি তথ্যটি উপস্থিত হয় তা গুরুত্বপূর্ণ এবং ফলস্বরূপ বিভিন্ন গাছের দিকে নিয়ে যায়।
নীচে, গাছের একটি উদাহরণ যা বর্ণনা করা হয়েছে:
গাছের ছবিতে, 7টি বর্গক্ষেত্র রয়েছে, একটি উপরে যেটি মোট 100টি মহিলার জন্য হিসাব করে, এই শীর্ষ বর্গটি নীচের দুটি বর্গক্ষেত্রের সাথে সংযুক্ত, যা 78 জন গর্ভবতী নয় এবং 22 জন গর্ভবতী মহিলার সংখ্যার উপর ভিত্তি করে ভাগ করে এবং পূর্ববর্তী উভয় বর্গক্ষেত্র থেকে চারটি বর্গক্ষেত্র রয়েছে; উপরের প্রতিটি বর্গক্ষেত্রের সাথে দুটি সংযুক্ত যা মহিলাদের তাদের এলাকার উপর ভিত্তি করে ভাগ করে, গর্ভবতী নয়, 45 জন শহুরে এলাকায়, 33 জন গ্রামীণ এলাকায় এবং গর্ভবতীদের জন্য, 14 জন গ্রামীণ এলাকায় এবং 8 জন শহুরে এলাকায় বাস করে৷ শুধু একটি গাছ দেখে, সেই বিভাজনগুলি বোঝা সহজ এবং প্রতিটি "স্তর" আগেরগুলি থেকে কীভাবে উদ্ভূত হয়েছে তা দেখতে সহজ, সেই স্তরগুলি হল গাছ মাত্রা, স্তরগুলি বর্ণনা করে গভীরতা গাছের:
উপরের চিত্রে লক্ষ্য করুন যে প্রথম গাছের স্তরটি স্তর 0 যেখানে শুধুমাত্র একটি বর্গক্ষেত্র আছে, তার পরে স্তর 1 যেখানে দুটি বর্গক্ষেত্র আছে, এবং স্তর 2 যেখানে চারটি বর্গক্ষেত্র আছে। এটা একটা গভীরতা 2 গাছ।
লেভেল 0-এ বর্গক্ষেত্র যা গাছের উৎপত্তি হয়, প্রথমটিকে বলা হয় রুট নোড, এই মূল দুটি আছে শিশু নোড স্তর 1, যে হয় প্যারেন্ট নোড লেভেল 2-এর চারটি নোডের দিকে। দেখুন যে "বর্গ" আমরা এতক্ষণ উল্লেখ করেছি, আসলে তাকে বলা হয় নোড; এবং প্রতিটি পূর্ববর্তী নোড নিম্নলিখিত নোডগুলির একটি অভিভাবক, যেগুলি তার সন্তান। প্রতিটি স্তরের চাইল্ড নোডগুলিকে বলা হয় যার অভিভাবক একই থাকে৷ ভাইবোন, যেমনটি পরবর্তী ছবিতে দেখা যাবে:
আগের ছবিতে, আমরা লেভেল 1-কেও হিসাবে প্রদর্শন করি অভ্যন্তরীণ নোড, একবার তারা রুট এবং শেষ নোডের মধ্যে থাকে, যা হয় পাতার নোড. লিফ নোড একটি গাছের শেষ অংশ, যদি আমরা 100 জন প্রাথমিক মহিলা থেকে বলতে পারি যে কতজন গর্ভবতী এবং গ্রামীণ এলাকায় বসবাস করে, আমরা পাতা দেখে এটি করতে পারতাম। সুতরাং পাতার সংখ্যা প্রথম গবেষণা প্রশ্নের উত্তর দেবে।
যদি মহিলাদের নতুন রেকর্ড ছিল, এবং যে গাছটি আগে তাদের শ্রেণীবদ্ধ করার জন্য ব্যবহার করা হয়েছিল, এখন এটি সিদ্ধান্ত নেওয়ার জন্য ব্যবহার করা হয়েছিল যে একজন মহিলা গবেষণার অংশ হতে পারে বা না পারে, তবে এটি কি এখনও কাজ করবে? গাছটি একই মানদণ্ড ব্যবহার করবে এবং একজন মহিলা যদি গর্ভবতী হন এবং গ্রামীণ এলাকায় বসবাস করেন তবে অংশগ্রহণের জন্য যোগ্য হবেন।
উপরের চিত্রটি দেখে, আমরা দেখতে পাচ্ছি যে প্রতিটি গাছের নোডের প্রশ্নের উত্তর - "সে কি একজন অংশগ্রহণকারী?", "সে কি গর্ভবতী?", "সে কি গ্রামীণ এলাকায় বাস করে?"- হ্যাঁ, হ্যাঁ, এবং হ্যাঁ, তাই মনে হচ্ছে গাছটি সিদ্ধান্ত নিতে পারে, এই ক্ষেত্রে, মহিলাটি গবেষণায় অংশ নিতে পারে।
এই সারমর্ম সিদ্ধান্ত গাছ, একটি ম্যানুয়াল পদ্ধতিতে সম্পন্ন. মেশিন লার্নিং ব্যবহার করে, আমরা একটি মডেল তৈরি করতে পারি যা আমাদের জন্য স্বয়ংক্রিয়ভাবে এই গাছটি তৈরি করে, যাতে চূড়ান্ত সিদ্ধান্তের যথার্থতা সর্বাধিক করা যায়।
বিঃদ্রঃ: কম্পিউটার সায়েন্সে বিভিন্ন ধরনের গাছ রয়েছে যেমন বাইনারি গাছ, সাধারণ গাছ, এভিএল ট্রি, স্প্লে ট্রি, লাল কালো গাছ, বি-ট্রি ইত্যাদি। এখানে আমরা সিদ্ধান্তের গাছ কী তা সম্পর্কে একটি সাধারণ ধারণা দেওয়ার উপর ফোকাস করছি। . যদি এটি a এর উত্তরের উপর নির্ভর করে হাঁ or না। প্রতিটি নোডের জন্য প্রশ্ন এবং এইভাবে প্রতিটি নোড আছে সর্বাধিক দুটি শিশু, যখন বাছাই করা হয় যাতে "ছোট" নোডগুলি বাম দিকে থাকে, এটি সিদ্ধান্ত গাছকে শ্রেণীবদ্ধ করে বাইনারি গাছ.
আগের উদাহরণগুলিতে, গাছটি কীভাবে হতে পারে তা পর্যবেক্ষণ করুন শ্রেণীভুক্ত করা অংশগ্রহণকারী বা অ-অংশগ্রহণকারী হিসাবে নতুন ডেটা, অথবা প্রশ্নগুলিও পরিবর্তন করা যেতে পারে – “কতজন অংশগ্রহণকারী?”, “কতজন গর্ভবতী?”, “কতজন গ্রামীণ এলাকায় বাস করে?”- আমাদের খুঁজে বের করতে নেতৃত্ব দেয় পরিমাণ গর্ভবতী অংশগ্রহণকারীদের যারা একটি গ্রামীণ এলাকায় বাস করে।
যখন ডেটা শ্রেণীবদ্ধ করা হয়, এর মানে হল গাছটি একটি কাজ করছে শ্রেণীবিন্যাস টাস্ক, এবং যখন তথ্যের পরিমাণ পাওয়া যায়, গাছটি একটি সম্পাদন করছে প্রত্যাগতি টাস্ক এর মানে হল ডিসিশন ট্রি উভয় কাজের জন্য ব্যবহার করা যেতে পারে - শ্রেণীবিভাগ এবং রিগ্রেশন।
এখন যেহেতু আমরা বুঝতে পারি একটি সিদ্ধান্ত গাছ কী, এটি কীভাবে ব্যবহার করা যেতে পারে এবং এটি বর্ণনা করার জন্য কী নামকরণ ব্যবহার করা হয়, আমরা এর সীমাবদ্ধতা সম্পর্কে আশ্চর্য হতে পারি।
এলোমেলো বন বোঝা
যদি কিছু অংশগ্রহণকারী শহর ও গ্রামাঞ্চলের মধ্যে বিভাজনে বসবাস করে তাহলে সিদ্ধান্তের কি হবে? গাছ কি গ্রামীণ না শহুরে এই রেকর্ড যোগ করবে? আমাদের বর্তমানে যে কাঠামোটি রয়েছে তাতে এই ডেটা মাপসই করা কঠিন বলে মনে হচ্ছে, যেহেতু এটি মোটামুটি পরিষ্কার।
এছাড়াও, যদি নৌকায় বসবাসকারী একজন মহিলা গবেষণায় অংশগ্রহণ করেন, তাহলে তা কি গ্রামীণ বা শহুরে বলে বিবেচিত হবে? আগের ক্ষেত্রের মতো একইভাবে, গাছে উপলব্ধ বিকল্পগুলি বিবেচনা করে শ্রেণিবদ্ধ করা একটি চ্যালেঞ্জিং ডেটা পয়েন্ট।
সিদ্ধান্ত গাছের উদাহরণ সম্পর্কে আরও একটু চিন্তা করে, আমরা দেখতে পাচ্ছি যে এটি নতুন ডেটাকে সঠিকভাবে শ্রেণীবদ্ধ করতে পারে বিবেচনা করে যে এটি ইতিমধ্যেই গাছের ইতিমধ্যেই রয়েছে এমন একটি প্যাটার্ন অনুসরণ করে – কিন্তু যখন এমন রেকর্ড থাকে যা গাছটিকে সংজ্ঞায়িত করে এমন প্রাথমিক ডেটা থেকে ভিন্ন হয়, গাছের গঠন খুব শক্ত, রেকর্ডগুলিকে শ্রেণীবদ্ধ করা যায় না।
এর মানে হল যে সিদ্ধান্ত গাছ তার সম্ভাবনার মধ্যে কঠোর এবং সীমিত হতে পারে। একটি আদর্শ সিদ্ধান্ত গাছ আরও নমনীয় এবং আরও সূক্ষ্ম অদেখা ডেটা মিটমাট করতে সক্ষম হবে।
সমাধান: ঠিক যেমন "দুই জোড়া চোখ একের চেয়ে ভাল দেখতে পায়", দুটি মডেল সাধারণত একটির চেয়ে আরও সঠিক উত্তর নিয়ে আসে। জ্ঞানের উপস্থাপনার বৈচিত্র্যের জন্য অ্যাকাউন্টিং (গাছের কাঠামোতে এনকোড করা), একাধিক অনুরূপ গাছের মধ্যে সামান্য ভিন্ন কাঠামোর অনমনীয়তা এখন আর সীমাবদ্ধ নয়, যেহেতু একটি গাছের ত্রুটিগুলি অন্য গাছের দ্বারা "সমাপ্ত" হতে পারে। অনেকগুলোকে একত্রিত করে গাছ একসাথে, আমরা একটি পেতে বন. জংগল.
প্রাথমিক প্রশ্নের উত্তর সম্পর্কে, আমরা ইতিমধ্যে জানি যে এটি গাছের পাতায় এনকোড করা হবে - কিন্তু যখন আমাদের একটির পরিবর্তে অনেকগুলি গাছ থাকে তখন কী পরিবর্তন হয়?
যদি শ্রেণীবিভাগের জন্য গাছগুলিকে একত্রিত করা হয়, ফলাফলটি সংখ্যাগরিষ্ঠ উত্তর দ্বারা সংজ্ঞায়িত করা হবে, একে বলা হয় সংখ্যাগরিষ্ঠ ভোট; এবং রিগ্রেশনের ক্ষেত্রে, বনের প্রতিটি গাছ দ্বারা প্রদত্ত সংখ্যা হবে গড়.
এনসেম্বল লার্নিং এবং মডেল এনসেম্বল
এই পদ্ধতি হিসাবে পরিচিত ensemble শেখার. এনসেম্বল লার্নিং প্রয়োগ করার সময়, আপনি যেকোন অ্যালগরিদমকে একসাথে মিশ্রিত করতে পারেন, যতক্ষণ না আপনি নিশ্চিত করতে পারেন যে আউটপুটটি পার্স করা এবং অন্যান্য আউটপুটগুলির সাথে মিলিত হতে পারে (হয় ম্যানুয়ালি, বা বিদ্যমান লাইব্রেরি ব্যবহার করে)। সাধারণত, আপনি একই ধরণের একাধিক মডেলকে একত্রে সংযুক্ত করেন, যেমন একাধিক সিদ্ধান্ত গাছ, কিন্তু আপনি শুধুমাত্র একই-মডেল ধরনের ensembles যোগদানের মধ্যে সীমাবদ্ধ নন।
এনসেম্বলিং একটি সমস্যাকে আরও ভালোভাবে সাধারণীকরণ করার এবং সামান্য কর্মক্ষমতা বৃদ্ধির জন্য একটি কার্যত নিশ্চিত উপায়। কিছু ক্ষেত্রে, এনসেম্বলিং মডেলের ফলন a গুরুত্বপূর্ণ ভবিষ্যদ্বাণী করার ক্ষমতা বৃদ্ধি, এবং কখনও কখনও, সামান্য. এটি নির্ভর করে আপনি যে ডেটাসেটের উপর প্রশিক্ষণ নিচ্ছেন এবং মূল্যায়ন করছেন, সেইসাথে মডেলগুলির উপর।
সিদ্ধান্ত গাছ একসঙ্গে যোগদান ফলন গুরুত্বপূর্ণ কর্মক্ষমতা বৃদ্ধি পৃথক গাছ compred. এই পদ্ধতিটি গবেষণা এবং প্রয়োগকৃত মেশিন লার্নিং সম্প্রদায়গুলিতে জনপ্রিয় হয়েছিল এবং এটি এতটাই সাধারণ ছিল যে সিদ্ধান্ত গাছের সমাহারকে কথোপকথনের নাম দেওয়া হয়েছিল বন. জংগল, এবং সাধারণ ধরনের বন যা তৈরি করা হচ্ছিল (বিশেষজ্ঞের এলোমেলো উপসেটে সিদ্ধান্ত গাছের বন) নামটিকে জনপ্রিয় করেছে এলোমেলো বন.
প্রশস্ত-স্কেল ব্যবহারের প্রেক্ষিতে, Scikit-Learn-এর মতো লাইব্রেরিগুলি এর জন্য র্যাপার প্রয়োগ করেছে RandomForestRegressor
এস এবং RandomForestClassifier
s, তাদের নিজস্ব সিদ্ধান্ত গাছ বাস্তবায়নের উপরে নির্মিত, যাতে গবেষকরা তাদের নিজস্ব ensembles নির্মাণ এড়াতে অনুমতি দেয়।
চলুন এলোমেলো বনে ডুব দিই!
কিভাবে র্যান্ডম বন অ্যালগরিদম কাজ করে?
র্যান্ডম ফরেস্ট অ্যালগরিদম কার্যকর করার সময় নিম্নলিখিত মৌলিক পদক্ষেপগুলি জড়িত:
- র্যান্ডম রেকর্ডের একটি সংখ্যা বাছুন, এটি যেকোনো সংখ্যা হতে পারে, যেমন 4, 20, 76, 150, এমনকি 2.000 ডেটাসেট থেকে (যাকে বলা হয় N রেকর্ড)। সংখ্যাটি নির্ভর করবে ডেটাসেটের প্রস্থের উপর, প্রশস্ত, বড় N হতে পারে. এই যেখানে এলোমেলো অ্যালগরিদমের অংশ থেকে নাম আসে!
- সেগুলির উপর ভিত্তি করে একটি সিদ্ধান্ত গাছ তৈরি করুন N এলোমেলো রেকর্ড;
- অ্যালগরিদমের জন্য সংজ্ঞায়িত গাছের সংখ্যা, বা বনের গাছের সংখ্যা অনুসারে, ধাপ 1 এবং 2 পুনরাবৃত্তি করুন। এটি এলোমেলো ডেটা রেকর্ডের সেট থেকে আরও গাছ তৈরি করে;
- ধাপ 3 এর পরে, চূড়ান্ত পদক্ষেপ আসে, যা ফলাফলের পূর্বাভাস দিচ্ছে:
- শ্রেণীবিভাগের ক্ষেত্রে: বনের প্রতিটি গাছ নতুন রেকর্ডটি কোন বিভাগে রয়েছে তার পূর্বাভাস দেবে। এর পরে, সংখ্যাগরিষ্ঠ ভোটে জয়ী বিভাগে নতুন রেকর্ড বরাদ্দ করা হয়।
- রিগ্রেশনের ক্ষেত্রে: বনের প্রতিটি গাছ নতুন রেকর্ডের জন্য একটি মান ভবিষ্যদ্বাণী করে, এবং চূড়ান্ত ভবিষ্যদ্বাণী মানটি বনের সমস্ত গাছ দ্বারা পূর্বাভাসিত সমস্ত মানগুলির গড় নিয়ে গণনা করা হবে৷
বৈশিষ্ট্যগুলির একটি এলোমেলো উপসেটের সাথে মানানসই প্রতিটি গাছের অগত্যা অন্য কিছু বৈশিষ্ট্য সম্পর্কে কোন জ্ঞান থাকবে না, যা গণনামূলক খরচ কম রাখার সময় এনসেম্বলিং দ্বারা সংশোধন করা হয়।
পরামর্শ: Since Random Forest use Decision Trees as a base, it is very helpful to understand how Decision Trees work and have some practice with them individually to build an intuition on their structure. When composing random forests, you’ll be setting values such as the maximum depth of a tree, the minimum number of sampels required to be at a leaf node, the criteria to bet determine internal splits, etc. to help the ensemble better fit a dataset, and generalize to new points. In practice, you’ll typically be using Random Forests, Gradient Boosting or Extreme Gradient Boosting or other tree-based methodologies, so having a good grasp on the hyperparameters of a single decision tree will help with building a strong intuition for tuning ensembles.
গাছগুলি কীভাবে কাজ করে সে সম্পর্কে একটি অন্তর্দৃষ্টি এবং র্যান্ডম ফরেস্টগুলির একটি বোঝার সাথে - একমাত্র জিনিসটি তৈরি করা, প্রশিক্ষণ এবং ডেটাতে তাদের টিউন করার অনুশীলন করা বাকি!
Scikit-Learn-এর সাহায্যে র্যান্ডম ফরেস্ট মডেল তৈরি ও প্রশিক্ষণ
এখন পর্যন্ত গর্ভাবস্থা, বসবাসের এলাকা এবং মহিলাদের জড়িত উদাহরণগুলির জন্য একটি কারণ ছিল।
2020 সালে, বাংলাদেশের গবেষকরা লক্ষ্য করেছেন যে গর্ভবতী মহিলাদের মধ্যে মৃত্যুহার এখনও খুব বেশি, বিশেষ করে যারা গ্রামীণ এলাকায় বসবাস করে তাদের বিবেচনা করে। যে কারণে, তারা একটি IOT পর্যবেক্ষণ সিস্টেম ব্যবহার করে মাতৃস্বাস্থ্যের ঝুঁকি বিশ্লেষণ করুন. আইওটি সিস্টেম বাংলাদেশের গ্রামাঞ্চল থেকে বিভিন্ন হাসপাতাল, কমিউনিটি ক্লিনিক এবং মাতৃস্বাস্থ্য পরিচর্যা থেকে তথ্য সংগ্রহ করে।
সংগৃহীত ডেটা তারপরে একটি কমা-বিভাজিত-মান (csv) ফাইলে সংগঠিত হয়েছিল এবং এতে আপলোড করা হয়েছিল UCI এর মেশিন লার্নিং ভান্ডার.
এটি সেই ডেটা যা আমরা অনুশীলন করতে ব্যবহার করব এবং বোঝার চেষ্টা করব যে একজন গর্ভবতী মহিলার একটি আছে কিনা কম, মধ্যম or উচ্চ মৃত্যুর ঝুঁকি।
বিঃদ্রঃ: আপনি ডেটাসেট ডাউনলোড করতে পারেন এখানে.
শ্রেণীবিভাগের জন্য এলোমেলো বন ব্যবহার করা
যেহেতু আমরা জানতে চাই মহিলার আছে কিনা কম, মধ্যম or উচ্চ মৃত্যুর ঝুঁকি, এর মানে আমরা তিনটি শ্রেণী সহ একটি শ্রেণীবিভাগ সঞ্চালন করব। যখন একটি সমস্যা দুটির বেশি শ্রেণী থাকে তখন তাকে বলা হয় a বহুশ্রেণীর সমস্যা, একটি এর বিপরীতে বাইনারি সমস্যা (যেখানে আপনি দুটি শ্রেণীর মধ্যে নির্বাচন করেন, সাধারণত 0
এবং 1
).
এই প্রথম উদাহরণে, আমরা একটি র্যান্ডম ফরেস্ট ক্লাসিফায়ার এবং পাইথনের স্কিট-লার্ন সহ একটি মাল্টিক্লাস ক্লাসিফিকেশন মডেল বাস্তবায়ন করব।
আমরা এই সমস্যাটি সমাধান করার জন্য সাধারণ মেশিন লার্নিং পদক্ষেপগুলি অনুসরণ করব, যা লাইব্রেরি লোড করা, ডেটা পড়া, সারাংশ পরিসংখ্যান দেখা এবং এটি আরও ভালভাবে বোঝার জন্য ডেটা ভিজ্যুয়ালাইজেশন তৈরি করা। তারপরে, একটি মডেল তৈরি, প্রশিক্ষণ এবং মূল্যায়ন করে ডেটা প্রাক-প্রসেসিং এবং বিভক্ত করা।
লাইব্রেরি আমদানি করা
আমরা ডাটা পড়ার জন্য পান্ডাস, সিবোর্ন এবং ম্যাটপ্লটলিবকে এটি কল্পনা করতে এবং NumPy ব্যবহার করব দুর্দান্ত ইউটিলিটি পদ্ধতির জন্য:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
ডেটাসেট আমদানি করা হচ্ছে
নিম্নলিখিত কোডটি ডেটাসেট আমদানি করে এবং এটি একটি পাইথনে লোড করে DataFrame
:
dataset = pd.read_csv("../../datasets/random-forest/maternal_health_risk.csv")
ডেটার প্রথম পাঁচটি লাইন দেখার জন্য, আমরা এক্সিকিউট করি head()
কমান্ড প্রয়োগ করুন:
dataset.head()
এই আউটপুট:
Age SystolicBP DiastolicBP BS BodyTemp HeartRate RiskLevel
0 25 130 80 15.0 98.0 86 high risk
1 35 140 90 13.0 98.0 70 high risk
2 29 90 70 8.0 100.0 80 high risk
3 30 140 85 7.0 98.0 70 high risk
4 35 120 60 6.1 98.0 76 low risk
এখানে আমরা গবেষণার সময় সংগৃহীত সমস্ত বৈশিষ্ট্য দেখতে পারি।
- বয়স: বছরের মধ্যে বয়স।
- সিস্টোলিকবিপি: mmHg তে রক্তচাপের উচ্চ মান, গর্ভাবস্থায় একটি উল্লেখযোগ্য বৈশিষ্ট্য।
- ডায়াস্টোলিকবিপি: mmHg-তে রক্তচাপের নিম্ন মান, গর্ভাবস্থায় আরেকটি উল্লেখযোগ্য বৈশিষ্ট্য।
- বিএস: মোলার ঘনত্বের পরিপ্রেক্ষিতে রক্তে গ্লুকোজের মাত্রা, mmol/L।
- হার্ট রেট: বিশ্রামে থাকা হৃদস্পন্দন প্রতি মিনিটে।
- ঝুঁকি স্তর: গর্ভাবস্থায় ঝুঁকির স্তর।
- বডি টেম্প: শরীরের তাপমাত্রা।
এখন আমরা কি পরিমাপ করা হচ্ছে সে সম্পর্কে আরও বুঝতে পেরেছি, আমরা এর সাথে ডেটার প্রকারগুলি দেখতে পারি info()
:
dataset.info()
এর ফলে:
RangeIndex: 1014 entries, 0 to 1013
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Age 1014 non-null int64
1 SystolicBP 1014 non-null int64
2 DiastolicBP 1014 non-null int64
3 BS 1014 non-null float64
4 BodyTemp 1014 non-null float64
5 HeartRate 1014 non-null int64
6 RiskLevel 1014 non-null object
dtypes: float64(2), int64(4), object(1)
memory usage: 55.6+ KB
তাকানো থেকে RangeIndex
লাইন, আমরা দেখতে পাচ্ছি যে 1014 টি রেকর্ড আছে এবং কলাম Non-Null Count
জানায় যে ডেটার কোনো অনুপস্থিত মান নেই। এর মানে, ডেটা হারিয়ে যাওয়ার জন্য আমাদের কোনো চিকিৎসা করতে হবে না!
মধ্যে Dtype
কলাম, আমরা প্রতিটি ভেরিয়েবলের ধরন দেখতে পারি। বর্তমানে, float64
কলাম যেমন BS
এবং BodyTemp
সাংখ্যিক মান আছে যা যেকোনো পরিসরে পরিবর্তিত হতে পারে, যেমন 15.0, 15.51, 15.76, 17.28, তাদের তৈরি করে সংখ্যাগতভাবে একটানা (আপনি সর্বদা একটি ফ্লোটিং পয়েন্ট নম্বরে 0 যোগ করতে পারেন, বিজ্ঞাপন অসীম)। অন্যদিকে, ভেরিয়েবল যেমন Age
, SystolicBP
, DiastolicBP
, এবং HeartRate
ধরনের হয় int64
, এর মানে হল যে সংখ্যাগুলি শুধুমাত্র ইউনিট দ্বারা পরিবর্তিত হয়, যেমন 11, 12, 13, 14 - আমাদের হৃদস্পন্দন 77.78 হবে না, এটি হয় 77 বা 78 - সেগুলি হল সংখ্যাগতভাবে পৃথক মান এবং আমাদেরও আছে RiskLevel
সঙ্গে একটি object
টাইপ, এটি সাধারণত নির্দেশ করে যে ভেরিয়েবলটি একটি পাঠ্য, এবং আমাদের সম্ভবত এটিকে একটি সংখ্যায় রূপান্তর করতে হবে। যেহেতু ঝুঁকির স্তর নিম্ন থেকে উচ্চে বৃদ্ধি পায়, তাই বিভাগগুলিতে একটি অন্তর্নিহিত আদেশ রয়েছে, এটি নির্দেশ করে যে এটি একটি স্পষ্টতই অর্ডিনাল পরিবর্তনশীল।
বিঃদ্রঃ: প্রতিটি ডেটার ধরনটি দেখা গুরুত্বপূর্ণ, এবং এটির প্রেক্ষাপট অনুসারে এটি অর্থপূর্ণ কিনা তা দেখুন। উদাহরণস্বরূপ, হার্ট রেট ইউনিটের অর্ধেক থাকার মানে হয় না, তাই এর মানে হল ইন্টারজার টাইপ একটি বিচ্ছিন্ন মানের জন্য পর্যাপ্ত। যখন এটি না ঘটে, আপনি পান্ডাসের সাথে ডেটার ধরণ পরিবর্তন করতে পারেন astype()
সম্পত্তি - df['column_name'].astype('type')
.
ডেটা টাইপ দেখার পর, আমরা ব্যবহার করতে পারি describe()
কিছু বর্ণনামূলক পরিসংখ্যানে শীর্ষে উঠতে, যেমন প্রতিটি কলামের গড় মান, আদর্শ বিচ্যুতি, কোয়ান্টাইল, সর্বনিম্ন এবং সর্বোচ্চ ডেটা মান:
dataset.describe().T
উপরের কোড প্রদর্শন করে:
count mean std min 25% 50% 75% max
Age 1014.0 29.871795 13.474386 10.0 19.0 26.0 39.0 70.0
SystolicBP 1014.0 113.198225 18.403913 70.0 100.0 120.0 120.0 160.0
DiastolicBP 1014.0 76.460552 13.885796 49.0 65.0 80.0 90.0 100.0
BS 1014.0 8.725986 3.293532 6.0 6.9 7.5 8.0 19.0
BodyTemp 1014.0 98.665089 1.371384 98.0 98.0 98.0 98.0 103.0
HeartRate 1014.0 74.301775 8.088702 7.0 70.0 76.0 80.0 90.0
RiskLevel 1014.0 0.867850 0.807353 0.0 0.0 1.0 2.0 2.0
লক্ষ্য করুন যে বেশিরভাগ কলামের জন্য, গড় মান থেকে অনেক দূরে আদর্শ বিচ্যুতি (std) - এটি নির্দেশ করে যে ডেটা অগত্যা একটি ভাল আচরণ করা পরিসংখ্যানগত বন্টন অনুসরণ করে না। যদি এটি করে থাকে, তবে ঝুঁকির পূর্বাভাস দেওয়ার সময় এটি মডেলটিকে সাহায্য করত। এখানে যা করা যেতে পারে তা হল ডেটাটিকে আরও প্রতিনিধিত্বমূলক করতে প্রিপ্রসেস করা যেন এটি সমগ্র বিশ্বের জনসংখ্যার ডেটা, বা আরও বেশি। স্বাভাবিক করা. কিন্তু, জন্য র্যান্ডম বন মডেল ব্যবহার করার সময় একটি সুবিধা শ্রেণীবিন্যাস, হল অন্তর্নিহিত গাছের কাঠামোটি এমন ডেটার সাথে ভালভাবে মোকাবিলা করতে পারে যেগুলিকে স্বাভাবিক করা হয়নি, একবার এটি প্রতিটি ভেরিয়েবলের জন্য প্রতিটি ট্রি স্তরের মান দ্বারা ভাগ করলে।
এছাড়াও, যেহেতু আমরা গাছ ব্যবহার করছি এবং ফলস্বরূপ শ্রেণীটি ভোট দিয়ে প্রাপ্ত হবে, আমরা সহজাতভাবে বিভিন্ন মানের মধ্যে তুলনা করছি না, শুধুমাত্র একই ধরণের মানগুলির মধ্যে, তাই এই ক্ষেত্রে বৈশিষ্ট্যগুলিকে একই স্কেলে সামঞ্জস্য করার প্রয়োজন নেই . এর মানে হল র্যান্ডম ফরেস্ট ক্লাসিফিকেশন মডেল স্কেল অপরিবর্তনীয়, এবং আপনাকে বৈশিষ্ট্য স্কেলিং সঞ্চালন করতে হবে না।
এই ক্ষেত্রে, ডেটা প্রিপ্রসেসিং-এর ধাপ আমরা নিতে পারি তা হল শ্রেণীগত রূপান্তর করা RiskLevel
একটি সংখ্যাসূচক একটি কলাম.
ডেটা ভিজ্যুয়ালাইজ করা
রূপান্তর করার আগে RiskLevel
, আসুন একটি Scatterplot-এর সাথে বৈশিষ্ট্যগুলির প্রতিটি জোড়ার জন্য পয়েন্টগুলির সংমিশ্রণ এবং হিস্টোগ্রাম বক্ররেখাটি কল্পনা করে কীভাবে পয়েন্টগুলি বিতরণ করা হয় তা দেখে দ্রুত ডেটা কল্পনা করি। এটি করার জন্য, আমরা Seaborn's ব্যবহার করব pairplot()
যা উভয় প্লটকে একত্রিত করে। এটি প্রতিটি বৈশিষ্ট্য সংমিশ্রণের জন্য উভয় প্লট তৈরি করে এবং তাদের ঝুঁকির স্তর অনুসারে কোড করা পয়েন্ট রঙ প্রদর্শন করে hue
সম্পত্তি:
g = sns.pairplot(dataset, hue='RiskLevel')
g.fig.suptitle("Scatterplot and histogram of pairs of variables color coded by risk level",
fontsize = 14,
y=1.05);
উপরের কোড তৈরি করে:
প্লটটি দেখার সময়, আদর্শ পরিস্থিতি হবে বক্ররেখা এবং বিন্দুগুলির মধ্যে একটি স্পষ্ট বিচ্ছেদ। আমরা দেখতে পাচ্ছি, তিন ধরনের ঝুঁকির শ্রেণী বেশিরভাগই মিশে যায়, যেহেতু বিন্দুর মধ্যে শূন্যস্থান সীমাবদ্ধ করার সময় গাছ অভ্যন্তরীণভাবে রেখা আঁকে, তাই আমরা অনুমান করতে পারি যে বনের আরও গাছ হয়তো আরও বেশি জায়গা সীমিত করতে পারে এবং বিন্দুগুলিকে আরও ভালভাবে শ্রেণীবদ্ধ করতে পারে।
মৌলিক অনুসন্ধানমূলক তথ্য বিশ্লেষণ সম্পন্ন করে, আমরা প্রিপ্রসেস করতে পারি RiskLevel
কলাম।
শ্রেণীবিভাগের জন্য ডেটা প্রিপ্রসেসিং
শুধুমাত্র তিনটি শ্রেণী আছে নিশ্চিত হতে RiskLevel
আমাদের ডেটাতে, এবং অন্য কোন মান ভুলভাবে যোগ করা হয়নি, আমরা ব্যবহার করতে পারি unique()
কলামের অনন্য মান প্রদর্শন করতে:
dataset['RiskLevel'].unique()
এই আউটপুট:
array(['high risk', 'low risk', 'mid risk'], dtype=object)
ক্লাস চেক করা হয়েছে, এখন পরবর্তী ধাপ হল প্রতিটি মানকে একটি সংখ্যায় রূপান্তর করা। যেহেতু শ্রেণীবিভাগের মধ্যে একটি ক্রম আছে, তাই আমরা বোঝাতে 0, 1 এবং 2 মান ব্যবহার করতে পারি কম, মধ্যম এবং উচ্চ ঝুঁকি পাইথনের অনুসরণ করে কলামের মান পরিবর্তন করার অনেক উপায় রয়েছে সহজ যে জটিল নীতিবাক্য, আমরা ব্যবহার করব .replace()
পদ্ধতি, এবং সহজভাবে তাদের পূর্ণসংখ্যা উপস্থাপনা দিয়ে প্রতিস্থাপন করুন:
dataset['RiskLevel'] = dataset['RiskLevel'].replace('low risk', 0).replace('mid risk', 1).replace('high risk', 2)
মানগুলি প্রতিস্থাপন করার পরে, আমরা মডেলটিকে প্রশিক্ষণের জন্য কী ব্যবহার করা হবে তাতে ডেটা ভাগ করতে পারি, বৈশিষ্ট্য or X, এবং আমরা কি ভবিষ্যদ্বাণী করতে চাই, লেবেল or y:
y = dataset['RiskLevel']
X = dataset.drop(['RiskLevel'], axis=1)
একদা X
এবং y
সেট প্রস্তুত, আমরা Scikit-Learn's ব্যবহার করতে পারি train_test_split()
তাদের ট্রেন এবং পরীক্ষা সেটে আরও বিভক্ত করার পদ্ধতি:
from sklearn.model_selection import train_test_split
SEED = 42
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.2,
random_state=SEED)
উপদেশ: আপনি যদি ফলাফলটি পুনরুত্পাদনযোগ্য করতে চান তবে একটি র্যান্ডম স্টেট বীজ ব্যবহার করতে ভুলবেন না। আমরা একটি র্যান্ডম স্টেট বীজ ব্যবহার করেছি যাতে আপনি গাইড থেকে একই ফলাফল পুনরুত্পাদন করতে পারেন।
এখানে, আমরা পরীক্ষার জন্য 20% ডেটা এবং প্রশিক্ষণের জন্য 80% ব্যবহার করছি।
একটি র্যান্ডমফরেস্ট ক্লাসিফায়ার প্রশিক্ষণ
সেরা-অভ্যাস, শিল্প-স্বীকৃত মান এবং অন্তর্ভুক্ত চিট শীট সহ গিট শেখার জন্য আমাদের হ্যান্ডস-অন, ব্যবহারিক গাইড দেখুন। গুগলিং গিট কমান্ড এবং আসলে বন্ধ করুন শেখা এটা!
Scikit-Learn এর অধীনে বাস্তবায়িত ensembles sklearn.ensemble
মডিউল শ্রেণীবিভাগের জন্য ব্যবহৃত সিদ্ধান্ত গাছের একটি সংকলন, যেখানে একটি সংখ্যাগরিষ্ঠ ভোট নেওয়া হয় হিসাবে প্রয়োগ করা হয় RandomForestClassifier
.
ট্রেন এবং পরীক্ষা সেট থাকার, আমরা আমদানি করতে পারেন RandomForestClassifier
ক্লাস এবং মডেল তৈরি করুন। শুরু করার জন্য, এর সেট করে তিনটি গাছ দিয়ে একটি বন তৈরি করা যাক n_estimators
প্যারামিটার 3 হিসাবে, এবং প্রতিটি গাছের সাথে তিনটি স্তর রয়েছে, সেট করে max_depth
2 থেকে:
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier(n_estimators=3,
max_depth=2,
random_state=SEED)
বিঃদ্রঃ: এর জন্য ডিফল্ট মান n_estimators
is 100
. এটি ভবিষ্যদ্বাণী করার ক্ষমতা এবং এনসেম্বলের সাধারণীকরণকে বাড়িয়ে তোলে, কিন্তু আমরা এটিকে কল্পনা এবং পরিদর্শন করা সহজ করার জন্য একটি ছোট তৈরি করছি। মাত্র 3টি গাছ দিয়ে - আমরা সেগুলিকে কল্পনা করতে এবং পরিদর্শন করতে পারি৷ ম্যানুয়ালি স্বতন্ত্র গাছ এবং তাদের সহ-নির্ভরতা উভয়েরই আমাদের অন্তর্দৃষ্টি আরও গড়ে তুলতে। একই জন্য প্রযোজ্য max_depth
, যা হলো None
, যার মানে প্রয়োজন অনুযায়ী ডেটা ফিট করার জন্য গাছগুলি গভীর থেকে গভীরতর হতে পারে।
ডেটার চারপাশে মডেল ফিট করতে - আমরা কল করি fit()
পদ্ধতি, প্রশিক্ষণ বৈশিষ্ট্য এবং লেবেল পাস করা:
rfc.fit(X_train, y_train)
y_pred = rfc.predict(X_test)
মডেলটি কতটা ভাল করেছে তা মূল্যায়ন করতে আমরা এখন বাস্তব লেবেলের সাথে ভবিষ্যদ্বাণী করা লেবেলগুলির তুলনা করতে পারি! মডেলের মূল্যায়ন করার আগে, আসুন ensemble এ কটাক্ষপাত করা যাক।
মডেলটি একটু গভীরভাবে দেখার জন্য, আমরা প্রতিটি গাছকে কল্পনা করতে পারি এবং কীভাবে তারা ডেটা ভাগ করছে। এটি ব্যবহার করে করা যেতে পারে tree
মডিউলটি Scikit-Learn-এ তৈরি করা হয়েছে এবং তারপরে প্রতিটি অনুমানকারীর মধ্যে লুপ করা হচ্ছে:
from sklearn import tree
features = X.columns.values
classes = ['0', '1', '2']
for estimator in rfc.estimators_:
print(estimator)
plt.figure(figsize=(12,6))
tree.plot_tree(estimator,
feature_names=features,
class_names=classes,
fontsize=8,
filled=True,
rounded=True)
plt.show()
উপরের কোডটি গাছের প্লটগুলি প্রদর্শন করে:
লক্ষ্য করুন কিভাবে তিনটি গাছ আলাদা। প্রথমটি দিয়ে শুরু হয় BS
বৈশিষ্ট্য, সঙ্গে দ্বিতীয় DiastolicBP
, এবং সঙ্গে তৃতীয় BS
আবার যদিও তৃতীয়টি নমুনার একটি ভিন্ন সংখ্যা দেখে। ডান শাখায়, প্রথম দুটি গাছও ব্যবহার করার সিদ্ধান্ত নেয় Age
পাতার স্তরে, যখন তৃতীয় গাছ দিয়ে শেষ হয় BS
বৈশিষ্ট্য মাত্র তিনটি অনুমানকারীর সাহায্যে, এটা স্পষ্ট যে কীভাবে স্কেলিং আপ জ্ঞানের একটি সমৃদ্ধ, বৈচিত্র্যময় উপস্থাপনা দেয় যা সফলভাবে একটি অত্যন্ত-নির্ভুল মডেলে একত্রিত করা যেতে পারে।
বনে যত বেশি গাছ, মডেল তত বেশি বৈচিত্র্যময় হতে পারে। রিটার্ন হ্রাস করার একটি বিন্দু আছে, যদিও, অনেক গাছের সাথে যেমন বৈশিষ্ট্যের একটি এলোমেলো উপসেটে মাপসই করা হয়, তেমনই বেশ কিছু অনুরূপ গাছ থাকবে যেগুলি সমাহারে খুব বেশি বৈচিত্র্য দেয় না, এবং যা হতে শুরু করবে খুব বেশি ভোটিং ক্ষমতা এবং প্রশিক্ষণের ডেটাসেটে ওভারফিট হওয়ার জন্য দলটিকে তির্যক করুন, যা বৈধকরণ সেটের সাধারণীকরণকে ক্ষতিগ্রস্ত করে।
আরও গাছ থাকার বিষয়ে আগে একটি হাইপোটেসিস তৈরি করা হয়েছিল এবং এটি কীভাবে মডেলের ফলাফলগুলিকে উন্নত করতে পারে। আসুন ফলাফলগুলি একবার দেখে নেওয়া যাক, একটি নতুন মডেল তৈরি করুন এবং দেখুন হিপোথিসিস ধরে আছে কিনা!
র্যান্ডমফরেস্ট ক্লাসিফায়ার মূল্যায়ন করা হচ্ছে
Scikit-Learn একটি প্রদান করে বেসলাইন তৈরি করা সহজ করে তোলে DummyClassifier
, যা আউটপুট ভবিষ্যদ্বাণী করে ইনপুট বৈশিষ্ট্য ব্যবহার না করে (সম্পূর্ণ র্যান্ডম আউটপুট)। যদি আপনার মডেল এর চেয়ে ভালো হয় DummyClassifier
, কিছু শেখা হচ্ছে! শেখার সর্বোচ্চ বাড়াতে - আপনি a ব্যবহার করে স্বয়ংক্রিয়ভাবে বিভিন্ন হাইপারপ্যারামিটার পরীক্ষা করতে পারেন RandomizedSearchCV
or GridSearchCV
. একটি বেসলাইন থাকার পাশাপাশি, আপনি বেশ কয়েকটি মেট্রিক্সের লেন্স থেকে আপনার মডেলের কর্মক্ষমতা মূল্যায়ন করতে পারেন।
অ্যালগরিদম মূল্যায়ন করতে ব্যবহার করা যেতে পারে এমন কিছু ঐতিহ্যগত শ্রেণীবিভাগের মেট্রিক্স হল যথার্থতা, স্মরণ, f1-স্কোর, নির্ভুলতা এবং বিভ্রান্তি ম্যাট্রিক্স। এখানে তাদের প্রতিটি সম্পর্কে একটি সংক্ষিপ্ত ব্যাখ্যা:
- স্পষ্টতা: যখন আমাদের লক্ষ্য হল আমাদের শ্রেণিবিন্যাসকারীর দ্বারা সঠিক ভবিষ্যদ্বাণী মানগুলিকে সঠিক বলে বিবেচিত হয়েছে তা বোঝা। নির্ভুলতা সেই সত্যিকারের ইতিবাচক মানগুলিকে সেই নমুনাগুলি দ্বারা ভাগ করবে যা ইতিবাচক হিসাবে ভবিষ্যদ্বাণী করা হয়েছিল;
$$
নির্ভুলতা = ফ্র্যাক{টেক্সট{ট্রু ইতিবাচক}}{টেক্সট{ট্রু ইতিবাচক} + টেক্সট{ফলস ইতিবাচক}}
$$
- প্রত্যাহার: আমাদের ক্লাসিফায়ার দ্বারা কতগুলি সত্য ইতিবাচক চিহ্নিত করা হয়েছে তা বোঝার জন্য সাধারণত নির্ভুলতার সাথে গণনা করা হয়। প্রত্যাহার গণনা করা হয় সত্যিকারের ইতিবাচককে এমন কিছু দিয়ে ভাগ করে যা ইতিবাচক হিসাবে ভবিষ্যদ্বাণী করা উচিত ছিল।
$$
recall = frac{text{true positives}}{text{true positives} + text{false negatives}}
$$
- F1 স্কোর: সুষম বা সুরেলা গড় নির্ভুলতা এবং প্রত্যাহার. সর্বনিম্ন মান 0 এবং সর্বোচ্চ 1। কখন
f1-score
1 এর সমান, এর মানে হল সমস্ত ক্লাস সঠিকভাবে ভবিষ্যদ্বাণী করা হয়েছিল - এটি বাস্তব ডেটার সাথে প্রাপ্ত করা একটি খুব কঠিন স্কোর (ব্যতিক্রম প্রায় সবসময়ই থাকে)।
$$
text{f1-score} = 2* frac{text{precision} * text{recall}}{text{precision} + text{recall}}
$$
-
বিভ্রান্তি ম্যাট্রিক্স: যখন আমাদের জানতে হবে কতটা নমুনা আমরা সঠিক বা ভুল পেয়েছি প্রতিটি ক্লাস. যে মানগুলি সঠিক এবং সঠিকভাবে ভবিষ্যদ্বাণী করা হয়েছিল তাকে বলা হয় সত্য ইতিবাচক, যেগুলিকে ইতিবাচক হিসাবে ভবিষ্যদ্বাণী করা হয়েছিল কিন্তু ইতিবাচক ছিল না তাকে বলা হয় মিথ্যা ইতিবাচক. এর একই নামকরণ সত্য নেতিবাচক এবং মিথ্যা নেতিবাচক নেতিবাচক মানগুলির জন্য ব্যবহৃত হয়;
-
সঠিকতা: আমাদের শ্রেণিবিন্যাসকারী কতটি ভবিষ্যদ্বাণী সঠিক হয়েছে তা বর্ণনা করে। সর্বনিম্ন নির্ভুলতার মান হল 0 এবং সর্বোচ্চ হল 1৷ এই মানটি সাধারণত 100 দ্বারা গুণ করা হয় একটি শতাংশ পেতে:
$$
নির্ভুলতা = ফ্র্যাক{টেক্সট{সঠিক ভবিষ্যদ্বাণীর সংখ্যা}}পাঠ্য{মোট ভবিষ্যদ্বাণীর সংখ্যা}}
$$
বিঃদ্রঃ: আপনি মেশিন লার্নিং প্রয়োগ করতে চান এমন যেকোনো বাস্তব তথ্যের 100% নির্ভুলতা পাওয়া কার্যত অসম্ভব। যদি আপনি একটি 100% নির্ভুলতা শ্রেণীবিভাগ, বা এমনকি একটি প্রায় 100% ফলাফল দেখতে পান - সন্দিহান হন, এবং মূল্যায়ন সম্পাদন করুন৷ এই সমস্যাগুলির একটি সাধারণ কারণ হল ডেটা ফাঁস (প্রত্যক্ষ বা পরোক্ষভাবে একটি পরীক্ষার সেটে প্রশিক্ষণ পরীক্ষার অংশ ফাঁস করা)। "একটি ভাল নির্ভুলতা" কী তা নিয়ে কোনও ঐক্যমত্য নেই, প্রাথমিকভাবে কারণ এটি আপনার ডেটার উপর নির্ভর করে – কখনও কখনও, একটি 70% নির্ভুলতা বেশি হবে! কখনও কখনও, এটি সত্যিই কম নির্ভুলতা হবে। সাধারণভাবে বলতে, 70% এর বেশি অনেক মডেলের জন্য যথেষ্ট, কিন্তু এটি নির্ধারণ করার জন্য ডোমেন গবেষকের উপর।
আপনি প্রয়োজনীয় লাইব্রেরিগুলি আমদানি করতে এবং ফলাফলগুলি দেখতে নিম্নলিখিত স্ক্রিপ্টটি চালাতে পারেন:
from sklearn.metrics import classification_report, confusion_matrix
cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt='d').set_title('Maternal risks confusion matrix (0 = low risk, 1 = medium risk, 2 = high risk)')
print(classification_report(y_test,y_pred))
আউটপুট এই মত কিছু দেখাবে:
precision recall f1-score support
0 0.53 0.89 0.66 80
1 0.57 0.17 0.26 76
2 0.74 0.72 0.73 47
accuracy 0.58 203
macro avg 0.61 0.59 0.55 203
weighted avg 0.59 0.58 0.53 203
শ্রেণীবিন্যাস প্রতিবেদনে, লক্ষ্য করুন যে প্রত্যাহার উচ্চ, 0.89 শ্রেণীর জন্য, যথার্থতা এবং প্রত্যাহার উভয়ই শ্রেণী 0, 2, 0.74-এর জন্য উচ্চ – এবং 0.72ম শ্রেণীর জন্য, তারা কম, বিশেষত 1 এর প্রত্যাহার এবং 0.17 এর নির্ভুলতা। . স্বতন্ত্রভাবে তিনটি শ্রেণীর জন্য প্রত্যাহার এবং নির্ভুলতা মধ্যে সম্পর্ক ক্যাপচার করা হয় F1 স্কোর, যা প্রত্যাহার এবং নির্ভুলতার মধ্যে সুরেলা গড় - মডেলটি করছে ঠিক আছে ক্লাস 0 এর জন্য, ক্লাস 1 এর জন্য মোটামুটি খারাপ এবং ক্লাস 2 এর জন্য শালীন।
মডেল সনাক্ত করার সময় খুব কঠিন সময় হচ্ছে মাঝারি ঝুঁকির ক্ষেত্রে.
মাত্র 3টি গাছ সহ আমাদের এলোমেলো বন শ্রেণিবিন্যাসকারী দ্বারা অর্জিত নির্ভুলতা হল 0.58
(58%) - এর মানে এটি ফলাফলের অর্ধেকেরও বেশি সঠিক ফলাফল পাচ্ছে। এটি একটি কম নির্ভুলতা, এবং সম্ভবত আরো গাছ যোগ করে উন্নত করা যেতে পারে।
বিভ্রান্তি ম্যাট্রিক্স দেখে, আমরা দেখতে পাচ্ছি যে মাঝারি ঝুঁকির 52টি রেকর্ডকে কম ঝুঁকি হিসাবে শ্রেণীবদ্ধ করার সময় বেশিরভাগ ভুল হয়, যা ক্লাস 1 এর কম প্রত্যাহারকে আরও অন্তর্দৃষ্টি দেয়। ঝুঁকিপূর্ণ রোগীদের।
আরও একটি বিষয় যা আরও বেশি অন্তর্দৃষ্টি তৈরি করতে পরীক্ষা করা যেতে পারে তা হল ভবিষ্যদ্বাণী করার সময় শ্রেণিবিন্যাসকারীর দ্বারা কোন বৈশিষ্ট্যগুলি সবচেয়ে বেশি বিবেচনা করা হয়। এই জন্য একটি গুরুত্বপূর্ণ পদক্ষেপ নিতে ব্যাখ্যাযোগ্য মেশিন লার্নিং সিস্টেম, এবং মডেলগুলিতে পক্ষপাত সনাক্ত করতে এবং প্রশমিত করতে সহায়তা করে।
যে দেখতে, আমরা অ্যাক্সেস করতে পারেন feature_importances_
শ্রেণিবিন্যাসকারীর সম্পত্তি। এটি আমাদের শতাংশের একটি তালিকা দেবে, যাতে আমরা অ্যাক্সেস করতে পারি feature_names_in_
প্রতিটি বৈশিষ্ট্যের নাম পেতে সম্পত্তি, একটি ডেটাফ্রেমে সংগঠিত করুন, সর্বোচ্চ থেকে সর্বনিম্ন পর্যন্ত সাজান এবং ফলাফল প্লট করুন:
features_df = pd.DataFrame({'features': rfc.feature_names_in_, 'importances': rfc.feature_importances_ })
features_df_sorted = features_df.sort_values(by='importances', ascending=False)
g = sns.barplot(data=features_df_sorted, x='importances', y ='features', palette="rocket")
sns.despine(bottom = True, left = True)
g.set_title('Feature importances')
g.set(xlabel=None)
g.set(ylabel=None)
g.set(xticks=[])
for value in g.containers:
g.bar_label(value, padding=2)
লক্ষ্য করুন কিভাবে ক্লাসিফায়ার বেশিরভাগই বিবেচনা করছে রক্তে শর্করা, তারপরে ডায়াস্টোলিক চাপের সামান্য, শরীরের তাপমাত্রা এবং সিদ্ধান্ত নেওয়ার জন্য বয়সের সামান্য, এটি ক্লাস 1-এ কম প্রত্যাহারের সাথেও জড়িত থাকতে পারে, সম্ভবত মাঝারি ঝুঁকির ডেটা এমন বৈশিষ্ট্যগুলির সাথে সম্পর্কযুক্ত যা হচ্ছে না। মডেল দ্বারা অনেক বিবেচনা করা হয়. আপনি এটি তদন্ত করার জন্য বৈশিষ্ট্যের গুরুত্বের সাথে আরও বেশি খেলার চেষ্টা করতে পারেন, এবং দেখতে পারেন যে মডেলের পরিবর্তনগুলি ব্যবহার করা বৈশিষ্ট্যগুলিকে প্রভাবিত করে কিনা, এছাড়াও যদি কিছু বৈশিষ্ট্য এবং পূর্বাভাসিত ক্লাসের মধ্যে একটি উল্লেখযোগ্য সম্পর্ক থাকে।
এটি ফলাফলগুলিকে কীভাবে প্রভাবিত করে তা দেখার জন্য আরও গাছ সহ একটি নতুন মডেল তৈরি করার সময় এসেছে৷ এর তৈরি করা যাক rfc_
900টি গাছ, 8টি স্তর এবং একই বীজ সহ বন। ফলাফল কি উন্নতি হবে?
rfc_ = RandomForestClassifier(n_estimators=900,
max_depth=7,
random_state=SEED)
rfc_.fit(X_train, y_train)
y_pred = rfc_.predict(X_test)
মেট্রিক্স গণনা এবং প্রদর্শন করা:
cm_ = confusion_matrix(y_test, y_pred)
sns.heatmap(cm_, annot=True, fmt='d').set_title('Maternal risks confusion matrix (0 = low risk, 1 = medium risk, 2 = high risk) for 900 trees with 8 levels')
print(classification_report(y_test,y_pred))
এই আউটপুট:
precision recall f1-score support
0 0.68 0.86 0.76 80
1 0.75 0.58 0.65 76
2 0.90 0.81 0.85 47
accuracy 0.74 203
macro avg 0.78 0.75 0.75 203
weighted avg 0.76 0.74 0.74 203
এটি দেখায় যে কীভাবে আরও গাছ যোগ করা এবং আরও বিশেষায়িত গাছ (উচ্চ স্তর) আমাদের মেট্রিক্সকে উন্নত করেছে। আমাদের এখনও ক্লাস 1 এর জন্য কম প্রত্যাহার আছে, কিন্তু সঠিকতা এখন 74%। উচ্চ ঝুঁকির ক্ষেত্রে শ্রেণীবদ্ধ করার সময় F1-স্কোর হয় 0.85, যার মানে আগের মডেলের 0.73-এর তুলনায় উচ্চ ঝুঁকির ক্ষেত্রে এখন আরও সহজে শনাক্ত করা যায়!
একটি প্রতিদিনের প্রকল্পে, উচ্চ ঝুঁকির ক্ষেত্রে সনাক্ত করা আরও গুরুত্বপূর্ণ হতে পারে, উদাহরণস্বরূপ নির্ভুলতার মতো একটি মেট্রিক সহ, যা হিসাবেও পরিচিত সংবেদনশীলতা পরিসংখ্যানে মডেলের কিছু প্যারামিটার টুইক করার চেষ্টা করুন এবং ফলাফলগুলি পর্যবেক্ষণ করুন।
এখন পর্যন্ত, আমরা কীভাবে র্যান্ডম ফরেস্ট ডেটা শ্রেণীবদ্ধ করার জন্য ব্যবহার করা যেতে পারে তার একটি সামগ্রিক ধারণা পেয়েছি – পরবর্তী বিভাগে, আমরা একই ডেটাসেটকে ভিন্ন উপায়ে ব্যবহার করতে পারি কিভাবে একই মডেল রিগ্রেশনের সাথে মানগুলির পূর্বাভাস দেয়।
রিগ্রেশনের জন্য এলোমেলো বন ব্যবহার করা
এই বিভাগে আমরা অধ্যয়ন করব কিভাবে Scikit-Learn ব্যবহার করে রিগ্রেশন সমস্যা সমাধানের জন্য একটি র্যান্ডম ফরেস্ট অ্যালগরিদম ব্যবহার করা যেতে পারে। এই অ্যালগরিদমটি বাস্তবায়নের জন্য অনুসরণ করা পদক্ষেপগুলি মডেলের ধরন এবং ভবিষ্যদ্বাণীকৃত ডেটার ধরন ছাড়াও শ্রেণিবিন্যাসের জন্য সম্পাদিত পদক্ষেপগুলির সাথে প্রায় অভিন্ন - যা এখন ক্রমাগত ভ্যালস হবে - ডেটা প্রস্তুতিতে শুধুমাত্র একটি পার্থক্য রয়েছে।
যেহেতু রিগ্রেশন এর জন্য করা হয় সংখ্যাসূচক মান - আসুন ডেটাসেট থেকে একটি সংখ্যাসূচক মান বেছে নেওয়া যাক। আমরা দেখেছি যে রক্তে শর্করা শ্রেণীবিভাগে গুরুত্বপূর্ণ ছিল, তাই এটি অন্যান্য বৈশিষ্ট্যের উপর ভিত্তি করে অনুমানযোগ্য হওয়া উচিত (যেহেতু এটি কিছু বৈশিষ্ট্যের সাথে সম্পর্কযুক্ত, সেই বৈশিষ্ট্যটিও এটির সাথে সম্পর্কযুক্ত)।
শ্রেণীবিভাগের জন্য আমরা যা করেছি তা অনুসরণ করে, আসুন প্রথমে লাইব্রেরি এবং একই ডেটাসেট আমদানি করি। আপনি যদি ইতিমধ্যে শ্রেণীবিভাগ মডেলের জন্য এটি করে থাকেন তবে আপনি এই অংশটি এড়িয়ে যেতে পারেন এবং সরাসরি প্রশিক্ষণের জন্য ডেটা প্রস্তুত করতে যেতে পারেন।
লাইব্রেরি এবং ডেটা আমদানি করা হচ্ছে
import pandas as pd
import numpy as np
import maplotlib.pyplot as plt
import seaborn as sns
dataset = pd.read_csv("../../datasets/random-forest/maternal_health_risk.csv")
রিগ্রেশনের জন্য ডেটা প্রিপ্রসেসিং
এটি একটি রিগ্রেশন টাস্ক, তাই ক্লাসের পূর্বাভাস দেওয়ার পরিবর্তে, আমরা ডেটাসেটের সংখ্যাসূচক কলামগুলির একটির পূর্বাভাস দিতে পারি। এই উদাহরণে, BS
কলাম ভবিষ্যদ্বাণী করা হবে. এই মানে y
ডেটা থাকবে রক্তে শর্করার তথ্য, এবং X
ডেটাতে ব্লাড সুগার ছাড়াও সমস্ত বৈশিষ্ট্য থাকবে। আলাদা করার পর X
এবং y
ডেটা, আমরা ট্রেন এবং পরীক্ষা সেট বিভক্ত করতে পারি:
from sklearn.model_selection import train_test_split
SEED = 42
y = dataset['BS']
X = dataset.drop(['BS'], axis=1)
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.2,
random_state=SEED)
একটি র্যান্ডমফরেস্ট রিগ্রেসরকে প্রশিক্ষণ দেওয়া
এখন যেহেতু আমরা আমাদের ডেটাসেট স্কেল করেছি, এই রিগ্রেশন সমস্যাটি সমাধান করার জন্য আমাদের অ্যালগরিদমকে প্রশিক্ষিত করার, এটিকে কিছুটা পরিবর্তন করার সময় এসেছে – আমরা বনে 20টি গাছ এবং প্রতিটিতে 4টি স্তর সহ একটি মডেল তৈরি করব৷ এটি করতে, আপনি নিম্নলিখিত কোডটি চালাতে পারেন:
from sklearn.ensemble import RandomForestRegressor
rfr = RandomForestRegressor(n_estimators=20,
max_depth=3,
random_state=SEED)
rfr.fit(X_train, y_train)
y_pred = rfr.predict(X_test)
আপনি এর সমস্ত প্যারামিটারের জন্য বিশদ জানতে পারেন RandomForestRegressor
অফিসিয়াল ডকুমেন্টেশনে.
যেহেতু 20টি গাছের প্লট তৈরি করা এবং দেখার জন্য কিছু সময় এবং উত্সর্গের প্রয়োজন হবে, তাই শ্রেণিবিন্যাসের গাছ থেকে এটি কীভাবে আলাদা তা দেখার জন্য আমরা প্রথমটি প্লট করতে পারি:
from sklearn import tree
features = X.columns
first_tree = rfr.estimators_[0]
plt.figure(figsize=(15,6))
tree.plot_tree(first_tree,
feature_names=features,
fontsize=8,
filled=True,
rounded=True);
লক্ষ্য করুন যে রিগ্রেশন ট্রিতে ইতিমধ্যে প্রতিটি নোডে পড়ে থাকা ডেটার জন্য একটি মান বরাদ্দ করা আছে। 20টি গাছ একত্রিত করার সময় সেই মানগুলি গড় করা হবে। আমরা শ্রেণীবিভাগের সাথে যা করেছি তা অনুসরণ করে, মান গণনা করার সময় রিগ্রেশন মডেলটি কোন ভেরিয়েবলগুলিকে আরও বিবেচনা করছে তা দেখতে আপনি বৈশিষ্ট্যের গুরুত্বগুলিও প্লট করতে পারেন।
একটি মেশিন লার্নিং সমস্যা সমাধান করার সময় এবং অ্যালগরিদমের কর্মক্ষমতা মূল্যায়ন করার সময় শেষ এবং চূড়ান্ত ধাপে এগিয়ে যাওয়ার সময়!
একটি RandomForestRegressor মূল্যায়ন
রিগ্রেশন সমস্যাগুলির জন্য একটি অ্যালগরিদম মূল্যায়ন করার জন্য ব্যবহৃত মেট্রিকগুলি হল গড় পরম ত্রুটি (MAE), গড় স্কোয়ারড ত্রুটি (MSE), এবং রুট মানে স্কোয়ারড ত্রুটি (RMSE)।
- গড় পরম ত্রুটি (MAE): যখন আমরা প্রকৃত মান থেকে ভবিষ্যদ্বাণীকৃত মানগুলি বিয়োগ করি, ত্রুটিগুলি প্রাপ্ত করি, সেই ত্রুটিগুলির পরম মানগুলি যোগ করুন এবং তাদের গড় পান৷ এই মেট্রিকটি মডেলের প্রতিটি ভবিষ্যদ্বাণীর জন্য সামগ্রিক ত্রুটির একটি ধারণা দেয়, যত ছোট (0 এর কাছাকাছি) তত ভাল৷
$$
mae = (frac{1}{n})sum_{i=1}^{n}বাম | প্রকৃত – সঠিক পূর্বাভাস |
$$
বিঃদ্রঃ: এছাড়াও আপনি সম্মুখীন হতে পারে y
এবং ŷ
সমীকরণে স্বরলিপি। দ্য y
প্রকৃত মান বোঝায় এবং ŷ
পূর্বাভাসিত মানগুলিতে।
- গড় বর্গাকার ত্রুটি (MSE): এটি MAE মেট্রিকের অনুরূপ, কিন্তু এটি ত্রুটির পরম মানকে বর্গ করে। এছাড়াও, MAE এর মতো, যত ছোট, বা 0 এর কাছাকাছি, তত ভাল। MSE মান বর্গ করা হয় যাতে বড় ত্রুটিগুলি আরও বড় হয়। একটি বিষয়ের প্রতি গভীরভাবে মনোযোগ দিতে হবে, এটি সাধারণত এটির মানগুলির আকারের কারণে এবং ডেটার একই স্কেলে না থাকার কারণে ব্যাখ্যা করা একটি কঠিন মেট্রিক।
$$
mse = যোগফল_{i=1}^{D}(প্রকৃত - পূর্বাভাসিত)^2
$$
- রুট গড় বর্গাকার ত্রুটি (RMSE): এর চূড়ান্ত মানের বর্গমূল পেয়ে MSE এর সাথে উত্থাপিত ব্যাখ্যা সমস্যা সমাধান করার চেষ্টা করে, যাতে ডেটার একই ইউনিটে এটিকে স্কেল করা যায়। এটি ব্যাখ্যা করা সহজ এবং ভাল যখন আমাদের ত্রুটি সহ ডেটার প্রকৃত মান প্রদর্শন বা দেখানোর প্রয়োজন হয়। এটি দেখায় যে ডেটা কতটা পরিবর্তিত হতে পারে, তাই, যদি আমাদের একটি RMSE 4.35 থাকে, তাহলে আমাদের মডেল একটি ত্রুটি করতে পারে কারণ এটি প্রকৃত মানের সাথে 4.35 যোগ করেছে, অথবা প্রকৃত মান পেতে 4.35 প্রয়োজন৷ 0 এর কাছাকাছি, পাশাপাশি ভাল.
$$
rmse = sqrt{ sum_{i=1}^{D}(প্রকৃত - পূর্বাভাসিত)^2}
$$
আমরা ঐ তিনটি মেট্রিকের যে কোন একটি ব্যবহার করতে পারি তুলনা করা মডেল (যদি আমাদের একটি চয়ন করতে হয়)। আমরা একই রিগ্রেশন মডেলকে বিভিন্ন আর্গুমেন্ট মান বা বিভিন্ন ডেটার সাথে তুলনা করতে পারি এবং তারপর মূল্যায়ন মেট্রিক্স বিবেচনা করতে পারি। এই হিসাবে পরিচিত হয় হাইপারপ্যারামিটার টিউনিং - একটি লার্নিং অ্যালগরিদমকে প্রভাবিত করে এমন হাইপারপ্যারামিটারগুলি টিউন করা এবং ফলাফলগুলি পর্যবেক্ষণ করা।
মডেলগুলির মধ্যে নির্বাচন করার সময়, সবচেয়ে ছোট ত্রুটিগুলির সাথে সাধারণত ভাল পারফর্ম করে। মডেলগুলি পর্যবেক্ষণ করার সময়, যদি মেট্রিক্স খারাপ হয়ে যায়, তাহলে মডেলের পূর্ববর্তী সংস্করণটি আরও ভাল ছিল, বা মডেলটির কার্য সম্পাদনের চেয়ে খারাপ কার্য সম্পাদনের জন্য ডেটাতে কিছু উল্লেখযোগ্য পরিবর্তন ছিল।
আপনি এই মান খুঁজে পেতে নিম্নলিখিত কোড করতে পারেন:
from sklearn.metrics import mean_absolute_error, mean_squared_error
print('Mean Absolute Error:', mean_absolute_error(y_test, y_pred))
print('Mean Squared Error:', mean_squared_error(y_test, y_pred))
print('Root Mean Squared Error:', np.sqrt(mean_squared_error(y_test, y_pred)))
আউটপুট হওয়া উচিত:
Mean Absolute Error: 1.127893702896059
Mean Squared Error: 3.0802988503933326
Root Mean Squared Error: 1.755078018320933
20টি গাছের সাথে, রুট গড় বর্গাকার ত্রুটি হল 1.75 যা কম, কিন্তু তারপরও – গাছের সংখ্যা বাড়িয়ে এবং অন্যান্য পরামিতিগুলির সাথে পরীক্ষা করে, এই ত্রুটিটি সম্ভবত আরও ছোট হতে পারে।
র্যান্ডম ফরেস্ট ব্যবহারের সুবিধা
যেকোনো অ্যালগরিদমের মতো, এটি ব্যবহার করার সুবিধা এবং অসুবিধা রয়েছে। পরবর্তী দুটি বিভাগে আমরা শ্রেণীবিভাগ এবং রিগ্রেশনের জন্য এলোমেলো বন ব্যবহার করার সুবিধা এবং অসুবিধাগুলি দেখব।
- র্যান্ডম ফরেস্ট অ্যালগরিদম পক্ষপাতদুষ্ট নয়, যেহেতু, একাধিক গাছ রয়েছে এবং প্রতিটি গাছকে ডেটার একটি এলোমেলো উপসেটে প্রশিক্ষণ দেওয়া হয়। মূলত, র্যান্ডম ফরেস্ট অ্যালগরিদম "ভিড়" এর শক্তির উপর নির্ভর করে; তাই অ্যালগরিদমের পক্ষপাতের সামগ্রিক মাত্রা কমে গেছে।
- এই অ্যালগরিদম খুব স্থিতিশীল. এমনকি যদি ডেটাসেটে একটি নতুন ডেটা পয়েন্ট চালু করা হয় তবে সামগ্রিক অ্যালগরিদম খুব বেশি প্রভাবিত হয় না কারণ নতুন ডেটা একটি গাছকে প্রভাবিত করতে পারে, তবে এটি সমস্ত গাছকে প্রভাবিত করা খুব কঠিন।
- র্যান্ডম ফরেস্ট অ্যালগরিদম ভাল কাজ করে যখন আপনার কাছে শ্রেণীগত এবং সংখ্যাসূচক উভয় বৈশিষ্ট্যই থাকে।
- র্যান্ডম ফরেস্ট অ্যালগরিদমও ভাল কাজ করে যখন ডেটার মান অনুপস্থিত থাকে বা এটি স্কেল করা হয় না।
র্যান্ডম ফরেস্ট ব্যবহারের অসুবিধা
- এলোমেলো বনের প্রধান অসুবিধা তাদের জটিলতার মধ্যে রয়েছে। বৃহৎ ensembles প্রশিক্ষণের সময়, তাদের অনেক বেশি কম্পিউটেশনাল রিসোর্স প্রয়োজন, বৃহৎ সংখ্যক সিদ্ধান্ত গাছ একসাথে যোগদানের কারণে। যদিও – আধুনিক হার্ডওয়্যার সহ, এমনকি একটি বড় এলোমেলো বনের প্রশিক্ষণের জন্য খুব বেশি সময় লাগে না।
আরও এগিয়ে যাওয়া - হাতে-হোল্ড এন্ড-টু-এন্ড প্রজেক্ট
আপনার অনুসন্ধিৎসু প্রকৃতি আপনাকে আরও যেতে চায়? আমরা আমাদের চেক আউট সুপারিশ নির্দেশিত প্রকল্প: "হ্যান্ডস-অন হাউস প্রাইস প্রেডিকশন - পাইথনে মেশিন লার্নিং".
এই নির্দেশিত প্রকল্পে - আপনি শিখবেন কীভাবে শক্তিশালী ঐতিহ্যবাহী মেশিন লার্নিং মডেলের পাশাপাশি গভীর শিক্ষার মডেল তৈরি করতে হয়, এনসেম্বল লার্নিং ব্যবহার করে এবং মেটা-লার্নার্সকে স্কিট-লার্ন এবং কেরাস মডেলের একটি ব্যাগ থেকে বাড়ির দামের পূর্বাভাস দিতে প্রশিক্ষণ দেওয়া হয়।
টেনসরফ্লো-এর উপরে তৈরি ডিপ লার্নিং এপিআই কেরাস ব্যবহার করে, আমরা আর্কিটেকচার নিয়ে পরীক্ষা করব, স্ট্যাক করা মডেলগুলির একটি সংকলন তৈরি করব এবং একটি প্রশিক্ষণ দেব। মেটা-শিক্ষক একটি বাড়ির মূল্য নির্ধারণের জন্য নিউরাল নেটওয়ার্ক (লেভেল-1 মডেল)।
গভীর শিক্ষা আশ্চর্যজনক - তবে এটি অবলম্বন করার আগে, সহজ কৌশলগুলির সাথে সমস্যাটি সমাধান করার চেষ্টা করার পরামর্শ দেওয়া হয়, যেমন অগভীর শিক্ষা অ্যালগরিদম আমাদের বেসলাইন কর্মক্ষমতা একটি উপর ভিত্তি করে হবে র্যান্ডম ফরেস্ট রিগ্রেশন অ্যালগরিদম অতিরিক্তভাবে - আমরা স্কিট-লার্নের মাধ্যমে মডেলগুলির এনসেম্বল তৈরি করার কৌশলগুলি অন্বেষণ করব যেমন থলির কাপড় এবং ভোট.
এটি একটি এন্ড-টু-এন্ড প্রজেক্ট, এবং সমস্ত মেশিন লার্নিং প্রজেক্টের মতো, আমরা শুরু করব – এর সাথে অনুসন্ধানের ডেটা বিশ্লেষণ, দ্বারা অনুসরণ তথ্য প্রপ্রোকাসিং এবং পরিশেষে বিল্ডিং অগভীর এবং গভীর শিক্ষার মডেল আমরা পূর্বে অন্বেষণ এবং পরিষ্কার করা ডেটা ফিট করতে।