比较数组的准确性

时间:2016-10-03 16:34:57

标签: python arrays numpy

我有2个阵列:

np.array(y_pred_list).shape
# returns (5, 47151, 10)
np.array(y_val_lst).shape
# returns (5, 47151, 10)

np.array(y_pred_list)[:, 2, :]
# returns 
array([[ 0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])

np.array(y_val_lst)[:, 2, :]
# returns
array([[ 0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]], dtype=float32)

我想查看所有47151个示例,并计算"准确度"。表示y_pred_list中与y_val_lst匹配的总和超过47151.这是什么比较函数?

2 个答案:

答案 0 :(得分:3)

您可以在sklearn.metrics找到很多有用的分类分数,尤其是accuracy_score()。请参阅doc here,您可以将其用作:

import sklearn
acc = sklearn.metrics.accuracy_score(np.array(y_val_list)[:, 2, :], 
                                     np.array(y_pred_list)[:, 2, :])

答案 1 :(得分:2)

听起来你想要这样的东西:

accuracy = (y_pred_list == y_val_lst).all(axis=(0,2)).mean()

...虽然因为你的数组显然是浮点数组,你可能想要允许数值精度错误,而不是坚持完全相等:

accuracy = (numpy.abs(y_pred_list - y_val_lst) < tolerance ).all(axis=(0,2)).mean()

(例如,tolerance = 1e-10

.all(axis=(0,2))调用记录了当沿着维度0(即具有范围5的那个)和维度2(一个)时,其输入中的所有内容都是True(即一切都匹配)的情况有程度10)。它输出一个长度为47151的一维数组。然后.mean()调用会给出该序列中匹配的比例,这是我对47151&#34;的最佳猜测。