首页 > 解决方案 > 为什么用纯 python 计算 ROC-AUC 分数需要太长时间?

问题描述

我试图在不使用 sklearn 而是使用纯 python 的情况下计算接收器操作特征曲线 (ROC AUC),尽管我可以获得正确的分数,但打印输出需要 10-15 分钟(大约 10k 行数据集)。在使用 sklearn 内置函数时,它可以在几秒钟内快速计算。如果有人可以帮助我理解它。

这是一个示例代码片段。

Data =    y     pro
      0  1  0.123456
      1  1  0.035056
      2  0  0.226222
      3  0  0.412454
      4  1  0.121123

uniq = list(data.pro.unique())
actual =data.y
  
  tpr_list = []
  fpr_list = []
  for thr in uniq:
    y_pred = []
    for v in data.proba:
      if v <thr:
        y_pred.append(0)
      else:
        y_pred_auc.append(1)
    TP, FP, TN, FN=0, 0, 0, 0
    
    for i in range(len(uniq)):
      if y_pred[i] ==1 and actual[i] ==1:
        TP+=1
      elif y_pred[i] == 0 and actual[i] ==0:
        TN+=1
      elif y_pred_auc[i]==1 and actual[i] ==0:
        FP+=1
      else:
        FN+=1
    

使用 TP、FP、TN、FN;我已经计算了 AUC,我认为理解这个问题不需要这部分,所以我删除了它。

谢谢

标签: pythonscikit-learnrocauc

解决方案


除了您的效率之外,关于代码复杂性,scikit-learn 使用 Numpy 进行各种操作,并在 C 代码中进行了优化。我强烈怀疑你能否用纯 python 击败或接近它,即使你尽可能高效地编写代码。


推荐阅读