R'de düzeltme paketi içinde PCA ve k katlama çapraz doğrulama


16

Az önce Coursera'daki Makine Öğrenimi dersinden bir ders izledim. Profesörün denetimli öğrenme uygulamalarında ön işleme verileri için PCA'yı tartıştığı bölümde, PCA'nın sadece eğitim verileri üzerinde yapılması gerektiğini ve daha sonra eşlemenin çapraz doğrulama ve test setlerini dönüştürmek için kullanıldığını söylüyor. Ayrıca bkz. PCA ve tren / test bölümü .

Ancak, caretR paketinde, train()işleve ilettiğiniz eğitim verileri zaten PCA tarafından işlenir. Bu nedenle algoritma k katlama çapraz doğrulaması gerçekleştirdiğinde, çapraz doğrulama seti zaten PCA ile preProcess()ve ile işlenmiştir predict()ve aslında PCA "bağlantısında" kullanılır.

Durum hakkındaki anlayışım doğru mu? PCA ile çapraz doğrulama prosedürü (veya aslında herhangi bir yeniden ölçekleme / merkezleme yöntemi ile) "yanlış" çünkü verilerin ön işlemesi hem çapraz onaylama setinde hem de eğitim setinde yapılıyor mu? Ve eğer öyleyse, bunun sonuçlar üzerinde ne kadar büyük bir etkisi olur?


1
İlginç soru. Profesör Ng "PCA'nın sadece eğitim verileri üzerinde yapılması ve daha sonra eşlemenin çapraz doğrulama ve test setlerini dönüştürmek için kullanılması" için nedenler veriyor mu? Sezgim, tren / cv / test verilerinin aynı dağıtımdan geldiği varsayıldığı ve PCA'nın çıktı / bağımlı değişken (ler) i içermediği için etkinin minimum olması gerektiğidir.
miura

1
@miura Evet öyle. PCA gerçekleştirirken, istenen "korunmuş varyansı" elde etmek için gereken çıkış vektörlerinde minimum sayı k boyutlarını çözmemiz gerekir. Bu k parametresi şimdi (benim görüşüme göre) uymamız gereken algoritmamızın ekstra bir parametresidir. PCA'yı çapraz doğrulama seti üzerinde de yaparsak, aslında algoritmamızın bir kısmını CV seti üzerinde eğitiyoruz, böylece çapraz doğrulama değerini azaltıyoruz.
mchangun

PCA ve MDS'yi karıştırdığınızı düşünüyorum, ancak her iki yöntemde de istenen bir tutulan varyans ayarlamıyorsunuz. Ancak, k boyutlarına düşürmek için getirdikleri ayarlamadan hesaplayabilirsiniz. Buna
uymanıza

Yanıtlar:


18

Dersi görmedim, bu yüzden söylenenler hakkında yorum yapamam.

Benim 0.02 $: Yeniden örnekleme kullanarak iyi performans tahminleri almak istiyorsanız, yeniden örnekleme sırasında önceki işlemleri yerine tüm işlemleri gerçekten yapmanız gerekir. Bu, özellik seçimi [1] ve PCA gibi önemsiz işlemler için gerçekten doğrudur. Sonuçlara belirsizlik eklerse, yeniden örneklemeye ekleyin.

Temel bileşen regresyonunu düşünün: PCA ve ardından bazı bileşenlerde doğrusal regresyon. PCA parametreleri tahmin eder (parazitli) ve bileşen sayısı da seçilmelidir (farklı değerler farklı sonuçlara neden olur => daha fazla gürültü).

Şema 1 ile 10 kat CV kullandığımızı varsayalım:

conduct PCA
pick the number of components
for each fold:
   split data
   fit linear regression on the 90% used for training
   predict the 10% held out
end:

veya şema 2:

for each fold:
   split data
   conduct PCA on the 90% used for training
   pick the number of components
   fit linear regression
   predict the 10% held out
end:

İkinci yaklaşımın, PCA'nın neden olduğu belirsizliği, bileşen sayısının seçimini ve doğrusal regresyonu yansıtan hata tahminleri üretmesi gerektiğinden açık olmalıdır. Aslında, ilk şemadaki CV'nin bundan önce ne olduğu hakkında hiçbir fikri yoktur.

Ben her zaman örnekleme w / tüm işlemleri yapmaktan suçlu değilim, ama sadece performans tahminleri umurumda değil (ki bu olağandışı).

İki şema arasında çok fark var mı? Verilere ve ön işleme bağlıdır. Sadece merkezleme ve ölçeklendirme yapıyorsanız, muhtemelen değil. Bir ton veriniz varsa, muhtemelen hayır. Egzersiz seti boyutu azaldıkça, özellikle n, p'ye yakınsa, kötü tahminler alma riski artar.

Deneyimden kesin olarak, örnekleme içinde denetimli özellik seçiminin dahil edilmesinin gerçekten büyük bir fikir olduğunu söyleyebilirim (büyük eğitim setleri olmadan). Ön işlemenin neden buna (bir dereceye kadar) karşı bağışık olacağını anlamıyorum.

@mchangun: Bileşen sayısının bir ayar parametresi olduğunu düşünüyorum ve muhtemelen genelleştirilebilir performans tahminlerini kullanarak seçmek istersiniz. K'yi otomatik olarak, varyansın en az% X'inin açıklanacağı şekilde seçebilir ve bu işlemi yeniden örnekleme içine dahil edebilirsiniz, böylece o süreçteki gürültüyü hesaba katarız.

maksimum

[1] Ambroise, C. ve McLachlan, G. (2002). Mikroarray gen ekspresyon verilerine dayanarak gen ekstraksiyonunda seçim yanlılığı. Ulusal Bilimler Akademisi Bildirileri, 99 (10), 6562-6566.


21

trainİşlevi çalıştırmadan önce verileri önceden işlemeyin ! Tren işlevi için preProcess bağımsız değişkeni kullanın; ön işleme her yeniden örnekleme yinelemesine uygulanır.

örneğin bunu yapma:

library(caret)
dat <- iris
pp <- preProcess(dat[,-5], method="pca")
dat[,-5] <- predict(pp, dat[,-5])
knnFit1 <- train(Species~., dat, method = "knn", preProcess=c("pca"), 
    trControl = trainControl(method = "cv"))

Bunu yap!

dat <- iris
knnFit2 <- train(Species~., dat, method = "knn", preProcess=c("pca"), 
    trControl = trainControl(method = "cv"))

1
Önerdiğim gibi prProcess yaparsam, tahminler için modeli kullanmak istediğimde yeni verileri önceden işlemek gerekir? Şu anda sadece yapıyorum: pred <- predict(knnFit2, newdata) nerede newdataölçeklenmiyor. Caret newdata, tahminler için kullanmadan önce önişlemenin yapılması gerektiğini bilecek kadar akıllı mı ?
mchangun

7
@mchangun no. caret ön işleme parametrelerini kaydeder ve yeni verileri predict.caret çağrısında önceden işler. oldukça kaygan!
Zach
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.