此问题类似于Stackoverflow上的其他一些问题(here,here和here),但又不同,以至于我无法根据我的情况推断这些答案。
我有一个功能,我适合C5.0模型,而不是尝试绘制模型。
train_d <- globald[train_ind,c(features,21)]
model <- C5.0(binclass ~ .,data=train_d,trials=10)
binclass
是我的训练/测试数据中的列名称(globald是一个数据框,我用_ind
索引和列c(3:12,21)
对其进行子集化,其中第21列的名称为{{ 1}})。配件效果很好。但是,当我还添加行
binclass
然后我收到以下错误:plot(model,trial=0)
。
如何在拟合模型时找到并正确使用Error in is.data.frame(data) : object 'train_d' not found
,但在绘图时,train_d
无处可寻?并且,有关如何解决此问题的任何建议。 [r]中的命名空间对我来说仍然是一个谜。
最小运行示例如下:
train_d
调用f <- function(){
library(C50)
set.seed(1)
class = c(1,2)
d <- data.frame(feature1 = sample(1:10,10,replace=TRUE), feature2 = 1:10, binclass = class)
d$binclass <- as.factor(d$binclass)
model <- C5.0(binclass ~ ., data=d)
plot(model)
}
会导致以下错误:f()
编辑: 根据MrFlick的回答,似乎这个问题的原因是C5.0代码中的一个错误。 Pascal和MrFlick指出了一些解决方法。
答案 0 :(得分:0)
@MrFlick几乎拥有它但不完全。当尝试将任意数据和目标特征传递给C50方法时,绘图的这个问题特别烦人。正如MrFlick指出的那样,它与重命名术语有关。通过在方法调用中重命名x和y项,绘图函数不会感到困惑。
tree_model$call$x <- data_train[, -target_index]
tree_model$call$y <- data_train[[target_feature]]
例如,这是一个传递任意数据和目标特征并仍能绘制结果的方法:
boosted_trees <- function(data_train, target_feature, iter_choice) {
target_index <- grep(target_feature, colnames(data_train))
model_boosted <- C5.0(x = data_train[, -target_index], y = data_train[[target_feature]], trial=iter_choice)
model_boosted$call$x <- data_train[, -target_index]
model_boosted$call$y <- data_train[[target_feature]]
return(model_boosted)
}
上述方法返回的模型对象可以正常绘制。
model <- boosted_trees(data_train, 'my_target', 10)
plot(model)
答案 1 :(得分:0)
您可以使用特殊的赋值运算符<<-代替标准的运算符(<-)。它将对象保存到全局环境中,可以解决您的问题。