我是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
答案 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转换为因子),则需要在测试数据集中反映相同的内容。我进行了这些更改,此后运行平稳。