机器学习sklearn-朴素贝叶斯2

目录概率类模型的评估指标布里尔分数Brier Score对数损失可靠性曲线预测概率的直方图多项式朴素贝叶斯sklearn中的多项式贝叶斯伯努利朴素贝叶斯朴素贝叶斯的样本不均衡问题补集朴素贝叶斯贝叶斯作文本分类概率类模型的评估指标 混淆矩阵和精确性可以帮助我们了解贝叶斯的分类结果。然而,我们选择贝叶斯进行分类,大多数时候都不是为了单单追求效果,而是希望看到预测的相关概率。这种概率给出预测的可信度,所以对于概率类模型,我们希望能够由其他的模型评估指标来帮助我.
摘要由CSDN通过智能技术生成

目录

概率类模型的评估指标

布里尔分数Brier Score

对数损失

可靠性曲线

预测概率的直方图

多项式朴素贝叶斯

sklearn中的多项式贝叶斯

伯努利朴素贝叶斯

朴素贝叶斯的样本不均衡问题 

补集朴素贝叶斯

贝叶斯作文本分类


概率类模型的评估指标

混淆矩阵和精确性可以帮助我们了解贝叶斯的分类结果。然而,我们选择贝叶斯进行分类,大多数时候都不是为了单单追求效果,而是希望看到预测的相关概率。这种概率给出预测的可信度,所以对于概率类模型,我们希望能够由其他的模型评估指标来帮助我们判断,模型在“概率预测 ”这项工作上,完成得如何。

布里尔分数Brier Score

概率预测的准确程度被称为 校准程度 ,是衡量算法预测出的概率和真实结果的差异的一种方式。一种比较常用的指标叫做布里尔分数,它被计算为是概率预测相对于测试样本的均方误差,表示为:

这个指标衡量了我们的概率距离真实标签结果的差异,其实看起来非常像是均方误差。 布里
尔分数的范围是从 0 1 ,分数越高则预测结果越差劲,校准程度越差,因此布里尔分数越接近 0 越好 。由于它的本质也是在衡量一种损失,所以在sklearn 当中,布里尔得分被命名为 brier_score_loss
注意:新版sklearn的布里尔分数只支持二分类数据。

 

对数损失

另一种常用的概率损失衡量是对数损失( log_loss ),又叫做对数似然,逻辑损失或者交叉熵损失,它是多元逻辑回归以及一些拓展算法,比如神经网络中使用的损失函数。它被定义为,对于一个给定的概率分类器,在预测概率为条件的情况下,真实概率发生的可能性的负对数。由于是损失,因此对数似然函数的取值越小,则证明概率估计越准确,模型越理想 。值得注意得是, 对数损失只能用于评估分类型模型。

 

 

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
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值