DecisionTree预测

时间:2013-12-04 18:51:55

标签: r data-mining decision-tree predict

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

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

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

这是我收到的错误消息:

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

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

提前致谢。

Carlos Lima

4 个答案:

答案 0 :(得分:0)

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

    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的值“Maybe”。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我刚遇到这个问题而且我的解决方法如下:

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

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

答案 3 :(得分:0)

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