গ্রেডিয়েন্ট বুস্টিংয়ের জন্য অনুমানকারীর সংখ্যা কীভাবে চয়ন করবেন

ডেটা সায়েন্সে, আজকাল ব্যবহারের জন্য অনেক অ্যালগরিদম উপলব্ধ রয়েছে। একটি দরকারী কৌশল, তাই, প্রতিটি থেকে সেরাটি পাওয়ার জন্য তাদের একটি একক মডেলে একত্রিত করা, যার ফলে আরও সঠিক মডেল তৈরি করা।

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

গ্রেডিয়েন্ট বুস্টিং এস্টিমেটর তৈরি করার সময়, আপনি এই হাইপারপ্যারামিটারটি পাবেন n_estimator=100 ফলাফল পেতে 100টি গাছের ডিফল্ট মান সহ তৈরি করতে হবে। অনেক সময়, আমরা এটিকে ডিফল্টে সেট করি বা প্রয়োজন অনুসারে বৃদ্ধি করি, এমনকি গ্রিড অনুসন্ধান কৌশল ব্যবহার করে।

এই পোস্টে, আমরা আমাদের মডেলকে প্রশিক্ষণের জন্য ব্যবহার করার জন্য একটি একক নম্বরে যাওয়ার একটি সহজ উপায় খুঁজে পাব।

গ্রেডিয়েন্ট বুস্টিং এই ক্লাস ব্যবহার করে Scikit-Learn থেকে লোড করা যেতে পারে from sklearn.ensemble import GradientBoostingRegressor. গ্রেডিয়েন্ট বুস্টিং অ্যালগরিদম শ্রেণীবিভাগ বা রিগ্রেশন মডেলের জন্য ব্যবহার করা যেতে পারে। এটি একটি ট্রি ভিত্তিক অনুমানকারী - যার অর্থ এটি অনেক সিদ্ধান্ত গাছের সমন্বয়ে গঠিত।

ফলাফল গাছ 1 ত্রুটি তৈরি করবে। যারা ত্রুটি ব্যবহার করা হবে এবং জন্য ইনপুট গাছ 2. আবার, শেষ মডেলের ত্রুটিগুলি এবং পরবর্তীটির ইনপুট ব্যবহার করা হবে, যতক্ষণ না এটি পৌঁছায় n_estimators মান।

প্রতিটি মডেল পূর্ববর্তী একটি ত্রুটি মাপসই করা হবে. লেখকের ছবি।

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

চলুন দেখে নেই কিভাবে এটা করতে হয়।

এই ব্যায়াম জন্য কোড সহজ. আমাদের যা করতে হবে তা হল প্রতিটি পুনরাবৃত্তির পরে একটি লুপ এবং কোনটিতে আমাদের সর্বনিম্ন ত্রুটি ছিল তা পরীক্ষা করুন।

একটি ডেটাসেট নির্বাচন করে শুরু করা যাক। আমরা ব্যবহার করব কার দুর্ঘটনা ডেটাসেট, সমুদ্রের লাইব্রেরি থেকে নেটিভ (তাই BDS লাইসেন্সের অধীনে একটি উন্মুক্ত ডেটা)।

# ডেটাসেট
df = sns.load_dataset('car_crashes')

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

গাড়ি ক্র্যাশ ডেটাসেট, সমুদ্রজাত থেকে। লেখকের ছবি।

দ্রুত পারস্পরিক সম্পর্কের দিকে তাকিয়ে।

# পারস্পরিক সম্পর্ক
df.corr().style.background_gradient(cmap='coolwarm')
ডেটাসেটের মধ্যে পারস্পরিক সম্পর্ক। লেখকের ছবি।

ঠিক আছে, কোন বড় মাল্টিকোলিনিয়ারিটি নেই। আমরা ওটা দেখতে পারি ins_premium এবং ins_losses সঙ্গে খুব ভাল সম্পর্ক না total , তাই আমরা তাদের মডেলে বিবেচনা করব না।

যদি আমরা অনুপস্থিত ডেটা পরীক্ষা করি, সেখানে কোনটি নেই

#নিখোঁজ
df.isnull().sum()
0

চমৎকার, তাই এখন তথ্য বিভক্ত করা যাক.

# X এবং y
X = df.drop(['ins_premium', 'ins_losses', 'abbrev', 'total'], axis=1)
y = df['মোট']
# ট্রেন পরীক্ষা
X_train, X_test, y_train, y_test = train_test_split (X, y, test_size = 0.3, random_state = 22)

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

আমি একটি সহ 500 অনুমানকারী ব্যবহার করছি learning_rate 0.3 এর

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

পদক্ষেপ = [('স্কেল', স্ট্যান্ডার্ডস্কেলার()),
('GBR', GradientBoostingRegressor(n_estimators=500, learning_rate=0.03)) ]
# উদাহরণ পাইপলাইন এবং ফিট
পাইপ = পাইপলাইন(পদক্ষেপ) ফিট(X_train, y_train)
# ভবিষ্যদ্বাণী
preds = pipe.predict(X_test)

এখন, মূল্যায়ন.

# RMSE পূর্বাভাস
মুদ্রণ(f'RMSE: { round(np.sqrt(mean_squared_error(y_test, preds)),1 )}')
[আউট]: RMSE: 1.1# প্রকৃত Y মানের গড়
প্রিন্ট (f'Data y মানে: {বৃত্তাকার( y.mean(),1 )}')
[আউট]: ডেটা y মানে: 15.8

ভাল. আমাদের RMSE গড় প্রায় 6.9%। তাই আমরা এই অনেক দ্বারা বন্ধ করছি, গড়.

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

আমি যেমন বলেছি, আমাদের সত্যিই এই ডেটা স্কেল করতে হবে না কারণ এটি ইতিমধ্যে একই অনুপাতে রয়েছে। তাই মডেল মাপসই করা যাক.

#মডেল
gbr = GradientBoostingRegressor(n_estimators=500, learning_rate=0.3).fit(X_train, y_train)

এখন এটা ভাল জিনিস. গ্রেডিয়েন্ট বুস্টিং-এ একটি পদ্ধতি রয়েছে যা আমাদেরকে 1 থেকে 500 পর্যন্ত প্রশিক্ষিত প্রতিটি অনুমানকারীর ভবিষ্যদ্বাণী পুনরাবৃত্তি করতে দেয়। সুতরাং, আমরা একটি লুপ তৈরি করব যা 500 অনুমানকের মধ্য দিয়ে যায় gbr মডেল, পদ্ধতি ব্যবহার করে ফলাফলের পূর্বাভাস দেয় staged_predict(), গড় বর্গক্ষেত্র ত্রুটি গণনা করে এবং ফলাফলটি তালিকায় সংরক্ষণ করে errors.

# সেরা নম্বরের জন্য লুপ
ত্রুটি = [ mean_squared_error(y_test, preds) gbr.staged_predict(X_test) এ preds এর জন্য
# অনুমানকারীদের সর্বোত্তম সংখ্যা
optimal_num_estimators = np.argmin(ত্রুটি) + 1

পরবর্তী, আমরা ফলাফল প্লট করতে পারেন.

#পটভূমি
g=sns.lineplot(x=range(500), y=errors)
g.set_title(f'{best_n_estimators}'-এ অনুমানকারীদের সেরা সংখ্যা, size=15);
অনুমানকারীদের সেরা সংখ্যা। লেখকের ছবি।

আমরা দেখি যে সর্বনিম্ন ত্রুটির হার 34টি অনুমানকারীর সাথে। সুতরাং, আসুন 34টি অনুমানকারীর সাথে আমাদের মডেলটিকে পুনরায় প্রশিক্ষণ দিই এবং পাইপলাইনের সাথে প্রশিক্ষিত মডেলের ফলাফলের সাথে তুলনা করি।

# পুনরায় প্রশিক্ষণ দিন
gbr = GradientBoostingRegressor(n_estimators=34, learning_rate=0.3).fit(X_train, y_train)
# ভবিষ্যদ্বাণী
preds2 = gbr.predict(X_test)

মূল্যায়ন করা হচ্ছে...

# RMSE পূর্বাভাস
মুদ্রণ(f'RMSE: { round(np.sqrt(mean_squared_error(y_test, preds2)),1 )}')
[আউট]: RMSE: 1.0
# ডেটা Y মানে
প্রিন্ট (f'Data y মানে: {বৃত্তাকার( y.mean(),1 )}')
[আউট]: ডেটা y মানে: 15.8

আমরা এখন 6.9% থেকে 6.3% ছাড়ে নেমেছি। প্রায়. 9% ভাল। আসুন কয়েকটি ভবিষ্যদ্বাণী দেখি।

উভয় মডেল থেকে ভবিষ্যদ্বাণী. লেখকের ছবি।

আকর্ষণীয় ফলাফল. দ্বিতীয় মডেলের কিছু ভবিষ্যদ্বাণী প্রথমটির চেয়ে ভালো।

আমরা শিখেছি কিভাবে একটি পরিবর্তন করার জন্য অনুমানকারীদের সেরা সংখ্যা নির্ধারণ করতে হয় GradientBoostingRegressor Scikit-Learn থেকে। এটি একটি হাইপারপ্যারামিটার যা এই ধরণের এনসেম্বল মডেলের মধ্যে একটি পার্থক্য তৈরি করতে পারে, যা অনুমানকারীদেরকে ক্রমানুসারে প্রশিক্ষণ দেয়।

কখনও কখনও, কয়েকটি পুনরাবৃত্তির পরে, মডেলটি ওভারফিট হতে শুরু করতে পারে, এইভাবে এটি ভবিষ্যদ্বাণীগুলিকে প্রভাবিত করে, বৈচিত্রটি খুব বেশি বাড়াতে শুরু করবে।

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

এখানে হল GitHub এ সম্পূর্ণ কোড.

আপনি যদি এই বিষয়বস্তু পছন্দ করেন, আমার ব্লগ অনুসরণ করুন.

আমাকে খুঁজে লিঙ্কডইন.

এই অনুশীলনটি রেফারেন্সে অরেলিয়ান জেরনের চমৎকার পাঠ্য বইয়ের উপর ভিত্তি করে করা হয়েছিল।

উৎস থেকে পুনঃপ্রকাশিত গ্রেডিয়েন্ট বুস্টিংয়ের জন্য অনুমানকারীর সংখ্যা কীভাবে চয়ন করবেন https://towardsdatascience.com/how-to-choose-the-number-of-estimators-for-gradient-boosting-8d06920ab891?source=rss—-7f60cf5620c9— 4 https://towardsdatascience.com/feed এর মাধ্যমে

<!–

->

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

থেকে আরো ব্লকচেইন পরামর্শদাতা