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在内部取平均值。