sklearn如何逐步计算准确性得分?

neo*_*o33 2 scikit-learn

我在阅读有关sklearn中使用的指标的信息,但发现以下内容非常令人困惑:

在此处输入图片说明

sklearn在文档中提供了其用法示例,如下所示:

import numpy as np
from sklearn.metrics import accuracy_score
y_pred = [0, 2, 1, 3]
y_true = [0, 1, 2, 3]
accuracy_score(y_true, y_pred)
0.5
Run Code Online (Sandbox Code Playgroud)

我了解sklearns会按以下方式计算该指标:

在此处输入图片说明

我不确定过程,我想感谢有人自从我研究以来就可以逐步解释这个结果,但是我很难理解。为了理解更多,我尝试了以下情况:

import numpy as np
from sklearn.metrics import accuracy_score
y_pred = [0, 2, 1, 3,0]
y_true = [0, 1, 2, 3,0]
print(accuracy_score(y_true, y_pred))
0.6
Run Code Online (Sandbox Code Playgroud)

我认为正确的计算如下:

在此处输入图片说明

但是我不确定,我想看看是否有人可以支持我的计算,而不是复制并粘贴sklearn的文档。

我如果怀疑我在sumatory是一样的我括号里面的公式,它是我不清楚,我不知道元素在sumatory的数量与刚元素的数量在样本中是否还取决于类的数量。

小智 6

指标函数仅在其参数中的变量相等时才等于1,否则其值为零。因此,当y等于yhat时,指标函数将产生一个计数作为正确的分类。python中有一个代码示例,下面是数值示例。

import numpy as np
yhat=np.array([0,2,1,3])
y=np.array([0,1,2,3])
acc=np.mean(y==yhat)
print( acc)
Run Code Online (Sandbox Code Playgroud)

例


Rab*_*bit 6

一种了解精度计算的简单方法是:

给定两个列表y_pred和y_true,对于每个位置索引i,将y_pred的第i个元素与y_true的第i个元素进行比较,并执行以下计算:

  1. 计算比赛次数
  2. 除以样本数

因此,使用您自己的示例:

y_pred = [0, 2, 1, 3, 0]
y_true = [0, 1, 2, 3, 0]
Run Code Online (Sandbox Code Playgroud)

我们看到索引0、3和4匹配。因此:

number of matches = 3
number of samples = 5
Run Code Online (Sandbox Code Playgroud)

最后,精度计算:

accuracy = matches/samples
accuracy = 3/5
accuracy = 0.6
Run Code Online (Sandbox Code Playgroud)

对于有关i索引的问题,它是样本索引,因此求和索引和Y / Yhat索引都相同。