了解一个函数首先看这个函数的功能,也就是这个函数的参数有哪些,这个函数的返回值是哪些。其次和这个函数类似的函数之间的对比,什么情况下用什么、用哪个会更好(减少调用的时间,数据的存储决定怎么调用等等)。最后就是列举一些这个函数的例子,确保达到会用的程度。熟悉函数的这些含义是用好它的前提,因此,非常有必要去总结这些函数。
熟悉这些函数的方法就是看官方文档的注释,理解不透的就是看相关博客啦!
-
accuracy_score()函数
1、函数功能
分类正确率分数,函数返回一个分数,这个分数或是正确的比例,或是正确的个数。
2、函数原型accuracy_score(y_true, y_pred, *, normalize=True, sample_weight=None):
3、函数参数解读
- y_true:正确输出值。y_pred:经过网络的预测值,分类器输出值。
y_treue和y_pred可以选择的类型一样,包括:一维数组、矩阵。
- normalize:normalize是布尔类型参数,如果是False的话,函数就返回样本分类的正确数量。如果是True的话,返回分类正确率。默认情况下数True的,也就是返回正确率。
- sample_weight:样本的权重,默认是None。
4、官方文档的例子
> 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
> accuracy_score(y_true, y_pred, normalize=False)
>2
>In the multilabel case with binary label indicators:
> import numpy as np
> accuracy_score(np.array([[0, 1], [1, 1]]), np.ones((2, 2)))
0.5
"""
-
recall_score()函数
1、函数功能
计算召回率,就是正例被分为正例的比例。函数返回一个float类型的数字或数组。在二分类任务中,召回率表示被分为正例的个数占所有正例个数的比例;如果是多分类的话,就是每一类的平均召回率。2、函数原型
recall_score(y_true, y_pred, *, labels=None, pos_label=1, average=‘binary’,
sample_weight=None, zero_division=“warn”):3、函数参数解读
F1-score: 2*(P*R)/(P+R) 精确度P 为 TP/(TP+FP) 召回率R TP/(TP+FN)
y_true
、y_pred
:正确输出值,y_pred:经过网络的预测值,分类器输出值。pos_label
: 这个参数设置为binary并且数据是binary时,返回二分类的分数。如果数据是多分类或者多标签时,返回labels=[pos_label]
的标签分数。average
:计算F1分数,根据average的不同取值,F1的计算方法也不同。对于多类/多标签目标,此参数是必需的。如果为None,则返回每个班级的分数。否则,这将确定对数据执行的平均类型:
'binary'
:返回pos_label所表示类的结果。这个仅仅在二分类上有用。
'micro'
:通过先计算总体的TP,FN和FP的数量,再计算F1。
'macro'
:分布计算每个类别的F1,然后做平均(各类别F1的权重相同)。
'weighted'
:计算每个标签的metrics,并找到它们的加权平均值。这个改变‘macro’去解释标签不平衡,这可能导致F分数不在precision和recall之间。
'samples'
:计算每个实例的metrics,并找到他们的平均值。samples weight
:样本权重。zero_division
:参数可选的取值有"warn", 0 or 1, 默认是"warn"。设置出现0除法返回的值。
4、官方文档的例子
Examples
--------
>>> from sklearn.metrics import recall_score
>>> y_true = [0, 1, 2, 0, 1, 2]
>>> y_pred = [0, 2, 1, 0, 0, 1]
# 结果1
>>> recall_score(y_true, y_pred, average='macro')
0.33...
# 结果2
>>> recall_score(y_true, y_pred, average='micro')
0.33...
# 结果3
>>> recall_score(y_true, y_pred, average='weighted')
0.33...
# 结果4
>>> recall_score(y_true, y_pred, average=None)
array([1., 0., 0.])
"""
在这里我们可以列一个表格,根据y_true = [0, 1, 2, 0, 1, 2]和y_pred = [0, 2, 1, 0, 0, 1],可以得到下列的混淆矩阵,不懂怎么列的评论。
预 | 测 | 分 | 类 | ||
---|---|---|---|---|---|
类0 | 类1 | 类2 | 总计 | ||
实 | 类 0 | 2 | 0 | 0 | 2 |
际 | 类1 | 1 | 0 | 1 | 2 |
分 | 类2 | 0 | 2 | 0 | 2 |
类 | 总计 | 3 | 2 | 1 | 6 |
类0 | 类1 | 类3 | 总数 | |
---|---|---|---|---|
TP | 2 | 0 | 0 | 2 |
FP | 1 | 2 | 1 | 4 |
FN | 0 | 2 | 2 | 4 |
精确度P 为 TP/(TP+FP)=2/6=1/3; 召回率R TP/(TP+FN)=2/6=1/3。
F1-score: 2(PR)/(P+R)=1/3
2)结果4中,当average=None时,结果将返回每个类分数,y_true是三分类问题,那么返回的结果数组就是三维的。类0、1、2的实际个数都为2,预测分类中类0、1、2分类正确的个数分别是2、0、0(表格对角线),因此数组展示的结果就是2/2、0/2、0/2,即1、0、0( array([1., 0., 0.]))。
>>> y_true = [0, 0, 0, 0, 0, 0]
>>> recall_score(y_true, y_pred, average=None)
array([0.5, 0. , 0. ])
# 结果5
>>> recall_score(y_true, y_pred, average=None, zero_division=1)
array([0.5, 1. , 1. ])
3)结果5中,zero_division=1,将结果为0的设置为1。
- precision_score()函数
1、函数功能
精确度 =tp / (tp + fp)。
2、函数原型
def precision_score(y_true, y_pred, *, labels=None, pos_label=1,
average='binary', sample_weight=None,
zero_division="warn"):
3、函数参数解读
和上述的recall_score()函数的参数类似。
4、官方文档的例子
和上述的recall_score()函数类似。
- roc_auc_score()函数
1、函数功能
计算auc,auc就是曲线roc下面积,这个数值越高,则分类器越优秀。这个曲线roc所在坐标轴的横轴是FPR,纵轴是TPR。TPR = TP/P = TP/(TP+FN)、FPR = FP/N = FP/(FP+TN)。
2、函数原型
def roc_auc_score(y_true, y_score, *, average="macro", sample_weight=None,
max_fpr=None, multi_class="raise", labels=None):