Model seçimi için iç içe çapraz doğrulama


91

Model seçimi için iç içe çapraz doğrulama nasıl kullanılır ?

Çevrimiçi okuduklarımdan, iç içe geçmiş CV şu şekilde çalışır:

  • Şebeke araştırması yapabildiğimiz iç CV döngüsü vardır (örneğin, mevcut her model için K-katını çalıştırma, örneğin hiperparametrelerin / özelliklerin kombinasyonu)
  • İç katmanda kazanılan modelin performansını ayrı bir dış kat üzerinde ölçtüğümüz dış CV döngüsü var.

Bu işlemin sonunda modelleri ile son buluruz ( K , dış halkadaki kat sayısıdır). Bu modeller iç CV içerisinde şebeke araştırmasında kazanılan modellerdir ve büyük olasılıkla farklıdırlar (örneğin, ızgara aramasına bağlı olarak muhtemelen farklı özelliklerle eğitilmiş, farklı çekirdekli SVM'ler).KK

Bu çıktıdan bir modeli nasıl seçerim? Bana göre, bu kazanan modellerden en iyi modelin seçilmesi, her modelin veri setinin farklı bölümlerinde eğitildiği ve test edildiği için adil bir karşılaştırma olmayacaktı.K

Öyleyse model seçimi için iç içe CV'yi nasıl kullanabilirim?

Ayrıca iç içe model seçiminin öğrenme prosedürünü analiz etmek için ne kadar yararlı olduğunu tartışan konuları okudum. Dış K kıvrımlarından aldığım puanlarla ne tür analiz / kontroller yapabilirim?

Yanıtlar:


76

Bu [dış çapraz doğrulama] çıktısından bir modeli nasıl seçerim?

Kısa cevap: Yapmazsın.

Tedavi , iç model oturtma prosedürünün bir parçası olarak çapraz doğrulama. Bu, hiper parametrelerin uydurulmasını içeren armatürün (bu, iç çapraz geçerliliğin gizlendiği yer), başka herhangi bir model emisyon rutini gibi olduğu anlamına gelir.
Dış çapraz doğrulama, bu model uydurma yaklaşımının performansını tahmin eder. Bunun için normal varsayımları kullanırsınız

  • k dış vekil modelleri tarafından inşa "gerçek" modeline eşdeğerdir model.fitting.proceduretüm verilerle.
  • k

k

Öyleyse model seçimi için iç içe CV'yi nasıl kullanabilirim?

İç CV bir seçim yapar.

Bana göre, bu K kazanan modellerden en iyi modelin seçilmesi, her modelin veri setinin farklı bölümlerinde eğitildiği ve test edildiği için adil bir karşılaştırma olmayacaktı.

k

  • Aynı test verilerine sahip olmamak: Daha sonra test sonuçlarının hiç görülmemiş verileri genelleştirdiğini iddia etmek istediğinizde, bu bir fark yaratamaz.
  • Aynı eğitim verilerine sahip olmamak:
    • eğer modeller stabil ise, bu bir fark yaratmaz: Burada kararlıdır, eğer eğitim verileri birkaç durumda diğer vakalarla değiştirilerek "tedirgin edilirse" modelin değişmeyeceği (çok) anlamına gelir.
    • modeller kararlı değilse üç husus önemlidir:
      1. k
      2. k
      3. Eğer dengesizlik gerçek bir problemse, "gerçek" modelin performansına iyi bir tahminde bulunamazsınız.

Bu beni son sorunuza getiriyor:

Dış K kıvrımlarından aldığım puanlarla ne tür analiz / kontroller yapabilirim?

  • Tahminlerin istikrarını kontrol edin (yinelenen / tekrarlanan çapraz doğrulama kullanın)
  • Optimize edilmiş hiper parametrelerin stabilitesini / varyasyonunu kontrol ediniz.
    Birincisi, çılgınca saçılma hiper parametreleri iç optimizasyonun işe yaramadığını gösterebilir. Başka bir şey için, bu, gelecekte benzer durumlarda pahalı optimizasyon adımı olmadan hiperparametrelere karar vermenize izin verebilir. Maliyetli olarak, hesaplama kaynaklarına değil, "normal" model parametrelerinin tahmin edilmesinde daha iyi kullanılabilecek olan bu "maliyet" bilgisine atıfta bulunuyorum.

  • Seçilen modelin iç ve dış tahmini arasındaki farkı kontrol edin. Eğer büyük bir fark varsa (iç çok aşırı hareketsizdir), iç optimizasyonun fazla uydurma nedeniyle iyi çalışmaması riski vardır.


update @ user99889'ın sorusu: Dış CV kararsızlık bulursa ne yapmalı?

Her şeyden önce, dış CV döngüsünde modellerin bu konuda istikrarlı tahminler üretmediğini tespit etmek, önceden değerlendirme hatasının uygulama için çok yüksek olduğunu tespit etmekten gerçekten farklı değildir. Sahip olduğumuz modelin amacına uygun olmadığını belirten olası model doğrulama (veya doğrulama) sonuçlarından biridir.

@Davips yanıtlayan yorumunda, CV'deki dengesizliği ele almayı düşünüyordum - yani model optimizasyon sürecinin bir parçası olarak.

Ancak kesinlikle haklısınız: Modelimizi dış CV'nin bulgularına dayanarak değiştirirsek, yine de değiştirilen modelin bağımsız bir şekilde test edilmesi gerekir.
Bununla birlikte, dış CV'deki kararsızlık aynı zamanda optimizasyonun iyi kurulmadığının da bir işareti olacaktır - bu nedenle dış CV'de kararsızlığı bulmak, iç CV'nin kararsızlığı gerekli şekilde cezalandırmadığı anlamına gelir - bu benim ana amacım olacaktır. böyle bir durumda eleştiri. Başka bir deyişle, optimizasyon neden modellerin aşırı derecede üst üste gelmesine izin veriyor / sağlıyor?

Ancak, IMHO bu bir özelliği burada var olabilir sonra "nihai" modelinin başka bir değişiklik mazur kesin koşulların dikkatle değerlendirilmesi : Biz modele, önerilen herhangi bir değişiklik (daha az df / daha kısıtlayıcı veya birikme) overfitting algılamak yaptığı gibi olur daha az fazladan takma yönünde (veya en azından fazladan takılmaya yatkın olan hiperparametreler) yönünde olmalıdır. Bağımsız testlerin amacı aşırı uyumu saptamaktır - yetersiz kalma, eğitim sürecinde zaten kullanılan verilerle tespit edilebilir.

Yani, eğer bir PLS modelinde karşılaştırılabilir derecede iyi huylu olacak olan gizli değişkenlerin sayısının daha da azaltılması hakkında konuşuyorsak (önerilen değişiklik tamamen farklı bir modelse, SVM yerine PLS diyoruz, tüm bahisler kapalı sayılır) ) ve yine de modellemenin orta aşamasında olduğumuzu bilsem daha rahat edeceğim - sonuçta, eğer optimize edilmiş modeller hala dengesizse, daha fazla vakanın gerekli olduğu sorusu yoktur. Ayrıca, birçok durumda, performansın çeşitli yönlerini (örneğin gelecekte elde edilen verilere genelleme) uygun şekilde test etmek için tasarlanmış çalışmalar yapmanız gerekecektir. Yine de, tam modelleme sürecinin rapor edilmesi gerektiği ve bu geç değişikliklerin sonuçlarının dikkatlice tartışılması gerektiği konusunda ısrar ediyorum.

Ayrıca, performansın poşet dışı analog CV tahmini de dahil olmak üzere toplama , halihazırda mevcut olan sonuçlardan mümkün olacaktır - ki bu, burada iyi niyetli olarak düşünmek istediğim modelin diğer "işleme sonrası" tipidir. Yine de, çalışmanın, toplanmanın bireysel preklanslara göre hiçbir avantaj sağlamayacağından emin olmak için tasarlanması daha iyi olurdu (bireysel modellerin istikrarlı olduğunu söylemenin başka bir yoludur).


Güncelleme (2019): Bu durumlar hakkında ne kadar çok düşünürsem, o kadar çok “iç içe geçmeden görünüşte iç içe çapraz doğrulama” yaklaşımını tercih etmeye geldim .


Wrt model seçimi, eğer sınıflayıcı kararsız ise, en iyi olanların ortanca performansına sahip olanı mı seçmeliyiz? Bu seçim, iç performansı dış performansla karşılaştırmak için önerinize benzer olacaktır.
viyps

2
@davips: Modeller dengesizse, optimizasyon çalışmaz (dengesizlik ek değişikliklere neden olur). Bir modelin ortanca (veya ortalama) performansla seçilmesi buna yardımcı olmaz. Bunun yerine, modeller dengesizse, ya daha kısıtlayıcı modellere gitmeyi (örneğin, daha güçlü düzenlileştirme) ya da (bir model seçmekten tamamen farklı olan) bir model topluluğu oluşturmayı öneririm.
cbeleites,

1
@ user99889: Lütfen güncellenmiş cevaba bakınız.
cbeleites

1
@ user99889: evet - ama orada mucizeler beklemeyin. Eğer vakaların% 80'i (k = 5) ile antrenman yaparken stabilite bir sorunsa, muhtemelen% 80 / k = 5 vekil modellere kıyasla hala k = 10 yani% 90'ın% 90'ı = ek% 12.5 ile ilgili bir sorun olacaktır.
cbeleites,

1
@cbeleites: ilgili bir varsayım. Diyelim ki c: [1,2,3] parametre alanını aramaya karar verdim. Tüm veri kümemde iç içe CV yapıyorum ve performansı çok iyi bulmuyorum. Bu nedenle arama alanımı c: [0.5,1,1.5,2,2,5,3,3,5,4] olarak genişletiyorum. Çok kötü bir şey mi yaptım? Test verilerinden edindiğim bilgilere dayanarak parametre alanımı (modelleme sürecinin bir parçası olan) temelde değiştirmiş gibi görünüyorum ve bu nedenle mevcut veri setimin dışındaki veri kümesinde değerlendirme yapmam gerekiyor mu? En iyisi olduğunu düşünüyorsanız, bunu ayrı bir soru yapmaktan mutluluk duyarız.
kullanıcı0

27

Cebeleitesin mükemmel cevabına (+1) ek olarak, temel fikir, modelin kendisinden değil bir modele uydurma yönteminin performansını değerlendirmek için çapraz onaylamanın kullanılmasıdır . Model seçimi yapmanız gerekiyorsa, bunu model geçme prosedürünün ayrılmaz bir parçası olduğu için çapraz doğrulama prosedürünün her katında bağımsız olarak yapmanız gerekir. Çapraz doğrulama temelli bir model seçim prosedürü kullanıyorsanız, bu, iç içe geçmiş çapraz doğrulama ile biteceğiniz anlamına gelir. Her bir çapraz onaylamanın amacını göz önünde bulundurmak faydalı olacaktır - biri model seçimi içindir, diğeri performans tahmini içindir.

Son modelimi, modelden (model seçimi dahil olmak üzere) tüm veri kümesine yerleştirerek, bu modelden makul bir şekilde elde etmeyi beklediğim performans hakkında bir fikir edinmek için iç içe çapraz doğrulama kullandıktan sonra yapacağım.


1
Neden gerekiyor get an idea of the performance?
viyps

1
@davips Genel olarak, bazı pratik amaçlar için istatistiksel bir yöntem kullanılacaksa, kullanıcılar genellikle ne kadar iyi çalıştığı hakkında bir fikir sahibi olmak ister (örneğin tıbbi tarama testi). Ayrıca, bir makine öğrenme algoritması geliştiriyorsanız, rakip yöntemlerle karşılaştırıldığında ne kadar iyi performans gösterdiğine dair tarafsız bir tahminde bulunmanız yararlı olacaktır. Ayrıca, yöntemin gerçekte işe yarayıp yaramadığını doğrulamak için de yararlıdır (çapraz doğrulama hem parametreleri seçmek hem de performansı tahmin etmek için kullanılırsa geçersizdir).
Dikran Marsupial

5
Öyleyse, son modelde hangi parametrenin kullanılacağına karar vermek için iç çevrimi bir kez mi yapacaksınız? Yani eğer iç döngü 10 kat doğrulama olsaydı, her bir model bu veri treninin 1 / 10'unu tutardı ve her 10 model tekrar eder ve sonra en küçük ortalama hatayla parametre değerini seçersiniz? Sonra tüm veri setinde bu parametre değerine sahip modeli tekrar deneyiniz.
emschorsch

2
Evet doğru. r
Dikran Marsupial

1
@FedericoTedeschi Tarafsız bir performans tahmincisi elde etmek için, çapraz onaylamaların yalnızca farklı bir bölme yerine iç içe geçmesi gerekir (kağıdın jmlr.csail.mit.edu/papers/volume11/cawley10a/cawley10a.pdf bölümüne bakın ) . Genellikle LOOCV'yi verimli bir şekilde hesaplanabileceği modeller için model seçimi için kullanırım ve küçük veri kümeleri modelleri için ön yükleme / torbalama kullanırım (dış çapraz doğrulama yerine OOB hatasıyla).
Dikran Marsupial

7

Kimsenin ilk soruyu gerçekten cevapladığını sanmıyorum. "İç içe çapraz doğrulama" ile, bunu GridSearch ile birleştirmeyi kastettiğini düşünüyorum. Genellikle GridSearch yerleşik bir CV'ye sahiptir ve kaç katlama testi yapmak istediğimize dair bir parametre alır. Bu ikisini birleştirerek bunun iyi bir uygulama olduğunu düşünüyorum, ancak GridSearch ve CrossValidation'dan gelen model sizin son modeliniz değil. En iyi parametreleri seçmeli ve sonunda tüm verilerinizle yeni bir model eğitmelisiniz ya da görünmeyen veriler için burada bir CrossValidation yapmalısınız, ve eğer model gerçekten bu kadar iyi ise, tüm verileriniz üzerinde eğitmelisiniz. Bu senin son modelin.


3
netleştirmek için, python scikit-learn, GridSearchCV(refit=True)aslında en iyi parametreleri kullanarak TAM veriye bir model yerleştirir, bu yüzden ekstra adım gerekli değildir. Dokümanlara bakın
Paul

Yenileme seçeneği hakkında haklısın. Sadece bariz tbe belirttik!
Anselal

"GridSearch’teki model sizin nihai modeliniz değil". Ancak benim açımdan, refit = True olan grid arama modelinin nihai model olduğu yönündedir . Sen ve ben aynı sayfada mı demek istiyorsun? Ancak daha sonra CV ile Izgara aramada yuvalamanın nerede olduğunu hala göremiyorum. Bana tek bir CV katmanı gibi geliyor (ör. Grid aramada 5 kat CV tek bir CV katmanıdır).
Paul,

Tamir ile ilgili aynı sayfadayız. Ama iç içe CV ile size eğitimden bazı verileri bırakarak ve genelleştirir olmadığını görmek için son final modeli test, sizin GridSearch dışında başka CV döngü oluşturmak anlamına (bilinmeyen verilere İyi tahminler yapar)
anselal
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.