گریڈینٹ بوسٹنگ کے لیے تخمینہ لگانے والوں کی تعداد کا انتخاب کیسے کریں۔

ڈیٹا سائنس میں، ان دنوں استعمال کے لیے بہت سے الگورتھم دستیاب ہیں۔ اس لیے ایک کارآمد تکنیک یہ ہے کہ ان کو ایک ہی ماڈل میں یکجا کر کے ہر ایک سے بہترین فائدہ حاصل کیا جائے، جس کے نتیجے میں زیادہ درست ماڈل بنتا ہے۔

Scikit-Learn کا استعمال کرتے ہوئے، آپ کو Random Forest algorithm ملے گا، جو کہ بیگنگ قسم کا جوڑا ماڈل ہے۔ دوسری طرف، آپ کو بوسٹنگ ماڈلز بھی ملیں گے، جو تخمینہ لگانے والوں کو ترتیب سے تربیت دیتے ہیں، جہاں ایک ماڈل کا نتیجہ دوسرے کو منتقل کیا جاتا ہے، جو پیشین گوئیوں کو بہتر بنانے کی کوشش کریں گے، جب تک کہ وہ ایک بہترین نتیجہ تک نہ پہنچ جائیں۔

گریڈینٹ بوسٹنگ کا تخمینہ بنانے پر، آپ کو یہ ہائپر پیرامیٹر مل جائے گا۔ 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)

ہم ڈیٹا کو اسکیل کرنے اور اس کا ماڈل بنانے کے لیے ایک پائپ لائن بنا سکتے ہیں (اس ڈیٹا کو پیمانہ کرنا واقعی بہت ضروری نہیں ہے، کیونکہ وہ پہلے ہی دسیوں کی بنیاد پر ایک ہی پیمانے پر ہیں۔)۔ اگلا، ہم ڈیٹا کو ماڈل میں فٹ کرتے ہیں اور نتائج کی پیشن گوئی کرتے ہیں۔

میں a کے ساتھ 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 کا مطلب ہے: {round( y.mean(),1 )}')
[آؤٹ]: ڈیٹا y کا مطلب ہے: 15.8

اچھی. ہمارا RMSE اوسط کا تقریباً 6.9% ہے۔ تو ہم اوسطاً اس قدر دور ہیں۔

اب آئیے اپنے ماڈل کو ٹیون کرنے کا ایک طریقہ چیک کریں تاکہ تربیت دینے کے لیے تخمینوں کی زیادہ سے زیادہ تعداد کا انتخاب کیا جائے جو ہمیں سب سے کم خرابی کی شرح دے گا۔

جیسا کہ میں نے کہا، ہمیں واقعی اس ڈیٹا کو پیمانہ کرنے کی ضرورت نہیں ہے کیونکہ یہ پہلے سے ہی اسی تناسب میں ہے۔ تو آئیے ماڈل کو فٹ کریں۔

# ماڈل
gbr = گریڈینٹ بوسٹنگ ریگریسر(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=غلطیاں)
g.set_title(f'{best_n_estimators} پر تخمینہ لگانے والوں کی بہترین تعداد، size=15)؛
تخمینہ لگانے والوں کی بہترین تعداد۔ مصنف کی طرف سے تصویر.

ہم دیکھتے ہیں کہ سب سے کم غلطی کی شرح 34 تخمینوں کے ساتھ ہے۔ تو، آئیے اپنے ماڈل کو 34 تخمینوں کے ساتھ دوبارہ تربیت دیں اور پائپ لائن کے ساتھ تربیت یافتہ ماڈل کے نتائج سے موازنہ کریں۔

#دوبارہ تربیت دیں۔
gbr = گریڈینٹ بوسٹنگ ریگریسر(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 کا مطلب ہے: {round( y.mean(),1 )}')
[آؤٹ]: ڈیٹا y کا مطلب ہے: 15.8

ہم اب 6.9% سے گھٹ کر 6.3% رہ گئے ہیں۔ تقریبا. 9% بہتر۔ آئیے چند پیشین گوئیوں پر نظر ڈالتے ہیں۔

دونوں ماڈلز کی پیش گوئیاں۔ مصنف کی طرف سے تصویر.

دلچسپ نتائج۔ دوسرے ماڈل کی کچھ پیشین گوئیاں پہلے سے بہتر ہیں۔

ہم نے سیکھا کہ کس طرح تخمینہ لگانے والوں کی بہترین تعداد کا تعین کرنا ہے۔ GradientBoostingRegressor Scikit-Learn سے۔ یہ ایک ہائپر پیرامیٹر ہے جو اس قسم کے جوڑ ماڈل میں فرق پیدا کر سکتا ہے، جو تخمینہ لگانے والوں کو ترتیب سے تربیت دیتا ہے۔

بعض اوقات، چند تکرار کے بعد، ماڈل اوور فٹ ہونا شروع کر سکتا ہے، اس طرح یہ پیشین گوئیوں کو متاثر کرتے ہوئے، تغیر کو بہت زیادہ بڑھانا شروع کر دے گا۔

ہم نے دیکھا کہ ایک سادہ لوپ اس معاملے میں بہترین حل تلاش کرنے میں ہماری مدد کر سکتا ہے۔ لیکن، یقینی طور پر، بڑے ڈیٹاسیٹس کے لیے حساب لگانا مہنگا ہو سکتا ہے، اس لیے ایک خیال کو کم کرنے کی کوشش کی جائے گی۔ n_estimators سب سے پہلے اور دیکھیں کہ کیا آپ جلد ہی کم از کم غلطی تک پہنچ سکتے ہیں۔

یہاں ہے GitHub میں مکمل کوڈ.

اگر آپ کو یہ مواد پسند آیا تو میرے بلاگ کو فالو کریں۔

مجھے تلاش کریں لنکڈ.

یہ مشق Aurélien Géron کی ایک بہترین کتاب پر مبنی تھی۔

ماخذ https://towardsdatascience.com/how-to-choose-the-number-of-estimators-for-gradient-boosting-8d06920ab891?source=rss—-7f60cf5620c9— 4 بذریعہ https://towardsdatascience.com/feed

<!–

->

ٹائم اسٹیمپ:

سے زیادہ بلاکچین کنسلٹنٹس