نحوه انتخاب تعداد برآوردگرها برای تقویت گرادیان

در علم داده، این روزها الگوریتم های زیادی برای استفاده وجود دارد. بنابراین، یک تکنیک مفید، استفاده از ترکیب آنها در یک مدل واحد است تا بهترین نتیجه را از هر کدام به دست آورید و در نتیجه مدل دقیق تری ایجاد شود.

با استفاده از Scikit-Learn، الگوریتم Random Forest را پیدا خواهید کرد، که نوع بسته بندی مدل مجموعه است. از سوی دیگر، مدل‌های Boosting را نیز خواهید یافت که تخمین‌گرها را به ترتیب آموزش می‌دهند، جایی که نتیجه یک مدل به مدل بعدی منتقل می‌شود و سعی می‌کند تا پیش‌بینی‌ها را بهبود بخشد تا به نتیجه مطلوب برسند.

هنگام ایجاد یک برآوردگر Gradient Boosting، این فراپارامتر را خواهید یافت n_estimator=100 با مقدار پیش فرض 100 درخت برای رسیدن به نتیجه ایجاد می شود. بسیاری از اوقات، حتی با استفاده از تکنیک‌های جستجوی گرید، این را روی پیش‌فرض قرار می‌دهیم یا ممکن است در صورت نیاز آن را افزایش دهیم.

در این پست، ما یک راه ساده برای رسیدن به یک عدد پیدا می کنیم تا از آن برای آموزش مدل خود استفاده کنیم.

Gradient Boosting را می توان از 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', 'abbrrev', '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 برآوردگر با a استفاده می کنم learning_rate از 0.3.

نرخ یادگیری به اندازه گامی است که برای رسیدن به حداقل خطا برمی داریم. اگر از مقداری استفاده کنیم که خیلی زیاد است، ممکن است از حداقل عبور کنیم. اگر از عددی استفاده کنیم که خیلی کوچک است، ممکن است به آن نزدیک هم نشویم. بنابراین، یک قانون کلی که می‌توانید در نظر بگیرید این است: اگر تعداد تخمین‌گرهای زیادی دارید، می‌توانید از مقادیر کمتری از نرخ یادگیری استفاده کنید. اگر فقط چند برآوردگر دارید، ترجیح دهید از مقادیر بالاتر نرخ یادگیری استفاده کنید.

Steps = [('scale', StandardScaler()),
('GBR'، GradientBoostingRegressor(n_estimators=500، learning_rate=0.03)) ]
# نمونه خط لوله و مناسب
لوله = خط لوله (گام‌ها). fit (X_train، y_train)
# پیش بینی
preds = pipe.predict(X_test)

حالا در حال ارزیابی

# RMSE از پیش بینی ها
print(f'RMSE: { round(np.sqrt(mean_squared_error(y_test, preds)),1 )}')
[خارج]: RMSE: 1.1# میانگین مقادیر Y واقعی
print(f'Data y mean: {round(y.mean(),1 )}')
[OUT]: داده 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.

# حلقه برای بهترین شماره
errors = [mean_squared_error(y_test, preds) for preds در gbr.staged_predict(X_test)]
# تعداد بهینه برآوردگرها
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 از پیش بینی ها
print(f'RMSE: { round(np.sqrt(mean_squared_error(y_test, preds2)),1 )}')
[خارج]: RMSE: 1.0
# داده Y به معنای
print(f'Data y mean: {round(y.mean(),1 )}')
[OUT]: داده y میانگین: 15.8

اکنون از 6.9 درصد به 6.3 درصد کاهش یافتیم. تقریبا 9 درصد بهتره بیایید به چند پیش بینی نگاه کنیم.

پیش بینی از هر دو مدل تصویر توسط نویسنده

نتایج جالب برخی از پیش بینی های مدل دوم بهتر از مدل اول هستند.

ما یاد گرفتیم که چگونه بهترین تعداد برآوردگرها را برای بهینه سازی a تعیین کنیم 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

<!–

->

تمبر زمان:

بیشتر از مشاوران بلاک چین