有什么区别度量.auc以及scipy.integrate.quad?

2024-05-28 19:10:27 发布

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

当我计算曲线下的面积时,我得到了不同的值sklearn.metrics.auc当我使用scipy.integrate.quad. 在

为了计算AUC,我传递了我的数据:

auc_path = metrics.auc(path,year)
auc_sbt = metrics.auc(sbt,year)

auc_path = 14929608030
auc_sbt = 14846098649

为了计算定积分,我将从Excel中找到的趋势线方程(从上面输入的相同数据中生成)输入到python中:

^{pr2}$

误差是否归因于Excel的趋势线方程?在

谢谢你!在


Tags: 数据pathscipysklearnexcelyear曲线趋势
2条回答

根据你对数据的描述,我得到以下图表。对于路径数据(当前路径,然后是请求路径),我使用以下函数:

start = 8549826
def path(year):
    if year > 23: return start*(cur_path_exp)**23 * req_path_exp**(year-23)
    else: return start * (cur_path_exp)**year

得到这个图(从1年到61年): Plot of the generated path data.

对于sbt数组,我使用以下函数:

^{pr2}$

得到这个情节:

sbt plot

然后我比较了使用scipy.integrate.quadsklearn.metrics.auc的积分。在

import numpy as np
from scipy.integrate import quad
from sklearn.metrics import auc
start = 8549826
sbt_exp = 0.9673405832388313
cur_path_exp = .9941
req_path_exp = 0.9522
sbt = lambda year: start * (sbt_exp)**year
def path(year):
    if year > 23: return start*(cur_path_exp)**23 * req_path_exp**(year-23)
    else: return start * (cur_path_exp)**year

years = range(1,62)
print "Quad sbt: ", quad(sbt, 1,61), "Auc sbt: ",auc(map(sbt, years), years)

print "Quad sbt: ",quad(path, 1, 61), "Auc sbt: ",auc(map(path, years),years)

得到了输出:

Quad sbt:  (215108922.75692844, 2.3881887884705626e-06) Auc sbt:  154592534.468
Quad sbt:  (303985184.7185244, 0.4825437736101641) Auc sbt:  241740742.863

正如你所见,它们完全不同。这是因为auc使用一个简单的梯形规则,而quad使用您给它的函数来插值数据,并且具有更高的精确度。综上所述,指数插值和分段线性插值之间的差异是巨大的。在

^{}只需使用trapezoid rule估计给定的x和{}向量对的积分。它没有对ROC曲线的函数形式做任何强有力的假设。在

在第二种情况下,您似乎已经将指数参数模型拟合到数据中(在Excel中?),然后用^{}在某个区间上对拟合函数进行积分。在

没有特别的理由期望这两种方法得到相同的结果。如果没有数据,我们就无法判断指数拟合是否良好,甚至无法判断指数模型在这种情况下是否合适。在

相关问题 更多 >

    热门问题