来自此roc
函数
如何获得AUC(曲线下面积)值?
以下是我使用的代码:
def roc(data_set):
normal = 0
data_set_size = data_set.shape[1]
roc_rate = np.zeros((2, data_set_size))
for i in range(data_set_size):
if data_set[2][i] == 1:
normal += 1
abnormal = data_set_size - normal
max_dis = data_set[1].max()
for j in range(1000):
threshold = max_dis / 1000 * j
normal1 = 0
abnormal1 = 0
for k in range(data_set_size):
if data_set[1][k] > threshold and data_set[2][k] == 1:
normal1 += 1
if data_set[1][k] > threshold and data_set[2][k] == 2:
abnormal1 += 1
roc_rate[0][j] = normal1 / normal # true positive
roc_rate[1][j] = abnormal1 / abnormal # false positive
return roc_rate
模型的准确性是AUC / TotalArea的比例? 对吗??
提前致谢。
答案 0 :(得分:0)
很酷的是你从最初的原则中解决这个问题,对ROC曲线一直有点好奇,但到目前为止只使用了现成的功能。
从您提供的代码中假设
x = roc_rate[0]
y = roc_rate[1]
然后使用this解决方案以数字方式集成它:
import scipy
scipy.integrate.simps(y,x)
也许我没有正确理解你的代码 - 使用它的输入和输出样本会更容易,但是如果你使用这个数值积分你将获得该区域。
是的,我认为ROC曲线适合1 x 1轴,如果模型根本没有分类能力,那么'曲线'就是对角线,其面积为1/2,正确只是偶然回答。完美模型的ROC曲线是一个倒置的L,占据整个区域1,真实世界模型是在对角线和倒置L之间的曲线。
答案 1 :(得分:0)
当scipy.integrate.simps(y,x)
时/usr/local/lib/python2.7/site-packages/scipy/integrate/quadrature.py:324:RuntimeWarning:在true_divide中遇到零除 h0divh1 = h0 / h1 /usr/local/lib/python2.7/site-packages/scipy/integrate/quadrature.py:324:运行时警告:在true_divide中遇到无效值 h0divh1 = h0 / h1 /usr/local/lib/python2.7/site-packages/scipy/integrate/quadrature.py:326:RuntimeWarning:在true_divide中遇到零除 y [slice1] hsum hsum / hprod + /usr/local/lib/python2.7/site-packages/scipy/integrate/quadrature.py:326:RuntimeWarning:在true_divide中遇到无效值 y [slice1] hsum hsum / hprod + /usr/local/lib/python2.7/site-packages/scipy/integrate/quadrature.py:326:RuntimeWarning:添加时遇到无效值 y [slice1] hsum hsum / hprod + /usr/local/lib/python2.7/site-packages/scipy/integrate/quadrature.py:327:RuntimeWarning:添加时遇到无效值 Y [slice2] *(2-h0divh1))
我该如何解决?