【问题标题】:DecisionTree Predict决策树预测
【发布时间】:2013-12-21 10:02:21
【问题描述】:

我是 R 数据挖掘算法的新手,我需要开发一个脚本来帮助我预测事件。 所以,我选择了一个决策树模型来帮助完成这项任务。

我的数据集有这样的结构:

_____________________________
ATTR1 | ATTR2 | ATTR3 | CLASS
  Y   |   N  |   N    |    N
______|______|_______ |_______

这是我创建的脚本:

library(party)
myFormula <- CLASS ~ ATTR1 + ATTR2 + ATTR3

ind <- sample(2, nrow(myData), replace=TRUE, prob = c(0.7,0.3))
trainData <- myData[ind==1,]
testData <- myData[ind==2,]

energy_ctree <- ctree(myFormula, data=trainData)
testpred <- predict(energy_ctree, newdata= testData)

所有这些命令都可以正常工作。 所以,我怀疑是要预测新的数据行!

我已经调用函数 predict(energy_ctree ,newdata=newdataSet) 使用不包括 CLASS 列的新数据集(我想通过决策树模型预测找到)。

这是我得到的错误信息:

"Error in checkData(oldData, RET) : 
  Levels in factors of new data do not match original data"

那么,根据我之前创建的决策树模型来预测我的 newDataSet 的 de 类列的步骤是什么。

提前致谢。

卡洛斯·利马

【问题讨论】:

  • 这意味着您的变量之一是一个因素,当您将数据一分为二时,该因素的一个水平根本没有出现在两组之一中(偶然)。您需要更仔细地拆分数据,以确保所有级别在两组中至少出现一次。

标签: r data-mining decision-tree predict


【解决方案1】:

如果您对训练数据中的变量类别进行了更改(例如将 char 转换为因子),则需要在测试数据集中反映相同的内容。我进行了这些更改,此后运行顺利。

【讨论】:

    【解决方案2】:

    我刚遇到这个问题,我是这样解决的:

    1 - 验证因子变量,它们必须具有相同的水平。 2 - 验证一个表中的数字变量和第二个表中的整数变量。

    通过清除这个问题,我的脚本开始顺利运行。

    【讨论】:

      【解决方案3】:

      即使我遇到了同样的问题。我所做的是,将最终的预处理文件写入 csv,然后再次将其读取到数据框中,然后将这些测试数据应用到模型上。完美。

      背后的原因:因为测试数据框中的分类值很少,即使在删除后,列表中也有 0 行(在训练数据集中不会出现)。

      【讨论】:

        【解决方案4】:

        如果您有分类数据,并且某些列值存在于您的测试集(新数据)中但不在训练集中,R 会抱怨。例如,如果您的训练数据中的属性 Attr1 仅包含如下所示的级别“否”和“是”,则在 R 中使用决策树将无法在 Attr1 列包含“可能”的新数据集上使用,例如.

            Attr1 ......... ( training set)
             "No"
             "No"
             "No"
             "Yes"
             "Yes"
        
        
            Attr1: .......(testing set)
            "Yes"
            "No"
             .
             .
            "maybe"   // R will complain about this value ( it never found it during the training)
        

        一种可能的解决方案是提前指定级别。对于前面的示例,您可以在进行训练之前指定 Attr1 的级别,如下所示:

            levels(Attr1, c("No","Yes","Maybe")). 
        

        通过这样做,您的训练集不必包含属性 Attr1 的值“可能”。

        【讨论】:

        • 感谢您的回复。就我而言,训练集和测试具有相同的级别,并且“我的新数据”(要计算的类值)也具有相同的结构。我真的不知道如何预测新的数据案例以及我需要如何转换数据集
        猜你喜欢
        • 2016-07-12
        • 2017-04-11
        • 1970-01-01
        • 2020-08-11
        • 2018-06-29
        • 2013-07-11
        • 1970-01-01
        • 2017-05-31
        • 2015-12-13
        相关资源
        最近更新 更多