使用R中的包e1071创建svm模型.要使用该模型,我需要保存它并根据需要读取.包有write.svm,但没有read.svm.如果我使用
model <- svm(x, y)
save(model, 'modelfile.rdata')
M <- load('modelfile.rdata')
Run Code Online (Sandbox Code Playgroud)
对象M只包含"模型"这个词.
如何保存svm模型并稍后回读,以应用于一些新数据?
查看load帮助文件中函数的返回值:
值:
Run Code Online (Sandbox Code Playgroud)A character vector of the names of objects created, invisibly.
所以"模型"确实是预期的价值M.你的svm已恢复原来的名字,即model.
如果您发现它有点令人困惑,load不会返回加载的对象,而是使用保存它的名称恢复它,请考虑使用saveRDS和readRDS.
saveRDS(model, 'modelfile.rds')
M <- readRDS('modelfile.rds')
Run Code Online (Sandbox Code Playgroud)
并M应包含您的svm模型.
我更喜欢saveRDS,readRDS因为有了他们,我知道我在工作区中创建了什么对象 - 请参阅Gavin Simpson的博客文章(在他的回答中链接)进行详细讨论.
你误解了什么load。它将对象恢复为您创建该对象时的同名save()。您看到的M是函数的返回值load()。调用load()具有额外的副作用,即以保存对象时的名称重新加载对象。
考虑:
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")
Run Code Online (Sandbox Code Playgroud)
现在看看工作区
> ls()
[1] "iris" "M" "model"
Run Code Online (Sandbox Code Playgroud)
因此model作为 的副作用被恢复load()。
从?load我们看到的原因M包含创建的对象的名称(因此最初保存)
Value:
A character vector of the names of objects created, invisibly.
Run Code Online (Sandbox Code Playgroud)
如果要将对象恢复为新名称,请使用saveRDS()和readRDS():
saveRDS(model, "svm-model.rds")
newModel <- readRDS( "svm-model.rds")
ls()
> ls()
[1] "iris" "M" "model" "newModel"
Run Code Online (Sandbox Code Playgroud)
如果您想了解更多信息saveRDS()并readRDS()查看相关帮助,您可能会对我就此主题撰写的博客文章?saveRDS()感兴趣。