2013-07-22 35 views
24

Tôi đang dò tìm để sử dụng neuralnet để dự đoán.Lỗi trong terms.formula (công thức): '.' trong công thức và không có đối số 'dữ liệu'

Tạo một số X:

x <- cbind(seq(1, 50, 1), seq(51, 100, 1)) 

Tạo Y:

y <- x[,1]*x[,2] 

Cung cấp cho họ một tên

colnames(x) <- c('x1', 'x2') 
names(y) <- 'y' 

Make data.frame:

dt <- data.frame(x, y) 

Và bây giờ, tôi đã nhận lỗi

model <- neuralnet(y~., dt, hidden=10, threshold=0.01) 

lỗi trong terms.formula (công thức): '' trong công thức và không có 'dữ liệu' đối số

Ví dụ: trong lm (mô hình tuyến tính) hoạt động này.

+4

'neuralnet' đang thực hiện rất nhiều công cụ lộn xộn với công thức thông qua chức năng không được xuất khẩu' neuralnet ::: generate.initial.variables'. Có một lỗi trong hàm đó. Tôi đề nghị bạn liên hệ với người bảo trì và gửi cho họ ví dụ này hoặc liên kết đến câu hỏi. –

Trả lời

37

Khi nhận xét của tôi nêu rõ, điều này trông giống như một lỗi trong hàm không được xuất neuralnet:::generate.initial.variables. Là một công việc xung quanh, chỉ cần tạo công thức dài từ tên của dt, ngoại trừ y, ví dụ:

n <- names(dt) 
f <- as.formula(paste("y ~", paste(n[!n %in% "y"], collapse = " + "))) 
f 

## gives 
> f 
y ~ x1 + x2 

## fit model using `f` 
model <- neuralnet(f, data = dt, hidden=10, threshold=0.01) 

> model 
Call: neuralnet(formula = f, data = dt, hidden = 10, threshold = 0.01) 

1 repetition was calculated. 

     Error Reached Threshold Steps 
1 53975276.25  0.00857558698 1967 
+0

cảm ơn, đây là giải pháp tốt đẹp! – luckyi

+0

xin lỗi, nhưng tôi không thể hiểu được. Tại sao giá trị lỗi quá lớn? Vì vậy, tôi đã làm, nhưng có giá trị dự đoán liên tục. Bạn có thể giúp tôi được không? – luckyi

+0

@ luckyi Đó có thể là câu hỏi thống kê và không phù hợp với [vậy] Thử hỏi trên [stats.se]. –

0

Cung cấp một lựa chọn đơn giản để câu trả lời trước đó, bạn có thể tạo một công thức từ tên của dt sử dụng reformulate():

f <- reformulate(setdiff(colnames(dt), "y"), response="y") 

reformulate() không đòi hỏi việc sử dụng các paste() và tự động thêm các điều khoản chung .