2014-06-12 32 views
6

Mô hình svm được tạo với gói e1071 trong R. Để sử dụng mô hình, tôi cần lưu và đọc khi cần. Gói có write.svm, nhưng không có read.svm. Nếu tôi sử dụngTại sao tải (...) trả về tên ký tự của đối tượng thay vì đối tượng?

model <- svm(x, y) 

save(model, 'modelfile.rdata') 
M <- load('modelfile.rdata') 

đối tượng M chỉ chứa từ 'mô hình'.

Cách lưu mô hình svm và đọc lại sau để áp dụng cho một số dữ liệu mới?

Trả lời

4

Nhìn vào giá trị trả về của hàm load trong file giúp đỡ:

Value:

A character vector of the names of objects created, invisibly. 

Vì vậy, "mô hình" thực sự là giá trị kỳ vọng của M. Svm của bạn đã được khôi phục dưới tên gốc, là model.

Nếu bạn thấy khó hiểu rằng load không trả lại đối tượng được tải nhưng thay vào đó hãy khôi phục đối tượng đó dưới tên được sử dụng để lưu, hãy xem xét sử dụng saveRDSreadRDS.

saveRDS(model, 'modelfile.rds') 
M <- readRDS('modelfile.rds') 

M phải chứa mô hình svm của bạn.

Tôi thích saveRDSreadRDS vì với họ, tôi biết những đối tượng tôi đang tạo trong không gian làm việc của mình - xem bài đăng trên blog của Gavin Simpson (được liên kết trong câu trả lời của mình) để thảo luận chi tiết.

+0

Nó hoạt động, ngoại trừ chức năng được gọi là không 'loadRDS', nhưng 'readRDS'. Cảm ơn! – user3276530

+0

@ user3276530 Rất tiếc, đã được khắc phục ngay bây giờ. Nếu vấn đề của bạn đã được giải quyết, hãy xem xét chấp nhận một câu trả lời bằng cách nhấp vào dấu kiểm bên cạnh câu trả lời. –

+0

Tôi nhận được 'không áp dụng phương pháp 'dự đoán' được áp dụng cho một đối tượng của lớp" điều chỉnh "lỗi với dòng dưới đây của mã:' svm.pred <- predict (get ("svm.model"), testData [ , -17]) ', xin đề nghị. –

3

Bạn hiểu sai những gì load thực hiện. Nó khôi phục một đối tượng trùng tên mà nó có khi bạn save() d nó. Những gì bạn đang nhìn thấy trong M là giá trị trả về của hàm load(). Gọi load() có tác dụng phụ phụ của việc tải đối tượng trở lại dưới cùng một tên mà nó đã được lưu với.

xem xét:

require("e1071") 
data(iris) 

## classification mode 
# default with factor response: 
model <- svm (Species~., data=iris) 
## Save it 
save(model, file = "my-svm.RData") 
## delete model 
rm(model) 
## load the model 
M <- load("my-svm.RData") 

Bây giờ nhìn vào không gian làm việc

> ls() 
[1] "iris" "M"  "model" 

Do đó model được khôi phục như một tác dụng phụ của load().

Từ ?load chúng ta thấy lý do M chứa tên của các đối tượng được tạo ra (và do đó lưu ban)

Value: 

    A character vector of the names of objects created, invisibly. 

Nếu bạn muốn khôi phục một đối tượng với một tên mới, sử dụng saveRDS()readRDS():

saveRDS(model, "svm-model.rds") 
newModel <- readRDS("svm-model.rds") 
ls() 

> ls() 
[1] "iris"  "M"  "model" "newModel" 

Nếu bạn muốn biết thêm về saveRDS()readRDS(), hãy xem trợ giúp có liên quan ?saveRDS() và bạn có thể quan tâm đến blog post I wrote on this topic.

+0

Cảm ơn rất nhiều! Nó giúp. – user3276530

Các vấn đề liên quan