处理R中的不平衡数据 - 错误消息

时间:2016-03-15 11:25:28

标签: r machine-learning decision-tree

我正在尝试处理R中的不平衡数据集。我传递了火车和测试集的csv文件,我试图预测,但预测只运行前10个实例。输出消息是:  预测名为exit的代码值为1

我无法理解为什么。数据集包括数字和非数字数据。所以,我决定使用C50。这里的另一个问题是分类树只有来自数据集的18个属性的一个节点。 任何人都可以帮助解决上面的错误消息或建议我另一个机器学习算法来处理数据吗?

谢谢

3 个答案:

答案 0 :(得分:1)

我不确定您如何将数据划分为列车和测试集,如果您需要更具体的建议,可能需要提供更多信息。因为我遇到了你遇到的问题,我可以给你一些想法。

  1. 对数据进行分区后,请务必执行summary()列车和测试集,以查看响应变量的摘要。您可以使用table(dataframe$responseVariable)查看有多少响应变量是A或有多少是B.(假设您正在预测A或B) 如果训练集是非常不平衡的,例如,A的90%而B的10%,你的模型可能过度拟合,所以如果你在训练集上应用该模型,它可能只给你18个预测中的1个节点你有没有节点(你得到的错误)。

  2. 要处理不平衡数据,1)您可以使用C5.0中的参数(...试验= 10)来增强模型(试验可以是任意数字)。 2)此外,您可能还想在c5.0模型中包含成本矩阵。创建成本矩阵以不同方式对您的类进行加权。您可以在线查找,有几个关于成本矩阵的文档。

  3. 我不确定为什么你的模型只运行前10行测试集而不知道你做了什么或你有什么样的数据的更多信息。但是,我能想到的一点是,可能在您的测试集中,响应变量中有NA,您应该删除那些响应变量为NA的行(对于列车和测试集)

  4. 最后说明: 如果你在C5.0中尝试了成本矩阵和提升,但仍然只获得一个节点(提升可能会给你更重要的变量),你可能需要认为那是"回答"你要的那个。这意味着变量在所有预测变量中获得的信息最多。

    希望这一切都有所帮助。

答案 1 :(得分:0)

重要说明:您的火车和验证集应具有相同的列数,并确保列在训练集和验证集中的顺序相同。您的输入文件可以是.CSV或.ARFF

这两种格式中的任何一种
    Install.packages(random forest)
    library(random forest)

 Train = read.csv(file.choose(), sep=",",header = TRUE)
 dim(Train)
 Test = read.csv(file.choose(),sep=",",header= TRUE)
 RF <- random forest(class~., data= Train, ntree= 100)
 RPred <- predict(RF, Test)

希望这有帮助。

答案 2 :(得分:0)

在C50中,列车数据集必须具有测试集中提供的所有因子。例如, 动车组: [约翰,玛丽,露丝]

测试集: [约翰,马克,露丝]

如果您尝试预测使用此测试集,它将抛出输出消息:&#34;预测名为exit的代码值为1&#34;正好在预测了约翰&#34;因为&#34; Mark&#34;列车中没有。

在你的情况下,既然你提到它会在第10行之后完全抛出错误,我建议你检查测试数据集中的第11行。它可能有一个在训练数据中无法使用的因素。