- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是代码和输出,我认为从输出来看,这意味着当 fpr 为 0,tpr 为 0,这是正确的,因为预测结果标记为 0。
但输出还说,当 fpr 为 1 时,tpr 也为 1。我认为这是不正确的,因为预测器从不预测某些东西是正的(标签为 1
),所以fpr(= 1 的正确预测数/1 的总数)和 tpr(= 1 的预测数/0 的总数)怎么可能都为 1?
import numpy as np
from sklearn import metrics
y = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
pred = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
fpr, tpr, thresholds = metrics.roc_curve(y, pred)
print fpr
print tpr
print thresholds
print metrics.auc(fpr, tpr)
输出,
[ 0. 1.]
[ 0. 1.]
[1 0]
0.5
最佳答案
这两个插图可以让您更好地理解 FPR 和 TPR 是如何计算的。
案例 1:
y = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
pred = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
# -^- see the change here
真阳性 = 0
误报 = 0
真阴性 = 9
假阴性 = 1
真阳性率,(tpr) = 真阳性/(真阳性 + 假阴性)
因此,tpr = 0/(0+1) = 0。
假阳性率,(fpr) = 假阳性/(假阳性 + 真阴性)
因此,fpr = 0/(0+9) = 0。
#Output:
fpr → [ 0. 1.]
tpr → [ 0. 1.]
案例 2:
y = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
pred = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
# -^- see the change here
真阳性 = 1
误报 = 0
真阴性 = 9
假阴性 = 0
真阳性率,(tpr) = 真阳性/(真阳性 + 假阴性)
因此,tpr = 1/(1+0) = 1。
假阳性率,(fpr) = 假阳性/(假阳性 + 真阴性)
因此,fpr = 0/(0+9) = 0。
#Output:
fpr → [ 0. 1.]
tpr → [ 1. 1.]
注意:
根据roc_curve documentation
,明确指出 thresholds[0] 表示没有实例被预测,任意设置为 max(pred)+1
。[此处,2 用于二元分类任务]
当fpr
和tpr
计算后变成分数,无法量化为0 或1 时,这就有效。因此,threshold
从 0、1、2 变化。例如,当 pred
数组的最后 2 个值变为 1 时,您将获得 3 个阈值,因为 fpr
和 tpr
变为分数值。
但在我们的例子中,fpr
和 tpr
都是 0 或 1,因此不需要 的第三个值阈值
。
另外,fpr
和tpr
中的数组元素都是递增序列,即从0→1变化,必须满足一个>=2的形状。因此,它数组中必须同时包含 0 和 1 作为起始值和终止值。
对于 fpr
和 tpr
的小数值,中间列将包含数组两侧用 0 和 1 括起来的这些值。
关于python - scikit 学习 auc 函数的一些错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39220293/
在 SQL 中计算 AUC 的最佳方法是什么? 这是我得到的(假设表 T(label, confid) 和 label=0,1): SELECT sum(cumneg * label) * 1e0 /
我正在训练用于图像分类的CNN。由于我的数据集有限,我正在使用转移学习。基本上,我使用的是Google在其再培训示例(https://www.tensorflow.org/tutorials/imag
我正在 sci-kit learn 中构建 MLPClassifier 模型。我使用 gridSearchCV 和 roc_auc 对模型进行评分。训练和考试的平均成绩在 0.76 左右,还不错。 c
我使用我的测试集作为验证集。我使用了与 How to compute Receiving Operating Characteristic (ROC) and AUC in keras? 类似的方法
我分别从 sklearn 的 RandomForestClassifier 和 roc_curve、auc 方法收到不同的 ROC-AUC 分数。 以下代码让我获得了 0.878 的 ROC-AUC(
如何获得具有 fpr 和 tpr 的 AUC 值? Fpr 和 tpr 只是从这些公式中获得的 2 个浮点数: my_fpr = fp / (fp + tn) my_tpr = tp / (tp +
我有一个分类问题,我想在 sklearn 中使用 cross_validate 获取 roc_auc 值。我的代码如下。 from sklearn import datasets iris = dat
我有一个分类问题,我想在 sklearn 中使用 cross_validate 获取 roc_auc 值。我的代码如下。 from sklearn import datasets iris = dat
在 scikit learn 中,您可以使用以下方法计算二元分类器的曲线下面积 roc_auc_score( Y, clf.predict_proba(X)[:,1] ) 我只对误报率小于 0.1 的
我正在尝试为我的 SVM 找到参数,这些参数会给我最好的 AUC。但是我在 sklearn 中找不到 AUC 的任何评分函数。有人有想法吗?这是我的代码: parameters = {"C":
这是一个代表 library(caret) library(dplyr) set.seed(88, sample.kind = "Rounding") mtcars % mutate(am = a
对于二元分类问题,我有一个略微不平衡的数据集,正负比为 0.6。 我最近从这个答案中了解到了 auc 指标:https://stats.stackexchange.com/a/132832/12822
我有一个 Spark 数据框,如下所示: predictions.show(5) +------+----+------+-----------+ | user|item|rating| predi
我正在研究一个分类问题,其评估指标为 ROC AUC。到目前为止,我已经尝试使用具有不同参数的 xgb 。这是我用来采样数据的函数。并且可以找到相关笔记本here (google colab) def
我对 python 中的 scikit-learn 中如何生成阈值感到困惑。对于以下示例,生成了四个阈值,当我将 pred 中的第三个值更改为 0.6 时,阈值数量降至 3。任何人都可以解释为什么会这
假设我有一个如下所示的数据集: word label_numeric 0 active 0 1 adventurous 0 2 aggressive 0 3 aggressi
我有一个分类问题,需要根据给定的数据预测 (0,1) 类。基本上我有一个包含超过 300 个特征(包括预测目标值)和超过 2000 行(样本)的数据集。我应用了不同的分类器,如下所示: 1. Dec
我的目标是找到预测模型来确定是否偿还贷款。我的来源是一个 CSV 文件,其中包含贷款特征以及是否已偿还。我使用 ROC 曲线和 AUC 评估模型的性能 df = pd.read_csv(your_pa
我想知道为什么我们的目标是在最大化准确率时最大化 AUC? 我认为,除了最大化准确性的主要目标之外,AUC 也会自动变大。 最佳答案 我想我们使用 AUC 是因为它解释了我们的方法能够在多大程度上独立
我正在尝试在非常不平衡的数据集上使用 LightGBM 构建分类器。不平衡的比例为 97:3,即: Class 0 0.970691 1 0.029309 我使用的参数和训练代码如下所示。
我是一名优秀的程序员,十分优秀!