Gradient Boost için tahmin edici sayısı nasıl seçilir

Veri Biliminde, bugünlerde kullanılabilecek birçok algoritma var. Bu nedenle yararlı bir teknik, her birinden en iyi sonucu almak için bunları tek bir modelde birleştirerek daha doğru bir model elde etmektir.

Scikit-Learn'ü kullanarak, topluluk modelinin torbalama türü olan Rastgele Orman algoritmasını bulacaksınız. Öte yandan, tahmin edicileri sırayla eğiten, bir modelin sonucunun bir sonraki modele aktarıldığı, tahminleri optimum bir sonuca ulaşana kadar iyileştirmeye çalışan Boosting modelleri de bulacaksınız.

Bir Gradient Boosting tahmincisi oluştururken, bu hiperparametreyi bulacaksınız. n_estimator=100 100 ağaç varsayılan değeri ile bir sonuca ulaşmak için oluşturulacak. Çoğu zaman, Grid Search tekniklerini kullanarak bile bunu varsayılana ayarladık veya gerektiğinde artırdık.

Bu yazıda, modelimizi eğitmek için tek bir sayıya ulaşmanın basit bir yolunu bulacağız.

Gradient Boosting, bu sınıf kullanılarak Scikit-Learn'den yüklenebilir from sklearn.ensemble import GradientBoostingRegressor. Gradient Boosting algoritması, sınıflandırma veya Regresyon modelleri için kullanılabilir. Ağaç tabanlı bir tahmincidir - birçok karar ağacından oluştuğu anlamına gelir.

Sonucu Ağaç 1 hatalar üretecektir. Bu hatalar kullanılacak ve Ağaç 2. Bir kez daha, son modelin hataları kullanılacak ve bir sonrakinin girdisi, ulaşılana kadar kullanılacaktır. n_estimators değeri.

Her model bir öncekinin hatalarına uyacaktır. Yazar tarafından görüntü.

Her tahmin edici bir öncekinin hatasına uyacağından, tahminlerin kombinasyonunun herhangi bir tahmincinin tek başına tahmininden daha iyi olacağı beklentisi vardır. Her yinelemeden sonra, diğer taraftan önyargıyı azaltıp varyansı artırarak modeli daha karmaşık hale getiriyoruz. Bu yüzden ne zaman duracağımızı bilmeliyiz.

Şimdi bunu nasıl yapacağımıza bakalım.

Bu alıştırmanın kodu basittir. Tek yapmamız gereken, her yinelemeden sonra bir döngü ve hangisinde en düşük hataya sahip olduğumuzu kontrol etmek.

Bir veri kümesi seçerek başlayalım. biz kullanacağız Araba kazaları veri kümesi, seaborn kitaplığından yerel (yani BDS lisansı altında açık bir veri).

# Veri Kümesi
df = sns.load_dataset('car_crashes')

İşte verilere hızlı bir bakış. tahmin etmeye çalışacağız total diğer özellikleri öngörücü olarak kullanan miktar. Reel sayı çıktısı olduğu için bir regresyon modelinden bahsediyoruz.

Araba Kazaları veri kümesi, denizden. Yazar tarafından görüntü.

Korelasyonlara hızlıca bakmak.

# Korelasyonlar
df.corr().style.background_gradient(cmap='coolwarm')
Veri kümesindeki korelasyonlar. Yazar tarafından görüntü.

Tamam, önemli çoklu bağlantı yok. bunu görebiliriz ins_premium ve ins_losses ile çok iyi bir korelasyon yok total , bu yüzden onları modelde dikkate almayacağız.

Eksik verileri kontrol edersek, hiçbiri yok

# Eksik
df.isnull().sum()
0

Güzel, öyleyse şimdi verileri bölelim.

# X ve y
X = df.drop(['ins_premium', 'ins_losses', 'kısaltma', 'toplam'], eksen=1)
y = df['toplam']
# Tren testi
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=22)

Verileri ölçeklendirmek ve modellemek için bir ardışık düzen oluşturabiliriz (Bu verileri ölçeklendirmek gerçekten çok gerekli değil, çünkü onlar zaten aynı ölçekte, onlar bazında). Ardından, verileri modele uydurur ve sonuçları tahmin ederiz.

500 tahminci kullanıyorum learning_rate 0.3 evi.

Öğrenme oranı, minimum hataya ulaşmak için attığımız adımın boyutudur. Çok yüksek bir değer kullanırsak minimum değeri geçebiliriz. Çok küçük bir sayı kullanırsak ona yaklaşamayabiliriz bile. Bu nedenle, göz önünde bulundurabileceğiniz bir pratik kural şudur: çok sayıda tahminciniz varsa, daha düşük öğrenme oranı değerleri kullanabilirsiniz. Yalnızca birkaç tahminciniz varsa, daha yüksek öğrenme oranı değerleri kullanmayı tercih edin.

adımlar = [('ölçek', StandardScaler()),
('GBR', GradientBoostingRegressor(n_estimators=500, learning_rate=0.03)) ]
# Örnek İşlem Hattı ve sığdırma
boru = Boru Hattı(adımlar).fit(X_train, y_train)
# Tahmin etmek
preds = pipe.predict(X_test)

Şimdi, değerlendirme.

# tahminlerin RMSE'si
print(f'RMSE: { yuvarlak(np.sqrt(mean_squared_error(y_test, preds))1 )}')
[ÇIKIŞ]: RMSE: 1.1# Gerçek Y değerlerinin ortalaması
print(f'Veri y anlamı: {yuvarlak( y.ortalama(),1 )}')
[OUT]: Veri y ortalama: 15.8

İyi. RMSE'miz ortalamanın yaklaşık %6.9'udur. Ortalama olarak şu kadar farkla gidiyoruz.

Şimdi, bize en düşük hata oranını verecek, eğitmek için en uygun tahminci sayısını seçerek modelimizi ayarlamanın bir yolunu kontrol edelim.

Dediğim gibi, bu veriyi gerçekten ölçeklendirmemize gerek yok çünkü zaten aynı oranda. Öyleyse modeli sığdıralım.

#Model
gbr = GradientBoostingRegressor(n_estimators=500, Learning_rate=0.3).fit(X_train, y_train)

Şimdi iyi şeyler. Gradient Boosting'de, 1'den 500'e kadar eğitilen her tahmincinin tahminlerini yinelememize izin veren bir yöntem var. gbr modeli, yöntemi kullanarak sonuçları tahmin eder staged_predict(), ortalama kare hatasını hesaplar ve sonucu listede saklar errors.

# En iyi sayı için döngü
hatalar = [ gbr.staged_predict(X_test) içindeki tahminler için mean_squared_error(y_test, preds)]
# Optimum tahminci sayısı
optimal_num_estimators = np.argmin(hatalar) + 1

Ardından, sonucu çizebiliriz.

#Komplo
g=sns.lineplot(x=aralık(500), y=hatalar)
g.set_title(f'{best_n_estimators}'daki en iyi tahminci sayısı', size=15);
En iyi tahmin edici sayısı. Yazar tarafından görüntü.

En düşük hata oranının 34 tahmin edici ile olduğunu görüyoruz. Öyleyse, modelimizi 34 tahminci ile yeniden eğitelim ve ardışık düzen ile eğitilen modelin sonucuyla karşılaştıralım.

# Yeniden eğit
gbr = GradientBoostingRegressor(n_estimators=34, Learning_rate=0.3).fit(X_train, y_train)
# Tahminler
preds2 = gbr.predict(X_testi)

Değerlendirme…

# tahminlerin RMSE'si
print(f'RMSE: { yuvarlak(np.sqrt(mean_squared_error(y_test, preds2))),1 )}')
[ÇIKIŞ]: RMSE: 1.0
# Veri Y demek
print(f'Veri y anlamı: {yuvarlak( y.ortalama(),1 )}')
[OUT]: Veri y ortalama: 15.8

Şimdi %6.9'dan %6.3'e düştük. yaklaşık %9 daha iyi. Birkaç tahmine bakalım.

Her iki modelden tahminler. Yazar tarafından görüntü.

İlginç sonuçlar. İkinci modelin tahminlerinden bazıları birincisinden daha iyi.

İnce ayar yapmak için en iyi tahmin edici sayısını nasıl belirleyeceğimizi öğrendik. GradientBoostingRegressor Scikit-Learn'den. Bu, tahmin edicileri sırayla eğiten bu tür topluluk modelinde fark yaratabilen bir hiperparametredir.

Bazen, birkaç iterasyondan sonra, model aşırı uyum sağlamaya başlayabilir, bu nedenle varyansı çok fazla artırmaya başlayarak tahminleri etkileyebilir.

Bu durumda basit bir döngünün en uygun çözümü bulmamıza yardımcı olabileceğini gördük. Ancak, kesinlikle, büyük veri kümeleri için hesaplamak pahalı olabilir, bu nedenle daha düşük bir veri kümesini denemek iyi bir fikir olabilir. n_estimators ilk başta ve kısa sürede minimum hataya ulaşıp ulaşamayacağınıza bakın.

Burada kodu GitHub'da tamamlayın.

Bu içeriği beğendiyseniz blogumu takip edin.

Beni bul LinkedIn.

Bu alıştırma, referansta bulunan Aurélien Géron'un mükemmel ders kitabına dayanıyordu.

Kaynaktan Yeniden Yayınlanan Gradient Boosting için tahminci sayısı nasıl seçilir https://towardsdatascience.com/how-to-choose-the-number-of-estimators-for-gradient-boosting-8d06920ab891?source=rss—-7f60cf5620c9— 4 https://towardsdatascience.com/feed aracılığıyla

<!–

->

Zaman Damgası:

Den fazla Blockchain Danışmanları