Python KERA中用于评估符号预测的自定义度量

Python KERA中用于评估符号预测的自定义度量,python,keras,Python,Keras,我正在研究一个回归问题。这个问题的一个性能指标是“符号准确性”,这意味着我想看看预测值是否与真实值具有相同的符号。我知道mse可以以某种方式显示预测值和真实值之间的接近程度,但我希望在验证过程中看到符号的准确性 更具体地说,在培训之后,我使用下面的方法来检查准确性。我想要定制的是在验证期间实现下面的方法。 (np.multiply(predict\u label,test\u label)>0.sum()/float(predict\u label.shape[0])您可以用与精度类似的方式实现

我正在研究一个回归问题。这个问题的一个性能指标是“符号准确性”,这意味着我想看看预测值是否与真实值具有相同的符号。我知道
mse
可以以某种方式显示预测值和真实值之间的接近程度,但我希望在验证过程中看到符号的准确性

更具体地说,在培训之后,我使用下面的方法来检查准确性。我想要定制的是在验证期间实现下面的方法。
(np.multiply(predict\u label,test\u label)>0.sum()/float(predict\u label.shape[0])

您可以用与精度类似的方式实现它:

def sign_accuracy(y_true, y_pred):
    return K.mean(K.greater(y_true * y_pred, 0.), axis=-1)
要测试它,请执行以下操作:

y_true = np.random.rand(5, 1) - 0.5
y_pred = np.random.rand(5, 1) - 0.5
acc = K.eval(sign_accuracy(K.variable(y_true), K.variable(y_pred)))

print(y_true)
[[ 0.20410185]
 [ 0.12085985]
 [ 0.39697642]
 [-0.28178138]
 [-0.37796012]]

print(y_pred)
[[-0.38281826]
 [ 0.14268927]
 [ 0.19218624]
 [ 0.21394845]
 [ 0.04044269]]

print(acc)
[ 0.  1.  1.  0.  0.]
调用
fit()
evaluate()
时,Keras会自动获取轴0上的平均值,因此无需求和
acc
并将其除以
y\u pred.shape[0]

此指标也可应用于多维变量:

y_true = np.random.rand(5, 3) - 0.5
y_pred = np.random.rand(5, 3) - 0.5
acc = K.eval(sign_accuracy(K.variable(y_true), K.variable(y_pred)))

print(y_true)
[[ 0.02745352 -0.27927986 -0.47882833]
 [-0.40950793 -0.16218984  0.19184008]
 [ 0.25002487 -0.08455175 -0.03606459]
 [ 0.09315503 -0.19825522  0.19801222]
 [-0.32129431 -0.02256616  0.47799333]]

print(y_pred)
[[-0.06733171  0.18156806  0.28396574]
 [ 0.04054056 -0.45898607 -0.10661648]
 [-0.05162396 -0.34005141 -0.25910923]
 [-0.26283177  0.01532359  0.33764032]
 [ 0.2754057   0.26896232  0.23089488]]

print(acc)
[ 0.          0.33333334  0.66666669  0.33333334  0.33333334]

对于您给出的第一种情况,所需的输出是
40%
还是
0.4
?你是说如果我把这个
sign\u accurity
放到命令
model.compile(optimizer='adam',loss='mae',metrics=[sign\u accurity])
,我会得到
0.4
?是的。Keras在内部取平均值。