使用测试集中的缺失值评估 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的主要内容,如果未能解决你的问题,请参考以下文章

使用 J48 构建分类器

Weka:分类器和 ReplaceMissingValues

Weka J48 分类器:无法处理数字类?

尝试将 AdaBostM1 weka 分类器与配置用于修剪的 J48 决策树分类器一起使用时,Weka 引发命令行错误

WEKA 分类器返回一个分类而不考虑值

weka中新实例的分类