# 终于有人把准确率、精度、召回率、均方差和R²都讲明白了

01 使用准确率、精度和召回率评分分类器

• accuracy_score：准确率（accuracy）计算测试集中预测正确的数据点数，并返回正确预测的数据点的比例。以将图片分类为猫或狗为例，准确率表示正确分类为包含猫或狗的图片比例。该函数是最基本的分类器评分函数。
• precision_score：精度（precision）描述了一个分类器不把包含狗的图片标记为猫的能力。或者说，在分类器认为测试集所有包含猫的图片中，精度是实际包含一只猫的图片比例。
• recall_score：召回率（recall，或者敏感度）描述了一个分类器检索包含猫的所有图片的能力。或者说，测试集所有包含猫的图片中，召回率是正确识别为猫的图片比例。

1）我们使用下列代码可以固定随机数生成器的种子：

```import numpy as np
np.random.seed(42)
```

2）然后，选取（0, 2）范围内的随机整数，我们可以生成0或1的5个随机标签：

```y_true = np.random.randint(0, 2, size=5)
y_true
```

Out:

```array([0, 1, 0, 0, 0])
```

```y_pred = np.ones(5, dtype=np.int32)
y_pred
```

Out:

```array([1, 1, 1, 1, 1], dtype=int32)
```

```test_set_size = len(y_true)

predict_correct = np.sum(y_true == y_pred)

predict_correct / test_set_size
```

Out:

```0.2
```

scikit-learn的metrics模块提供了一个更智能、更便捷的实现：

```from sklearn import metrics

metrics.accuracy_score(y_true, y_pred)
```

Out:

```0.2
```

▼表3-1 4种可能的分类结果

```truly_a_positive = (y_true == 1)

predicted_a_positive = (y_pred == 1)

# You thought it was a 1, and it actually was a 1
true_positive = np.sum(predicted_a_positive * truly_a_positive)
true_positive
```

Out:

`1`

```# You thought it was a 1, but it was actually a 0
false_positive = np.sum((y_pred == 1) * (y_true == 0))
false_positive
```

Out:

`4`

```# You thought it was a 0, but it actually was a 1
false_negative = np.sum((y_pred == 0) * (y_true == 1))
false_negative
```

Out:

`0`
```# You thought it was a 0, and it actually was a 0
true_negative = np.sum((y_pred == 0) * (y_true == 0))
true_negative
```

Out:

`0`

▼表3-2 混淆矩阵

```accuracy = np.sum(true_positive + true_negative) / test_set_size
accuracy
```

Out:

`0.2`

```precision = np.sum(true_positive) / np.sum(true_positive + false_positive)
precision
```

Out:

`0.2`

```metrics.precision_score(y_true, y_pred)
```

Out:

`0.2`

```recall = true_positive / (true_positive + false_negative)
recall
```

Out:

`1.0`
```metrics.recall_score(y_true, y_pred)
```

Out:

`1.0`

02 使用均方差、可释方差和R平方评分回归

• mean_squared_error：对于回归问题，最常用的误差评估指标是对训练集中每个数据点的预测值和真实目标值之间的平方误差（所有数据点的平均值）进行度量。
• explained_variance_score：一个更复杂的评估指标是度量一个模型对测试数据的变化或分配的可解释程度。通常使用相关系数度量可释方差的数量。
• r2_score：R2得分（R平方）与可释方差得分密切相关，但使用一个无偏方差估计。它也被称为决定系数（coefficient of determination）。

```x = np.linspace(0, 10, 100)
```

```y_true = np.sin(x) + np.random.rand(x.size) - 0.5
```

```y_pred = np.sin(x)
```

```import matplotlib.pyplot as plt
plt.style.use('ggplot')
%matplotlib inline
```
```plt.figure(figsize=(10, 6))
plt.plot(x, y_pred, linewidth=4, label='model')
plt.plot(x, y_true, 'o', label='data')
plt.xlabel('x')
plt.ylabel('y')
plt.legend(loc='lower left')
```

Out:

```<matplotlib.legend.Legend at 0x7f3c2220f048>
```

▲图3-2 使用matplotlib生成的可视化结果

```mse = np.mean((y_true - y_pred) ** 2)
mse
```

Out:

`0.08531839480842378`

```metrics.mean_squared_error(y_true, y_pred)
```

Out:

```0.08531839480842378
```

```fvu = np.var(y_true - y_pred) / np.var(y_true)
fvu
```

Out:

```0.163970326266295
```

```fve = 1.0 - fvu
fve
```

Out:

```0.836029673733705
```

```metrics.explained_variance_score(y_true, y_pred)
```

Out:

```0.836029673733705
```

```r2 = 1.0 - mse / np.var(y_true)
r2
```

Out:

```0.8358169419264746
```

```metrics.r2_score(y_true, y_pred)
```

Out:

`0.8358169419264746`

```metrics.r2_score(y_true, np.mean(y_true) * np.ones_like(y_true))
```

Out:

```0.0
```

0 条评论

• ### 终于有人把准确率、精度、召回率、均方差和R²都讲明白了

导读：在真实场景中，模型很少能成功地预测所有的内容。我们知道应该使用测试集的数据来评估我们的模型。但是这到底是如何工作的呢？

• ### 简单聊聊模型的性能评估标准

在机器学习领域中，对模型的评估非常重要，只有选择和问题相匹配的评估方法，才能快速发现算法模型或者训练过程的问题，迭代地对模型进行优化。

• ### 【机器学习】一文详尽系列之模型评估指标

在机器学习领域通常会根据实际的业务场景拟定相应的不同的业务指标，针对不同机器学习问题如回归、分类、排序，其评估指标也会不同。

• ### 一文详尽系列之模型评估指标

在机器学习领域通常会根据实际的业务场景拟定相应的不同的业务指标，针对不同机器学习问题如回归、分类、排序，其评估指标也会不同。

• ### 【机器学习】一文详尽介绍模型评估指标

在机器学习领域通常会根据实际的业务场景拟定相应的不同的业务指标，针对不同机器学习问题如回归、分类、排序，其评估指标也会不同。

• ### 终于有人把数据、信息、算法、统计、概率和数据挖掘都讲明白了！

导读：数据与数据应用中的许多概念彼此有着千丝万缕的联系，同时也有着概念上的偏重与区别，那我们可以先从数据应用领域中的常见概念先聊起。

• ### 搞懂机器学习的常用评价指标！

我与评价指标的首次交锋是第一次实习面试时，面试官开头就问分类任务的评价指标。我当时TP,FP,FN,TN各种组合一顿上，回答得乱七八糟。后来经历多了，发现评价指...

• ### 一文让你了解AI产品的测试 评价人工智能算法模型的几个重要指标

如何测试人工智能产品越来越受到广大测试工程师的关注，由于人工智能的测试预言（Test Oracle）不是像普通软件产品那么明确，到目前为止，基于大数据的第四代人...

• ### 召回、精确、准确，这些让人头大的概念一文全都讲清楚

在之前的文章当中我们已经介绍了好几个模型了，有朴素贝叶斯、KNN、KMeans、EM还有线性回归和逻辑回归。今天我们来和大家聊聊该怎么评估这些模型。

• ### 【ML】一文详尽系列之模型评估指标

在机器学习领域通常会根据实际的业务场景拟定相应的不同的业务指标，针对不同机器学习问题如回归、分类、排序，其评估指标也会不同。

• ### 【机器学习】一文读懂分类算法常用评价指标

评价指标是针对将相同的数据，输入不同的算法模型，或者输入不同参数的同一种算法模型，而给出这个算法或者参数好坏的定量指标。

• ### 原创 | 常见损失函数和评价指标总结（附公式&代码）

回归问题中常用的损失函数，在线性回归中，可以通过极大似然估计（MLE）推导。计算的是预测值与真实值之间距离的平方和。实际更常用的是均方误差（Mean Squar...

• ### 机器学习模型评估指标总结！

本文对机器学习模型评估指标进行了完整总结。机器学习的数据集一般被划分为训练集和测试集，训练集用于训练模型，测试集则用于评估模型。针对不同的机器学习问题（分类、排...

• ### 机器学习算法中的F值(F-Measure)、准确率(Precision)、召回率(Recall)

业内目前常常采用的评价指标有准确率(Precision)、召回率(Recall)、F值(F-Measure)等，下图是不同机器学习算法的评价指标。下文讲对其中某...

• ### 机器学习之模型评分

错误率和精度是分类任务中最常用的两种性能度量，既适用于二分类任务，也适用于多分类任务。错误率是分类错误的样本数占样本总数的比例，精度则是分类正确的样本数占样本...

• ### 一文读懂机器学习分类模型评价指标

解决一个机器学习问题都是从问题建模开始，首先需要收集问题的资料，深入理解问题，然后将问题抽象成机器可预测的问题。在这个过程中要明确业务指标和模型预测目标，根据预...

• ### 《自然语言处理实战入门》 ---- 笔试、面试题：机器学习基础(51-100)

若 λ 较大时，意味着模型复杂度较低，这时候容易发生欠拟合，对应偏差增大，方差减小。做个简单总结：

• ### 如何评估机器学习模型的性能

您可以整天训练有监督的机器学习模型，但是除非您评估其性能，否则您永远无法知道模型是否有用。这个详细的讨论回顾了您必须考虑的各种性能指标，并对它们的含义和工作方式...