2

我正在尝试计算使用以下函数创建的模型的准确性:

def accuracy(y_true, y_pred):
    accuracy = np.mean(y_pred == y_true)
    return accuracy

有时它正确显示准确性,有时它不正确。有人可以解释我如何修复该函数以使其显示与 sklearn accuracy_score 相同的准确性。这是我从我的方法中得到的结果的一个例子。

y_true
[0, 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, 0, 0, 0, 0, 0, 1, 0, 0]

y_pred
[0, 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, 0, 1, 0, 0, 0, 0, 0, 0]

KNN classification accuracy:  0.0
KNN classification accuracy sklearn:  0.9428571428571428
4

2 回答 2

2

使用 numpy,您可以执行以下操作:

import numpy as np
acc = np.sum(np.equal(y_true, y_pred)) / len(y_true)
于 2020-11-04T12:42:23.957 回答
2

y_pred == y_true如果您的列表中的一个值不相同,那么您设置它的方式将始终为 False。当你这样做时,np.mean(False)你会得到一个 0.0 的值。

您要做的是迭代地查找列表中的每个项目是否相等。这是我提出的解决方案:

def accuracy(y_true,y_pred,normalize=True):
    accuracy=[]
    for i in range(len(y_pred)):
        if y_pred[i]==y_true[i]:
            accuracy.append(1)
        else:
            accuracy.append(0)
    if normalize==True:
        return np.mean(accuracy)
    if normalize==False:
        return sum(accuracy)

准确度列表将跟踪 y_pred 的每一项是否等于 y_true。就像在https://scikit-learn.org/stable/modules/model_evaluation.html#accuracy-score中一样,如果它们相等,则应附加 1。如果不是,则应附加 0。

您没有将其包含在您的原始函数中,但为了以防您好奇,我添加了 normalize 选项,就像 sklearn 一样。Normalize 将自动为真,并会找到平均值,但如果您想要计算有多少是准确的,这就是代码。

于 2020-11-04T13:04:55.097 回答