【问题标题】:Counting majority vote in R在R中计算多数票
【发布时间】:2015-06-21 12:23:24
【问题描述】:

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

例如。

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

第一行我要R选A,第二行我要R选C。因素只有A、B、C 3个层次。请问R怎么找多数票?

【问题讨论】:

  • this 是您要找的吗?
  • 要添加,您可能需要链接中的apply(df1, 1, Mode)
  • 需要明确当有多种模式时该怎么做。 “模式”一词的模糊性和“模式发现”缺乏统计理论可能是 core-R 函数没有它的原因。另请查看 :Mode {asbio} 和 mfv {modeest};

标签: r frequency prediction vote


【解决方案1】:

模态赢家

您想要的是确定每个观察的模态获胜算法。 R 没有 mode() 函数,它在“模式”的含义中工作,因为它在最常见的结果中 - 而是返回对象的“存储模式”。

这是一个简单的函数,为了更清楚,故意更长。在 cmets 中链接的函数 Mode() 上使用 apply 也可以:

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" 

数据结构

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

复数与多数和关系

请注意,这不是多数结果,而是多数结果。如果你有 A、B、C、C、D、E,那么 C 是多数结果,但不是多数结果(因为它只出现 1/3 的时间,而多数意味着 > 1/2)。您的问题表明您希望为每次观察宣布某种赢家。这也意味着它根据标签值相当随意地决定关系。例如:

results2 <- data.frame(model1 = c("A", "A", "A", "B", "B", "B"),
                      model2 = c("A", "B", "C", "C", "D", "E"))
apply(results2, 2, chooseBestModel)
## model1 model2 
##    "A"    "C" 

【讨论】:

    猜你喜欢
    • 2011-04-13
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多