Python 使用(x==y).mean()估计精度-它是如何工作的?

Python 使用(x==y).mean()估计精度-它是如何工作的?,python,arrays,pandas,numpy,dataframe,Python,Arrays,Pandas,Numpy,Dataframe,请问这个函数如何计算精度 def accuracy_score(truth, pred): if len(truth) == len(pred): return "Predictions have an accuracy of {:.2f}%.".format((truth == pred).mean()*100) else: return "Number of predictions does not match number of outco

请问这个函数如何计算精度

def accuracy_score(truth, pred):
    if len(truth) == len(pred): 
        return "Predictions have an accuracy of {:.2f}%.".format((truth == pred).mean()*100)
    else:
        return "Number of predictions does not match number of outcomes!"

# Test the 'accuracy_score' function predictions = pd.Series(np.ones(5, dtype = int)) print accuracy_score(outcomes[:5], predictions)

我不知道为什么

(truth == pred).mean()

可以数到任何数字,难道它不只是判断它是真是假吗?

真是一个标签数组
pred
是模型的一组预测。在理想情况下,
真值
必须等于
pred
。然而,实际上,模型的预测会有误差。因此,准确度的概念用来衡量模型正确预测的数据点数量

假设这些是numpy数组

truth == pred
返回
True
False
的布尔数组。例如:

In [668]: x = np.array([1, 1, 2, 1])

In [669]: y = np.array([1, 2, 1, 1])

In [670]: x == y
Out[670]: array([ True, False, False,  True], dtype=bool)
>>> import numpy as np
>>> arr = np.array([True, False, True])
>>> arr.sum()
2
>>> arr.mean()
0.66666666666666663
现在,
.mean()
将计算
True
的数量,然后除以总大小,给出准确度:

In [671]: (x == y).mean()
Out[671]: 0.5
这与:

In [672]: (x == y).sum() / len(x == y)
Out[672]: 0.5
以及


这是布尔数组中
True
vals的数目。

truth
是一个标签数组
pred
是模型的一组预测。在理想情况下,
真值
必须等于
pred
。然而,实际上,模型的预测会有误差。因此,准确度的概念用来衡量模型正确预测的数据点数量

假设这些是numpy数组

truth == pred
返回
True
False
的布尔数组。例如:

In [668]: x = np.array([1, 1, 2, 1])

In [669]: y = np.array([1, 2, 1, 1])

In [670]: x == y
Out[670]: array([ True, False, False,  True], dtype=bool)
>>> import numpy as np
>>> arr = np.array([True, False, True])
>>> arr.sum()
2
>>> arr.mean()
0.66666666666666663
现在,
.mean()
将计算
True
的数量,然后除以总大小,给出准确度:

In [671]: (x == y).mean()
Out[671]: 0.5
这与:

In [672]: (x == y).sum() / len(x == y)
Out[672]: 0.5
以及


这是布尔数组中
True
vals的数目。

我假设
truth
pred
是NumPy数组或子类,对于NumPy函数
True
False
被解释为
1
0

因此,
mean
只是将
truth
等于
pred
的出现次数相加,然后除以元素数

例如:

In [668]: x = np.array([1, 1, 2, 1])

In [669]: y = np.array([1, 2, 1, 1])

In [670]: x == y
Out[670]: array([ True, False, False,  True], dtype=bool)
>>> import numpy as np
>>> arr = np.array([True, False, True])
>>> arr.sum()
2
>>> arr.mean()
0.66666666666666663

我假设
truth
pred
是NumPy数组或子类,对于NumPy函数
True
False
被解释为
1
0

因此,
mean
只是将
truth
等于
pred
的出现次数相加,然后除以元素数

例如:

In [668]: x = np.array([1, 1, 2, 1])

In [669]: y = np.array([1, 2, 1, 1])

In [670]: x == y
Out[670]: array([ True, False, False,  True], dtype=bool)
>>> import numpy as np
>>> arr = np.array([True, False, True])
>>> arr.sum()
2
>>> arr.mean()
0.66666666666666663

不确定,但可能是将布尔值改为1和0的列表,然后得到这些值的平均值。看来
truth
pred
是两个numpy数组。如果是这种情况,
truth==pred
将创建一个新数组,其中
1
表示
truth
pred
中的对应值相等,反之亦然。然后,取所有这些的平均值,告诉你你的预测值/分类器有多准确,在平均数上,如果它有帮助的话,你可以。不确定,但可能是将布尔值改为1和0的列表,然后得到这些值的平均值。看起来
真值
预测值
是两个numpy数组。如果是这种情况,
truth==pred
将创建一个新数组,其中
1
表示
truth
pred
中的对应值相等,反之亦然。然后,取所有这些的平均值,告诉你你的预测/分类器有多准确,在平均数上,如果有帮助的话,你可以。