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 决策树中实现代理拆分?

weka 代码 算法 j48 决策树 c4.5

如何将 WEKA 机器学习用于贝叶斯神经网络和 J48 决策树

WEKA 使用类值来解决决策树?

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

如何使用 Weka API 请求单个属性的输入以遍历决策树?