其他
终于有人把准确率、精度、召回率、均方差和R²都讲明白了
The following article is from 大数据DT Author Aditya Sharma 等
简短但不是很有用的答案是,这取决于模型。人们已经提出了各种评分函数,它可用于在所有可能的场景中评估训练模型。好消息是,很多评分函数实际上是scikit-learn的metrics模块的一部分。
让我们快速了解一些最重要的评分函数。
accuracy_score:准确率(accuracy)计算测试集中预测正确的数据点数,并返回正确预测的数据点的比例。以将图片分类为猫或狗为例,准确率表示正确分类为包含猫或狗的图片比例。该函数是最基本的分类器评分函数。 precision_score:精度(precision)描述了一个分类器不把包含狗的图片标记为猫的能力。或者说,在分类器认为测试集所有包含猫的图片中,精度是实际包含一只猫的图片比例。 recall_score:召回率(recall,或者敏感度)描述了一个分类器检索包含猫的所有图片的能力。或者说,测试集所有包含猫的图片中,召回率是正确识别为猫的图片比例。
import numpy as np
np.random.seed(42)
y_true = np.random.randint(0, 2, size=5)
y_true
array([0, 1, 0, 0, 0])
在文献中,这两类有时也被称为正样例(类标签是1的所有数据点)和负样例(其他所有数据点)。
y_pred = np.ones(5, dtype=np.int32)
y_pred
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
0.2
from sklearn import metrics
metrics.accuracy_score(y_true, y_pred)
0.2
在统计学假设检验中,假阳性也称为I型错误,而假阴性也称为II型错误。
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
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
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
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
0
accuracy = np.sum(true_positive + true_negative) / test_set_size
accuracy
0.2
precision = np.sum(true_positive) / np.sum(true_positive + false_positive)
precision
0.2
metrics.precision_score(y_true, y_pred)
0.2
recall = true_positive / (true_positive + false_negative)
recall
1.0
metrics.recall_score(y_true, y_pred)
1.0
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')
<matplotlib.legend.Legend at 0x7f3c2220f048>
mse = np.mean((y_true - y_pred) ** 2)
mse
0.08531839480842378
metrics.mean_squared_error(y_true, y_pred)
0.08531839480842378
fvu = np.var(y_true - y_pred) / np.var(y_true)
fvu
0.163970326266295
fve = 1.0 - fvu
fve
0.836029673733705
metrics.explained_variance_score(y_true, y_pred)
0.836029673733705
r2 = 1.0 - mse / np.var(y_true)
r2
0.8358169419264746
metrics.r2_score(y_true, y_pred)
0.8358169419264746
metrics.r2_score(y_true, np.mean(y_true) * np.ones_like(y_true))
Out:
0.0
(欢迎大家加入数据工匠知识星球获取更多资讯。)
联系我们
扫描二维码关注我们
微信:SZH9543邮箱:ccjiu@163.comQQ:2286075659热门文章
我们的使命:发展数据治理行业、普及数据治理知识、改变企业数据管理现状、提高企业数据质量、推动企业走进大数据时代。
我们的愿景:打造数据治理专家、数据治理平台、数据治理生态圈。
我们的价值观:凝聚行业力量、打造数据治理全链条平台、改变数据治理生态圈。
了解更多精彩内容
长按,识别二维码,关注我们吧!
数据工匠俱乐部
微信号:zgsjgjjlb
专注数据治理,推动大数据发展。