使用测试集中的缺失值评估 weka 分类器 J48,R RWeka
Posted
技术标签:
【中文标题】使用测试集中的缺失值评估 weka 分类器 J48,R RWeka【英文标题】:Evaluating weka classifier J48 with missing values in test set, R RWeka 【发布时间】:2013-12-01 17:45:38 【问题描述】:使用 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 当拆分使用缺失变量时我想使用分数?
谢谢!
【问题讨论】:
【参考方案1】:问题是您需要告诉 J48() 如何处理缺失值。
library(RWeka)
?J48()
#pertinent output
J48(formula, data, subset, na.action,
control = Weka_control(), options = NULL)
na.action 告诉 R 如何处理缺失值。跟进 na.action 时,您会发现“‘工厂新鲜’默认值为 na.omit”。在这种设置下当然没有足够的实例!
我没有将na.action作为默认省略,而是将其更改如下,
iris_fit<-J48(Species~., data = iris_input, na.action=NULL)
它就像一个魅力!
【讨论】:
谢谢。再次。我发现有时很难找到所有选项。我认为它会是这样的 :) 所以如果我是正确的,请在构建模型时使用 na.action。之后使用evaluate的时候就不需要了吗? 我认为你是对的,你只需要告诉模型如何处理缺失值,然后评估就会从那里得到它。有时我认为需要第二双眼睛才能发现问题。尽管 RWeka 的文档不是超级完整(根据我的经验),但它仍然是一个不错的工具!以上是关于使用测试集中的缺失值评估 weka 分类器 J48,R RWeka的主要内容,如果未能解决你的问题,请参考以下文章
Weka:分类器和 ReplaceMissingValues