(Eminim bunların çoğunu zaten bir cevapta yazdım - ama şu anda bulamıyorum. Eğer bu cevap karşısında tökezlersen, lütfen bağlantı kurun). Burada her ikisinin de mantıklı olduğunu düşündüğüm 2 farklı yaklaşım görüyorum.
Ama önce bazı terimler:
- Uygulamalı bir alandan geldiğimde, benim için (takılmış / eğitilmiş) bir model kullanıma hazırdır. Yani model, yeni veriler için tahminler oluşturmak için gereken tüm bilgileri içerir . Böylece, model hiperparametreleri de içerir . Göreceğiniz gibi, bu bakış açısı aşağıdaki yaklaşım 2 ile yakından ilişkilidir.
- OTOH, deneyimlerime göre eğitim algoritması şu anlamda iyi tanımlanmamıştır: (takılmış) modeli elde etmek için, sadece - "normal" model parametrelerinin "birincil uydurma" diyelim - yapılması gerekir, ayrıca hiperparametrelerin sabitlenmesi gerekir. Uygulama perspektifime göre, parametreler ve hiperparamerler arasında çok fazla fark yok: her ikisi de modelin bir parçası ve eğitim sırasında tahmin edilmesi / karar verilmesi gerekiyor.
Sanırım aralarındaki fark, genellikle bir eğitim algoritması sınıfını bazı direksiyon parametreleri ( hiperparametreler) ile birlikte tanımlayan yeni eğitim algoritmaları geliştiren biri arasındaki farkla ilgilidir.), uygulama / alan bilgisi olmadan düzeltilmesi zor / imkansız (veya en azından nasıl karar verileceğini / tahmin edileceğini düzeltmek) olan.
Yaklaşım 1: İstikrarlı optimizasyon sonuçları gerektirir
Bu yaklaşımla, "model eğitimi" "normal" model parametrelerinin uydurulması ve hiperparametreler verilmektedir. Bir iç örn. Çapraz doğrulama hiperparametre optimizasyonunu üstlenir.
Hiperparametre seti seçilmesi gereken ikilemi çözmek için burada önemli adım / varsayım , optimizasyonun kararlı olmasını gerektirmektedir . Doğrulama amaçları için çapraz doğrulama, tüm vekil modellerin, (kendi aralarında ve son modelde olduğu gibi) eşit muamele görmelerini sağlamak için nihai modele (tüm veri setine uygulanan aynı eğitim algoritması ile elde edilen) yeterince benzer olduğunu varsayar . Bu varsayım bozulursa ve
vekil modeller hâlâ kendi aralarında eşittir (veya eşdeğerdir) ancak son modele göre değil, iyi bilinen kötümser çapraz doğrulama önyarlığından bahsediyoruz.
Ayrıca vekil model birbirine eşit / eşdeğer değilse, kararsızlıkla ilgili sorunlarımız vardır .
İç döngünün optimizasyon sonuçları için, eğer optimizasyon kararlıysa, hiperparametrelerin seçiminde bir çakışma olmadığı anlamına gelir . Ve iç çapraz validasyon sonuçları arasında önemli farklılıklar gözlenirse, optimizasyon kararlı değildir . Kararsız eğitim durumları, hiperparametrenin hangisini seçeceğine karar vermekten çok daha kötü sorunlara sahiptir ve bu durumda geri adım atmanızı ve modelleme sürecini baştan başlatmanızı tavsiye ederim.
Bununla birlikte, burada bir istisna vardır: optimizasyonda pratik amaçlar için eşit performans sağlayan birkaç yerel minimum olabilir. Aralarında seçimin istikrarlı olmasını gerektirmek, gereksiz güçlü bir gereksinim olabilir - ancak bu ikilemden nasıl çıkılacağını bilmiyorum.
Tüm modeller aynı kazanan parametre setini vermezse, burada genel döngü hatası olarak dış döngü tahminlerini kullanmamanız gerektiğini unutmayın:
- p
- Ancak, tüm bölünmeler aynı parametreleri verdiği için herhangi bir karar yoksa, bu dış döngüdeki bağımsızlığı kıracaktır: her bölümün test verileri, diğer tüm bölünmelerdeki eğitim verileri olduğu için hangi parametre kümesinin kazandığına karar verdi ve böylece kullanıldı parametreleri optimize etmek.
Yaklaşım 2: Hiperparametre ayarını model eğitiminin bir parçası olarak ele alın
Bu yaklaşım, "eğitim algoritması geliştiricisi" nin perspektifleri ile eğitim algoritmasının uygulamalı kullanıcısı arasında köprü oluşturur.
Eğitim algoritması geliştiricisi "açık" bir eğitim algoritması sağlar model = train_naked (trainingdata, hyperparameters)
. Uygulanan kullanıcının ihtiyaç duyduğu tunedmodel = train_tuned (trainingdata)
gibi hiperparametrelerin sabitlenmesine de özen gösterir.
train_tuned
örn train_naked
. , çıplak eğitim algoritması etrafına çapraz doğrulamaya dayalı bir optimize ediciyi sararak uygulanabilir .
train_tuned
daha sonra hiperparametre girişi gerektirmeyen diğer herhangi bir eğitim algoritması gibi kullanılabilir, örneğin çıkışı tunedmodel
çapraz validasyona tabi tutulabilir. Şimdi hiperparametreler, "normal" parametrelerin, çapraz validasyon değerlendirmesinin bir parçası olarak stabilite açısından kontrol edilmesi gerektiği gibi, stabiliteleri açısından kontrol edilir.
Tek tek parametre setlerinden bağımsız olarak kazanan tüm modellerin performansını ortalama olarak değerlendirirseniz, bu aslında iç içe çapraz doğrulamada yaptığınız ve değerlendirdiğiniz şeydir.
Fark ne?
Muhtemelen şu 2 yaklaşımı benimseyen farklı son modellerle karşılaşıyoruz:
- yaklaşım 1'deki son model
train_naked (all data, hyperparameters from optimization)
- oysa yaklaşım 2
train_tuned (all data)
ve - daha büyük veri kümesinde hiperparametre optimizasyonunu tekrar çalıştırdığından - bu farklı bir hiperparametre kümesiyle sonuçlanabilir.
Fakat yine aynı mantık geçerlidir: son modelin çapraz doğrulama vekil modellerinden önemli ölçüde farklı parametrelere sahip olduğunu tespit edersek, bu varsayım 1'in ihlal edildiğinin bir belirtisidir. Yani IMHO, yine bir çatışmamız değil, (örtük) varsayımlarımızın haklı olup olmadığını kontrol ediyoruz. Ve eğer değillerse, yine de, bu son modelin performansı hakkında iyi bir tahminde bulunmak için çok fazla bahis oynamalıyız.
Birçok insanın iç içe çapraz doğrulama yaklaşımı 1'i düşündüğü izlenimini edindim (aynı zamanda CV'de benzer soruların / kafa karışıklıklarının sayısını da görüyorum). nihai model de.
İris örneği
Özet: Optimizasyon temel olarak anlamsızdır. Kullanılabilir örneklem büyüklüğü, burada parametre kümelerinden herhangi birinin performansı arasında ayrım yapılmasına izin vermez.
Bununla birlikte, uygulama açısından, sonuç, 4 parametre setinden hangisini seçtiğinizin önemli olmadığıdır - ki bu kötü haber değildir: nispeten istikrarlı bir parametre platosu buldunuz. Ayarlanan modelin uygun iç içe doğrulamasının avantajı geliyor: bunun en uygun model olduğunu iddia edemeseniz de, yaklaşım 2'yi kullanarak tüm veriler üzerine inşa edilen modelin sahip olacağını iddia edebilirsiniz. yaklaşık% 97 doğruluk (150 test vakasından 145'i için% 95 güven aralığı:% 92-99)
Ayrıca yaklaşım 1'in göründüğü kadar uzakta olmadığını unutmayın - aşağıya bakın: optimizasyonunuz bağlar nedeniyle kazara nispeten açık bir "kazanan" ı kaçırdı (aslında örnek boyutu sorununun başka bir çok belirtisi).
SVM'lerde C = 1'in burada iyi bir seçim olması gerektiğini "görebilecek kadar derin olmamakla birlikte, daha kısıtlayıcı lineer çekirdekle giderdim. Siz Ayrıca yaptığımız optimizasyon, tüm parametre setleri pratik olarak eşit performansa yol olduğunun farkında bile kazanan parametre setini seçmekle şeyin yolunda yok.
Bununla birlikte, gelecekte, deneyiminizin hangi performansı bekleyebileceğinizle ilgili kabaca tahminler verip vermediğini ve kabaca hangi modelin iyi bir seçim olacağını düşünün. Daha sonra bu modeli (manuel olarak sabit hiperparametrelerle) oluşturun ve performansı için bir güven aralığı hesaplayın. Optimize etmeye çalışmanın hiç mantıklı olup olmadığına karar vermek için bunu kullanın. (Çoğunlukla 10 daha bağımsız vaka almanın kolay olmadığı verilerle çalıştığımı ekleyebilirim - büyük bağımsız örnek boyutlarına sahip bir alandaysanız, işler sizin için çok daha iyi görünür)
uzun versiyon:
iris
Veri setindeki örnek sonuçlara gelince . iris
150 vakası vardır, 2 x 2 parametreli bir ızgaraya sahip SVM (2 çekirdek, ceza için 2 büyüklük sırası C
) dikkate alınır.
İç döngüde 129 (2x) ve 132 (6x) vaka bölmeleri vardır. "En iyi" parametre seti C hem = 1 Bununla birlikte, iç deney doğruluklardır, doğrusal ya da RBF çekirdek arasında kararsız Tüm % 98.5 gözlenen doğruluk - 94 içinde (her zaman kaybetmeden C = 10 de dahil olmak üzere). Bölmelerden birinde sahip olduğumuz en büyük fark rbf için 3 = 8 hata ve C = 1 vs. 10'dur.
Bunun önemli bir fark olmasının hiçbir yolu yok. Özgeçmişteki münferit vakalar için tahminleri nasıl çıkaracağımı bilmiyorum, ancak 3 hatanın paylaşıldığını ve C = 10 modelinin ek 5 hata yaptığını varsayarak:
> table (rbf1, rbf10)
rbf10
rbf1 correct wrong
correct 124 5
wrong 0 3
> mcnemar.exact(rbf1, rbf10)
Exact McNemar test (with central confidence intervals)
data: rbf1 and rbf10
b = 5, c = 0, p-value = 0.0625
alternative hypothesis: true odds ratio is not equal to 1
2 x 2 ızgarada 6 çift karşılaştırmanın olduğunu unutmayın, bu nedenle birden fazla karşılaştırma için de düzeltmemiz gerekir.
Yaklaşım 1
Rbf'nin doğrusal çekirdek üzerinde "kazandığı" 4 dış bölmeden 3'ünde, aslında aynı tahmin edilen doğruluğa sahiptiler (sanırım bağların ilk uygun indeksi döndürmesi durumunda min).
Izgarayı params = {'kernel':['linear', 'rbf'],'C':[1,10]}
verim olarak değiştirmek
({'kernel': 'linear', 'C': 1}, 0.95238095238095233, 0.97674418604651159)
({'kernel': 'rbf', 'C': 1}, 0.95238095238095233, 0.98449612403100772)
({'kernel': 'linear', 'C': 1}, 1.0, 0.97727272727272729)
({'kernel': 'linear', 'C': 1}, 0.94444444444444442, 0.98484848484848486)
({'kernel': 'linear', 'C': 1}, 0.94444444444444442, 0.98484848484848486)
({'kernel': 'linear', 'C': 1}, 1.0, 0.98484848484848486)
({'kernel': 'linear', 'C': 1}, 1.0, 0.96212121212121215)
Yaklaşım 2:
İşte, clf
son modeliniz. İle random_state = 2
, C RBF 1 galibiyet =:
In [310]: clf.grid_scores_
[...snip warning...]
Out[310]:
[mean: 0.97333, std: 0.00897, params: {'kernel': 'linear', 'C': 1},
mean: 0.98000, std: 0.02773, params: {'kernel': 'rbf', 'C': 1},
mean: 0.96000, std: 0.03202, params: {'kernel': 'linear', 'C': 10},
mean: 0.95333, std: 0.01791, params: {'kernel': 'rbf', 'C': 10}]
(5 kez, 1 ila 6 kez içinde 1 hakkında olur linear
ve rbf
birlikte C = 1
rank 1 bağlanmıştır)