评估测试集中缺少值的weka分类器J48,R RWeka

时间:2013-11-18 14:23:54

标签: r weka decision-tree

使用evaluate_Weka_classifier评估简单测试集时出错。试着通过RWeka了解R到Weka的界面是如何工作的,但我仍然没有得到这个。

library("RWeka")
iris_input  <- iris[1:140,]
iris_test <- iris[-(1:140),]
iris_fit  <- J48(Species ~ ., data = iris_input)
evaluate_Weka_classifier(iris_fit, newdata = iris_test, numFolds=5)

这里没有问题,正如我们所假设的那样(它当然是一个愚蠢的测试,没有随机的保持数据等)。但现在我想模拟丢失的数据(很多)。所以我将Petal.Width设置为缺失:

iris_test$Petal.Width <- NA
evaluate_Weka_classifier(iris_fit, newdata = iris_test, numFolds=5)

哪个给出错误:     .jcall(评估,“S”,“toSummaryString”,复杂性)出错:       java.lang.IllegalArgumentException:不能有多于实例的折叠!

编辑:这个错误应该告诉我我没有足够的实例,但我有10个

编辑:如果我使用write.arff,它可以被Weka导出和读入。将Petal.Width {}更改为Petal.Width数字,使两个文件完全相同。然后它在Weka工作。

这是一个思考错误吗?在阅读机器学习,实用机器学习工具和技术时,它似乎是合法的。也许我只需要告诉RWeka我想在分割使用缺失变量时使用分数?

日Thnx!

1 个答案:

答案 0 :(得分:4)

问题是您需要告诉J48()如何处理缺失值。

library(RWeka)
?J48()  

#pertinent output  
J48(formula, data, subset, na.action,
control = Weka_control(), options = NULL)

na.action告诉R如何处理缺失值。在跟进na.action时你会发现“'factory-fresh'默认值是na.omit”。在这种情况下,当然没有足够的实例!

我没有将na.action作为默认省略,而是将其更改为如下,

iris_fit<-J48(Species~., data = iris_input, na.action=NULL)

它就像一个魅力!