Rscript - 长时间执行
Rscript - long time of execution
我正在尝试在 R 的插入符号包中创建预测模型,并为来自 terminal/cmd 的新数据调用预测。这是可重现的例子:
# Sonar_training.R
## learning and saving model
library(caret)
library(mlbench)
data(Sonar)
set.seed(107)
inTrain <- createDataPartition(y = Sonar$Class, p = .75,list = FALSE)
training <- Sonar[ inTrain,]
testing <- Sonar[-inTrain,]
saveRDS(testing,"test.rds")
ctrl <- trainControl(method = "repeatedcv",
repeats = 3)
plsFit <- train(Class ~ .,data = training,method = "pls",
tuneLength = 15,
trControl = ctrl,
preProc = c("center", "scale"))
plsClasses <- predict(plsFit, newdata = testing)
saveRDS(plsFit,"fit.rds")
这是 Rscript.exe 调用的脚本:
# script.R
##reading model and predict test data
t <- Sys.time()
pls <- readRDS("fit.rds")
testing <- readRDS("test.rds")
head(predict(pls, newdata = testing))
print(Sys.time() - t)
我 运行 在终端中使用以下语句:
pawel@pawel-MS-1753:~$ Rscript script.R
Loading required package: pls
Attaching package: ‘pls’
The following object is masked from ‘package:stats’:
loadings
[1] M M R M R R
Levels: M R
Time difference of 2.209697 secs
有什么办法可以做到faster/more高效吗?例如,是否有可能不在每次执行时加载包? readRDS 在这种情况下读取模型是否正确?
您可以尝试使用 "profvis" 包分析您的代码:
#library(profvis)
profvis({
for (i in 1:100){
#your code here
}
})
我试过了,碰巧 99% 的执行时间是训练时间,1% 是 saving/loading RDS 数据,其余的成本大约为 0(加载包,加载数据,...):
所以如果你不想优化训练函数本身,那么减少执行时间的方法似乎很少。
我已经看到 PLS 分类模型出现这种情况,但我不确定这个问题。但是,请尝试改用 method = "simpls"
。您将得到大致相同的答案,并且应该很快完成。
我正在尝试在 R 的插入符号包中创建预测模型,并为来自 terminal/cmd 的新数据调用预测。这是可重现的例子:
# Sonar_training.R
## learning and saving model
library(caret)
library(mlbench)
data(Sonar)
set.seed(107)
inTrain <- createDataPartition(y = Sonar$Class, p = .75,list = FALSE)
training <- Sonar[ inTrain,]
testing <- Sonar[-inTrain,]
saveRDS(testing,"test.rds")
ctrl <- trainControl(method = "repeatedcv",
repeats = 3)
plsFit <- train(Class ~ .,data = training,method = "pls",
tuneLength = 15,
trControl = ctrl,
preProc = c("center", "scale"))
plsClasses <- predict(plsFit, newdata = testing)
saveRDS(plsFit,"fit.rds")
这是 Rscript.exe 调用的脚本:
# script.R
##reading model and predict test data
t <- Sys.time()
pls <- readRDS("fit.rds")
testing <- readRDS("test.rds")
head(predict(pls, newdata = testing))
print(Sys.time() - t)
我 运行 在终端中使用以下语句:
pawel@pawel-MS-1753:~$ Rscript script.R
Loading required package: pls
Attaching package: ‘pls’
The following object is masked from ‘package:stats’:
loadings
[1] M M R M R R
Levels: M R
Time difference of 2.209697 secs
有什么办法可以做到faster/more高效吗?例如,是否有可能不在每次执行时加载包? readRDS 在这种情况下读取模型是否正确?
您可以尝试使用 "profvis" 包分析您的代码:
#library(profvis)
profvis({
for (i in 1:100){
#your code here
}
})
我试过了,碰巧 99% 的执行时间是训练时间,1% 是 saving/loading RDS 数据,其余的成本大约为 0(加载包,加载数据,...):
所以如果你不想优化训练函数本身,那么减少执行时间的方法似乎很少。
我已经看到 PLS 分类模型出现这种情况,但我不确定这个问题。但是,请尝试改用 method = "simpls"
。您将得到大致相同的答案,并且应该很快完成。