我一直在引用一篇关于特征选择的文章,需要帮助理解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曲线],阈值是通过将特征的范围(最大-最小)除以100个等距点计算出来的?”
一个人不能
ROC曲线显示了TPR和FPR在每个可能阈值下的变化。通常使用数据本身来建立这个集合,并将每个唯一的数据点作为阈值
将其限制为100个相等的阈值,最多只能得到ROC曲线的近似值。如果数据是概率的话,这可能是一个不错的近似值。在许多实际应用中,数据不是均匀的,甚至是高斯分布,这将是一个非常糟糕的近似值
不要这样做强>
相反,请使用经过充分审查的软件包中的专用功能,如sklearn:
要绘制它,请参见How to plot ROC curve in Python的答案
现在来看第二个问题:TPR/FPR是如何根据阈值计算的,这也是定义:TPR或真阳性率是正确识别的实际阳性率的分数。我将在这里{a2},这将在这里更详细地解释它
相关问题 更多 >
编程相关推荐