计算R中的多数投票

时间:2015-06-21 12:23:24

标签: r frequency prediction vote

我有一个数据框,其中包含7种机器学习算法对每次观察的预测。我想选择最常出现的预测。如何告诉R选择每行中最常出现的因子变量?

例如

  A, A, A, B, B
  B, B, C, C, C

在第一行中,我希望R选择A,在第二行中我希望R选择C.只有3个级别的因素:A,B和C.如何让R查找多数投票?

1 个答案:

答案 0 :(得分:2)

模态获胜者

你想要的是确定每个观察的模态获胜算法。 R没有titles.GetMethod("Add").Invoke(titles, chartTitle);函数,它在“模式”的意义上与最常出现的结果一样 - 而是返回对象的“存储模式”。

这是一个有意长的简单功能,以便更加清晰。在评论中链接的函数mode()上使用apply也可以:

Mode()

数据结构

请注意,我已将每个观察的获胜算法结果变为“宽”格式的变量,因为data.frame应该以列而不是行记录变量。另一种方法是创建一个只有两列的data.frame,其中一列是观察数,第二列是获胜算法,但这需要与上述解决方案不同的处理方式。

多元诉多数,以及关系

请注意,这不是多数结果,而是多个结果。如果您有A,B,C,C,D,E则C是多个结果但不是多数结果(因为它仅发生1/3的时间,并且多数意味着> 1/2)。你的问题建议你想要为每次观察宣布某种胜利者。这也意味着它根据标签值相当任意地决定关系。例如:

results <- data.frame(model1 = c("A", "A", "A", "B", "B"),
                      model2 = c("B", "B", "C", "C", "C"))
chooseBestModel <- function(x) {
    tabulatedOutcomes <- table(x)
    sortedOutcomes <- sort(tabulatedOutcomes, decreasing=TRUE)
    mostCommonLabel <- names(sortedOutcomes)[1]
    mostCommonLabel
}
apply(results, 2, chooseBestModel)
## model1 model2 
##    "A"    "C"