1. 使用sklearn.metric包中的性能度量函数
1.1 分类器性能度量
- 精度-召回率-F度量
- 损失函数
- 接收机操作曲线
1.2 只限于二元单标签分类问题的评估指标
metrics.precision_recall_curve(y_true,probas_pred)
在不同概率阈值下计算precision-recall
形成的曲线。metrics.roc_curve(y_true, y_score, pos_label=None, sample_weight=None,drop_intermediate=True)
计算ROC曲线。
1.3用于二元多标签分类问题的评估指标
metrics.average_precision_score(y_true, y_score, average="macro", pos_label=1,sample_weight=None)
计算预测得分的平均精度(mAP)metrics.roc_auc_score(y_true, y_score, average="macro", sample_weight=None, max_fpr=None):
计算预测得分的AUC值。
1.4用于多分类问题的评估指标
####1.4.1 多分类单标签
confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)
计算混淆矩阵
返回值
C : array, shape = [n_classes, n_classes] Confusion matrix
C
i
,
j
C_{i, j}
Ci,j实际是i
类被分类为j
类的数量
hinge_loss(y_true, pred_decision, labels=None, sample_weight=None)
计算hinge loss
hinge loss 算法参考
1.4.2 多分类
accuracy_score(y_true, y_pred, normalize=True, sample_weight=None):
参数normalize
为true,返回小数(float),否则返回分类正确的个数(int)classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False)
返回值
report
:string / dict
返回每个类别的precision, recall, F1 score
如果output_dict=True
,字典结构如下:
{'label 1': {'precision':0.5,
'recall':1.0,
'f1-score':0.67,
'support':1},
'label 2': { ... },
...
}
output_dict
默认是None
r = metrics.classification_report(y_true,y_pred, labels=["ant", "bird", "cat"])
3. 其他一些
metrics.f1_score()
metrics.fbeta_score()
metrics.hamming_loss()
metrics.log_loss()
metrics.zero_one_loss()
metrics.precision_score()
metrics.recall_score()
1.5 如何将二元分类任务扩展到多类或者多标签任务中
- 将多类任务划分为多个二分类任务,并对数据集做相应划分
- 计划二元分类的评价指标,将子分类的分类结果做平均
- 有5中不同的平均方式
macro
,micro
,weighted
,samples
,None
macro(宏平均)与micro(微平均)的区别
average=None
不平均,输出列表,每个类别的结果。
Macro-averaging与Micro-averaging的不同之处在于:Macro-averaging赋予每个类相同的权重,然而Micro-averaging赋予每个样本决策相同的权重。
1.6 分类器性能评估指标相应函数
1.6.1 精度-召回率-F度量
precision_recall_curve
二分类
多分类
metrics.precision_score()
metrics.recall_score()
metrics.average_precision_score()
metrics.f1_score()
metrics.fbeta_score()
metrics.precision_recall_fscore_support()
1.6.2 损失函数
metrics.hamming_loss()
metrics.log_loss()
metrics.zero_one_loss()
1.6.3 接收机操作曲线
接收机操作曲线(Reciver operating curve) 二分类
MCC指标(Matthews Correlation Coefficient) 二分类
杰拉德系数(Jaccard Similarity Coefficient)多分类
2 sklearn 分类器性能指标
2.1 准确率
accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)
参数normalize
为true,返回小数(float),否则返回分类正确的个数(int)
2.2 混淆矩阵
混淆矩阵(confusion matrix),也成为错误矩阵(error matrix),每一行表示实际为实际样本个数,每一列为预测样本个数。所有正确分类都在对角线上。
当类别不平衡时,通过accuracy作为衡量分类器的指标不可靠。只依据accuracy评判,容易产生误导人的结果。通过混淆矩阵计算precision(精确度)和recall(召回率、查全率)
根据上面的混淆矩阵,得出cat类别的tabele of confusion
confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)
计算混淆矩阵、
返回C
labels=None
返回矩阵的类别按顺序排列
y_pred = [1,1,1,2,0,0,1]
y_true = [1,1,1,2,1,0,1]
c = metrics.confusion_matrix(y_true,y_pred)
print(c)
带标签形式
y_true = ["cat", "ant", "cat", "cat", "ant", "bird"]
y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"]
c =metrics.confusion_matrix(y_true, y_pred, labels=["ant", "bird", "cat"])
2.3 精确率、召回率、F1_score、Fbeta_score
table of confusion
- TPR
True Positive Rate,正阳率,也叫Recall召回率,sensitivity敏感度,probability of detection检测概率,分母是实际样本中正样本的数量。 T P R = T P P TPR = \frac{TP}{P} TPR=PTPP是训练样本中正样本的数量 - FPR
False Positive Rate,假阳率,fall out, probability of false alarm(虚警率)。分母是实际样本中负样本的数量
F P R = F P N FPR = \frac{FP}{N} FPR=NFP - PrecisionF
精确度。分母是所有预测为正样本的数量。被挑出的正样本中,真是标签为正所占的比例。
P r e c i s i o n = T P P r e d i c t e d p o s i t i v e Precision= \frac{TP }{Predicted\ positive} Precision=Predicted positiveTP - Accuracy
准确率。所有样本分类正确的概率
A c c u r a c y = T P + T N P + N Accuracy= \frac{TP+TN }{P+N} Accuracy=P+NTP+TN - F1_score 综合评价指标
f 1 = 2 1 p r e c i s i o n + 1 R e c a l l = 2 ∗ p r e c i s i o n ∗ R e c a l l p r e c i s i o n + R e c a l l f_{1} = \frac{2}{\frac{1}{precision}+\frac{1}{Recall}}=\frac{2*precision*Recall}{precision+Recall} f1=precision1+Recall12=precision+Recall2∗precision∗Recall - Fbeta_score
Fbeta_score在F1_score的基础上添加了调节参数 b e t a beta beta,
f β = ( 1 + β 2 ) p r e c i s i o n ∗ R e c a l l β 2 ∗ p r e c i s i o n + R e c a l l f_{\beta}=(1+\beta^{2})\frac{precision*Recall}{\beta^{2}*precision+Recall} fβ=(1+β2)β2∗precision+Recallprecision∗Recall
β = 1 \beta=1 β=1, f β f_{\beta} fβ= f 1 f_{1} f1;
β \beta β越小,precision的作用越大;
β \beta β越大,Recall的作用越大; - MCC
2.4 分类器评估标准之ROC曲线
ROC曲线描述了在不同阈值下TPR随FPR变化的情况。ROC曲线以FPR
为X
轴,以TPR
为Y
轴.
- 点(0,1) 100%灵敏度,0%的虚警率,完美分类器。
- 如果以对角线划分ROC空间,对角线以上的是好的分类器,对角线是坏分类器。在对角线是随机的结果。一个坏的分类器可以通过
逆转
得到一个好的分类器。 - 下图中的A、B、C三个分类器。
- A 虚警率低、敏感度高,分类效果好
- B 随机分类器
- C 虚警率高,灵敏度低,坏的分类器
-
C
′
C^{'}
C′ C的逆转分类器,虚警率低,灵敏度高,好分类器。
2.4.1 ROC曲线怎么绘制
fpr,tpr,threshold = sklearn.metrics.roc_curve(y_true, y_score, pos_label=None,
sample_weight=None,drop_intermediate=True)
返回值
fpr、tpr
threshold
y_true = np.array([1, 1, 2, 2])
y_pred = np.array([0.1, 0.4, 0.35, 0.8])
fpr,tpr,threshold =metrics.roc_curve(y_true,y_pred,pos_label=2)
print('threshold',threshold)
print('fpr',fpr)
print('tpr',tpr)
threshold [1.8 0.8 0.4 0.35 0.1 ]
fpr [0. 0. 0.5 0.5 1. ]
tpr [0. 0.5 0.5 1. 1. ]
2.4.2 ROC曲线怎么绘制(连续分布)
连续分布的tpr
和fpr
的计算.
T是选定的分割阈值
f
p
r
=
∫
T
∞
f
N
(
t
)
d
(
t
)
fpr = \int_{T}^{\infin}f_N(t)d(t)
fpr=∫T∞fN(t)d(t)
t
p
r
=
∫
T
∞
f
P
(
t
)
d
(
t
)
tpr = \int_{T}^{\infin}f_P(t)d(t)
tpr=∫T∞fP(t)d(t)
3 sklearn中分类器评估方法
损失函数用来度量模型预测输出与真实标签间不一致的程度。
- 0-1损失
L ( y , f ( x ) ) = { 0 ( y = f ( x ) ) 1 ( y ≠ f ( x ) ) L(y,f(x))=\left\{ \begin{aligned} 0(y=f(x)) \\ 1(y\neq f(x)) \\ \end{aligned} \right. L(y,f(x))={0(y=f(x))1(y=f(x)) - hinge 损失
L ( y , f ( x ) ) = m a x ( 0 , 1 − y ∗ f ( x ) ) L(y,f(x))=max(0,1-y*f(x)) L(y,f(x))=max(0,1−y∗f(x))
y-标签值,f(x) - 预测值 - Logistic 损失
L ( y , f ( x ) ) = l o g ( 1 + e − y ∗ f ( x ) ) L(y,f(x))=log(1+e^{-y*f(x)}) L(y,f(x))=log(1+e−y∗f(x)) - 对数损失或交叉熵损失
L ( y , f ( x ) ) = − Σ y log ( f ( x ) ) L(y,f(x))=-\Sigma y\log(f(x)) L(y,f(x))=−Σylog(f(x))
3.1 对数损失或交叉熵损失
在多元分类任务中,假定有K个类别,则类标签集合就是
{
1
,
2
,
.
.
.
,
K
}
\{1,2,...,K\}
{1,2,...,K}。用one-hot方式编码标签,
y
i
,
k
=
1
y_{i,k}=1
yi,k=1表示第
i
i
i个样本是第
k
k
k类。每个样本标签都是一个one-hot向量,该向量中只有一个元素为1。N个样本的标签矩阵
Y
Y
Y就是一个
N
∗
K
N*K
N∗K的矩阵
分类器预测每个样本的属于每个类别的概率,预测矩阵
Y
Y
Y也是一个
N
∗
K
N*K
N∗K的矩阵
L
(
y
,
y
^
)
=
−
Σ
i
=
0
N
−
1
Σ
k
=
0
K
−
1
y
i
,
k
log
y
^
i
,
k
L(y,\hat y )=-\Sigma_{i=0}^{N-1}\Sigma_{k=0}^{K-1}y_{i,k}\log\hat y_{i,k}
L(y,y^)=−Σi=0N−1Σk=0K−1yi,klogy^i,k
N-样本总数,K-类别数。
y
i
,
k
y_{i,k}
yi,k标签值,
y
^
i
,
k
\hat y_{i,k}
y^i,k预测值。
y_true=[0,0,1,1]
y_pred = [[0.2,0.8],[0.3,0.7],[0.2,0.8],[0.5,0.5]]
log_loss = metrics.log_loss(y_true,y_pred)
log_loss
函数会将标签转成one-hot编码
3.2 汉明损失
- 在多分类任务中,汉明损失与0-1损失相同
- 在多标签任务中,汉明损失是根据标签类别计算的
L H a m m i n g ( y , y ^ ) = 1 n l a b e l s Σ j = 0 n l a b e l s − 1 I ( y ≠ y ^ ) L_{Hamming}(y,\hat y)=\frac{1}{n_{labels}}\Sigma_{j=0}^{n_{labels}-1}I(y\neq\hat y) LHamming(y,y^)=nlabels1Σj=0nlabels−1I(y=y^)
4. sklearn中回归器评估方法
4.1 解释方差(Explained Variance Score)
explained_variance_score(y_true, y_pred,sample_weight=None,multioutput='uniform_average')
e
x
p
l
a
i
n
e
d
_
v
a
r
i
a
n
c
e
_
s
c
o
r
e
(
y
,
y
^
)
=
1
−
v
a
r
(
y
,
y
^
)
v
a
r
y
^
explained\_variance\_score(y,\hat y)=1-\frac{var(y,\hat y)}{var{\hat y }}
explained_variance_score(y,y^)=1−vary^var(y,y^)
4.2 平均绝对误差(MAE)
mean_absolute_error(y_true, y_pred, sample_weight=None, multioutput='uniform_average')
m
e
a
n
_
a
b
s
o
l
u
t
e
_
e
r
r
o
r
(
y
,
y
^
)
=
1
n
s
a
m
p
l
e
s
Σ
i
=
1
n
(
∣
y
i
−
y
^
i
∣
)
mean\_absolute\_error(y,\hat y)=\frac{1}{n_{samples}}\Sigma_{i=1}^{n}(\left |y_{i}-\hat y_{i}\right|)
mean_absolute_error(y,y^)=nsamples1Σi=1n(∣yi−y^i∣)
4.3 平均平方误差(Mean Squared Error)
mean_squared_error(y_true, y_pred, sample_weight=None, multioutput='uniform_average')
m
e
a
n
_
a
b
s
o
l
u
t
e
_
e
r
r
o
r
(
y
,
y
^
)
=
1
n
s
a
m
p
l
e
s
Σ
i
=
1
n
(
y
i
−
y
^
i
)
2
mean\_absolute\_error(y,\hat y)=\frac{1}{n_{samples}}\Sigma_{i=1}^{n}(y_{i}-\hat y_{i})^{2}
mean_absolute_error(y,y^)=nsamples1Σi=1n(yi−y^i)2
4.4 r 2 s c o r e r^{2}score r2score
r2_score(y_true, y_pred, sample_weight=None, multioutput="uniform_average")
R
2
(
y
,
y
^
)
=
1
−
Σ
i
=
1
n
s
a
m
p
l
e
s
(
y
i
−
y
^
i
)
2
Σ
i
=
1
n
s
a
m
p
l
e
s
(
y
i
−
y
i
ˉ
)
2
R^{2}(y,\hat y)=1-\frac{\Sigma_{i=1}^{n_{samples}}(y_{i}-\hat y_{i})^{2}}{\Sigma_{i=1}^{n_{samples}}(y_{i}-\bar{y_{i}})^{2}}
R2(y,y^)=1−Σi=1nsamples(yi−yiˉ)2Σi=1nsamples(yi−y^i)2
r
2
s
c
o
r
e
r^{2}score
r2score表征模型对未来样本预测能力
用于回归问题
决定系数R2 ,衡量模型预测能力好坏(真实和预测的 相关程度百分比)
Y_true是真实的数据,y_pred是预测的数据。使用r2_score()方法可以看到,预测数据和真实数据越接近,R2越大。当然最大值是 1 一个模型的R2
值为0还不如直接用平均值来预测效果好;而一个R2值为1的模型则可以对目标变量进行完美的预测。从0至1之间的数值,则表示该模型中目标变量中有百分之多少能够用特征来解释。模型也可能出现负值的R2,这种情况下模型所做预测有时会比直接计算目标变量的平均值差很多。
参考
4.5 平均中值误差(Median Absolute Error)
对于异常值有很强的鲁棒性
median_absolute_error(y_true, y_pred)
m e d i a n _ a b s o l u t e _ e r r o r ( y , y ^ ) = m e d i a n ( ∣ y 1 − y ^ 1 ∣ + ∣ y 2 − y ^ 2 ∣ + . . . + ∣ y n − y ^ n ∣ ) median\_absolute\_error(y,\hat y)=median(\left |y_{1}-\hat y_{1}\right|+\left |y_{2}-\hat y_{2}\right|+...+\left |y_{n}-\hat y_{n}\right|) median_absolute_error(y,y^)=median(∣y1−y^1∣+∣y2−y^2∣+...+∣yn−y^n∣)
- 4.1~4.5都有
multi_output
参数,用于指定在多目标回归问题中,单个目标获得分以什么样的形式平均起来。 - 如果传入一个shape为
(n_output,)
的ndarray,那么ndarray中的每个元素视为对单个预测得分的加权值。 - 如果
multi_output=raw_values
,那么所有预测目标的回归损失单独返回到shape为(n_output,)
的数组中。n_output
——回归变量的个数。 - 解释方差(Explained Variance Score)和
r
2
s
c
o
r
e
r^{2}score
r2score还可以接受
variance_weighted
作为multi_output
的参数,根据预测目标的方差对相应的回归目标的预测得分进行加权