Bagaimana cara melatih dan memvalidasi model jaringan saraf dalam R?

33

Saya baru untuk pemodelan dengan jaringan saraf, tetapi saya berhasil membangun jaringan saraf dengan semua titik data yang tersedia yang cocok dengan data yang diamati dengan baik. Jaringan saraf dilakukan dalam R dengan paket nnet:

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      

Data yang saya analisis terlihat sebagai berikut, di mana DOC adalah variabel yang harus dimodelkan (ada sekitar 17.000 pengamatan):

      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

Sekarang, saya telah membaca bahwa model tersebut harus dilatih dengan 70% poin data, dan divalidasi dengan 30% poin data yang tersisa. Bagaimana saya melakukan ini? Fungsi apa yang harus saya gunakan?

Saya menggunakan fungsi kereta dari paket caret untuk menghitung parameter untuk ukuran dan pembusukan.

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)

Setiap bantuan atau tautan langsung ke situs web / posting lain sangat dihargai.

Strohmi
sumber
6
Sebenarnya, metodologi split train / test di bawah standar, karena kinerja algoritme Anda dapat sedikit bervariasi berdasarkan pilihan Anda pada titik pemisahan (Saya telah melihat perbedaan 5% ...). Metodologi yang lebih baik adalah validasi silang.
John Doucette

Jawaban:

36

Manual caret Max Kuhn - Model Building adalah titik awal yang bagus.

Saya akan berpikir tentang tahap validasi sebagai terjadi dalam panggilan caret train (), karena ia memilih hiperparameter pembusukan dan ukuran Anda melalui bootstrap atau pendekatan lain yang dapat Anda tentukan melalui parameter trControl. Saya memanggil set data yang saya gunakan untuk mengkarakterisasi kesalahan model yang dipilih akhir set tes saya. Karena caret menangani pemilihan hiperparameter untuk Anda, Anda hanya perlu satu set pelatihan dan satu set tes.

Anda bisa menggunakan fungsi createDataPartition () di caret untuk membagi set data Anda menjadi set pelatihan dan tes. Saya menguji ini menggunakan set data Prestige dari paket mobil, yang memiliki informasi tentang pendapatan yang terkait dengan tingkat pendidikan dan prestise pekerjaan:

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

Fungsi createDataPartition () tampaknya sedikit salah nama karena tidak membuat partisi untuk Anda, melainkan memberikan vektor indeks yang kemudian dapat Anda gunakan untuk membangun pelatihan dan set tes. Ini cukup mudah untuk melakukannya sendiri di R menggunakan sample () tetapi satu hal createDataPartition () tampaknya memang dilakukan adalah sampel dari dalam level faktor. Selain itu, jika hasil Anda kategorikal, distribusi dipertahankan di seluruh partisi data. Namun, ini tidak relevan karena hasil Anda berkelanjutan.

Sekarang Anda dapat melatih model Anda pada set pelatihan:

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)    

Selain itu: Saya harus menambahkan parameter linout untuk membuat nnet bekerja dengan masalah regresi (vs klasifikasi). Kalau tidak, saya mendapatkan semua 1s sebagai nilai prediksi dari model.

Anda kemudian dapat memanggil prediksi pada objek yang cocok menggunakan set data uji dan menghitung RMSE dari hasil:

prestige.predict <- predict(prestige.fit, newdata = prestige.test)
prestige.rmse <- sqrt(mean((prestige.predict - prestige.test$income)^2)) 
Anne Z.
sumber
Tautan Max Kuhn Anda tampaknya telah mati.
EngrStudent
Saya menemukan buku Max Kuhn, disembunyikan di sini: feat.engineering
Agile Bean