我正在考虑减少我训练模型的大小(即this和this帖子),我在插入符号列功能中遇到了 trim
参数 . 具体来说,这是在版本6.0-47中添加的,来自documentation:
如果为TRUE,则对象\ $ finalModel中的最终模型可能会删除对象的某些组件,因此请减小已保存对象的大小 . 预测方法仍然有效,但该模型的某些其他功能可能无效 . 只有已实现此功能的模型才会进行调整 .
我意识到使用 trim
的结果可能因使用的方法而异 . 是否有资源确定在使用 trim
参数后将包含哪些内容并从最终模型中排除?我可以节省多少空间?什么(如果有的话)功能丢失了?
在之前的问题中,如果参数甚至可以节省空间,则不明确 . 例如,这是一个简单的示例,其中 trim=T
和 trim=F
使用randomForests返回相同大小的对象:
library(caret)
library(pryr)
# make a large dataset so iris example is not too trivial
large_iris <- iris[rep(seq_len(nrow(iris)), 10), ]
object_size(large_iris) # 1.38 MB
set.seed(1234)
mdl1 <- train(Species~.,data=large_iris,method="rf",trControl=trainControl(trim=F))
object_size(mdl1) # 1.24 MB
attributes(mdl1)
set.seed(1234)
mdl2 <- train(Species~.,data=large_iris,method="rf",trControl=trainControl(trim=T))
object_size(mdl2) # 1.24 MB
attributes(mdl2)
2 回答
trim
选项(现在)不适用于randomForest
.如果你在github上搜索修剪问题,你会发现list of issues .
Issue 90提到这个关于修剪:
这证实了我对代码的调查,你可以在测试中看到插入符号的功能,这些是经过测试的模型,看到修剪结果会产生较小的对象大小,并且预测结果仍然正确 .
同样使用非公式接口可能会减少占用空间 . 如果您使用公式界面,Caret会做一些额外的工作 .
我对caret package以及@phiver列出的方法进行了一些挖掘 . tldr;在bayesglm,C5.0,C5.0Cost,C5.0Rules,C5.0Tree,glm,glmnet,rpart,rpart2和treebag上使用trim时,请参阅下面的详细信息 . 否则,为其他方法设置
trim=T
无效bayesglm和glm
从模型中调整不需要预测的数据输出,使得拟合模型相对于训练数据大小在大小上是恒定的 . 修剪功能是
这主要基于this post,其中包含有此限制的有趣分析:
我还包括了直接从caret package:具有修剪功能的其他方法的修剪功能
glmnet
C5.0,C5.0Cost,C5.0Rules,C5.0Tree
rpart,rpart2
树袋