【问题标题】:Calculate the accuracy of a machine learning model without sklearn计算没有 sklearn 的机器学习模型的准确率
【发布时间】:2021-02-17 03:43:22
【问题描述】:

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

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

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

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

    import numpy as np
    acc = np.sum(np.equal(y_true, y_pred)) / len(y_true)
    

    【讨论】:

    • 我使用了上面的代码,它仍然输出错误的结果y_true [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] y_pred [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] KNN classification accuracy: 0.1 KNN classification accuracy sklearn: 1.0
    • 你确定吗?我尝试使用您的输入,假设它们是一维列表并获得与 Sklearn 相同的准确性。
    • 您最初发布的代码确实返回了不正确的结果,但带有np.equal 的更新代码工作正常。谢谢!
    【解决方案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。

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

    【讨论】:

    • 感谢您的解释!真的有助于理解为什么我得到不正确的结果。
    猜你喜欢
    • 1970-01-01
    • 2019-01-01
    • 2022-11-12
    • 2017-07-13
    • 1970-01-01
    • 2018-11-27
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多