Çapraz doğrulama sonrasında 'test' veri setini nasıl kullanırsınız?


25

Bazı konferanslar ve öğreticiler eğitim, doğrulama ve test: Gördüğüm, bunlar üç bölüme verilerinizi bölmek düşündürmektedir. Ancak test veri setinin nasıl kullanılması gerektiği ve bu yaklaşımın tüm veri setindeki çapraz doğrulamadan nasıl daha iyi olduğu açık değildir.

Diyelim ki verilerimizin% 20'sini bir test seti olarak kaydettik. Sonra gerisini alırız, onu katlara ayırırız ve çapraz doğrulama kullanarak bu veri setinden bilinmeyen veriler üzerinde en iyi tahmini yapan modeli buluruz. Diyelim ki bulduğumuz en iyi model bize % 75 doğruluk veriyor .

Çeşitli soru-cevap web sitelerinde çeşitli eğitimler ve çok sayıda soru, artık modelimizi kaydedilmiş (test) bir veri setinde doğrulayabileceğimizi söylüyor. Ama yine de tam olarak nasıl yapıldığını ve ne anlama geldiğini anlamadım.

Diyelim ki test veri setinde % 70 doğruluk var . Peki sonra ne yapacağız? Test veri setimizde yüksek bir puan elde edinceye kadar başka bir model ve daha sonra başka bir model deneyecek miyiz? Ancak bu durumda gerçekten sınırlı (sadece% 20) test setimize uyan modeli bulacağız gibi görünüyor . Bu, genel olarak en iyi modeli bulacağımız anlamına gelmez.

Dahası, bu puanı, yalnızca sınırlı bir veri setinde hesaplanmışsa, modelin genel bir değerlendirmesi olarak nasıl değerlendirebiliriz? Eğer bu puan düşükse, belki şanssız ve "kötü" test verilerini seçtik.

Öte yandan, elimizdeki tüm verileri kullanırsak ve sonra k-kat çapraz doğrulama kullanarak modeli seçersek, sahip olduğumuz tüm veri kümesinden bilinmeyen veriler üzerinde en iyi tahmini yapan modeli bulacağız .


1
Test setindeki en iyi modelinizi değerlendiriyorsunuz ve performansı rapor ediyorsunuz. Modelinizin performansını en iyi tahmin edebilirsiniz. Yaser Abu-Mostafa'ın "Veriden Öğrenme" adlı mükemmel kitabının ilk iki bölümünü okumanızı öneriyorum. Çok özlü ve çok erişilebilir. work.caltech.edu/telecourse.html
Vladislavs Dovgalecs

1
Önerdiğin kitap için teşekkürler! Ama soruya cevap ilişkin - Eğer "modelinizin performansın en iyi tahmin" demek, ama aslında bir tahmindir küçük (% 20) deney setinde bir modelin performansı , değil mi genel olarak model anlamına gelir.
Serhiy

2
Aslında modelin genel performansı hakkında en iyi tahmininiz. Modeliniz önyargılı olabilir ve / veya yüksek değişkenlikten muzdarip olabilir, ancak modelin test setinizdeki performansı görünmeyen herhangi bir veri üzerinde nasıl performans göstereceğine dair en iyi göstergedir.
Vladislavs Dovgalecs

Teşekkürler xeon! Bana hala açık olmayan tek şey, test verilerini kullanarak modeli değerlendirdikten sonra ne yapacağız ?
Serhiy

Sonuçlardan memnunsanız modeli gönderirsiniz veya modeli geliştirmek için daha iyi özellikler / algoritma / daha fazla veri bulursunuz.
Vladislavs Dovgalecs

Yanıtlar:


20

Bu, çapraz doğrulama ve test setleri ile ilgili yanıtladığım bir başka soruya benzer . Burada anlamak için anahtar kavram bağımsız veri kümeleridir . Sadece iki senaryo düşünün:

  1. Çok kaynağınız varsa, ideal olarak bir veri seti toplar ve modelinizi çapraz doğrulama yoluyla eğitirsiniz. Sonra başka bir tamamen bağımsız veri kümesi toplar ve modelinizi test ederdiniz . Ancak, daha önce de söylediğim gibi, bu çoğu araştırmacı için genellikle mümkün değildir.

Şimdi, bu kadar şanslı olmayan bir araştırmacıysam ne yapmalıyım? Kesin senaryoyu taklit etmeye çalışabilirsiniz:

  1. Herhangi bir model eğitimini yapmadan önce verilerinizin bir bölümünü alır ve yanda bırakırsınız ( çapraz doğrulama sırasında asla dokunulmayacak ). Bu, yukarıdaki ideal senaryoda belirtilen aynı bağımsız veri kümesini simüle etmektir. Aynı veri setinden gelmesine rağmen, model eğitimi bu örneklerden herhangi bir bilgi almayacaktır (çapraz doğrulama ile tüm verilerin kullanıldığı yerlerde). Modelinizi eğitdikten sonra, daha sonra eğitim sırasında hiç görülmemiş olan test setinize uygular ve sonuçlarınızı alırsınız. Bu yapmak için yapılır emin modeli daha genelleştirilebilir ve sadece öğrenmedi senin verileri.

Diğer endişelerinizi gidermek için:

Diyelim ki test veri setinde% 70 oranında bir doğruluk var, peki şimdi ne yapacağız? Test veri setimizde yükseklik puanı elde edinceye kadar, başka bir model ve sonra diğerini dener miyiz?

Buna göre, fikir şu ki, verilerinizden elde edebileceğiniz en iyi modeli yaratıyor ve ardından daha önce hiç görmediği bazı veriler üzerinde değerlendiriyorsunuz. Çapraz doğrulama düzeninizi yeniden değerlendirebilirsiniz, ancak ayarlanmış bir modele sahip olduğunuzda (yani hiper parametreler), bu modelle ilerlemeye devam edersiniz, çünkü yapabileceğiniz en iyi şeydi. Anahtar, TUNING İÇİN TEST VERİLERİNİZİ KULLANMAYINIZ . Test verilerinden elde ettiğiniz sonuç, modelinizin 'genel' veriler üzerindeki performansıdır. Bu işlemin tekrarlanması, veri kümelerinin bağımsızlığını ortadan kaldıracaktır (bütün mesele buydu). Bu, test / doğrulama verileriyle ilgili başka bir soruya da değinmektedir .

Ayrıca, sınırlı bir veri setinde hesaplanmışsa, bu puanı modelin genel değerlendirmesi olarak nasıl değerlendirebiliriz? Eğer bu puan düşükse, belki de "kötü" test verilerini seçme şansımız yoktu.

Verilerinizi doğru böldüyseniz, bu olası değildir. Verilerinizi rastgele bölmelisiniz (potansiyel olarak sınıf dengeleme için sınıflandırılmış olsa da). Veri kümesi, verilerinizi üç bölüme ayıracak kadar büyükse, test alt kümenizin, yalnızca kötü verileri seçme şansınızın çok düşük olacağı kadar büyük olması gerekir. Modelinizin çok daha fazla olması muhtemeldir.


3
Böyle ayrıntılı bir açıklama için teşekkür ederiz! Bana hala açık olmayan tek şey, test verilerini kullanarak modeli değerlendirdikten sonra ne yapacağız ? Ya sonuç gerçekten düşükse? Başka bir model deneyelim mi?
Serhiy

Yukarıda belirttiğim gibi, çapraz onaylama işleminizi yeniden değerlendirebilir ve model eğitimi için 'test' verilerinizi kullanmadığınız sürece yönteminizin geliştirilip geliştirilemeyeceğini görebilirsiniz. Eğer sonucunuz düşükse, muhtemelen modelinize uydurmalısınız. Veri kümeniz yalnızca çok fazla tahmin edici güce sahip olabilir.
cdeterman

Çapraz doğrulama basitçe tekrar tekrar eğitim ve test setine bölünmüyor (örneğin test seti ilk% 20, ardından ikinci% 20 ve ardından üçüncü ve daha fazlası, veya tümü rastgele olarak test n zamanı için% 20 toplama ve ortalama doğruluğu hesaplama) ve test setiyle yapmayı tanımladığınız aynı şeyi yapıyor musunuz? Teste kadar algoritmaya hiç gösterilmiyor mu?
Zelphir Kaltstahl

2
Zelphir no, her kat, her bir hiperparametre kombinasyonu ile birçok kez değerlendirilir. Basitçe en iyi sonucu seçmek, 'bağımsız' bir test setinden daha yüksek sonuçlar bildirme olasılığı yüksektir. Buradaki fikir, hangi parametrelerin bu katlar arasında genelleştiğini görmek ve bu mimariyi, modelin ne kadar “genelleştirilebilir” olduğunu belirlemek için hiç görülmemiş bir test setinde kullanmaktır.
cdeterman 21:16

1
Aslında, bağımsız test setinizde performansa bakmanın ve geri dönüp modelinizi yeniden denemeye karar vermenin , test setinizi artık tamamen bağımsız hale getirmediğini eklemek istiyorum . Aslında, kusursuz bir doğruluk elde edene kadar bunu sonsuz kez yapabilirsiniz. Akademik referanslarla ilgili olarak, " Veriden Öğrenme" kitabını öneririm, ayrıca yazarın ücretsiz çevrimiçi kursu vardır ( work.caltech.edu/telecourse.html ).
Michael,

4

Tek yapmanız gereken çiğ veya minimal olarak işlenmiş veri setinde (örneğin tek bir sıcak kodlama ve / veya NA'ları kaldırma) varsayılan ayarlara sahip bir model yetiştirmekse, ayrı bir test setine ihtiyacınız yoktur, Doğrulama setinizde antrenman setini ve testini yapın veya performansınızı tahmin etmek için çapraz doğrulama kullanarak sette antrenman yapın.

Ancak, veriler hakkındaki bilgileriniz orijinal stratejinizden herhangi bir değişiklik yapmanıza neden olur olmaz, artık sonucunuzu "işaretlediniz". Bazı örnekler:

  • Model seçimi: Lojistik, kement, rastgele orman, XGByost ve destek vektör makinelerini test ettiniz ve en iyi modeli seçtiniz

  • Parametre ayarlama: En uygun hipermetreleri bulmak için bir XGBoost ayarladınız

  • Özellik seçimi: Modelinize dahil edilecek en uygun özellikler alt grubunu seçmek için geriye doğru seçim, genetik algoritma, boruta vb. Kullandınız.

  • Kayıp takdiri: Kayıp değişkenleri ortalamayla veya diğer değişkenlere dayalı basit bir modelle zorladınız

  • Özellik dönüşümü: Sayısal değişkenlerinizi bir z-skoru ile değiştirmek için ortaladınız ve ölçeklediniz (ortalamadan standart sapma sayısı)

Yukarıdaki durumların hepsinde, tek bir görüşme seti veya hatta çapraz doğrulama kullanmak, kararınızda gelecekteki verilerle ilgili elde edemeyeceğiniz bilgileri kullandığınız için size gerçek dünya performansının gerçekçi bir tahminini vermeyecektir. Bunun yerine, verileriniz için en iyi modeli, en iyi hiperparametreleri, en iyi özellik setini vb. Seçiyorsunuz ve muhtemelen verilerinize stratejinizi biraz "fazlasıyla uyduruyor" olacaksınız. Gerçek dünya performansı hakkında dürüst bir tahminde bulunmak için, onu karar sürecine hiç girmemiş verilerden puanlamanız gerekir; bu nedenle, eğitimden (modelleme) ve onaylamadan ayrı bir bağımsız test seti kullanmanın genel uygulaması ( model toplama, özellikler, hiperparametreler vb.)

Bir test seti düzenlemeye alternatif olarak, bunun yerine iç içe çapraz doğrulama adı verilen bir tekniği kullanabilirsiniz. Bu, tüm modelleme stratejinizi (dönüşüm, empoze etme, özellik seçimi, model seçimi, hiperparametre ayarı) parametrik olmayan bir işlev olarak kodlamanızı ve ardından tüm işlev üzerinde sadece bir model sığdırma işlevimiş gibi çapraz doğrulama gerçekleştirmenizi gerektirir. Çoğu ML paketinde bunu yapmak zordur, ancak eğitim stratejinizi tanımlamak için sarıcılar kullanarak ve sonra sarılmış öğrenicinizi yeniden örnekleyerek, mlr paketi ile R içinde kolayca uygulanabilir:

https://mlr.mlr-org.com/articles/tutorial/nested_resampling.html


1

Sınıflandırma yaptığını farz ediyorum.

Verilerinizi alın ve 70 / 30'u trainingData / testData altkümelerine bölün. TrainingData alt kümesini alın ve 70 / 30'u yine trainingData / validateData altkümelerine ayırın. Artık orijinal verilerinizin 3 alt grubuna sahipsiniz - trainingData (.7 * .7), validateData (.7 * .3) ve testData (.3).

Modelinizi trainingData ile eğitiyorsunuz. Daha sonra, modelin trainingData'dan bağımsız olduğunu düşündüğümüz validateData kullanarak ve bu nedenle modelin ne kadar iyi genelleştirildiğinin iyi bir değerlendirmesini kullanarak kontrol edersiniz. % 75 doğruluk elde ettiğinizi farz edelim.

Şimdi modelinizi isteğe bağlı olarak defalarca yeniden eğitiyorsunuz. Her yeniden eğitim, farklı bir hiperparametreler setini değerlendiriyorsunuz (modelinize öncelikli olarak sizin modelinize göre optimize edilen parametreler verilir) ancak yine de trainingData alt kümesini kullanıyorsunuz. Her yeniden eğitim, yine de yeni modelin validateData üzerindeki performansı kontrol ederek ne kadar genel olduğunu kontrol ediyorsunuz.

Değerlendirmek istediğiniz her hiperparametre kombinasyonunu kontrol ettikten sonra, validateData üzerinde size en iyi performansı veren hiperparametreler grubunu seçersiniz - validateData üzerindeki en iyi performansınızı% 80 doğruluk olarak kabul edelim. Bunlar sizin son hiperparametreleriniz ve bu hiperparametreler tarafından tanımlanan model bu sonraki adım için kullanacağınız model.

Artık son hiperparametrelerinizi kullanan modeli alıyorsunuz ve testData'yı değerlendiriyorsunuz. Bu, tüm bu işlem başladığından beri testData'ya ilk kez dokunuldu! ValidateData üzerindeki performansınızla karşılaştırılabilir testData performansı elde ederseniz (genellikle biraz daha düşük olsa da), modelinizin beklendiği gibi çalıştığından ve genellemenin iyi işlediğinden emin olabilirsiniz! Bu olursa, bu senin son modelin!

Bunları neden yapıyorsun? Fazla giymekten kaçınmaya çalışıyorsun. Modelinizi eğitirken ve ayarlarken (aka onaylama) kullandığınız verilere çok fazla uymama riski her zaman vardır. Eğer sadece bir veri seti kullanarak eğitir, ayarlar (onaylar) ve test ederseniz, bu verilerin üzerine geçme şansınız çok yüksektir ve genel olarak iyi sonuç vermez. Eğitim ve test verilerini parçalara ayırarak (ve test verilerini kullanarak ayarladığınızı varsayarak), kendinizi dahili olarak kontrol etme şansına sahipsiniz, ancak hala test verilerini şimdiden kullanma şansınız var. Bu yüzden üçüncü bir veri setini dağıtıyoruz, doğrulayın, bu yüzden kendimizi dürüst tutmamız için ek bir katmana sahibiz. ValidateData ile ayarlama, bizi trainingData'ya aşırı uyarmamızı engeller. TestData ile yapılan son testler, bizi validateData'ya aşırı uyarmamızı engeller.


Bu cevap kabul edilen cevaptan ne kadar farklı ?
Jan Kukacka

Asıl soru açıkça, çapraz doğrulama içermeyen bir iş akışı hakkında soruyor. Nasıl çalıştığını ve neden güvenilir olduğunu sormak için sorusunu okudum. Kabul edilen cevap, yine de çapraz doğrulama içeren bir iş akışını tartışıyor. Birinin başlangıç ​​seviyesindeyse ve belki de henüz o noktada olmadıklarında, insanların mutlaka çapraz doğrulama kullanmadan bunu nasıl yaptıklarını açıklamak istedim. Maalesef bu gönderi yanlışsa - yeni bir kullanıcıyım ve bir kuralı çiğnemek istemiyorum.
John D

0

Bize şu şekilde bakalım

  1. Yaygın uygulama

    a) Eğitim verileri - model parametrelerini seçmek için kullanılır.

     i) E.g., finding intercept and slope parameters for an ordinary linear 
        regression model. 
    
     ii) The noise in the training data-set is used in some extent 
         in over-fitting model parameters. 
    

    b) Doğrulama verileri - hiper parametrelerini seçmek için kullanılır.

     i)  E.g., we may want to test three different models at step 1.a, say 
         linear model with one, two or three variables.   
    
     ii) The validation data-set is independent from training data, and thus, they provide 
         'unbiased' evaluation to the models, which help to decide which 
         hyper-parameter to use. 
    
     iii) We note that, a model trained in 1.a, say y = b_0+b_1*x_1, does 
         not learn anything from this data-set. So, the noise in this data- 
         set is not used to over-fit the parameters (b_0, b_1), but, over- 
         fit exists in choosing which linear model to use (in terms of 
         number of variables). 
    

    c) Test verileri - yukarıdaki iki adımda çıktının güvenliğinin sağlanması için kullanılır

    i) Used once a model is completely trained
    
  2. Bölüm 1'e bakmanın başka bir yolu

    a) Model aday havuzumuz 5 boyutlu bir settir, yani

    i) Dimension 1: number of variables to keep in the regression model, 
       e.g., [1, 2, 3].
    
    ii) Dimension 2-5: (b_0, b_1, b_2, b_3). 
    

    b) Aşama 1a, model adaylarını 5 boyuttan 1 boyuta düşürür.

    c) Adım 1b, model adaylarını tek boyutlu bir model olan 1 boyutludan 0 boyutluya düşürür.

    d) Bununla birlikte, OP yukarıdaki 'nihai' çıktının test verisi setinde yeterince iyi performans göstermediğini düşünebilir ve bu nedenle sıradan lineer regresyon yerine ridge regresyonu kullanarak tüm işlemi tekrar tekrar yapabilir. Daha sonra test verileri seti birçok kez kullanılır ve bu nedenle bu verilerdeki gürültü, doğrusal regresyon veya sırt regresyonunun kullanılıp kullanılmayacağına karar vermede biraz fazlalık yaratabilir.

    e) Parametreler, hiperparametreler, model tipleri ve ön işleme metotları olan yüksek boyutlu bir model havuzu ile ilgili olarak, elimizdeki verilere herhangi bir şekilde ayrılması, esasen karar verme sürecini tanımlamaktadır.

    i)  Sequentially reducing the model pool to zero-dimension.
    
    ii) Allocating data noise overfitting to different steps of dimension 
        reductions (overfitting the noise in the data is not avoidable but 
        could be allocated smartly). 
    
  3. Sonuç ve OP sorusuna cevaplar

    a) İki bölüm (eğitim ve test), üç bölüm (eğitim, doğrulama ve test) veya daha yüksek bölüm sayısı temel olarak boyutsallığın azaltılması ve verilerin tahsis edilmesi (özellikle gürültü ve aşırı uyum riski) ile ilgilidir.

    b) Bir aşamada, bir 'nihai' model aday havuzu bulabilir ve daha sonra, sıralı olarak boyut küçültme sürecini nasıl tasarlayacağınızı düşünebilirsiniz.

    i) At each step of reducing the dimensions, the output is satisfactory, 
      e.g., not using just 10 data points with large noise to estimate a 
      six-parameter liner model. 
    
    ii) There are enough data for you to reduce the dimension to zero 
       finally. 
    

    c) Ya başaramazsanız b

    i) Use model and data insight to reduce the overall dimensionality of 
      your model pool. E.g., liner regression is sensitive to outliers thus 
      not good for data with many large outliers. 
    
    ii) Choose robust non-parametric models or models with less number of 
       parameter if possible. 
    
    iii) Smartly allocating the data available at each step of reducing the 
        dimensionality. There is some goodness of fit tests to help us decide 
        whether the data we use to train the model is enough or not. 
    
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.