Làm thế nào để đào tạo và xác nhận một mô hình mạng thần kinh trong R?


33

Tôi chưa quen với việc mô hình hóa với các mạng thần kinh, nhưng tôi đã quản lý để thiết lập một mạng lưới thần kinh với tất cả các điểm dữ liệu có sẵn phù hợp với dữ liệu được quan sát. Mạng thần kinh được thực hiện trong R với gói 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      

Dữ liệu tôi đang phân tích trông như sau, trong đó DOC là biến phải được mô hình hóa (có khoảng 17.000 quan sát):

      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

Bây giờ, tôi đã đọc rằng mô hình nên được đào tạo với 70% số điểm dữ liệu và được xác nhận với 30% số điểm dữ liệu còn lại. Làm thế nào để tôi làm điều này? Những chức năng nào tôi phải sử dụng?

Tôi đã sử dụng chức năng đào tạo từ gói caret để tính toán các tham số cho kích thước và phân rã.

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)

Bất kỳ trợ giúp trực tiếp hoặc liên kết đến các trang web / bài viết khác được đánh giá rất cao.


6
Trên thực tế, phương pháp phân tách kiểm tra / thử nghiệm là phụ, vì hiệu suất của thuật toán của bạn có thể thay đổi khá nhiều dựa trên sự lựa chọn điểm phân tách của bạn (Tôi đã thấy sự khác biệt 5% ...). Phương pháp tốt hơn là xác nhận chéo.
John Doucette

Câu trả lời:


36

Hướng dẫn chăm sóc của Max Kuhn - Xây dựng mô hình là một điểm khởi đầu tuyệt vời.

Tôi sẽ nghĩ về giai đoạn xác nhận là xảy ra trong lệnh gọi caret train, vì nó đang chọn siêu phân rã và kích thước của bạn thông qua bootstrapping hoặc một số phương pháp khác mà bạn có thể chỉ định thông qua tham số trControl. Tôi gọi tập dữ liệu tôi sử dụng để mô tả lỗi của mô hình được chọn cuối cùng là tập kiểm tra của tôi. Vì caret xử lý lựa chọn siêu âm cho bạn, bạn chỉ cần một bộ huấn luyện và một bộ kiểm tra.

Bạn có thể sử dụng hàm createDataPartition () trong dấu mũ để phân chia tập dữ liệu của bạn thành tập huấn luyện và kiểm tra. Tôi đã thử nghiệm điều này bằng cách sử dụng bộ dữ liệu Uy tín từ gói xe hơi, có thông tin về thu nhập liên quan đến trình độ học vấn và uy tín nghề nghiệp:

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

Hàm createdDataPartition () có vẻ hơi sai vì nó không tạo phân vùng cho bạn, mà cung cấp một vectơ chỉ mục mà sau đó bạn có thể sử dụng để xây dựng các bộ kiểm tra và huấn luyện. Thật dễ dàng để tự làm điều này trong R bằng cách sử dụng mẫu () nhưng một điều mà createdDataPartition () dường như làm là lấy mẫu từ trong các mức yếu tố. Hơn nữa, nếu kết quả của bạn là phân loại, phân phối được duy trì trên các phân vùng dữ liệu. Tuy nhiên, nó không liên quan trong trường hợp này vì kết quả của bạn là liên tục.

Bây giờ bạn có thể đào tạo mô hình của mình trên tập huấn luyện:

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)    

Ngoài ra: Tôi đã phải thêm tham số linout để nnet hoạt động với vấn đề hồi quy (so với phân loại). Mặt khác, tôi nhận được tất cả 1 giây như các giá trị dự đoán từ mô hình.

Sau đó, bạn có thể gọi dự đoán về đối tượng phù hợp bằng cách sử dụng bộ dữ liệu thử nghiệm và tính toán RMSE từ kết quả:

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

liên kết Max Kuhn của bạn dường như đã chết.
EngrStudent - Phục hồi Monica

Tôi tìm thấy cuốn sách của Max Kuhn, nó được giấu ở đây: feat.engineering
Agile Bean
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.