混淆矩阵和精确性可以帮助我们了解贝叶斯的分类结果。然而,我们选择贝叶斯进行分类,大多数时候都不是为了单单追求效果,而是希望看到预测的相关概率。这种概率给出预测的可信度,所以对于概率类模型,我们希望能够由其他的模型评估指标来帮助我们判断,模型在“概率预测”这项工作上,完成得如何。接下来,我们就来看看概率模型独有的评估指标。
1.布里尔分数Brier Score
概率预测的准确程度被称为“校准程度”,是衡量算法预测出的概率和真实结果的差异的一种方式。一种比较常用的指标叫做布里尔分数,它被计算为是概率预测相对于测试样本的均方误差,表示为:
Brier S c o r e = 1 N ∑ i = 1 n ( p i − o i ) 2 \text { Brier } S c o r e=\frac{1}{N} \sum_{i=1}^{n}\left(p_{i}-o_{i}\right)^{2} Brier Score=N1i=1∑n(pi−oi)2
其中N是样本数量, p i p_i pi为朴素贝叶斯预测出的概率, o i o_i oi 是样本所对应的真实结果,只能取到0或者1,如果事件发生则为1,如果不发生则为0。这个指标衡量了我们的概率距离真实标签结果的差异,其实看起来非常像是均方误差。布里尔分数的范围是从0到1,分数越高则预测结果越差劲,校准程度越差,因此布里尔分数越接近0越好。由于它的本质也是在衡量一种损失,所以在sklearn当中,布里尔得分被命名brier_score_loss。我们可以从模块metrics中导入这个分数来衡量我们的模型评估结果:(0.22版本的sklearn好像只支持对二分类进行布里尔分数评估了)
from sklearn.metrics import brier_score_loss
#注意,第一个参数是真实标签,第二个参数是预测出的概率值
#在二分类情况下,接口predict_proba会返回两列,但SVC的接口decision_function却只会返回一列
#要随时注意,使用了怎样的概率分类器,以辨别查找置信度的接口,以及这些接口的结构
brier_score_loss(Ytest, prob[:,1], pos_label=1)
#我们的pos_label与prob中的索引一致,就可以查看这个类别下的布里尔分数是多少
2.对数似然函数Log Loss
另一种常用的概率损失衡量是对数损失(log_loss),又叫做对数似然,逻辑损失或者交叉熵损失,它是多元逻辑回归以及一些拓展算法,比如神经网络中使用的损失函数。它被定义为,对于一个给定的概率分类器,在预测概率为条件的情况下,真实概率发生的可能性的负对数。由于是损失,因此对数似然函数的取值越小,则证明概率估计越准确,模型越理想。值得注意得是,对数损失只能用于评估分类型模型。
对于一个样本,如果样本的真实标签 y t r u e y_{true} ytrue在{0,1}中取值,并且这个样本在类别1下的概率估计为 y p r e d y_{pred} ypred,则这个样本所对应的对数损失是:
− log P ( y true ∣ y pred ) = − ( y true ∗ log ( y pred ) + ( 1 − y true ) ∗ log ( 1 − y pred ) ) -\log P\left(y_{\text {true}} | y_{\text {pred}}\right)=-\left(y_{\text {true}} * \log \left(y_{\text {pred}}\right)+\left(1-y_{\text {true}}\right) * \log \left(1-y_{\text {pred}}\right)\right) −logP(ytrue∣ypred)=−(ytrue∗log