插入包:所有功能均不适用于所有型号

时间:2015-01-26 15:00:16

标签: r r-caret nnet

我在下面的脚本可以正常使用ctree模型/派对包。当我将它与NNET模型/包交换时,varImp和plot(最终模型)会抛出错误。我是在假设'插入符包中的辅助函数适用于所有支持的模型。

library(caret)
library(nnet)

#read in data
data = iris

#split data into training, test, and final test samples
trainIndex <- createDataPartition(data$Species, p=.80, list=F)
train = data[trainIndex,]
test = data[-trainIndex,]

#train and plot model fit
tree.fit = train(Species~., data=train, method="nnet")
varImp(tree.fit)
plot(tree.fit$finalModel)

#predict test data
tree.pred.test = predict(tree.fit, newdata=test)
confusionMatrix(tree.pred.test, test$Species)


> varImp(tree.fit)
nnet variable importance

  variables are sorted by maximum importance across the classes
Error in data.frame(`NA` = character(0), `NA` = character(0), `NA` = character(0),  : 
  row names supplied are of the wrong length
In addition: Warning message:
In format.data.frame(x, digits = digits, na.encode = FALSE) :
  corrupt data frame: columns will be truncated or padded with NAs
> plot(tree.fit$finalModel)
Error in xy.coords(x, y, xlabel, ylabel, log) : 
  'x' is a list, but does not have components 'x' and 'y'

2 个答案:

答案 0 :(得分:0)

你正在尝试&#39;绘制tree.fit$finalModel,它与caret无关,因为它是原始模型类。如果这不存在,那么这是一个问题。

对于变量重要性问题似乎是print.varImp.train的错误。如果将其分配给对象并查看importance部分,则可以看到它。

答案 1 :(得分:0)

今天使用Lirescategorie.helpers({ sCategories:(){ return Scategories.find(); }, categorie:(){ return Categories.findOne(this.categorieID).categorie; } }); 进入类似的问题。 caret::train(method = "nnet")的输出很好,但是(据我所知),因为它还包含caret::varImp()的列,我无法通过overall进行绘制。但是,我能够用以下方式绘制变量重要性:

caret::plot(varImp())

来自nn.m1.vi = varImp(nn.m1) nn.m1.vi$importance = as.data.frame(nn.m1.vi$importance)[, -1] plot(nn.m1.vi, main = "Var Imp: nn.m1")

sessionInfo()

迈克尔