我需要编写一个准确度指标(在训练期间(,用于计算一定范围内的准确度百分比。因此,它会在训练期间的每个时期显示我的自定义准确性。
例如。如果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)
将是布尔值(False
和True
(的向量,告诉你预测是否足够好。
Python 中的布尔值可以用作整数(值分别等于0
和1
(,这意味着您可以对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]: