目录
概率类模型的评估指标
混淆矩阵和精确性可以帮助我们了解贝叶斯的分类结果。然而,我们选择贝叶斯进行分类,大多数时候都不是为了单单追求效果,而是希望看到预测的相关概率。这种概率给出预测的可信度,所以对于概率类模型,我们希望能够由其他的模型评估指标来帮助我们判断,模型在“概率预测
”这项工作上,完成得如何。
布里尔分数Brier Score
概率预测的准确程度被称为
“
校准程度
”
,是衡量算法预测出的概率和真实结果的差异的一种方式。一种比较常用的指标叫做布里尔分数,它被计算为是概率预测相对于测试样本的均方误差,表示为:
这个指标衡量了我们的概率距离真实标签结果的差异,其实看起来非常像是均方误差。
布里
尔分数的范围是从
0
到
1
,分数越高则预测结果越差劲,校准程度越差,因此布里尔分数越接近
0
越好
。由于它的本质也是在衡量一种损失,所以在sklearn
当中,布里尔得分被命名为
brier_score_loss
。
注意:新版sklearn的布里尔分数只支持二分类数据。
对数损失
另一种常用的概率损失衡量是对数损失(
log_loss
),又叫做对数似然,逻辑损失或者交叉熵损失,它是多元逻辑回归以及一些拓展算法,比如神经网络中使用的损失函数。它被定义为,对于一个给定的概率分类器,在预测概率为条件的情况下,真实概率发生的可能性的负对数。由于是损失,因此对数似然函数的取值越小,则证明概率估计越准确,模型越理想
。值得注意得是, 对数损失只能用于评估分类型模型。
![](https://i-blog.csdnimg.cn/blog_migrate/7783a70441b712b3a9135eaa99a32bfe.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c61ae4260bb7660b18ae48db8492ae1b.png)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression as LR
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import brier_score_loss
from sklearn.metrics import log_loss
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
X = load_digits().data
y = load_digits().target
Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,y,test_size = 0.3,random_state = 0)
estimators = [GaussianNB().fit(Xtrain,Ytrain)
,LR(solver = 'lbfgs',max_iter = 3000,multi_class = 'auto').fit(Xtrain,Ytrain)
,SVC(kernel = 'rbf').fit(Xtrain,Ytrain)
]
name = ['GaussianNB','LogisticRegression','SVC']
for i,estimator in enumerate(estimators):
if hasattr(estimator,'predict_proba'): #查看是否存在概率属性
prob = estimator.predict_proba(Xtest)
print("{}'s log_loss is:{}\n".format(name[i],log_loss(Ytest,prob)))
else: #不存在则进行归一化处理
prob = (estimator.decision_function(Xtest) - estimator.decision_function(Xtest).min())\
/(estimator.decision_function(Xtest).max()-estimator.decision_function(Xtest).min())
print("{}'s log_loss is:{}\n".format(name[i],log_loss(Ytest,prob)))
我们用
log_loss
得出的结论和我们使用布里尔分数得出的结论不一致
:当使用布里尔分数作为评判标准的时候,SVC
的估计效果是最差的,逻辑回归和贝叶斯的结果相接近。而使用对数似然的时候,虽然依然是逻辑回归最强大,但贝叶斯却没有SVC
的效果好。为什么会有这样的不同呢?
因为逻辑回归和
SVC
都是以最优化为目的来求解模型,然后进行分类的算法。而朴素贝叶斯中,却没有最优化的过程。对数似然函数直接指向模型最优化的方向,甚至就是逻辑回归的损失函数本身,因此在逻辑回归和SVC