R'de bir sinir ağı modeli nasıl eğitilir ve doğrulanır?


33

Sinir ağları ile modelleme konusunda yeniyim, ancak gözlemlenen verilere uygun tüm mevcut veri noktalarına sahip bir sinir ağı oluşturmayı başardım. Sinir ağı, nnet paketi ile R'de yapıldı:

require(nnet)      
##33.8 is the highest value
mynnet.fit <- nnet(DOC/33.80 ~ ., data = MyData, size = 6, decay = 0.1, maxit = 1000)      
mynnet.predict <- predict(mynnet.fit)*33.80  
mean((mynnet.predict - MyData$DOC)^2) ## mean squared error was 16.5      

Analiz ettiğim veriler şu şekilde görünüyor; burada DOC, modellenmesi gereken değişkendir (yaklaşık 17.000 gözlem vardır):

      Q  GW_level Temp   t_sum   DOC
1 0.045    0.070 12.50     0.2 11.17
2 0.046    0.070 12.61     0.4 11.09
3 0.046    0.068 12.66     2.8 11.16
4 0.047    0.050 12.66     0.4 11.28
5 0.049    0.050 12.55     0.6 11.45
6 0.050    0.048 12.45     0.4 11.48

Şimdi, modelin veri noktalarının% 70'i ile eğitilmesi gerektiğini ve veri noktalarının geri kalan% 30'u ile doğrulanması gerektiğini okudum. Bunu nasıl yaparım? Hangi işlevleri kullanmak zorundayım?

Büyüklük ve çürüme parametrelerini hesaplamak için caret paketindeki train işlevini kullandım.

require(caret)
my.grid <- expand.grid(.decay = c(0.5, 0.1), .size = c(5, 6, 7))
mynnetfit <- train(DOC/33.80 ~ ., data = MyData, method = "nnet", maxit = 100, tuneGrid = my.grid, trace = f)

Herhangi bir doğrudan yardım veya diğer web sitelerine / yayınlarına bağlantı verilmesi büyük beğeni topluyor.


6
Aslında, tren / test bölme metodolojisi subpar'dır, çünkü algoritmanızın performansı bölme noktası seçiminize bağlı olarak biraz değişebilir (% 5 fark gördüm ...). Daha iyi metodoloji çapraz doğrulamadır.
John Doucette

Yanıtlar:


36

Max Kuhn'ın el kitabı El Kitabı - Model Oluşturma harika bir başlangıç ​​noktasıdır.

Doğrulama aşamasını, caret train () çağrısı içinde gerçekleşiyormuş gibi düşünürdüm, çünkü bootstrapping veya trControl parametresiyle belirtebileceğiniz başka bir yaklaşımla çürüme ve büyüklük hipermetrelerinizi seçiyor. Test setimdeki son seçilen modelin hatasını karakterize etmek için kullandığım veri setini arıyorum. Caret sizin için hiperparametrelerin seçimini gerçekleştirdiğinden, sadece bir eğitim setine ve bir test setine ihtiyacınız var.

Veri setinizi eğitim ve test setlerine bölmek için şapkadaki createDataPartition () işlevini kullanabilirsiniz. Bunu, eğitim seviyesi ve mesleki prestijle ilgili olarak gelir hakkında bilgi sahibi olan, araba paketindeki Prestige verilerini kullanarak test ettim:

library(car)
library(caret)
trainIndex <- createDataPartition(Prestige$income, p=.7, list=F)
prestige.train <- Prestige[trainIndex, ]
prestige.test <- Prestige[-trainIndex, ]

CreateDataPartition () işlevi, biraz bölümlenmiş gibi görünüyor, çünkü sizin için bölümü oluşturmuyor, ancak eğitim ve test kümelerini oluşturmak için kullanabileceğiniz bir dizin vektörü sağlıyor. Bu var kendiniz yapmak oldukça kolay ) numuneyi () ama bir şey createDataPartition (kullanarak R görünüşte faktör seviyeleri içinden numune do yapmasıdır. Ayrıca, sonucunuz kategorikse, dağıtım veri bölümleri arasında korunur. Ancak bu durumla ilgili değildir, çünkü sonuçlarınız süreklidir.

Artık modelinizi eğitim setinde eğitebilirsiniz:

my.grid <- expand.grid(.decay = c(0.5, 0.1), .size = c(5, 6, 7))
prestige.fit <- train(income ~ prestige + education, data = prestige.train,
    method = "nnet", maxit = 1000, tuneGrid = my.grid, trace = F, linout = 1)    

Bir yana: nnet'in regresyon (sınıflandırma) problemi ile çalışabilmesi için linout parametresini eklemek zorunda kaldım. Aksi halde modelin hepsinden tahmin edilen değerler olarak 1'lerin hepsini aldım.

Test verisini kullanarak fit nesnesini arayabilir ve sonuçlardan RMSE'yi hesaplayabilirsiniz:

prestige.predict <- predict(prestige.fit, newdata = prestige.test)
prestige.rmse <- sqrt(mean((prestige.predict - prestige.test$income)^2)) 

Max Kuhn bağlantınız ölmüş görünüyor.
EngrStudent - Monica,

Max Kuhn'un kitabını buldum, burada gizli: feat.engineering
Agile Bean
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.