"Hafta Sonu Yapay Zeka Sınıfı" Entegrasyonu artırma (kod makalesi) Karşılaşacağınız makine öğrenimi "çukurları"

"Torbalama entegrasyonu ve istifleme entegrasyonu" nda, temel öğrenci arttıkça, ister Rastgele Orman isterse Aşırı Rastgele Ağaçlandırma olsun, genelleme hatasının sabitleneceğini bir kez gördük.

Resim rastgele ormanın sonucunu gösteriyor

Resim, Son Derece Rastgele Ağaçların sonucunu göstermektedir

Aynı zamanda, entegrasyonu artırmanın bu tür sorunlarla karşılaşmayacağını da basitçe kanıtladık, çünkü her temel öğrencinin bir önceki öğrenci turunun sonuçları için optimize edilmesi gerekiyor. Adaboost'un sınıflandırma sürümü, yanlış örneklere, Gradient'e daha fazla dikkat edecek Boosting'in regresyon versiyonu, Loss'un negatif gradyanını optimize etmeye devam edecek. İlk olarak, IRIS verilerine uyum sağlamak için Adaboost'u kullanıyoruz ve karar ağacını temel öğrenci olarak kullanıyoruz.Önceki bölümdeki kod makalesinde, karar ağacının yaprak düğümünün minimum örneği 3'tür, bu nedenle temel öğrencimizin minsamplesleaf'ı da 3'e ayarlanmıştır. Ayrıca temel öğrenen sayısının genelleme hatası üzerindeki etkisini gözlemleyin:

numpy'yi np olarak içe aktar

matplotlib.pyplot dosyasını plt olarak içe aktar

seaborn'u sns olarak ithal etmek

sklearn ithal veri kümelerinden

fromsklearn.model_selection içe aktar cross_validate

sklearn.ensemble'dan AdaBoostClassifier'ı ABC olarak içe aktar

sklearn.tree'den DecisionTreeClassifieras DTC

iris = veri kümeleri.load_iris ()

X = iris.data

y = iris.target

dtc = DTC (min_samples_leaf = 3)

test_mse =

train_mse =

sayılar = aralık (1,50)

için d içinde sayılar:

clf = ABC (base_estimator = dtc, n_estimators = d)

clf_dict = cross_validate (clf, X, y, cv = 10, skorlama = 'doğruluk', algoritma = 'SAMME')

test_mse.append (clf_dict.mean ())

train_mse.append (clf_dict.mean ())

sns.set (style = 'darkgrid')

plt.plot (sayılar, tren_mse, 'b -.', etiket = 'Tren Doğruluğu')

plt.plot (sayılar, test_mse, 'r -.', etiket = 'Test Doğruluğu')

plt.xlabel ('n tahmin ediciler')

plt.ylabel ('Doğruluk')

plt.title ('Adaboost için Karar Ağacı')

plt.legend ()

plt.show ()

Şekilde görüldüğü gibi, başlangıçta test doğruluk oranının çok yüksek olduğunu görebiliyoruz, temel öğrenciyi ekledikten sonra test doğruluk oranı artmadı.

Adaboost'un tüm sürecini hatırlatarak, başlangıçta öğrenciyi tüm verilere uygulamak için kullandık. Eğitim tamamlandıktan sonra, öğrencinin ağırlığını hata oranıyla güncelliyoruz ve numunenin ağırlığını karşılık gelen kayıpla güncelliyoruz. Başlangıçta ise Sadece güçlü bir öğrenci kullanın, hata oranı çok düşüktür, öğrenci eklemeye devam edin, test doğruluk oranı değişmeyecektir. Dolayısıyla, Adaboost'un gücünü göstermek için, başlangıçta daha uygun yaklaşımımız zayıf bir öğrenci oluşturmaktır.

Yöntemimiz, karar ağacının maksimum derinliğini 1 ile sınırlamaktır, çünkü karar ağacının derinliği 1 olduğunda, öznitelikler yalnızca bir kez bölünür ve etki genellikle zayıftır.

....

dtc = DTC (max_depth = 1)

....

Temel öğrenenlerin sayısı arttıkça, test doğruluğunun önce hızlı bir şekilde arttığı ve ardından sabitlendiği şekilden görülebilir.

Temel öğrenenlerin sayısındaki artışı ve karar sınırındaki değişiklikleri de gözlemleyebiliriz:

numpy'yi np olarak içe aktar

matplotlib.pyplot dosyasını plt olarak içe aktar

sklearn ithal veri kümelerinden

sklearn.ensemble'dan AdaBoostClassifier'ı ABC olarak içe aktar

sklearn.tree'den DecisionTreeClassifieras DTC

seaborn'u sns olarak ithal etmek

iris = veri kümeleri.load_iris ()

X = iris.data

y = iris.target

def make_meshgrid (x, y, h = .02):

x_min, x_max = x.min () -1, x.max () +1

y_min, y_max = y.min () -1, y.max () +1

xx, yy = np.meshgrid (np.arange (x_min, x_max, h),

np.arange (y_min, y_max, h))

dönüş (xx, yy)

xx, yy = make_meshgrid (X, X)

dtc = DTC (max_depth = 1)

sayılar =

sns.set (style = 'darkgrid')

için k, j içinde numaralandır (sayılar):

clf = ABC (base_estimator = dtc, n_estimators = j)

clf.fit (X, y)

Z = clf.predict (np.c_)

Z = Z.reshape (xx.shape)

plt.subplot (uzunluk (sayılar) / 2, uzunluk (sayılar) / 2, k + 1)

plt.contourf (xx, yy, Z, cmap = plt.cm.RdBu, alpha = 0.6)

için ben, v, l içinde :

plt.scatter (X, X, c = v, etiket = l, kenar rengi = 'k')

plt.title ('$ n = $% s'% j)

plt.legend ()

plt.show ()

Temel öğrenen 1 olduğunda karar sınırının çok basit olduğu şekilden görülebilmektedir, çünkü teori ile tutarlı bir şekilde sadece bir kez bölünmüştür. Temel öğrenenlerin sayısındaki artışla birlikte, karar sınırı gittikçe daha karmaşık hale gelir.Temel öğrenen sayısı 50 olana kadar, soldaki mavi nokta için ayrı bir kural bile oluşturulur.

Şu anda çelişkili bir sonucumuz var Karar sınırına göre temel öğrenenlerin sayısındaki artış belli bir dereceye kadar aşırı uyuma yol açacak ancak test setinin performansına göre fazla uyum söz konusu değil. Öyleyse, önümüzde ciddi bir soru var: Adaboost için, temel öğrenci sayısındaki artış aşırı uyuma neden olacak mı? İnsanlar bile bazı durumlarda eğitim hatası sıfır olduğunda test performansının daha da iyileştirilebileceğini görecekler.

Torbalamada genelleme hatasının azaltılmasının esas olarak varyansın azaltılmasından geldiğine inanılır; artırmada, genelleme hatasını azaltmanın temelde önyargının azaltılmasından kaynaklandığı düşünülmektedir. İlki, yetersiz uyuma daha yatkındır ve ikincisi, aşırı uyuma daha yatkındır. Orijinal teorimize göre, temel öğrenenlerin sayısındaki artış, modelin karmaşıklığını artıracak ve bu da kaçınılmaz olarak belirli bir düğümde aşırı uyuma yol açacak ve genelleme hatası azalacaktır. Öte yandan, Adaboost'un modele ağırlık vermesi Ortalama olarak, hataları düzeltemeyen model ağırlık katsayıları küçük olacaktır ve sonuçlar üzerinde büyük bir etkiye sahip görünmemektedir.

Bu sorun tam olarak çözülmemiştir.En ikna edici olanı Margin theroy'dur.Sözde Margin, karar sınırı ile örnek arasındaki mesafe olarak anlaşılabilir, çünkü karar sınırı birçok nokta içerse de, Karar sınırına olan uzaklık farklıdır.Karar sınırının değişmesi ile uzaktaki örnek noktalarının değiştirilmesi kolay olmayıp, karar sınırının kenarındaki örnek noktalar değişikliklere çok duyarlıdır.Bu nedenle eğitim hatası sıfır olsa bile, Genelleme hatasının artması için hala yer vardır, çünkü şu anda optimizasyon süreci karar sınırı ile örnek arasındaki minimum aralığı genişletmektir ve geleneksel analiz yöntemlerini kullanarak böyle bir süreci görmek imkansızdır. Matematiksel olarak konuşursak, genelleme hatasının üst sınırını değiştirir.

Bu teoriye göre, Adaboost eğitim setinin kararlılığı aslında sürekli olarak karar sınırını ayarlıyor ve Adaboost bir seferde yalnızca bir parametreyi güncelliyor, bu da öğrenme sürecini çok yavaşlatacak.

Gradyan Arttırmanın uygulanması nispeten basittir. Temel öğrenen olarak karar ağaçlarını kullandığımızda, budama yoluyla her ağacın aşırı uyum derecesini doğal olarak sınırlayabiliriz. Önceki uygulamamız, güçlendirme için tek bir ağaç yapabileceğimizi kanıtladı. Kısıtlamalar büyük olasılıkla geçersizdir, bu nedenle iki düzenleme yöntemi açık olmalıdır:

  • Sıradan katkı modeli:

Öğrenme oranını tekrar ekleyin:

Böyle parametreli bir yöntem aslında her ağacın etkisini ayarlar, böylece daha sonra öğrenmek için daha fazla alan olur.

  • alt örnekleme:

Torbalama işleminde Bootstrap yöntemini ödünç almak, bootstrap'in aksine, değiştirilmeden örneklemektir. Her yinelemede, değiştirmeden yeni bir örnekleme gerçekleştireceğimize dikkat edilmelidir. Bu, varyansı azaltmaya ve aşırı uydurma riskini azaltmaya yardımcı olacaktır.

Bu iki düzenleme yöntemine büzülme de denir. Verilere gradyan artırmaya çalışıyoruz ve genelleme performansı üzerindeki etkisini gözlemlemek için öğrenme oranını ve alt örneklemeyi ayarlıyoruz:

numpy'yi np olarak içe aktar

matplotlib.pyplot dosyasını plt olarak içe aktar

seaborn'u sns olarak ithal etmek

sklearn ithalat topluluğundan

sklearn ithal veri kümelerinden

fromsklearn.model_selection import train_test_split

X, y = datasets.make_hastie_10_2 (n_samples = 12000, random_state = 1)

X = X.astype (np.float32)

etiketler, y = np.unique (y, return_inverse = True)

X_train, X_test, y_train, y_test = train_test_split (

X, y, test_size = 0.8, shuffle = False)

original_params = {'n_estimators': 1000, 'max_leaf_nodes': 4, 'max_depth': Hiçbiri, 'random_state': 2,

"min_samples_split": 5}

sns.set (style = 'darkgrid')

için etiket, renk, ayar içinde :

params = dikte (orijinal_params)

params.update (ayar)

clf = ensemble.GradientBoostingClassifier (** parametreler)

clf.fit (X_train, y_train)

test_deviance = np.zeros ((params,), dtype = np.float64)

için i, y_pred içinde numaralandır (clf.staged_decision_function (X_test)):

test_deviance = clf.loss_ (y_test, y_pred)

plt.plot ((np.arange (test_deviance.shape) +1), test_deviance,

'-', renk = renk, etiket = etiket)

plt.legend ()

plt.xlabel ('Yinelemeleri Yükseltme')

plt.ylabel ('Test Kümesi Sapması')

plt.show ()

Şekilde gösterildiği gibi, temel öğrenci arttıkça, alt örnekleme ve öğrenme oranının eklenmesiyle oluşan eğri testi hatası, temel öğrenci yaklaşık 200 olduğunda, yükseltici ağaca herhangi bir düzenleme aracı eklemeden, sonunda çok düşük bir aralığa yakınsar. Biraz fazla uyum var.

Çekirdeği okuyun

Sınıf İPUÇLARI

Adaboost'un neden aşırı uyum sağlamaması hala zor bir sorundur. Ve son araştırmalar, Adaboost'un yalnızca önyargıyı azaltmakla kalmayıp aynı zamanda varyansı da azalttığını göstermiştir, çünkü her öğrenme turunda, öğrenciye giren örneklerin dağılımı, torbalama örnekleme sürecine benzer şekilde her seferinde değişir. Aynı zamanda bir veri bozukluğudur.

Adaboost'ta öğrenme oranı da ekleyebiliriz, ancak Adaboost sklearn sınıfında varsayılan öğrenme oranı 1'dir, bu onu eklememeye eşdeğerdir ve fiili kullanım sırasında bunu kendimiz değiştirebiliriz.

Bir önceki bölümde anlattığımız Adaboost sınıflandırma için kullanılır ve gradient boosting regresyon için kullanılır.Aslında her ikisi de terfi sonrası sınıflandırma ve regresyon görevleri için kullanılabilir.

Yazar: Head & Shoulders olmadan keşiş

Yeniden yazdırmanız gerekirse, lütfen arka planda bir mesaj bırakın ve yeniden yazdırma şartnamelerine uyun.

Güzel Ülke | Özel inşaat ve yıkım görevleri "sıfır" mı? Bu köyün ne yaptığını görün!
önceki
Douyin'i satın alamazsan, onu kuşatmak zorunda mısın? Douyin'in satın alınması hala Ali'nin en iyi seçimidir!
Sonraki
Bugün Xinsheng | Yaşlı bakımı sorununu robotlara bırakmak gerçekten mümkün mü?
2019 New York Otomobil Fuarı gişe rekorları kıran model önizlemesi, yeni Mercedes-Benz GLS / Highlander / Sonata liderleri
Pekin Qingdao'nun ilk "Fuxing" yüksek hızlı treni "tek duraklı direkt" 3 saatlik bir trafik yaşam döngüsünü karşılıyor
"Hafta Sonu Yapay Zeka Sınıfı" Entegrasyonu Arttırma (Teori) Makine öğreniminde karşılaşacağınız "çukurlar"
Lynk & Co 032.0TD modelini test edin, hızlı çalıştırın ve otonom performanstan sorumlu / sabit durun
China Mobile ve Baidu'nun kılıcın arkasındaki stratejik ittifakı, 5G pazarında büyük kar payına işaret ediyor
inanılmaz! Gelin ve "Dakang Sekreteri" nin aynı telefonunu hissedin!
Core Voice Today | Dört gözle beklediğiniz sanal gerçeklik şehri Hypatia açıldı
Changan CS95 ile Roewe RX8 arasındaki kaba görünümde mükemmel
Altı bin teknoloji görüşmecisi değerlendirecek, Google, Microsoft, Amazon, hangisini seçersiniz?
Mercan kırmızısı rengi göz alıcıdır! 999 yuan Huawei Kutudan çıkan ilk harita ödülünün tadını çıkarın
Deneyimli otomobil şirketleri yeni güçlerle savaşıyor. Şangay Otomobil Fuarı otonom SUV hepsi burada
To Top