วิธีการฝึกอบรมและตรวจสอบความถูกต้องของโมเดลโครงข่ายประสาทเทียมใน R


33

ฉันใหม่กับการสร้างแบบจำลองด้วยเครือข่ายประสาท แต่ฉันจัดการเพื่อสร้างเครือข่ายประสาทด้วยจุดข้อมูลที่มีอยู่ทั้งหมดที่เหมาะกับข้อมูลที่สังเกตได้ดี เครือข่ายประสาทเทียมทำใน R ด้วยแพ็คเกจ 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      

ข้อมูลที่ฉันกำลังวิเคราะห์มีลักษณะดังต่อไปนี้โดยที่ DOC เป็นตัวแปรที่จะต้องมีแบบจำลอง (มีการสังเกตประมาณ 17,000):

      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

ตอนนี้ฉันได้อ่านแล้วว่าแบบจำลองควรได้รับการฝึกอบรมด้วยจุดข้อมูล 70% และตรวจสอบความถูกต้องกับจุดข้อมูล 30% ฉันจะทำสิ่งนี้ได้อย่างไร ฉันต้องใช้ฟังก์ชั่นใด

ฉันใช้ฟังก์ชันรถไฟจากชุดคาเร็ตเพื่อคำนวณพารามิเตอร์สำหรับขนาดและการสลายตัว

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)

ความช่วยเหลือหรือการเชื่อมโยงโดยตรงไปยังเว็บไซต์ / โพสต์อื่น ๆ เป็นที่นิยมอย่างมาก


6
อันที่จริงวิธีการแบ่งรถไฟ / การทดสอบนั้นมีค่าน้อยเนื่องจากประสิทธิภาพของอัลกอริทึมของคุณอาจแตกต่างกันเล็กน้อยขึ้นอยู่กับจุดแยกที่คุณเลือก (ฉันเห็นความแตกต่าง 5% ... ) วิธีการที่ดีกว่าคือการตรวจสอบข้าม
John Doucette

คำตอบ:


36

คู่มือคาเร็ตของ Max Kuhn - การสร้างแบบจำลองเป็นจุดเริ่มต้นที่ดี

ฉันคิดว่าขั้นตอนการตรวจสอบความถูกต้องเกิดขึ้นภายในการโทร caret () เนื่องจากเป็นการเลือกไฮเปอร์พารามิเตอร์ของการสลายตัวและขนาดผ่านการบูตสแตรปหรือวิธีอื่น ๆ ที่คุณสามารถระบุผ่านพารามิเตอร์ trControl ฉันเรียกชุดข้อมูลที่ฉันใช้สำหรับอธิบายลักษณะข้อผิดพลาดของรุ่นที่เลือกไว้ชุดการทดสอบสุดท้าย เนื่องจากคาเร็ตจัดการกับการเลือกพารามิเตอร์สำหรับคุณคุณจึงต้องมีชุดฝึกอบรมและชุดทดสอบ

คุณสามารถใช้ฟังก์ชั่น createDataPartition () ในคาเร็ตเพื่อแบ่งชุดข้อมูลของคุณออกเป็นชุดฝึกอบรมและชุดทดสอบ ฉันทดสอบสิ่งนี้โดยใช้ชุดข้อมูล Prestige จากแพ็คเกจรถซึ่งมีข้อมูลเกี่ยวกับรายได้ที่เกี่ยวข้องกับระดับการศึกษาและศักดิ์ศรีการประกอบอาชีพ:

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

ฟังก์ชั่น createDataPartition () ดูเหมือนผิดเล็กน้อยเพราะไม่ได้สร้างพาร์ติชันให้คุณ แต่ให้เวกเตอร์ของดัชนีที่คุณสามารถใช้เพื่อสร้างชุดฝึกอบรมและชุดทดสอบ มันค่อนข้างง่ายที่จะทำสิ่งนี้ด้วยตัวเองใน R โดยใช้ตัวอย่าง () แต่สิ่งหนึ่งที่ createDataPartition () เห็นได้ชัดว่าทำได้คือตัวอย่างจากภายในระดับปัจจัย นอกจากนี้หากผลลัพธ์ของคุณเป็นหมวดหมู่การกระจายจะถูกเก็บรักษาไว้ในพาร์ติชันข้อมูล อย่างไรก็ตามไม่เกี่ยวข้องในกรณีนี้เนื่องจากผลลัพธ์ของคุณต่อเนื่อง

ตอนนี้คุณสามารถฝึกโมเดลของคุณบนชุดฝึกอบรม:

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)    

นอกเหนือจาก: ฉันต้องเพิ่มพารามิเตอร์ linout เพื่อให้ nnet ทำงานกับปัญหาการถดถอย (เทียบกับการจำแนก) มิฉะนั้นฉันได้ 1s ทั้งหมดเป็นค่าที่คาดการณ์จากแบบจำลอง

จากนั้นคุณสามารถเรียกการทำนายบนวัตถุที่พอดีโดยใช้ชุดข้อมูลทดสอบและคำนวณ RMSE จากผลลัพธ์:

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

ดูเหมือนว่าลิงก์ Max Kuhn ของคุณจะตาย
EngrStudent - Reinstate Monica

ฉันพบหนังสือของ Max Kuhn มันถูกซ่อนไว้ที่นี่: feat.engineering
Agile Bean
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.