Iris数据集绘制ROC曲线用于特征排序/特征选择和解释

2024-09-23 16:32:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在引用一篇关于特征选择的文章,需要帮助理解ROC曲线是如何绘制的。 使用的数据集:Iris

文章中提到的特征选择方法之一是:对特征进行排序的可视化方法

下面的示例绘制了各种特征的ROC曲线

from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.metrics import auc
import numpy as np# loading dataset
data = load_iris()
X, y = data.data, data.targety_ = y == 2plt.figure(figsize=(13,7))
for col in range(X.shape[1]):
    tpr,fpr = [],[]
    for threshold in np.linspace(min(X[:,col]),max(X[:,col]),100):
        detP = X[:,col] < threshold
        tpr.append(sum(detP & y_)/sum(y_))# TP/P, aka recall
        fpr.append(sum(detP & (~y_))/sum((~y_)))# FP/N
        
    if auc(fpr,tpr) < .5:
        aux = tpr
        tpr = fpr
        fpr = aux
    plt.plot(fpr,tpr,label=data.feature_names[col] + ', auc = '\
                           + str(np.round(auc(fpr,tpr),decimals=3)))plt.title('ROC curve - Iris features')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.legend()
plt.show()

我想了解这一点:

for threshold in np.linspace(min(X[:,col]),max(X[:,col]),100):
    detP = X[:,col] < threshold
    tpr.append(sum(detP & y_)/sum(y_)) # TP/P, aka recall
    fpr.append(sum(detP & (~y_))/sum((~y_)))# FP/N

如何计算真阳性率(TPR)&;通过检查离散变量(特征)的值是否高于阈值(通过将特征的范围(最大-最小)除以100个等距点计算得出)的FPR

这是最终的ROC曲线 enter image description here


Tags: importdatathresholdnppltcol特征曲线
1条回答
网友
1楼 · 发布于 2024-09-23 16:32:33

让我们从“如何用一组阈值计算[ROC曲线],阈值是通过将特征的范围(最大-最小)除以100个等距点计算出来的?”

一个人不能

ROC曲线显示了TPR和FPR在每个可能阈值下的变化。通常使用数据本身来建立这个集合,并将每个唯一的数据点作为阈值

将其限制为100个相等的阈值,最多只能得到ROC曲线的近似值。如果数据是概率的话,这可能是一个不错的近似值。在许多实际应用中,数据不是均匀的,甚至是高斯分布,这将是一个非常糟糕的近似值

不要这样做

相反,请使用经过充分审查的软件包中的专用功能,如sklearn:

from sklearn.metrics import roc_curve
fpr, tpr = roc_curve(y, X[:,col])

要绘制它,请参见How to plot ROC curve in Python的答案

现在来看第二个问题:TPR/FPR是如何根据阈值计算的,这也是定义:TPR或真阳性率是正确识别的实际阳性率的分数。我将在这里{a2},这将在这里更详细地解释它

相关问题 更多 >