র‍্যান্ডম ফরেস্ট

র‍্যান্ডম ফরেস্ট হচ্ছে একধরনের গনতান্ত্রিক অ্যালগরিদম। এই অ্যালগরিদমে ভোটা-ভোটির মাধ্যমে সিদ্ধান্ত নেয়া হয়। এধরনের অ্যালগরিদম এনসেম্বল লার্নিং বলা হয়। র‍্যান্ডম ফরেস্ট অনেকগুলো গাছ বা ট্রির সমন্বয়ে তৈরি হয়, বন-জংগলে যেমন অনেক গাছ থাকে র‍্যান্ডম ফরেস্টেও অনেক ডিসিশন ট্রি থাকে, বেশিরভাগ ট্রি যে ডিসিশন দেয় সেটাই চূড়ান্ত সিদ্ধান্ত বলে গণ্য করা হয়। এর আগের অধ্যায়ে আমরা যে ক্লাসিফিকেশন এন্ড ডিসিশন ট্রি সম্পর্কে জেনেছিলাম র‍্যান্ডম ফরেস্ট সেই ট্রি'র মাধ্যমেই তৈরি করা হয়। অ্যালগরিদমের ভেতরে আমাদের শুধু উল্লেখ করতে হয় আমাদের ফরেস্টটি কতগুলো গাছের সমন্বয়ে তৈরি হবে।
ছবি - র‍্যান্ডম ফরেস্ট (সম্পাদিত)
এনসেম্বল লার্নিং
এনসেম্বল লার্নিং-এর মাধ্যমে একাধিক লার্নার ব্যবহার করে মডেলের পারফরম্যান্স বাড়ানো হয়। র‍্যান্ডম ফরেস্টও একধরনের এনসেম্বল লার্নিং।
ছবি - ব্যাগিং এবং বুস্টিং ( সূত্র- ইন্টারনেট )
বুস্টিং এবং ব্যাগিং
বুস্টিং- বুস্টিংকে বলা হয় সিকোয়েন্সিয়াল এনসেম্বল লার্নিং। ধরুন কোন মডেলের ১ম উয়িক লার্নার তার প্রিডিকশন যে সকল ভুল করবে বা মিস-ক্লাসিফিকেশন করবে, সেগুলোকে বেশী গুরুত্ব ( বেশী ওয়েট ) দেয়া হয় যাতে পরবর্তী উয়িক লার্নার সেই ভুলগুলো না করে। এভাবে মিস-ক্লাসিফিকেশন একেবারেই কমে না আসা পর্যন্ত এই পদ্ধতির পুনরাবৃত্তি চলতে থাকে। বুস্টিং এর ক্ষেত্রে একই ডেটাসেট সকল উয়িক লার্নার ইনপুট হিসাবে ব্যবহার করে।
এক্ষেত্রে উয়িক লার্নার হচ্ছে ফরেস্টের এক একটি ট্রি। উয়িক লার্নারের বিস্তারিত বর্ণনা অ্যাডাপ্টিভ বুস্টিং অধ্যায়ে দেয়া রয়েছে।
ব্যাগিং - ব্যাগিং হচ্ছে প্যারালাল এনসেম্বল লার্নিং। সাধারনত বুটস্ট্রাপ ডেটাসেটের মাধ্যমে প্যারালাল এনসেম্বল লার্নিং করা হয়। এই পদ্ধতিতে উয়িক লার্নারকে আলাদা আলাদা ট্রেইনিং ডেটা সেটের (স্যাম্পল সেট) মাধ্যমে মডেলের পারফরম্যান্স বাড়ানো হয়। র‍্যান্ডম ফরেস্ট ব্যাগিং পদ্ধতিতে কাজ করে। ব্যাগিং এর ক্ষেত্রে প্রত্যেকটি উয়িক লার্নার মূল ডেটাসেটের আলাদা আলাদা সাবসেট বা বুটস্ট্রাপ স্যাম্পল সেট ইনপুট হিসাবে ব্যবহার করে।
বুটস্ট্রাপিং - ধরুন আপনার একটি ক্লাসে ১০০ জন শিক্ষার্থী রয়েছে , আপনি চাচ্ছেন স্যাম্পল সার্ভের মাধ্যমে ১০ জনের স্যাম্পল থেকে তাদের গড় বয়স নির্ণয় করতে। সিম্পল র‍্যান্ডম স্যামপ্লিং এর মাধ্যমে আপনার স্যাম্পলে এমন ১০ জন আসতে পারে যারা অধিকাংশই মোটা, আবার এর উল্টোটাও হতে পারে, অর্থাৎ স্যাম্পলের ১০ জনই চিকন হতে পারে। এই দুই ধরনের স্যাম্পলের জন্য শিক্ষার্থীদের গড় বয়স ভিন্ন ভিন্ন আসবে। বুটস্ট্রাপিং হচ্ছে এমন একটি স্যাম্পলিং পদ্ধতি যেখানে বার বার স্যাম্পল নেয়া হয় এবং সবশেষে প্রত্যেক স্যাম্পল থেকে যে ফলাফল পাওয়া যায় সেগুলো ব্যবহার করে চূড়ান্ত গড় ফলাফল বের করা হয়। ১০০ জন শিক্ষার্থী থেকে আপনি একাধিক বার ১০ জনকে নিয়ে স্যাম্পল তৈরি করবেন, প্রত্যেকবারই সিম্পল র‍্যান্ডম স্যামপ্লিং ব্যবহার করা হবে। ধরুন আপনি ৫ বার স্যাম্পল নিলেন। এবার প্রত্যেক স্যাম্পল থেকে যে গড় ওজন পাওয়া যাবে সেই ফলাফলের গড় হবে আপনার গবেষণার চূড়ান্ত গড় ওজন। ফলাফল অপেক্ষাকৃত আনবায়াজড হয়।
র‍্যান্ডম ফরেস্ট এর কিছু বৈশিষ্ট্য
  • র‍্যান্ডম ফরেস্ট ব্যাগিং পদ্ধতি অনুসরন করায় আউটলায়ার দ্বারা প্রভাবিত হবার সম্ভাবনা কমে যায়।
  • ক্যাটেগরিক্যাল অথবা কন্টিনিউয়াস উভয় ডেটার ক্ষেত্রেই এটি বেশ ভালো কাজ করে।
  • ডেটাসেটকে স্কেলাইজড করার প্রয়োজন হয় না।
  • লার্নারের সংখ্যা বেশী হলে কমপ্লেক্স মডেলের ক্ষেত্রে অপেক্ষাকৃত বেশী কম্পিউটেশনাল রিসোর্সের প্রয়োজন হয়।
পাইথনে র‍্যান্ডম ফরেস্ট
ডিসিশন ট্রি'র জন্য আমরা যে ডেটাসেট ব্যবহার করেছিলাম সেই ডেটাসেটই আমরা র‍্যান্ডম ফরেস্টের তৈরি করবো। র‍্যান্ডম ফরেস্টের জন্য আমরা ১০ টি ট্রির সমন্বয়ে একটি ফরেস্ট তৈরি করবো।
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=10, max_depth=5, random_state=0)
rf.fit(x_train, y_train)
এবার অ্যাকুরেসি চেকের পালা ,
y_pred = rf.predict(x_test)
print(classification_report(y_test, y_pred))
print('\nAccuracy: {0:.4f}'.format(accuracy_score(y_test, y_pred)))
print('Confusion Matrix:\n',confusion_matrix(y_test, y_pred))
অবশেষে আমাদের র‍্যান্ডম ফরেস্টের অ্যাকুরেসি পাওয়া গেল ৯৮% ।