Hangi çapraz doğrulama yönteminin en iyi olduğunu nasıl bilebilirim?


36

Durumum için hangi çapraz doğrulama yönteminin en iyisi olduğunu bulmaya çalışıyorum.

Aşağıdaki veriler sadece (R cinsinden ) konu üzerinde çalışmak için bir örnektir, fakat benim gerçek Xverilerim ( xmat) birbirleriyle ve ydeğişken ( ymat) değişkeniyle farklı derecelerle ilişkilendirilmektedir . R kodu verdim, ancak sorum R ile ilgili değil, yöntemlerle ilgili. tek bir y değişkeni Xmatiçerirken V1 ila V100 X değişkenlerini ymatiçerir.

set.seed(1233)
xmat           <- matrix(sample(-1:1, 20000, replace = TRUE), ncol = 100)
colnames(xmat) <- paste("V", 1:100, sep ="")
rownames(xmat) <- paste("S", 1:200, sep ="")
  # the real y data are correlated with xmat
ymat           <- matrix(rnorm(200, 70,20), ncol = 1)
rownames(ymat) <- paste("S", 1:200, sep="")

İçindeki ytüm değişkenlere göre tahmin yapmak için bir model oluşturmak istiyorum xmat. Dolayısıyla doğrusal bir regresyon modeli olacaktır y ~ V1 + V2 + V3+ ... + V100. Bir incelemeden aşağıdaki üç çapraz doğrulama yöntemini görebiliyorum:

  1. Verileri yarıya bölün ve eğitim için bir test ve test için bir yarı kullanın (çapraz doğrulama):

    prop       <- 0.5 # proportion of subset data
    set.seed(1234)
      # training data set 
    training.s <- sample (1:nrow(xmat), round(prop*nrow(xmat),0))
    xmat.train <- xmat[training.s,]
    ymat.train <- ymat[training.s,]
    
      # testing data set 
    testing.s <- setdiff(1:nrow(xmat), training)
    xmat.test <- xmat[testing.s,]
    ymat.test <- ymat[testing.s,]
    
  2. K-katlama çapraz doğrulama - 10 katlama çapraz doğrulama kullanarak:

    mydata <- data.frame(ymat, xmat)
    fit    <- lm(ymat ~ ., data=mydata)
    library(DAAG)
    cv.lm(df=mydata, fit, m=10) # ten-fold cross validation 
    
  3. Bir seferde bir veya birkaç değeri maskeleme : Bu yöntemde, veri setindeki (y) bir değeri rastgele NA ile değiştirerek maskeliyoruz ve tahmin ediyoruz. İşlem n kere tekrar edilir.

    n = 500 
    predicted.v <- rep(NA, n)
    real.v      <- rep(NA, n)
    
    for (i in 1:n){
      masked.id <- sample (1:nrow(xmat), 1)
      ymat1     <- ymat 
      real.v[i] <- ymat[masked.id,]
      ymat1[masked.id,] <- NA
      mydata            <- data.frame(ymat1, xmat)
      fit               <- lm(ymat1 ~ ., data=mydata)
      predicted.v[i]    <- fit$fitted.values[masked.id]
    }
    

Hangi durum için hangisinin en iyi olduğunu nasıl bilebilirim? Başka yöntemler var mı? Bootstrap validationvs CV? Çalışılan örnekler takdir edilecektir.


Verilerin geçerliliğini kontrol etmek veya b-katsayılarının tahmin edilen tahminlerini veya değerlerini doğrulamakla ilgileniyor musunuz?
Subhash C. Davar

B-katsayılarının tahmin edilen tahminlerini veya değerlerini doğrulamakla ilgileniyorum
rdorlearn

1 numaralı yöntemde yaşadığım sorun, örneklem boyutunun gerçekte sahip olduğunuzdan çok daha küçük olmasıdır. Bu nedenle, tahmin edilen güven grupları / değişkenliğin çok daha büyük olması muhtemeldir. Ayrıca, yöntem 2 ve yöntem # 3’ün performans açısından benzer olacağını tahmin ediyorum. Yerinde olsam, K = 5,6, ..., 14,15 için K-kat çapraz doğrulama ile başlayın ve sonuçlarınızın oldukça benzer olup olmadığını görün.
Kian,

Ayrıca, değişkenlerin sayısını azaltmak için model seçimi yapmayı düşünüyor musunuz? 100, oldukça fazla gibi görünüyor.
Kian,

@ user2432701 Hayır, 100'ü de kullanmak istiyorum.
rdorlearn

Yanıtlar:


34

OP bu soruya bir ödül getirdiği için, biraz dikkat çekmeli ve dolayısıyla OP'ye doğrudan cevap vermese bile, bazı genel fikirleri tartışmak için doğru yer.

İlk isimler:

a) çapraz doğrulama , tren setinden farklı bir test seti kullanan tüm tahmin / ölçü teknikleri için genel addır. Eşanlamlı: örnek dışı veya örnek dışı tahminler. Antonym: Örneklemde tahmin.

Örnek içi tahmin, model kalitesini tahmin etmek için eğitim seti hakkında bazı bilgiler kullanan tekniklerdir (mutlaka hata değil). Model çok önyargılıysa - yani - veriler hakkında güçlü varsayımlarda bulunursa, bu çok yaygındır. Doğrusal modellerde (yüksek önyargılı bir model), soru örneğinde olduğu gibi, biri model karenin ölçüsü olarak R-kare, AIC, BIC, sapma kullanır - bunların tümü örneklem tahmin edicilerdir. SVM'de, örneğin, destek vektöründeki veri sayısı ile veri sayısına oranı, model hatalarının örnek bir tahminidir.

Birçok çapraz doğrulama tekniği vardır:

b) Bekletme yukarıdaki yöntemdir # 1. Seti bir antrenmana ve bir teste bölün. Eğitim ve test setinin göreceli boyutları hakkında uzun bir tartışma ve uygulama geçmişi vardır.

c) k - kat - yukarıdaki yöntem # 2. Oldukça standart.

d) Biri bırakma - yukarıdaki yöntem # 3.

e) önyükleme : setinizde N veri varsa, rastgele setten N örnekleri DEĞİŞTİR'i seçin ve eğitim olarak kullanın. Orijinal setteki hiçbir zaman örnek olmayan veriler test seti olarak kullanılır. Hem test seti için hata (örnek dışı) hem de tren seti için hata (örnek içinde) kullanan model hatasının son tahminini hesaplamanın farklı yolları vardır. Bkz., .632 önyükleme Bir .632+ formülü olduğunu düşünüyorum - bunlar hem örnek dışı hem de örnek içi hataları kullanarak modelin gerçek hatasını tahmin eden formüllerdir.

f) Yukarıdaki yöntemin seçimine dikgen tekrarlama konusudur. Dışarıda bırakma dışında, yukarıdaki tüm yöntemler herhangi bir sayıda tekrar edilebilir. Aslında bir REPEATED hold-out veya REPEATED k -katlı hakkında konuşabilirsiniz . Adil olmak gerekirse, hemen hemen her zaman önyükleme yöntemi yinelenen bir şekilde kullanılır.


Sonraki soru, hangi yöntemin "daha iyi" olduğu. Sorun, "daha iyi" nin anlamıdır.

1) İlk cevap, bu yöntemlerin her birinin model hatasının tahmininde önyargılı olup olmadığıdır (sonsuz miktarda gelecekteki veri için).

2) İkinci alternatif, bu yöntemlerin her birinin gerçek model hatasına ne kadar hızlı veya ne kadar yakınsadığıdır (önyargılı değilse). Bunun hala bir araştırma konusu olduğuna inanıyorum. Bu iki bildiriyi işaretleyeyim (ödeme duvarının arkasında) ama özet bize neyi başarmaya çalıştıklarını anlamamızı sağlıyor. Ayrıca, k -fold'u kendi kendine "çapraz doğrulama" olarak adlandırmanın çok yaygın olduğuna dikkat edin .

Bu konularda muhtemelen başka pek çok makale vardır. Bunlar sadece bazı örnekler.

3) "Daha iyi" nin bir başka yönü ise: Yukarıdaki tekniklerden birini kullanarak model hatasının belirli bir ölçüsü verildiğinde, doğru model hatasının yakın olmasının ne kadar kesin olacağına dair.

Genel olarak, bu durumda , hatanın birçok ölçümünü almak ve bir güven aralığı (veya bir Bayesian yaklaşımını izlerseniz güvenilir bir aralık) hesaplamak istersiniz. Bu durumda mesele, bir dizi hata önleminin varyansına ne kadar güvenebileceğinizdir. Bildirim izni bir arada aşımı hariç, her şeyden teknikler size (birçok farklı ölçümler olduğunu k bir tedbirleri k kat, n bir tedbirleri n uzatmak -repeated) ve böylece varyansını (veya standart sapması ölçebilir bu küme ve hata ölçüsü için bir güven aralığı hesaplayın.

Burada işler biraz karmaşıklaşıyor. Gönderen Ben kağıttan anladığım varyansının Hayır tarafsız tahmincisi k çapraz doğrulama kat , tek bir elde varyansı (değil ödeme duvarının arkasında) güvenemiyorum k kat - Bir iyi bir güven aralığı oluşturmak olamaz yani k - katlanır. Ayrıca makaleden anladığım kadarıyla Denetimli Sınıflandırma Öğrenme Algoritmalarını Karşılaştırma için Yaklaşık İstatistiksel Testler (ödeme duvarı arkasında değil), tekrarlanan ölçümleri kullanan teknikler (tekrarlanan kkatlı, tekrarlanan bekletme - önyükleme hakkında emin değilsiniz) hata ölçüsünün gerçek varyansını tahmin edecektir (bunu görmek biraz kolaydır) - ölçüyü çok büyük bir sayıyı tekrarlarsanız, sonlu bir kümeden örnekleme yaptığınız için zaman zaman, aynı değerler tekrar eder, bu da ortalamayı aynı tutar, ancak farkı azaltır. Böylece tekrarlanan ölçüm teknikleri güven aralığı konusunda çok iyimser olacaktır.

Bu son makale 5 defa tekrarladı - 5 kez 2 özgeçmiş diyor - ki bu da birçok önlemin (10) iyi bir dengesi olarak - çok fazla tekrarlama yapmıyor.

DÜZENLE:

Elbette, bu soruların bazılarına Doğrulanmış Çapraz'da büyük cevaplar var (bazen kendi aralarında anlaşmamalarına rağmen). İşte bazıları:

Sınıflandırma performansını değerlendirmek için çapraz onaylama mı yoksa önyükleme mi?

Tahmin hatasını tahmin etmek için çapraz doğrulama ve önyükleme arasındaki farklar

Sınıflandırma performansını değerlendirmek için çapraz onaylama mı yoksa önyükleme mi?

Doğrulama ve model seçimi için önyükleme işlemini anlama

Genel olarak, etiketi buradaki arkadaşınızdır.


Peki en iyi çözüm nedir? Bilmiyorum. Çok sıkı olmam gerektiğinde, özellikle bir yayında bir tekniğin diğerinden daha iyi olduğundan emin olmam gerektiğinde 5 × 2 CV kullanıyorum. Ve herhangi bir sapma veya standart sapma ölçümü yapmayı planlamıyorsam ya da zaman kısıtlamaları varsa - bir tutma bölümünde sadece bir model öğrenme var .


Çapraz onaylamanın karmaşık varyans özelliklerine gelince, hangi varyansın ölçüleceği konusunda dikkatli olunması gerektiğini düşünüyorum. IIRC, Bengio ve diğ. Eldeki problem için n boyutunda bir veri kümesi için varyansa odaklanın . Elimde bulunan veri seti üzerinde eğitilmiş bir modelin öngörüleri için rastlantısal belirsizlikten farklı (ve daha büyük) olan . Ayrıca yukarıda bağlantılı olan Dietterich makalesinde problem taksonomisine bakınız.
cbeleites,

7

Lütfen metot tanımları için wikipedia sayfasına bakınız (benden çok daha iyi bir iş yapıyorlar).

Bu sayfaya bir göz attıktan sonra, aşağıdakiler size yardımcı olabilir. Sorunun, modelleme süreci için bu yöntemlerden birini seçmek istediği bölüme odaklanmama izin verin. Bu oldukça sık yapılan bir seçim olduğundan ve ek bilgilerden yararlanabildiklerinden, iki durum için cevabım:

  1. Herhangi bir durum : k-fold cross validationUygun sayıda tekrarla kullanın (5 veya 10 diyelim).

    • Verilerin 1 yarısına bölünmesi, ilk yarının antremanı ve diğerinin validasyonunun yine de 2 adım çapraz validasyonun bir adımı (diğer adım aynı egzersizi iki yarım birbiriyle değiştirilerek yineliyor). Bu nedenle, 'verileri ikiye bölme' stratejisini ekarte edin.

    • Birçok makine öğrenmesi ve veri madenciliği makalesi, k-kat çapraz onaylama kullanır (alıntı yapmaz), bu yüzden bu adımda çok dikkatli olmanız gerekmedikçe kullanın.

    • Şimdi, yöntem ve 'gibi diğer yöntemlerle üzerinden izinleri bir izin p üzerinden ' ve ' rasgele bölme ve tekrar ' (esas bootstrap işlemi, yukarıda tarif edilen gibi) defintely iyi yarışmacının vardır.

    • Veri boyutunuz N ise, o zaman N-kat çapraz doğrulama esas olarak bir tane bırakma ile aynıdır.

    • 'dışarıda bırak' ve 'önyükleme', k kat çapraz onaylamadan biraz daha farklıdır, ancak fark, temel olarak katların nasıl tanımlandığı ve tekrarlanan 'k' sayılarıdır.

    • Viki sayfasının dediği gibi, hem k-katlama hem de ' dışarıda bırakma ', ' beklenen performans / uyumun ' iyi tahmin edicileridir ( bahisler bu tahmin edicilerin varyansı bakımından kapalı olsa da).

  2. Durumunuz: Özelliklerin sayısına göre yalnızca 200 örneklem büyüklüğünüz var (100). Aynı performansı veren çoklu lineer modellerin bulunma ihtimalinin çok yüksek olduğunu düşünüyorum. > 10 tekrarlı k-kat çapraz doğrulama kullanılmasını öneririm . 3 veya 5'lik ak değerini seçin.

    • K değerinin nedeni: genel seçim.

    • Tekrar değerinin nedeni: Tekrarlama için oldukça yüksek bir değer muhtemelen burada kritiktir çünkü tek bir k-kat çapraz doğrulama hesaplamasının çıktısı, sunduğumuz bölme değişkenliği / rastgeleliği katlamak için kabul edilebilir olabilir.

Ek düşünceler:

  • Belki aynı zamanda k-fold cross validasyon yöntemimin çıktılarının iyi görünüp görünmediğini kontrol etmek için aynı performans / uygun önlem için ' bırakma çıkışı ' ve ' rastgele bölünmüş tekrar gibi ' önyükleme yöntemleri kullandım.

  • Tüm 100 özelliği kullanmak istemenize rağmen, birisinin önerdiği gibi, çoklu bağlantı / korelasyona dikkat edin ve özelliklerin sayısını azaltın.


Ayrıca bu cevabı gözden
geçirin

Bunun çoğunu keserdim ve doğrudan R rmspaketinde validateve calibratefonksiyonlarında uygulandığı gibi doğrudan Efron-Gong iyimserlik önyüklemesine giderdim .
Frank Harrell
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.