Zephyrnet Logosu

Yeni Başlayanlar İçin Python'da Topluluk Öğrenimi Kılavuzu

Tarih:

Bu makale, bu çalışmanın bir parçası olarak yayımlanmıştır. Veri Bilimi Blogathon.

Bu kılavuz, topluluk öğrenimi, Oylama Sınıflandırıcıları, torbalama, yapıştırma ve Torba Dışı Değerlendirme hakkında kısa bilgiler gibi kavramları içerir ve bunların uygulanması. Rastgele Orman, Ekstra Ağaçlar ve Özelliğin Önemi hakkında kısa bir bilgi. Son olarak Boosting'e ve bazı temel Soru-Cevaplara kısaca göz atarak konuyu tamamlayacağız.

Topluluk Öğrenimine Giriş

Bir örnekle başlayalım, bir sorunuz var ve bunu etrafa sorup yanıtlarını topluyorsunuz. Çoğu durumda bu cevabın bir uzmanın cevabından çok daha iyi olduğunu göreceksiniz. Yani buna denir kalabalığın bilgeliği. Benzer şekilde, sınıflandırıcılar veya regresörler gibi modellerin tahminlerini bir araya getirirseniz grubun en iyi bireysel modelden daha iyi performansa sahip olduğunu fark edeceksiniz. Yani bu tahmin ediciler veya modeller grubuna denir topluluk ve dolayısıyla bu teknik şu şekilde bilinir: Topluluk öğrenmesi.

Örneğin, bir grup karar ağacı sınıflandırıcısını eğitim verilerinin farklı rastgele alt kümeleri üzerinde eğitebilirsiniz. Bundan sonra tahminlerde bulunmak için, tüm ağaçlardan tahminler alın ve en sık görülen sınıfı (yani en çok tahmin edileni) tahmin edin. Bu karar ağaçları topluluğuna denir Rastgele Orman ve makine öğrenimi dünyasındaki en güçlü algoritmalardan biridir.

Bir projenin sonunda bu tekniği sıklıkla kullanacaksınız. Elinizde birkaç iyi tahminci varsa ve bunları daha iyi bir tahminde birleştirirseniz. Makine öğrenimi yarışmalarında kazanan çözümlerin çoğu, topluluk yöntemlerini içerir. (Örneğin Netflix'in ödüllü yarışması).

O halde git bir kahve iç, rahatına bak. Ve Topluluk Öğrenimi hakkında öğrenme yolculuğumuza başlayalım.

Topluluk Öğreniminde Oylama Sınıflandırıcıları

Her birinin doğruluğu yaklaşık %80-85 olan birkaç sınıflandırıcınız olduğunu varsayalım. Artık bir Destek Vektörü Sınıflandırıcısına, bir Rastgele Orman Sınıflandırıcısına, bir Lojistik Regresyon Sınıflandırıcısına, bir K-En Yakın Komşular sınıflandırıcısına ve belki birkaç taneye daha sahip olabilirsiniz. Daha iyi bir sınıflandırıcı oluşturmanın basit bir yolu, tüm sınıflandırıcıların tahminlerini birleştirmek ve en sık kullanılan sınıfı çıkarmaktır. Bu tür sınıflandırma (Çoğunluk-Oy Sınıflandırması) olarak bilinir. Zorunlu Oylama Sınıflandırıcısı.

Buradaki ilginç kısım, bu tür oylama sınıflandırıcısının çoğu zaman topluluktaki en iyi sınıflandırıcıdan bile daha iyi performans göstermesidir. Aslında sınıflandırıcıların her biri zayıf öğrenen olsa bile, rastgele tahmin yapan bir modelden biraz daha iyi olduğu anlamına gelir. Topluluk modeli, yeterince zayıf öğrenenlerin olduğunu ve birbirlerinden bağımsız olduklarını varsayarak hâlâ güçlü bir öğrenen olabilir. Bir topluluk yalnızca tüm sınıflandırıcıların birbirinden tamamen bağımsız olduğu durumlarda iyi performans gösterir; yani, hepsi aynı veriler üzerinde eğitildikleri için bunu başarmak oldukça zordur. Dolayısıyla aynı tür hataları yapmaları muhtemeldir. Dolayısıyla oyların çoğunluğu yanlış sınıfa verilecek ve bu da topluluğun genel doğruluğunu azaltacaktır. Çeşitli sınıflandırıcılar elde etmenin bir yolu, çok farklı algoritmalar kullanmaktır. Farklı algoritmalarla farklı türde hatalar yapabilirler ve bu da topluluğun doğruluğunu artıracaktır.

Aşağıdaki kod, SVM, Rastgele Orman ve Lojistik Regresyon olacak üç farklı sınıflandırıcıdan oluşan bir sınıflandırıcıyı başlatır ve eğitir. Uygulamamız için Moon'un Veri Kümesini kullanacağız.

Uygulamamıza başlayalım

Gerekli kitaplıkları içe aktarma:

sklearn.model_selection'dan train_test_split'i sklearn.datasets'ten içe aktarın make_moons'u sklearn.linear_model'den içe aktarın LogisticRegression'ı sklearn.svm'den içe aktarın sklearn.ensemble'dan SVC'yi içe aktarın RandomForestClassifier'ı sklearn.ensemble'dan içe aktarın VotingClassifier'ı sklearn.metrics'ten içe aktarın

Veri kümesi oluşturma:

X, y = make_moons(n_samples=500, gürültü=0.30) X_train, X_test, y_train, y_test = train_test_split(X, y)

Modellerin başlatılması:

log = LogisticRegression() rnd = RandomForestClassifier(n_estimators=100) svm = SVC()
oylama = VotingClassifier( tahminciler=[('lojistik_regresyon', log), ('random_forest', rnd), ('support_vector_machine', svm)], oylama='zor')

Burada oylamayı ayarlıyoruz = 'zor' takip edileceği anlamına geliyor çoğunluk kuralıyla oylama ve n_estimators 100 olarak. Geri kalan tüm parametreler varsayılandır.

Eğitim verilerinin yerleştirilmesi:

vote.fit(X_train, y_train)

Şimdi bunun test setinde nasıl çalıştığını görelim:

clf girişi için (log, rnd, svm, oylama): clf.fit(X_train, y_train) y_pred = clf.predict(X_test) print(clf.__class__.__name__, doğruluk_score(y_test, y_pred))

Boom! Oylama sınıflandırıcısının diğer bireysel modellerden biraz daha iyi performans gösterdiğini görebildiğimiz için işte buradayız. Eğer tahmin_proba() yöntemine sahip sınıflandırıcılarla çalışıyorsanız, bunların bir sınıfın olasılığını tahmin edebilecekleri anlamına gelir. Daha sonra, tüm sınıflandırıcıların ortalaması alınarak en yüksek olasılığa sahip sınıfın çıktısını alırız. Bu teknik şu şekilde bilinir: yumuşak oylama. Bu teknik, oldukça güvenli oylara daha fazla odaklandığından genellikle zorlu oylamadan daha iyi performans gösterir. Bunu kullanmak için tek yapmanız gereken "sert" yerine "yumuşak" ifadesini kullanmaktır ve bunun yalnızca sınıf olasılığını tahmin edebilen sınıflandırıcılar için işe yarayacağını unutmayın.

Topluluk Öğrenmede Paketleme ve Yapıştırma

Daha önce tartışıldığı gibi, çeşitli sınıflandırıcılar elde ederek farklı algoritmalar kullanabiliriz. Başka bir yaklaşım daha var; her tahminci için aynı algoritmayı kullanabilir ve onları farklı rastgele eğitim verileri alt kümeleri üzerinde eğitebiliriz.

Torbalama: Ne zaman verinin bir alt kümesini seçsek değiştirme ile Torbalama olarak bilinir.

Yapıştırma: Ne zaman verinin bir alt kümesini seçsek Değiştirmeden Yapıştırma olarak bilinir.

Hem torbalama hem de yapıştırma, eğitim verilerinin farklı bir rastgele alt kümesindeki tahmincileri eğitir. Sonunda, tüm tahminciler eğitildiğinde, topluluk, tüm tahmincilerin tahminlerini zorlu oylama sınıflandırıcıyla (istatistikteki As modu) aynı şekilde birleştirerek yeni verileri tahmin edebilir. Çoğu zaman topluluk, orijinal eğitim verileri üzerinde eğitilmiş bireysel tahminciyle aynı önyargıya ancak daha az varyansa sahiptir.

Önyargı ve Varyans hakkında daha fazla bilgi için bu bloga göz atın okuyun.

Torbalama ve yapıştırmanın en büyük avantajı, farklı CPU'lara veya farklı sunuculara da eğitilebilmeleridir ve bu, her ikisinin de bu kadar popüler olmasının diğer birçok nedeninden biridir.

Uygulamamıza başlayalım:

Daha önce oluşturduğumuz veri kümesini kullanacağız.

Gerekli kitaplıkları içe aktarma:

sklearn.ensemble'dan BaggingClassifier'ı sklearn.tree'den içe aktarın DecisionTreeClassifier'ı sklearn.metrics'ten içe aktarın doğruluğunu_score'u içe aktarın

Torbalama sınıflandırıcısının başlatılması:

bagging_clf = BaggingClassifier( DecisionTreeClassifier(), n_estimators=250, max_samples=100, bootstrap=True, random_state=101)

Kodu burada biraz parçalayalım, yukarıdaki kod 250 karar ağacı sınıflandırıcısından (n_estimators) oluşan bir topluluğu eğitecek ve bunların her biri, üzerinde çalıştığımız gibi değiştirilerek eğitim verilerinin (max_samples) 100 rastgele alt kümesi üzerinde eğitilecek. bir torbalama sınıflandırıcısı ancak bunun yerine yapıştırma üzerinde çalışmak istiyorsanız devam edin ve bootstrap = False değerini ayarlayın. Son olarak, n_jobs parametreleri, eğitim ve tahmin için kaç tane CPU çekirdeği kullanmak istediğinizi belirtir (-1, mevcut olanların tümünü kullanabileceği anlamına gelir). Regresyon için BaggingRegressors'ı kullanabilirsiniz.

Resmi belgelere göz atın okuyun daha fazla bilgi için.

Sınıflandırıcıyı eğitmek:

bagging_clf.fit(X_train, y_train)

Sınıflandırıcıyı test etmek:

y_pred = bagging_clf.predict(X_test) print(accuracy_score(y_test, y_pred))

Normal bir karar ağacı sınıflandırıcısını az önce oluşturduğumuz torbalama sınıflandırıcısıyla karşılaştırırsak her ikisinin de ay veri seti üzerinde eğitildiğini görürüz. Aşağıdaki şekli gözlemleyerek şunu görebiliriz:

Python'da Topluluk Öğrenimi | Karar ağacı

Topluluk, bireysel bir karar ağacından çok daha genelleştirilmiştir.

Çanta Dışı Değerlendirme

Torbalamayı her kullandığınızda, birden fazla kez örneklenebilecek (alt küme seçilerek) bir miktar veri olabilir, hatta belki daha da fazlası olabilir ve hiç örneklenmeyen bazı veriler de olabilir. Torbalama Sınıflandırıcı, varsayılan olarak değiştirmeyle n sayıda eğitim örneğini örnekler; bu, her tahminci için ortalama olarak verilerin yalnızca yaklaşık %63'ünün örneklendiği anlamına gelir. Verilerin geri kalan %37'si hiç örneklenmiyor; artık bu veriler/örnekler, paket dışı (OOB) örnekler olarak biliniyor. Bu %37'nin tüm tahminciler için aynı olmadığını unutmayın.

Modelimiz bu verileri daha önce hiç görmediğinden, ayrı doğrulama verilerine olan ihtiyacın ortadan kaldırılmasının değerlendirilmesi açısından yararlı olabilir.

Torbalama sınıflandırıcısı, true ayarının ardından eğitim tamamlandıktan sonra değerlendirme için otomatik olarak oob'ları kullanacak bir oob_score parametresine sahiptir.

Uygulamaya kısaca göz atalım:

Burada kullanılan kütüphaneler ve veri kümeleri aynıdır.

Sınıflandırıcının başlatılması:

bagging_clf = BaggingClassifier( DecisionTreeClassifier(), n_estimators=250, bootstrap=Doğru, oob_score=Doğru, random_state=101)

Sınıflandırıcının Eğitimi:

bagging_clf.fit(X_train, y_train)

Sonuç:

bagging_clf.oob_score_

Bunu tamamladığımızda %90 elde ediyoruz, bu da daha önce başardıklarımıza (%91.2) yeterince yakın. Yani modeli oob'lar üzerinde test ederek, test setinde elde edeceğimiz doğruluğun kabaca bir tahminini elde edebiliriz.

Rasgele Ormanlar

Girişte daha önce tartıştığımız gibi Rastgele orman, torbalama yöntemiyle eğitilmiş karar ağaçlarının bir topluluğudur. Burada max_Samples, eğitim verilerinin boyutuna ayarlanır. Bu nedenle, karar ağaçlarını kullanarak bir torbalama sınıflandırıcısı oluşturmak yerine, kullanımı çok daha optimize edilmiş ve verimli olan RandomForest Sınıflandırıcıyı veya RandomForest Regressor'u (regresyon için) hemen kullanmanız daha iyidir.

Uygulamaya kısaca göz atalım:

Gerekli kitaplıkları içe aktarma:

sklearn.ensemble'dan RandomForestClassifier'ı içe aktarın

Başlatma ve eğitim (aynı ayın veri kümesi):

random_forest_clf = RandomForestClassifier(n_estimators=500, max_leaf_nodes=16, random_state=42,n_jobs=-1) random_forest_clf.fit(X_train, y_train)

Yukarıdaki kod, 500 ağaçlı (n_estimators=500) bir Rastgele Orman Sınıflandırıcısını eğitir ve her biri maksimum 1 düğümle sınırlı olan n_jobs =-16 olarak belirttiğimiz gibi mevcut tüm CPU çekirdeklerini kullanır.

Karar Ağacı hakkında daha ayrıntılı bilgi için göz atın okuyun.

Test verileri için tahmin:

y_pred_random_forest = random_forest_clf.predict(X_test)

Rastgele Orman Sınıflandırıcısı, süreci kontrol etmek için bir Karar Ağacı Sınıflandırıcısının yanı sıra Torbalama Sınıflandırıcısının tüm hiperparametrelerinden oluşur.

Rastgele Orman algoritması, ağaçları büyütürken ekstra rastgelelik kullanır. Düğümü bölerken en iyi özelliği aramak yerine. Yaptığı şey, rastgele bir özellik alt kümesi arasından en iyi özelliği aramaktır. Algoritma aynı zamanda daha yüksek bir önyargıyı daha düşük bir varyansla değiştirir ve bu da genel doğruluğu artırır.

Devam edelim ve benzer bir Torbalama sınıflandırıcısı oluşturalım ve tahminlerini Rastgele Orman Sınıflandırıcısının tahminleriyle karşılaştıralım.

Modeli başlatma ve eğitme:

bagging_clf = BaggingClassifier( DecisionTreeClassifier(max_leaf_nodes=16), n_estimators=500, random_state=101)

Eğitim ve Tahmin:

bagging_clf.fit(X_train, y_train) y_pred_bagging = bagging_clf.predict(X_test)

Şimdi torbalama sınıflandırıcısının(y_pred_bagging) ve Rastgele Ormanın(y_pred_random_forest) tahminlerini karşılaştıralım, bakalım ne elde edeceğiz:

np.sum(y_pred_bagging == y_pred_random_forest) / len(y_pred_bagging)

Gördüğümüz gibi Bagging sınıflandırıcısının ve Rastgele Ormanın tahminlerinin neredeyse %95.2'si benzer.

Ekstra Ağaçlar

Bu konuya kısaca devam edelim.

Rastgele Orman bir ağaç yetiştirdiğinde, her düğüm için yalnızca rastgele bir özellik alt kümesi, bölme işlemi için hesaba alınır. Tres'i daha da rastgele hale getirmenin bir yolu, aşağıdaki gibi en iyi eşiği aramak yerine her özellik için rastgele eşiği ayarlamaktır. karar ağacı yapar.

Bu teknik aynı zamanda düşük varyans için yüksek önyargıyı da değiştirir. Rastgele orman yerine Ekstra ağaçlar kullanmanın avantajı, her düğümde her özellik için mümkün olan en iyi eşiği bulmanın son derece zaman alıcı olması nedeniyle daha hızlı olmasıdır.

Ekstra ağaçlar sınıflandırıcısının oluşturulması Rastgele Orman Sınıflandırıcısınınkine neredeyse benzer. Sınıflandırma için Scikit-learn'in Ekstra Ağaçlar sınıflandırıcı sınıfını ve regresyon için Scikit-learn'in Ekstra Ağaç Regresör sınıfını kullanabilirsiniz.

Rastgele ormanlar ve ekstra ağaçlar arasında hangisinin daha iyi veya en kötü performans göstereceğini bilmek zordur; bunu bilmenin tek yolu her ikisini de oluşturmak ve bunları çapraz doğrulama kullanarak karşılaştırmaktır.

Özellik Önemi

Rastgele Orman'ın sunduğu en iyi şeylerden biri, her özelliğin önemini ölçmemize yardımcı olmasıdır. Scikit-learn bunu, bu özelliği kullanan bir ağaç düğümünün safsızlığı ortalama ne kadar azalttığını analiz ederek hesaplıyor.

Scikit-learn her bir özellik için bu puanları otomatik olarak hesaplar ve ardından tüm önemlerin toplamı 1'e eşit olacak şekilde ölçeklendirir. Özelliğin önemine erişmek için feature_importances değişkenini kullanacağız.

Her ikisinin de uygulama kısmına bir göz atalım IRIS ve MNİST veri kümeleri:

IRIS VERİ SETİ

Gerekli kitaplıkları içe aktarın ve veri kümesini yükleyin:

sklearn.datasets'ten load_iris'i içe aktarın iris = load_iris()

Rastgele Orman Sınıflandırıcısını başlatın ve eğitin:

Rand_forest_clf = RandomForestClassifier(n_estimators=500, random_state=42) rand_forest_clf.fit(iris["veri"], iris["hedef"])

Özellik önemini sırasıyla adlarıyla birlikte yazdırın:

özellik için, zip(iris["feature_names"], rand_forest_clf.feature_importances_): print(feature, puan) içindeki puan
Python'da Topluluk Öğrenimi | İris Veri Sayfası

Burada taç yaprağı uzunluğunun (%44) ve taç yaprağı genişliğinin (%42) çanak yaprak uzunluğu (%11) ve çanak yaprak genişliğinden (%2) daha önemli olduğunu görebiliriz.

MNIST VERİ SETİ

Devam edelim ve MNIST veri kümesi üzerinde rastgele Orman Sınıflandırıcısını eğitelim ve matplotlib'i kullanarak her pikselin önemini çizelim.

Modeli başlatma ve eğitme:

Rand_forest_clf = RandomForestClassifier(n_estimators=100, random_state=42) rand_forest_clf.fit(mnist["veri"], mnist["hedef"])

Özelliğin önemini yazdırmak yerine doğrudan görselleştirmek daha iyidir:

resim = rand_forest_clf.feature_importances_.reshape(28, 28) plt.imshow(image, cmap = mpl.cm.bone,interpolation="en yakın") plt.axis("kapalı")
cbar = plt.colorbar(ticks=[rand_forest_clf.feature_importances_.min(), rand_forest_clf.feature_importances_.max()]) cbar.ax.set_yticklabels(['Daha az önem', 'Yüksek önem']) plt.show()
Python'da Topluluk Öğrenimi

Belirli bir sayının tahmininde görüntülerin sınırlarının hiçbir önemi olmadığını yorumlamak oldukça basittir.

Görselleştirmeye meraklıysanız bloguma göz atın okuyun.

Dolayısıyla, özellik seçimi yapmanız gerekiyorsa Rastgele orman, hangi özelliklerin çok önemli olduğuna dair hızlı bir analiz yapmanıza yardımcı olmak için oradadır.

Arttırılması

Birkaç zayıf öğrenen güçlü bir öğrenen oluşturmak için birleştirildiğinde buna güçlendirme (güçlendirme hipotezi) diyoruz. Temel olarak yaptığı şey tahmincileri sıralı bir şekilde eğitmektir; her biri bir öncekinin hatasını düzeltir. Scikit-learn'ün sunduğu çok sayıda güçlendirme algoritması var ancak açık ara en iyileri ve en popüler olanları AdaBoost (Adaptive Boosting) ve Gradient Boosting'dir.

İlk önce Adaboost'u parçalayalım:

AdaBoost

Genel olarak AdaBoost'un kullandığı teknik, önceki modellerin uyguladığı eğitim verilerine dikkat etmesidir. Bu, yeni tahmincilerin bu zor vakalara daha fazla odaklanmasına neden oluyor.

Bunu bir örnekle anlayalım. Bir Adaboost sınıflandırıcıyı eğitirken, algoritma ilk önce bir temel sınıflandırıcıyı eğitir (örneğin Karar Ağaçları) ve eğitimden sonra bu temel sınıflandırıcıyı eğitim verileri üzerinde tahminler yapmak için kullanır. Bundan sonra algoritma, temel sınıflandırıcımızın yanlış yaptığı (yanlış sınıflandırma) eğitim örnekleri için göreceli ağırlığını artırır. Daha sonra bu yeni (güncellenmiş) ağırlıklarla başka bir sınıflandırıcıyı eğitir ve yine eğitim verileri üzerinde tahminlerde bulunarak ağırlıklarını buna göre günceller ve bu süreç böyle devam eder.

Tüm tahminciler eğitildikten ve kullanıma hazır hale getirildikten sonra topluluk, torbalama veya yapıştırmaya benzer tahminler yapar, tek fark, tahmin edicilerin eğitim verilerindeki doğruluğa (doğru yaptıkları sınıflandırmalara) göre farklı ağırlıklara sahip olmasıdır.

Biri büyük dezavantajlar Bu sıralı yaklaşımın en önemli özelliği, bunların paralelleştirilememesi, yani her bir yordayıcının önceki yordayıcıların eğitimini ve değerlendirilmesini gerektirmesi nedeniyle aynı anda farklı sistemler üzerinde eğitilemeyecekleridir. Dolayısıyla torbalama ve yapıştırma gibi ölçeklenmezler.

Bunun arkasındaki matematiği tartışmayacağız, ancak matematiksel bir sezgi ve ayrıntılı bir genel çalışma elde etmek için diğer bloglara veya makalelere göz atmanızı rica ediyorum.

Uygulamaya kısaca göz atalım:

Unutmuş olabilirsiniz diye veri seti daha önce oluşturduğumuzla aynıdır; çünkü çok aşağıdasın 🙂

sklearn.ensemble'dan AdaBoostClassifier'ı içe aktarın
adaboost_clf = AdaBoostClassifier( DecisionTreeClassifier(max_length=1), n_estimators=200, algoritma = "SAMME.R", Learning_rate=0.5, random_state=42) adaboost_clf.fit(X_train, y_train)

Yukarıdaki kod 200'e dayalı bir AdaBoost sınıflandırıcısını eğitir. Karar Kütükleri (maks_derinlik 1'e ayarlanmış olan, tek bir karar düğümü ve iki yaprak düğümden oluşur). Burada öğrenme oranı, yükseltme yinelemeleri sırasında her sınıflandırıcıya uygulanan ağırlıktır. Öğrenme oranı ne kadar yüksek olursa, her sınıflandırıcının katkısı da o kadar yüksek olur. N_tahmin ediciler ile öğrenme oranı arasında bir ticaret olduğunu unutmayın.

Şimdi burada SAMME'nin ne olduğunu merak ediyor olmalısınız, bu yüzden AdaBoost'un S anlamına gelen çok sınıflı bir versiyonudur.Çok Sınıflı Üstel Kayıp işlevini kullanarak bağımlılık yaratan modelleme. Orada bir (.R) işareti de fark etmiş olabilirsiniz, bu gerçek anlamına gelir; eğer birlikte çalıştığınız tahminciler, sınıf olasılıklarını tahmin edebilecekleri anlamına gelen tahmin_proba() yöntemine sahipse, a'yı kullanabilirsiniz. R çünkü sınıf olasılıkları genellikle daha iyi performans gösterir. Bu, AdaBoost Sınıflandırıcı için varsayılan temel tahmin edicidir.

Tahmin ve Doğruluk:

y_pred = adaboost_clf.predict(X_test) doğruluk_score(y_test, y_pred)
Tahmin ve Doğruluk

Yaklaşık %90 oranında doğruluk elde ettik, bu hiç de fena değil!

Şimdi Gradient Boosting'e başlayalım.

Gradyan Arttırma

Görmek üzere olduğumuz ikinci son derece popüler güçlendirme algoritması: Gradyan artırma. Gradient boost aynı zamanda AdaBoost'un çalışmasıyla hemen hemen aynı şekilde çalışır; yani her biri öncekini düzelterek bir topluluğa sırayla öngörücüler ekler. Tek fark, AdaBoost gibi her yinelemede ağırlıkları değiştirmek yerine, bu yöntemin daha çok odaklanıp yeni tahmin edicileri tahminlere uydurmaya çalışmasıdır. Ölçüm hatası önceki tarafından yapılmıştır.

Ölçüm hatası basit anlamda, gözlemlenen bir grup değer ile bunların aritmetik ortalaması arasındaki fark anlamına gelir.

Daha iyi anlaşılması için basit bir örnekle devam edelim:

Temel tahmin aracı olarak bir karar ağacı kullanacağız. Devam edelim ve eğitim verilerine bir karar ağacı regresörü yerleştirelim. Şimdi veri setini değiştireceğiz, burada basit gürültülü ikinci dereceden bir veri seti oluşturacağız.

np.random.seed(42) X = np.random.rand(100, 1) - 0.5 y = 3*X[:, 0]**2 + 0.05 * np.random.randn(100)

Veri kümesi oluşturma işlemimiz tamamlandığına göre devam edelim ve onu modelimize yerleştirelim.

sklearn.tree'den DecisionTreeRegressor'u içe aktarın
Tree_reg_first = DecisionTreeRegressor(max_length=2, random_state=42) Tree_reg_first.fit(X, y)

Daha önce tartışıldığı gibi, bu yöntem artık hatalara odaklanır. Şimdi ikinci karar ağacı regresörünü birincinin kalan hataları konusunda eğiteceğiz.

y2 = y - Tree_reg_first.predict(X) Tree_reg_second = DecisionTreeRegressor(max_length=2, random_state=42) Tree_reg_second.fit(X, y2)

Üçüncü regresörü önceki (ikinci) regresörün oluşturduğu artıkları kullanarak eğitmemiz gerekiyor.

y3 = y2 - Tree_reg_second.predict(X) Tree_reg_third = DecisionTreeRegressor(max_length=2, random_state=42) Tree_reg_third.fit(X, y3)

Şimdi az önce eğittiğimiz tüm ağaçlardan oluşan bir topluluk oluşturalım.

X_new = np.array([[0.8]]) //üzerinde test edeceğimiz değer.
y_pred = (tree_reg_first,tree_reg_second,tree_reg_third)) içindeki ağaç için toplam(tree.predict(X_new)

Artık tüm ağaçların tahminlerini toplayarak yeni veriler için tahminlerde bulunacak. Devam edelim ve ne öngördüğünü görelim.

y_pred

Yani x = 0.75 için y = 0.8'i öngördü.

Aşağıdaki kod hemen hemen aynı şekilde çalışır:

sklearn.ensemble'dan GradientBoostingRegressor'u içe aktarın
gbrt = GradientBoostingRegressor(max_length=2, n_estimators=3, Learning_rate=1.0, random_state=42) gbrt.fit(X, y)

Ve daha önce görünenlerle aynı toplulukları yaratacak.

gbrt.predict(X_new)
GBRT.tahmin

Daha fazla bilgi için resmi belgelere göz atın.

Topluluk Öğrenme Soru-Cevap Oturumu

Bu bölümde, az önce tartıştığımız konulara daha sıkı hakim olabilmeniz için bazı temel soruları ele alacağız.

1. Sert ve yumuşak oylama sınıflandırıcıları arasındaki fark nedir?

Cevap: Kesin oylama sınıflandırıcısı, topluluktaki her sınıflandırıcının oylarını sayar ve çoğunlukta olan sınıfın çıktısını alır. Öte yandan, yumuşak oylamalı sınıflandırıcı, topluluktaki her sınıflandırıcı için sınıf olasılığını hesaplar ve en yüksek olasılığa sahip sınıfı çıkarır. Ancak yumuşak oylama yalnızca tahmin_proba() yöntemine sahip sınıflandırıcı için işe yarar.

2. Torbalamanın eğitim süresini birden fazla sunucuya dağıtarak hızlandırabileceğinizi düşünüyor musunuz? Evet ise neden? Yapıştırma, güçlendirme ve Rastgele Orman'a ne dersiniz?

Cevap: Evet, hepsi birbirinden bağımsız olduğundan birden fazla sunucuya dağıtılarak bagging'in eğitim süresini hızlandırmak mümkündür. Yapıştırma ve Rastgele Orman da benzer şekilde çalışır. Yani onlarla da bir sorun yok. Algoritmaların güçlendirilmesinden bahsederken seleflerine güveniyorlar. Dolayısıyla onları birden fazla sunucuda eğitmek mümkün değildir.

3. Çanta Dışı Değerlendirmenin avantajları nelerdir?

Cevap: Hepimizin bildiği gibi, çanta dışı değerlendirmede her tahminci, eğitilmediği örnekler üzerinden değerlendiriliyor (hatırlıyorsanız %37'si kalmıştı). Bu, herhangi bir doğrulama setine ihtiyaç duymadan topluluğun tarafsız bir değerlendirmesine sahip olma avantajı sağlar.

4. Ekstra Ağaçların Normal Rastgele Ormandan farkı nedir? Ekstra Ağaçlar ve Rastgele Orman arasında hangisi daha hızlı? Rastgelelik ekstra ağaçlarda nasıl yardımcı olabilir?

Cevap: Hem Ekstra Ağaçlar hem de Rastgele Orman, her düğümde bölme için rastgele bir özellik alt kümesini dikkate alır. Tek fark, bir özellik için mümkün olan en iyi eşiği aramak yerine ekstra ağaçların rastgele bir eşik kullanmasıdır. Özelliklerin bu rastgeleliği, düzenlileştirme görevi görür; Rastgele Orman, eğitim verilerine gereğinden fazla uyuyorsa, Ekstra ağaçların daha iyi performans gösterme şansı yüksektir. Tahmin hızı açısından ikisi de aynıdır, çünkü Ekstra Ağaçların bir özellik için en iyi eşiği aramadığını biliyoruz, ona çok zaman kazandırıyor. Bu nedenle Rastgele Orman'dan daha hızlıdır.

5. Çalışırken AdaBoost sınıflandırıcısının eğitim verilerine yetersiz uyum sağladığını fark ettiniz, hangi hiperparametreleri değiştireceksiniz ve nasıl?

Cevap: AdaBoost'un eğitim verilerine yetersiz uyum sağladığını gözlemlersek tahmin edici sayısını artırmayı deneyebilir veya temel tahmincinin düzenlileştirme hiperparametrelerini azaltmayı deneyebiliriz. Öğrenme oranını artırmak da biraz yardımcı olabilir.

6. Çalışırken Gradient Boosting'inizin egzersiz verilerine gereğinden fazla uyduğunu fark ettiniz, öğrenme oranı hakkındaki düşünceleriniz neler?

Cevap: Gradient Boosting'in eğitim verilerine gereğinden fazla uyduğunu gözlemlersek, devam edip öğrenme oranını azaltabiliriz ve ayrıca doğru sayıda tahminciyi bulmak için erken durdurmayı kullanabiliriz (başka bir gündem konusu başka bir gün tartışılacaktır).

Yukarıdaki soruların yarısını veya tamamını doğru yanıtladıysanız, tebrikler! Muhtemelen bu kılavuzun tüm paragraflarını okudunuz. Senin gibi bir okuyucuya sahip olduğum için minnettarım…

Son Notlar

Nihayet bu konuyu öğrenme yolculuğumuz sona erdi!. Oldukça uzun bir yolculuktu. Ama her zaman yanımda olmana sevindim. Konuyu toparlamak için… bu kılavuzda gördüğümüz konuları gözden geçirelim. Öncelikle genel bir girişle başladık, ardından oylama sınıflandırıcıları hakkında bazı temel tartışmalar yaptık, torbalama, yapıştırma ve torba dışı değerlendirmenin ne olduğunu ve bunların uygulanmasını gördük, ardından Rastgele Orman, Ekstra Ağaçların kısa bir çalışmasını gördük. Özelliklerin teorik ve pratik açıdan önemine değindikten sonra son olarak güçlendirme algoritmalarına bir göz attık. Ayrıca bu rehberde ne kadar tüketebildiğinizi değerlendirebileceğiniz bazı soruları da yanıtlama şansımız oldu.

Bizi izlemeye devam edin!!

Diğer bloglarıma göz atın okuyun.

Umarım bu makaleyi okumaktan keyif almışsınızdır, eğer faydalı bulduysanız lütfen sosyal medyada arkadaşlarınızla da paylaşın. Sorularınız ve önerileriniz için bana yorumlardan ping atmaktan çekinmeyin veya bana doğrudan e-posta yoluyla ulaşabilirsiniz.

Beni LinkedIn'e bağla

E-posta: [e-posta korumalı]

Teşekkür ederim!

Bu makalede gösterilen medya Analytics Vidhya'ya ait değildir ve Yazarın takdirine bağlı olarak kullanılır.

Plato Ai. Web3 Yeniden Düşünüldü. Güçlendirilmiş Veri Zekası.
Erişmek için buraya tıklayın.

Kaynak: https://www.analyticsvidhya.com/blog/2021/12/a-detailed-guide-to-ensemble-learning/

spot_img

En Son İstihbarat

spot_img

Bizimle sohbet

Merhaba! Size nasıl yardım edebilirim?