Makine öğrenimi yöntemleri, test setinde bulunmayan eğitim setinin belirli özelliklerini öğrendikleri için genellikle verileri modelleyemez. Yani bu özellikler temsili değildir ve biz bir aşırı uyum durumundayız . Model eğitim verisine çok fazla uyduğunda olur, ancak yeni örneklerde genelleme yapamaz. Bu sorunu ele almanın, düzenlemenin, en iyi hiperparametrelerin seçilmesinin ve K katlamalı çapraz doğrulamanın birçok yolu vardır.. Bu makalede, bu son konuya odaklanıyorum çünkü modelin tarafsız bir performansına sahip olmanın önemli bir rolü olduğunu düşünüyorum. Verileri basitçe eğitime ve test setine bölmek, model performansı hakkında gerçek bir fikre sahip olmaya izin vermez. Eğitim setinde% 90 doğruluk oranı olan "Wow" diyebilirsiniz, ancak test doğruluğunun% 60'ını gördükten sonra. Elbette bir sorun var.
Genel fikir, veri setini eğitim için k-1 ve doğrulama / test için olmak üzere k parçaya bölmektir. Örneğin, veri setini 5 kata ayırabiliriz, böylece modeli eğitmek için 4 kat kullanılırken, kalan kat modelin performansını değerlendirmek için kullanılır. Yani bu bölüme karar verirsek, modeli değerlendirmek için kullanılan katlama konumunu her seferinde değiştirerek bu işlemi 5 kez tekrar etmemiz gerekir. Kullanımına tüm araçları daha iyi bir fikir sahibi olmak, benim kullandığım en kullanılan çapraz doğrulama teknikleri gösterecektir Titanik veri kümesi gelen Kaggle . Tam kod burada . Test setinin hedef etiketi içermemesi nedeniyle bu eğitim sırasında sadece eğitim setini kullanacağım. Dahası, fazla uydurmayı önlemenin daha iyi bir yolu, modeli eğitmek için daha az eğitim verisi kullanacağız ve bunu doğrulama setinde değerlendireceğiz.
Klasik ve eski moda yaklaşım, veri setini 3 sabit alt gruba ayırmaktan oluşur: ortak seçim, eğitim için% 60, doğrulama için% 20 ve test için% 20 kullanmaktır. Veri setinin büyüklüğüne göre bu oranlara karar verebilirsiniz. Küçük bir veri kümesi için oran uygundur. Daha fazla veri olduğunda, eğitim seti için daha büyük bir yüzde ve doğrulama ve test setleri için daha küçük yüzdeler düşünebilirsiniz. Şimdi, önceden işlenmiş özelliklerle Titanic veri setini kullanan yaklaşımı göstereceğim. Modeli eğitmeden önce, eğitim verilerini eğitim ve doğrulama setlerine ayırdık.
Veriler bölündüğünde, Karar Ağacı Sınıflandırıcısını eğitir ve doğrulama setinde değerlendiririz.
Bu ikinci yöntem, gözlem setini iki kısma ayırır: modele uyması için n-1 gözlemler ve onu değerlendirmek için kalan gözlem. Bu işlem n defa tekrarlanacaktır. Aşağıda aynı mantıkla LeaveOneOut fonksiyonunun nasıl çalıştığını gösteriyorum.
Şimdi cross_val_score işlevini bir dışarıda bırakma yaklaşımını uygulamak için kullanıyorum. cv, veri kümesini farklı yöntemlerle bölme stratejisini belirleyen bağımsız değişkendir. Bu durumda, Birini Dışarıda Bırak nesnesini alır.
Her bölme için tahmin ve doğruluk elde ediyoruz ve sonra elde edilen tüm değerlerin ortalamasını hesaplıyoruz. Doğruluk, Çapraz Doğrulama ile elde edilenden daha düşüktür. Muhtemelen bunun nedeni, veri kümesini her seferinde bölmek ve farklı bir doğrulama katmanı kullanmak, doğrulama doğruluğunu abartma eğiliminde değildir. Ancak, bölmede rastgelelik olmaması ve hesaplama açısından pahalı olması nedeniyle çoğu zaman tercih edilen yaklaşım bu değildir. Bu yüzden başka yaklaşımları denemeliyiz.
Daha önce de belirtildiği gibi, K Fold Çapraz Doğrulamada, veri setini modeli eğitmek için k-1 ve modeli değerlendirmek için k-1 olmak üzere k katlara ayırdık. Bu işlemi k kez tekrar ediyoruz. Aşağıda, bu yaklaşımın veri setini nasıl böldüğünü görmek için güzel bir örnek var. Basitlik için sadece 5 kat kullanıyoruz ve rastgele bölmeye sahip olmak için shuffle'ı True'ya eşit olarak belirtiyoruz.
Pozitif ve negatif sınıflara (Hayatta Kalmış / Sağ Kalmamış) sahip örneklerin sayısının her katmanda farklı olduğunu gözlemlemek mümkündür. Bunun nedeni, Titanic veri kümesinin dengesiz sınıflara sahip olmasıdır. Bakalım modelin performansı nasıl olacak. Bu sefer, cross_val_score fonksiyonunda KFold nesnesini uyguluyoruz.
Performans, önceki yaklaşımla elde edilenden çok daha iyidir. Ama yine de bir sorun var. Dediğim gibi, olumlu ve olumsuz sınıflarla yapılan gözlem sayısı farklıdır:
Hayatta kalanların sayısı, ölenlerin sayısından daha az. Leonardo di Caprio ve Kate Winslet tanıklığı ile hikaye ve film olarak. Dengesiz sınıfları yönetmek için Tabakalı K Katlamalı Çapraz Doğrulama adı verilen daha iyi bir yaklaşım hala var.
Katmanlı K katlamalı Çapraz Doğrulama, K Katlamalı Çapraz Doğrulama ile aynı şekilde çalışır. Tek fark, her kategorik değer için aynı gözlem yüzdesini sağlamasıdır. Bu durumda, iki sınıf için Hayatta Kaldı ve Sağ Kalmadı.
Aşağıdaki örnekte, Katmanlı K Çapraz Doğrulama, veri setini Sağkalım değişkenine göre böler.
Şimdi, bir kattan diğerine farklı sınıfların örnek sayısının çok az değişmediğini veya değişmediğini görebiliriz. Bunun nedeni, veri setini hedef değişkene göre katmanlaştırıyor olmamızdır.
Tüm kıvrımların ortalama doğruluğu% 79.79'dur. Önceki yöntemle elde edilenden biraz daha küçük. Ancak yine de bu yaklaşımın bu tür verilerle daha iyi çalıştığını düşünüyorum.
Göstereceğim son yaklaşım, Zaman Serileri Çapraz Doğrulamadır. Zamanla ilişkilendirilmiş veriler olduğunda kullanışlıdır, bu nedenle verilerin sırasını korumamız gerekir. Randomizasyon ile gözlemler arasındaki bağımlılıkları kaybedeceğiz. İlk adımda, diğer yaklaşımlar olarak modeli eğitmek ve değerlendirmek için tüm örnekleri almayız, sadece bir alt küme. İlk adımdan sonra, her eğitim seti, daha önce gelen eğitim ve doğrulama setinin birleşimidir ve modeli değerlendirmek için her seferinde daha küçük bir veri parçası ekleriz. Sadece son bölümde tüm verileri kullanabiliriz. Örnekte, TimeSeriesSplit'te varsayılan bir argüman olduğundan belirtilmeyen 5 kat kullandık.
Şimdi daha önce yapılan aynı prosedürü takip ediyoruz.
Verilerde geçici bir bağımlılık olmadığı için ortalama performans çok iyi değil. Bu nedenle, Titanic veri kümesiyle daha iyi çalışan yaklaşımlar, K katlamalı Çapraz Doğrulama ve karşılık gelen katmanlı sürümdür.
Tebrikler! Şimdi, verileri alt gruplara ayırmak için en bilinen yaklaşımlara genel bir bakış elde edebilirsiniz. Yapması kolay bir adım değil. Hangisinin daha iyi çalıştığını görmek için aynı veri kümesiyle daha fazla yaklaşım denemenizi öneririm. En iyi yaklaşımlar genellikle K-Katlamalı Çapraz Doğrulama ve Tabakalı K-Katlamalı Çapraz Doğrulamadır. Umarım bu kavramları, bazen kelimelerden daha hızlı olan örnekler ve resimlerle anlamanıza yardımcı olmuştur. Okuduğunuz için teşekkürler. İyi günler dilerim!
Geçtiğimiz hafta sonu Purdue Gelişmiş Sinir Projeleri grubunun Akıllı Yazılım Hackathon'una katılarak çok eğlendim. İlham Bir süre önce Twitter'da bu GIF'e rastladım ve şimdiye kadarki en harika şey olduğunu düşündüm.
İşte İngilizce belirsiz bir cümle: "Duşa atlayacağım." Hoparlör duşta zıplama hareketi yapacak mı? Yoksa konuşmacı tek bir sıçrayışta duşa mı girecek? Belki konuşmacı yüksek bir binaya çıkıyor ve daha sonra zıplayacak ve altta bulunan bir duşa düşecek! Ne korkunç bir söz! Yapay zekanın anlamını anlaması için ona nasıl yaklaşmalıyız? Bilişsel bilimciler, insan beynini disiplinler arası bölümlerinden herhangi birini (felsefe, psikoloji, dilbilim, bilgisayar bilimi, sinirbilim veya antropoloji) kullanarak taklit etmeye çalışırlar.