R中的精确召回曲线

时间:2020-10-06 02:23:34

标签: r graph precision precision-recall

有人可以帮助我理解此精确召回曲线(用R生成)中的“阈值”(即颜色渐变)吗?

https://imgur.com/a/rQZH7XR

R代码:

import React from 'react'
import {Database} from './DatabaseContext'
import Card from '@material-ui/core/Card'
import CardContent from '@material-ui/core/CardContent'
import Button from '@material-ui/core/Button'
import {makeStyles} from '@material-ui/core'

const HomeHotels = () => {
  const classes = useStyles()
  const featuredHotels = useContext(Database)
  console.log(featuredHotels)
}

为什么阈值从-3变为3?阈值不是必须在0到1之间吗?有人知道如何解决这个问题(产生介于0和1之间的阈值)吗?

谢谢!

来源:https://cran.rstudio.com/web/packages/PRROC/PRROC.pdf

1 个答案:

答案 0 :(得分:0)

我不太清楚你想做什么。您在注释中链接到的图显示了精度/召回率随分类器阈值参数的变化而变化,但是您没有显示涉及任何分类问题的代码。

让我们使用iris数据集并构造一个简单的二进制分类问题;为此,我们首先删除Species == "setosa"的所有数据。

data <- subset(iris, Species %in% c("versicolor", "virginica"))
data <- droplevels(data)

然后,我们将带有高斯(径向)内核的简单SVM用于我们的分类器。在这种情况下,我们只有一个参数gamma。我们确定用于更改gamma的值的分类器的精度/召回率并绘制结果

library(e1071)
library(caret)
library(tidyverse)

gamma <- 10^(seq(-3, 2, by = 0.1))
df <- map_dfr(
    cost,
    function(param)
        svm(Species ~ ., data = data, gamma = param, kernel = "radial") %>%
            predict() %>%
            confusionMatrix(data$Species, mode = "prec_recall") %>%
            pluck("byClass") %>%
            enframe() %>%
            filter(name %in% c("Precision", "Recall")) %>%
            mutate(gamma_param = param))

ggplot(df, aes(gamma_param, value, colour = name)) + 
    geom_line() + 
    scale_x_log10() +
    expand_limits(y = c(0, 1)) + 
    theme_minimal()

enter image description here

请注意,参数(及其取值)取决于您的分类器;在这种简单的情况下,您只有一个可调参数。

PS。我出于习惯和方便而使用了ggplot和其他tidyverse函数;您也可以在base R中执行类似的操作。