在不使用sklearn的情况下计算机器学习模型的准确性

时间:2020-11-04 12:34:07

标签: python machine-learning scikit-learn

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

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

有时它会正确显示准确性,有时会显示错误。有人可以解释一下我如何解决该功能,以使其显示与sklearn precision_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

2 个答案:

答案 0 :(得分:1)

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

docker-compose.nodejs.yml

答案 1 :(得分:1)

设置方式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。

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