在R中:is.data.frame(数据)出错:对象''没找到,C5.0情节

时间:2015-07-31 04:21:58

标签: r plot decision-tree

此问题类似于Stackoverflow上的其他一些问题(hereherehere),但又不同,以至于我无法根据我的情况推断这些答案。

我有一个功能,我适合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指出了一些解决方法。

2 个答案:

答案 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)

您可以使用特殊的赋值运算符<<-代替标准的运算符(<-)。它将对象保存到全局环境中,可以解决您的问题。