我一直在参考一篇关于特征选择的文章,需要帮助来理解如何绘制 ROC 曲线。使用的数据集:鸢尾花
文章中提到的特征选择方法之一是:Visualways to rank features
下面的示例绘制了各种特征的 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)和 FPR,阈值是通过将特征的范围(Max-Min)除以 100 个等距点来计算的?