首页 > 解决方案 > R - 给定一个概率向量,如何找到一个阈值,使得恰好 n 个元素被分类为正数?

问题描述

假设我有一个概率向量

> probs <- c(0.2, 0.3, 0.5, 0.7, 0.8, 0.9)
> probs
[1] 0.2 0.3 0.5 0.7 0.8 0.9

我想通过将每个元素与某个阈值进行比较来将其分类为正面或负面(为了论证,假设概率 >= 阈值的元素将被分类为正面,否则被认为是负面的)。我不知道我想使用什么阈值,但我知道我想要将 3 个元素归类为正值。

我自己的解决方案是检查所有概率并尝试将每个概率用作阈值并测试它是否会导致所需数量的阳性结果。

> sum(probs >= 0.2)
[1] 6
> sum(probs >= 0.3)
[1] 5
> sum(probs >= 0.5)
[1] 4
> sum(probs >= 0.7)
[1] 3

R(包括库)中是否有任何功能可以提供开箱即用的功能?

编辑:这个问题有一个相当简单的解决方案(因此使专用功能过时),因此我会接受最佳解决方案,即使它没有回答问题

标签: rclassification

解决方案


您可以sort按降序排列向量并选择nth 值

n <- 3
sort(probs, decreasing = TRUE)[n]
#[1] 0.7

order

probs[order(-probs)[n]]
#[1] 0.7

推荐阅读