一定范围内的自定义准确性指标,用于回归



我需要编写一个准确度指标(在训练期间(,用于计算一定范围内的准确度百分比。因此,它会在训练期间的每个时期显示我的自定义准确性。

例如。如果y_pred是343,y_target是340,并且范围是10,它应该算作正确。这意味着,对于该实例,范围[340-5, 340+5]中的任何预测值都将被视为正确。

但是现有的准确度指标会认为上述是错误的,并且回归问题的准确度非常低。

你需要:

y_pred = [125, 332, 268, 349]
y_target = [129, 342, 265, 370]
def accuracy(y_pred, y_target):
a = [1 for i,j in zip(y_pred, y_target) if i in range(j-5,j+6)]
return sum(a)/len(y_pred)
print(accuracy(y_pred, y_target))

输出:

0.5

如果你使用Numpy

import numpy as np
...
good = np.abs(pred-target) <= (range/2)

将是布尔值(FalseTrue(的向量,告诉你预测是否足够好。

Python 中的布尔值可以用作整数(值分别等于01(,这意味着您可以对good数组求和以了解目标上有多少预测

n_good = np.sum(good)

小型基准

In [1]: import numpy as np 
...:  
...: target = np.ones(2**18, dtype=int)*10 
...: predicted = np.random.randint(0, 21, 2**18)                                       
In [2]: %timeit [1 for i,j in zip(predicted, target) if i in range(j-5,j+6)] 
...: %timeit sum(1 for i,j in zip(predicted, target) if i in range(j-5,j+6)) 
...: %timeit np.abs(predicted-target)<=5 
...: %timeit np.sum(np.abs(predicted-target)<=5)                                       
983 ms ± 6.22 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
964 ms ± 11.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
1.63 ms ± 44.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
2.18 ms ± 10.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [3]: 

最新更新