标签: roc

如何切换 ROC 曲线以优化假阴性率?

ROC 曲线绘制了 TPR 与 FPR 的关系,并根据训练集概率的排列顺序改变阈值。选择的阈值是与左上角最左上角的点相关的概率。这基本上最大化了 TPR 并最小化了误报率。

但是,可以说我的应用程序谈到了最小化假阴性率吗?那么这条曲线会如何变化呢?两者之间的平衡如何?

statistics machine-learning false-positive roc

3
推荐指数
1
解决办法
3381
查看次数

在不使用任何包的情况下在 R 中绘制 ROC 曲线

嗨,我对 R 编程很陌生,我在不使用任何包的情况下绘制 ROC 曲线时遇到了麻烦。

我使用以下方法生成了我的数据:

d=rpearsonIII(100,0.5,360,20)
nd=rnorm(100,450,25)
Run Code Online (Sandbox Code Playgroud)

我需要一个向量,d 的值 <400,nd 的值 >400,所以我做了:

spec = (cumsum(nd[nd>400])/sum(nd))*100
sens = (cumsum(d[d<400])/sum(nd))*100
Run Code Online (Sandbox Code Playgroud)

我是这样绘制的:

plot(1-spec,sens)
Run Code Online (Sandbox Code Playgroud)

但情节与我预期的完全不同

编辑:感谢给出的建议,我的代码现在看起来像这样:

sc2 = c(rnorm(50,450,25),rpearsonIII(50,0.5,360,20))
scF = sc2 < 395

thresholds <- sort(sc2)

pos <- sum(scF);pos
neg <- sum(!scF);neg

tn <- cumsum(!scF);tn
spec <- tn/neg;spec

tp <- pos - cumsum(scF);tp
sens <- tp/pos;sens

plot(1 - spec, sens, type = "l", col = "red", 
     ylab = "Sensitivity", xlab = "1 - Specificity")
abline(c(0,0),c(1,1))
Run Code Online (Sandbox Code Playgroud)

绘制的 roc 曲线如下所示: roc 曲线

我现在的问题是,如果改变生成数据的顺序(rnorm 和 …

r roc

3
推荐指数
1
解决办法
2638
查看次数

如何生成阳性预测值 (PPV) 与各种分类截止点的关系图?

我生成了一些分数来帮助预测某些内容是“是”(1) 还是“否”(0),假设数据包括:

scores = c(10:20)

response = c(0,0,1,0,1,0,1,1,0,1,1)

mydata = data.frame(scores, response)
Run Code Online (Sandbox Code Playgroud)

我可以进行 ROC 分析,得出 AUC 为 0.77:

roc(response = mydata$response, predictor = mydata$scores) 
Run Code Online (Sandbox Code Playgroud)

现在,我如何准确地看到选择不同的截止值时会发生什么?我想在 x 轴上设置截止值(比方说 13,14,15,16,17),在 y 轴上设置 PPV。有什么好的方法可以做到这一点?我需要什么功能/包?

r classification roc

3
推荐指数
1
解决办法
1626
查看次数

手动计算 AUC

如何获得具有 fpr 和 tpr 的 AUC 值?Fpr 和 tpr 只是从这些公式中获得的 2 个浮点数:

my_fpr = fp / (fp + tn)
my_tpr = tp / (tp + fn)
my_roc_auc = auc(my_fpr, my_tpr)
Run Code Online (Sandbox Code Playgroud)

我知道这是不可能的,因为 fpr 和 tpr 只是一些浮点数,它们需要是数组,但我不知道如何做到这一点。我也知道我可以这样计算 AUC:

y_predict_proba = model.predict_proba(X_test)
probabilities = np.array(y_predict_proba)[:, 1]
fpr, tpr, _ = roc_curve(y_test, probabilities)
roc_auc = auc(fpr, tpr)
Run Code Online (Sandbox Code Playgroud)

但出于某些原因,我想避免使用 predict_proba。所以我的问题是:我怎样才能获得 AUC fp, tp, fn, tn, fpr, tpr?换句话说,是否有可能在没有 的情况下获得 AUC roc_curve

python false-positive predict roc auc

3
推荐指数
2
解决办法
9773
查看次数

为 DecisionTreeClassifier 绘制多类 ROC 曲线

我试图用文档中提供的 svm.SVC 以外的分类器绘制 ROC 曲线。我的代码适用于 svm.SVC;然而,在我切换到 KNeighborsClassifier、MultinomialNB 和 DecisionTreeClassifier 后,系统一直告诉我check_consistent_length(y_true, y_score)Found input variables with inconsistent numbers of samples: [26632, 53264] 我的 CSV 文件看起来像这样

这是我的代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from itertools import cycle
import sys
from sklearn import svm, datasets
from sklearn.metrics import roc_curve, auc
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import label_binarize
from sklearn.multiclass import OneVsRestClassifier
from scipy import interp
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import MultinomialNB
from …
Run Code Online (Sandbox Code Playgroud)

python machine-learning roc scikit-learn

3
推荐指数
2
解决办法
6917
查看次数

R - ROC 曲线/AUC 特异性与 1-特异性

在此处输入图片说明我已经创建了一些预测模型,我正在通过查看 ROC 曲线和 AUC 来评估它们。

目前,我在 X 轴上有特异性,但是,当我研究 ROC 曲线时,我在 X 轴上看到了 1 - 特异性。

有什么区别,我应该使用哪个来验证我的预测模型?如果特异性在 X 轴上,我是否还想最大化 AUC(根据经验,答案是肯定的,但我想确认一下)?

这是我如何绘制它:

> library(pROC)
> g <- roc(Setup ~ Probs, data = Data)
> plot(g) 
> auc(g)
> ci.auc(g)
Run Code Online (Sandbox Code Playgroud)

r roc auc data-science proc-r-package

3
推荐指数
1
解决办法
1730
查看次数

roc_curve 指标中的阈值大于 1 可以吗?

预测每个所选样本的类别分配概率Train_features

probs = classifier.predict_proba(Train_features)`
Run Code Online (Sandbox Code Playgroud)

选择必须确定 AUC 的类别。

preds = probs[:,1]
Run Code Online (Sandbox Code Playgroud)

计算假阳性率、真阳性率以及可以清楚地区分 TP 和 TN 的可能阈值。

fpr, tpr, threshold = metrics.roc_curve(Train_labels, preds)
roc_auc = metrics.auc(fpr, tpr)
print(max(threshold))
Run Code Online (Sandbox Code Playgroud)

输出:1.97834

roc auc

3
推荐指数
1
解决办法
1813
查看次数

如何在Python中不使用sklearn计算TPR和FPR?

初始化列表列表:

data = [[1.0, 0.635165,0.0], [1.0, 0.766586,1.0], [1.0, 0.724564,1.0],
        [1.0, 0.766586,1.0],[1.0, 0.889199,1.0],[1.0, 0.966586,1.0],
        [1.0, 0.535165,0.0],[1.0, 0.55165,0.0],[1.0, 0.525165,0.0],
        [1.0, 0.5595165,0.0] ]
Run Code Online (Sandbox Code Playgroud)

创建 Pandas 数据框:

df = pd.DataFrame(data, columns = ['y', 'prob','y_predict']) 
Run Code Online (Sandbox Code Playgroud)

打印数据框。

print(df)
Run Code Online (Sandbox Code Playgroud)

对于这个数据集,我想找到:

  1. 不使用 Sklearn 的混淆矩阵
  2. 不使用 Sklearn 的 TPR 和 FPR 的 Numpy 数组,用于绘制 ROC。

如何在 python 中做到这一点?

python machine-learning roc auc precision-recall

3
推荐指数
1
解决办法
1万
查看次数

如何绘制不同插入符训练模型的 AUC ROC?

这是一个代表

library(caret)
library(dplyr)

set.seed(88, sample.kind = "Rounding")

mtcars <- mtcars %>%
  mutate(am = as.factor(am))

test_index <- createDataPartition(mtcars$am, times = 1, p= 0.2, list = F)

train_cars <- mtcars[-test_index,]

test_cars <- mtcars[test_index,]

set.seed(88, sample.kind = "Rounding")
cars_nb <- train(am ~ mpg + cyl,
                data = train_cars, method = "nb", 
                trControl = trainControl(method = "cv", number = 10, savePredictions = "final"))

cars_glm <- train(am ~ mpg + cyl,
                 data = train_cars, method = "glm", 
                 trControl = trainControl(method = "cv", number = 10, …
Run Code Online (Sandbox Code Playgroud)

r roc

3
推荐指数
1
解决办法
1295
查看次数

使用 Caret 包的测试集的 ROC 曲线

我正在尝试从测试集上的插入符号中获取最佳模型的 ROC 曲线。我遇到了MLeval一个看起来很方便的包(输出非常彻底,使用几​​行代码提供了所有需要的指标和图表)。一个很好的例子在这里:https : //stackoverflow.com/a/59134729/12875646

我正在尝试下面的代码,并且能够获得训练集所需的指标/图表,但是当我尝试在测试集上工作时不断出错。

library(caret)
library(MLeval)
data(GermanCredit)

Train <- createDataPartition(GermanCredit$Class, p=0.6, list=FALSE)
training <- GermanCredit[ Train, ]
testing <- GermanCredit[ -Train, ]


ctrl <- trainControl(method = "repeatedcv", number = 10, classProbs = TRUE, savePredictions = TRUE)

mod_fit <- train(Class ~ Age + ForeignWorker + Property.RealEstate + Housing.Own + 
    CreditHistory.Critical,  data=training, method="glm", family="binomial",
    trControl = ctrl, tuneLength = 5, metric = "ROC")

pred <- predict(mod_fit, newdata=testing)
confusionMatrix(data=pred, testing$Class)

test = evalm(mod_fit) # this gives the ROC …
Run Code Online (Sandbox Code Playgroud)

r roc r-caret

3
推荐指数
1
解决办法
681
查看次数