1

现在解决了。问题是 data=OneT.train,这是错误的。此代码是从原始代码复制过来的。它需要是插入号 train() 函数中的 data=OneT 。当前的 OneT.train 在属性字段中存在缺失值,而不是目标,因为重新加载和拆分数据,省略了填充缺失值 - 从未使用过。


我正在尝试使用 caret 包对 C5.0 决策树进行重复的 k 折交叉验证。

以下代码生成一个有效的 C5.0 决策树(混淆矩阵的准确率为 68%):

> model <- C5.0(as.factor(OneGM) ~., data=OneT.train)  
> results <- predict(object=model, newdata=OneT.test, type="class")

caret 包代码给出了这些错误(没有缺失值):

> train_control <- trainControl(method="repeatedcv", number=10, repeats=10)  
> model <- train(as.factor(OneGM) ~., data=OneT.train, trControl=train_control, method="C5.0")  
Error in na.fail.default(list(`as.factor(OneGM)` = c(1L, 1L, 1L, 1L,  : missing values in object  
> model <- train(OneGM ~., data=OneT.train, trControl=train_control, method="C5.0")  
Error in na.fail.default(list(OneGM = c(FALSE, FALSE, FALSE, FALSE,  : missing values in object  

数据从 .csv 文件加载,OneGM 为 TRUE 或 FALSE(.csv 中的文本列) - 并且没有任何缺失值。

我想使用上面的单行插入符号包方法(我已经在多个地方看到过这种方法),而且我不是在寻找手动进行交叉验证的解决方案。

没有缺失值 (OneT[is.na(OneT)] <- 0)。以下是数据示例:

27255   0.259   0.333737266 0.308428966 0   0.017311609 TRUE  
37630   0.258   0.244679265 0.490752807 0   0.024630542 TRUE  
174019  0.143   0.343331217 0.439601992 0.005839996 0.075093867 TRUE  
97817   0.229   0.352818839 0.430965134 0   0.044375645 FALSE  
1293189 0.158   0.248084815 0.620642943 0.007529383 0.081914031 FALSE  
19652   0.259   0.17180665  0.176233943 0   0.02372035  TRUE  
141966  0.13    0.41610721  0.546760618 0.014796511 0.052060738 FALSE  
48990   0.225   0.061461912 0.56626295  0.019634793 0.062931034 TRUE  

谢谢你的帮助。

4

0 回答 0