【问题标题】:R Weka J48 Decision Tree Cannot handle numeric classR Weka J48决策树无法处理数字类
【发布时间】: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!

我不明白这个错误,首先它是一个分类类。其次,在文档中的示例中,它完美地使用了分类列和数值列。

我怎样才能让它工作?

【问题讨论】:

    标签: r weka decision-tree


    【解决方案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 是解析数值后想要的答案。

    【讨论】:

      猜你喜欢
      • 2011-12-17
      • 2016-03-14
      • 2013-08-29
      • 2014-08-29
      • 2018-03-19
      • 2015-07-22
      • 2015-02-06
      • 2017-12-08
      • 2014-09-18
      相关资源
      最近更新 更多