使用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!
答案 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)
它就像一个魅力!