我有两个数组,必须从中找到预测的准确性。
predictions = [1, 0, 0, 1, 1, 1, 0, 1, 1, 0]
y_test = [1, 0, 0, 1, 0, 1, 0, 1, 1, 1]
所以在这种情况下,精度为=(8/10)* 100 = 80%
我已经编写了一种方法来执行此任务。这是我的代码,但是在这种情况下,我的准确率达不到80%。
def getAccuracy(y_test, predictions):
correct = 0
for x in range(len(y_test)):
if y_test[x] is predictions[x]:
correct += 1
return (correct/len(y_test)) * 100.0
感谢您的帮助。
答案 0 :(得分:1)
如果数组中的数字在python解释器未重新创建的特定范围内,则您的代码应该工作。这是因为您使用了is
,它是一个身份检查而不是一个相等检查。因此,您正在检查的内存地址仅在特定的数字范围内相等。因此,请改用==
,它将始终有效。
对于更多Pythonic解决方案,您还可以查看列表推导:
assert len(predictions) == len(y_test), "Unequal arrays"
identity = sum([p == y for p, y in zip(predictions, y_test)]) / len(predictions) * 100
答案 1 :(得分:0)
如果您想将80.0作为示例结果,那就是这样做。
答案 2 :(得分:-1)
您的代码会根据需要提供80.0,但是您应该使用==
而不是is
,请参阅reason。
def getAccuracy(y_test, predictions):
n = len(y_test)
correct = 0
for x in range(n):
if y_test[x] == predictions[x]:
correct += 1
return (correct/n) * 100.0
predictions = [1, 0, 0, 1, 1, 1, 0, 1, 1, 0]
y_test = [1, 0, 0, 1, 0, 1, 0, 1, 1, 1]
print(getAccuracy(y_test, predictions))
80.0
这是使用Numpy的实现:
import numpy as np
n = len(y_test)
100*np.sum(np.isclose(predictions, y_test))/n
或者如果您将列表转换为numpy数组,那么
100*np.sum(predictions == y_test)/n