R Weka J48决策树无法处理数字类
Posted
技术标签:
【中文标题】R Weka J48决策树无法处理数字类【英文标题】:R Weka J48 Decision Tree Cannot handle numeric class 【发布时间】:2016-04-24 06:39:38 【问题描述】:我在网上找到了这份文件: https://www.erpublication.org/admin/vol_issue1/upload%20Image/IJETR032129.pdf
它在第 4 页使用 RWeka 包和 R 中的 J48 函数构建决策树。在他的示例中,他具有数值和分类值。
所以,我做了一个测试,只是在列试图预测另一个。这是一个示例:
VALUE CHURNED_F
2 1
2 0
2 0
2 0
2 0
1 0
这是我的代码:
m2 <- J48(`CHURNED_F` ~ ., data = head(train[, -c(1)]))
但我收到此错误:
Error in .jcall(o, "Ljava/lang/Class;", "getClass") :
weka.core.UnsupportedAttributeTypeException: weka.classifiers.trees.j48.C45PruneableClassifierTree: Cannot handle numeric class!
我不明白这个错误,首先它是一个分类类。其次,在文档中的示例中,它完美地使用了分类列和数值列。
我怎样才能让它工作?
【问题讨论】:
【参考方案1】:J48 要求类是分类的,或者在 R 的情况下是一个因子。我相信您的“Churned_F”变量是数字的。您可以使用结构函数检查变量的类型:
str(train)
下面的代码允许您构建 J48 树。在这里,我确保“CHURNED_F”是一个因素。
library(RWeka)
train <- data.frame(VALUE = c(2,2,2,2,2,1), CHURNED_F = factor(c(1,0,0,0,0,0)))
m2 <- J48(CHURNED_F ~., data = train)
【讨论】:
谢谢,这样它工作了:train[,3] = factor(train[,3]) 但现在我得到 java.lang.OutOfMemoryError: Java heap space 你可以试试这个来增加堆大小......虽然bramschoenmakers.nl/en/node/726我还没有测试过【参考方案2】:这意味着,您的答案列必须由字符而不是数值表示。你可以用这个方法改变它:
Wine$X1=factor(Wine$X1,levels = c(1,2,3),labels = c("Uno","Dos","Tres"))
Wine
是我的数据集。 X1
是我的答案栏。 1、2和3是答案。 Uno、Dos 和 Tres 是解析数值后想要的答案。
【讨论】:
以上是关于R Weka J48决策树无法处理数字类的主要内容,如果未能解决你的问题,请参考以下文章
如何将 WEKA 机器学习用于贝叶斯神经网络和 J48 决策树