İç içe çapraz doğrulamada hiper parametreler nasıl alınır?


17

İç içe çapraz doğrulama için aşağıdaki mesajları okudum ve hala iç içe çapraz doğrulama ile model seçimi ile ne yapacağım% 100 emin değilim:

Karışıklığımı açıklamak için, adım adım iç içe çapraz doğrulama yöntemiyle model seçiminden geçmeye çalışayım.

  1. K-Fold ile bir dış CV döngüsü oluşturun. Bu, her bir iç CV döngüsünü "kazanan" hiper parametrelerin performansını tahmin etmek için kullanılacaktır.
  2. Her iç döngüde GSCV'nin parametre alanının tüm olası kombinasyonlarından geçtiği ve en iyi parametre kümesiyle geldiği bir iç CV döngüsü oluşturmak için GridSearchCV'yi kullanın.
  3. GSCV iç döngüdeki en iyi parametreleri bulduktan sonra, performans tahmini almak için dış döngüdeki test seti ile test edilir.
  4. Dış döngü daha sonra test seti olarak bir sonraki katına, geri kalanı ise eğitim seti olarak güncellenir ve 1-3 tekrar eder. Toplam olası "kazanan" parametreler, dış döngüde belirtilen kat sayısıdır. Dış döngü 5 katsa, belirli bir hiper parametre kümesinin performansını DEĞİL , 5 farklı hiper parametre kümesine sahip bir algoritmanın performans tahminine sahip olacaksınız .

Bu yaklaşım SKLearn'in örnek sayfasında gösterilmektedir: http://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html

Soru: 4. sonrasında hangi hiper parametrelerin en iyi sonucu verdiğini nasıl belirlersiniz? Algoritmanızı (örneğin Lojistik Regresyon, Rastgele Orman, vb.) Sonunda TAMAM veri seti ile eğitmek istediğinizi anlıyorum. Ancak, iç içe çapraz doğrulamanızda hangi hiper parametrelerin en iyi sonucu verdiğini nasıl belirlersiniz? Anladığım kadarıyla, her iç döngü için farklı bir hiper parametre seti kazanacak. Dış döngü için GridSearchCV performansınız hakkında bir tahmin elde edersiniz, ancak belirli bir hiper parametre seti almazsınız. Peki, son model oluşturmada hangi hiper parametrelerin kullanılacağını nasıl bilebilirsiniz? Bu, diğer basamaklardan anlamakta zorlandığım eksik mantık.

Herhangi bir ipucu için şimdiden teşekkür ederiz, özellikle @Dikran Marsupial ve @cbeleites chime yapabilirse!

Düzenleme: Yapabiliyorsanız, lütfen cevabınızda "algoritma" ve "hiper parametreler" gibi terimler kullanın. Benim için bir karışıklık kaynağı, insanların "model" veya "model seçimi" terimini kullanmasıdır. Hangi algoritmanın kullanılacağını veya hangi hiper parametrelerin kullanılacağını seçmekten bahsediyorlar.

Edit 2: İç içe çapraz doğrulama yapmanın iki yolunu gösteren bir not defteri oluşturdum . İlk yol, SKLearn örneğinde gösterilen yol ve daha uzun bir yol da yazdığım yol. SKLearn'de gösterilen yol, "kazanan" hiperparametreleri ortaya çıkarmaz, ancak daha uzun yolum bunu yapar. Ancak soru aynı kalıyor. Yuvalanmış çapraz doğrulamayı tamamladıktan sonra, hiperparametreler açık olsa bile, şimdi ne yapacağım? Dizüstü bilgisayarın sonundaki hiperparametrelerden de görebileceğiniz gibi, biraz değişiyorlar.


1
Dizüstü bilgisayar için +1. Bu soru da beni ilgilendiriyor ve takip edecek.
Arnold Klein

Yanıtlar:


6

(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

  1. 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.

  2. 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_tuneddaha 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:

irisVeri setindeki örnek sonuçlara gelince . iris150 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, clfson 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 linearve rbfbirlikte C = 1rank 1 bağlanmıştır)


4
Teşekkürler @cbeleites! Cevaplarınızı diğer konu başlıklarında da okudum ve soruma cevap vereceğinizi umuyordum. Cevabınız çok derin ama sorumun odaklandığı nokta, iç içe geçmiş bir CV'nin sonuçlarının nasıl analiz edileceğidir; Ben hala "iç içe CV yaptıktan sonra ne yapmalı" konusunda biraz net değilim. Oluşturduğum not defterine bir göz atabilir misiniz (yazımın sonuna yakın) ve layman'ın terimiyle iç içe bir CV'de iki farklı hiperparametre seti optimal olarak tanımlandığından ne yapacağınızı açıklayabilir misiniz? Çok kısa bir defter, söz veriyorum!
Ağır Nefes

@HeavyBreathing Cevabı okudum ve 'iç içe CV yaptıktan sonra ne yapacağım' konusunda hala net değilim. Bunu açıkça anladın mı?
stackunderflow

0

Sorunuzu ve cevabını 2 kez okudum (1. kez 3 ay önce). İlgileniyorum ve ayrıca verilerim için çapraz doğrulama yapmak için mutlak uygun yolu bulmak istiyorum. Düşünme ve okuma çok sonra, ben delik bulmak ve işte benim düzeltmek gibi görünüyor:

Karışıklığımı açıklamak için, adım adım iç içe çapraz doğrulama yöntemiyle model seçiminden geçmeye çalışayım.

  1. K-Fold ile bir dış CV döngüsü oluşturun. Bu, her bir iç CV döngüsünü "kazanan" hiper parametrelerin performansını tahmin etmek için kullanılacaktır.
  2. Her iç döngüde GSCV'nin parametre alanının tüm olası kombinasyonlarından geçtiği ve en iyi parametre kümesiyle geldiği bir iç CV döngüsü oluşturmak için GridSearchCV'yi kullanın. (Not: Burada ben varsayalım: iç döngü verileri = dış döngü için veri eğitim Sorabilirsiniz. Neden Cevap:? Https://stackoverflow.com/questions/42228735/scikit-learn-gridsearchcv-with-multiple-repetitions/ 42230764 # 42230764 Vivek Kumar 4. adımın yanıt bölümünü okuyun)
  3. GSCV, iç döngüde "en iyi parametreleri" bulduktan sonra (buna iç kazanan diyelim), performans tahmini almak için dış döngüdeki test seti ile test edilir (diyelim dış_klasik_score1).
  4. Dış döngü daha sonra test seti olarak bir sonraki kıvrım ve eğitim seti olarak geri kalanı güncellenir (dış döngüdeki "iç kazanan" değerini değerlendirmek için), "iç kazanan" yeni test seti (dış_klasik_score2) ile tekrar test edilir. Ardından, döngü tamamlanıncaya kadar dış döngü bir sonraki katına güncellenir. Her kıvrımdan alınan puanlar (external_fold_score 1,2 ..), dış döngü için "iç kazanan" puanını almak için ortalama olacaktır (external_score)
  5. Dış döngü daha sonra test seti olarak sonraki kata ve eğitim seti olarak geri kalanı güncellenir (bir sonraki "iç kazanan" ı bulmak için ve 1-4 tekrar eder (1'i tekrarladığımızda yeni K- katlanır, ancak her seferinde aynı dış Kfold'u kullanırız . 1-4 döngüsünün her birinde, bir dış_score ile "en iyi parametreler" (veya "iç kazanan") elde edilir. kazananlar

Akıl Yürütme:

  • Temelde sorunuz dış döngü için birçok "kazanan parametre" olmasıyla ilgilidir. Şey u değerlendirmek ve "dış kazanan" bulmak için dış döngü tamamlamadı. 4. adımınız "dış kazanan" ı dış döngüde yalnızca 1 kat olarak değerlendirir, ancak u "döngü" etmedi. Bu yüzden benim 4. adım ile değiştirmek gerekir - dış döngü değerlendirme adım "döngü" ve dış puan almak (ortalama)
  • 5. adımınız dış döngüde "döngü" işini yaptı, ancak bu sadece başka bir "iç kazanan" oluşturmak içindir. Bu "iç kazanan" ın "değerlendirmesini" dış döngüde birleştirmedi

Bu gerçekten soruyu cevaplıyor mu?
Michael R.Chernick

0

Sen do hiper parametrelerini seçmek için iç içe çapraz doğrulama kullanmayın algoritmanın, bu yöntem bir genelleme hatasını tahmin etmek için kullanılan model oluşturma prosedürü . Model oluşturma prosedürü ile sahada kullanacağınız son modele ulaşmak için uyguladığınız tüm adımları planlıyorum.
Bir model oluşturma prosedürü, verilere hangi ön işlemenin uygulanacağına, hangi özelliğin kullanılacağına ve son olarak hangi hiper parametrelerin kullanılacağına karar vermek için uyguladığınız kurallar tarafından oluşturulabilir . Bunu, belirli bir veri kümesi girdisi olarak alan bir tür "meta-algoritma" olarak düşününD ve çıktı olarak sabit bir parçadan oluşan bir "algoritma" üreten önişlem dönüşümleri, özellikler ve son olarak hiper parametre değerleri kümesi.

X,y
xXy

X',y'X,y

, ilk büyük sorun kullandığınız 1. adımdatüm verileri kullanmak için özellikleri seçin. Bu nedenle, 2. adımda çapraz doğrulamayı yaptığınızda bile, özellikler her çapraz doğrulama çalışmasında test katında bulunan bazı bilgileri zaten görecek ve hatırlayacaktır. Sonuç , test hatasının aşırı iyimser bir tahmini olacaktır ve buna özellik seçim eğilimi denir . Bunu tahmininizde hesaba katmak için, özellik seçimi adımını 2. adımın çapraz doğrulama döngüsüne koymanız gerekir.
Tamam, şimdi iyi miyiz? Döngü içindeki özellik seçim adımıyla yapılan çapraz doğrulamada bulunan en iyi hata genelleme hatasının adil bir tahmini midir?
Teoride cevap hala hayır, sorun, hiper parametrelerinizin belirli veri kümesindeki çapraz doğrulama hatasını en aza indirecek şekilde seçilmesidir emrinizdeki , bu nedenle belirli bir anlamda hiper parametreleri verilerinize aşırı sığdırma riski ile sığdırırsınız ve buna denir. model seçim yanlılığı . Fakat bu pratikte bir sorun mu? Özel uygulamaya bağlıdır: veri seti küçük olduğunda ve ayarlanacak hiper parametre sayısı nispeten büyük olduğunda, eğitimde aşırı sığması daha şiddetli hale gelebilir . Genelleme hatasını tahmin ederken bunu hesaba katmak için, açıkladığınız gibi iç içe bir çapraz doğrulama uygularsınız, bu da size genelleme hatasının doğru bir tahminini verir.
Son olarak, son sorunuzu cevaplamak için, iç içe çapraz doğrulamayla “model oluşturma prosedürü” genelleme hatanız hakkında adil bir tahmin yaptıktan sonra, sabit setli bir model elde etmek için prosedürü (adım 1 + 2) tüm veri setinize uygulamanız yeterlidir. özellik ve set hiper parametre değerleri, ancak bu modelin görünmeyen veriler üzerinde olmasını beklediğimiz hatanıniç içe çapraz doğrulama tahminidir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.