1

我是 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)

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

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

这是我收到的错误消息:

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

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

提前致谢。

卡洛斯·利马

4

4 回答 4

0

如果您有分类数据,并且某些列值存在于您的测试集(新数据)中但不在训练集中,则 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 的值“可能”。

于 2013-12-04T22:24:59.377 回答
0

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

于 2018-11-18T09:47:09.340 回答
0

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

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

于 2016-10-10T10:14:42.203 回答
0

我刚刚遇到了这个问题,这就是我解决它的方法:

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

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

于 2018-04-25T17:49:53.233 回答