机器学习算法——贝叶斯分类器6(sklearn中的朴素贝叶斯)

朴素贝叶斯公式为:

在贝叶斯中,P(x)是先验概率,一般很容易求得。所以需要重点求解贝叶斯概率公式中的分子。

但是,在现实中,要求解也会有各种各样的问题。我们可能面临的特征非常多,这需要极多的计算资源。也有可能出现某一个概率为0的情况,分子就会为0,这种情况下的概率会导致整个概率的估计为0。求解连续型变量的概率,需要引入各种概率论中的数字分布,使用各种分布下的概率密度曲线来估计一个概率。其中涉及的数学过程是极其复杂的,要求熟悉概率论和微积分。

我们最常用的几个分布为:高斯分布、伯努利分布和多项式分布。sklearn中,基于这些分布以及这些分布上的概率估计的改进,为我们提供了四个朴素贝叶斯的分类器。

含义
naive_bayes.BernoulliNB 伯努利分布下的朴素贝叶斯
naive_bayes.GaussianNB 高斯分布下的朴素贝叶斯
naive_bayes.MultinomialNB 多项式分布下的朴素贝叶斯
naive_bayes.ComplementNB 补充朴素贝叶斯
linear_model.BayesianRidge 贝叶斯岭回归,在参数估计过程中使用贝叶斯回归技术来包括正则化参数

以高斯朴素贝叶斯为例,进行讲解。

通过假设P(Xi|Y)是服从高斯分布(也就是正态分布),来估计每个特征下每个类别上的条件概率。对于每个特征下的取值,高斯朴素贝叶斯有以下公式:

P(x_i|Y) = \frac{1}{\sqrt{2 \pi \sigma_y^2}} exp(-\frac{(x-\mu_y)^2}{2\sigma_y^2})

高斯朴素贝叶斯以最大化P(Xi|Y)为目标,来求解该式中的参数\sigma_y\mu_y。求解出参数后,带入一个Xi的值,就能得到一个P(Xi|Y)的概率取值,这个类包含两个参数:

prior: 表示类的先验概率,如果指定,则部根据数据调整先验,如果不指定,则自行根据数据计算先验概率。

var_smoothing:浮点数,可不填。默认值(=1e-9)在估计方差时,为了追求估计的稳定性,将所有特征的方差中最大的方差以某个比例添加到估计的方差中。

代码实现:

from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix as CM

digits = load_digits()

X = digits.data
y = digits.target

Xtrain, Xtest, Ytrain, Ytest = train_test_split(X,y,test_size=0.3,random_state=420)
#建模
gnb = GaussianNB().fit(Xtrain,Ytrain)
#查看分数
acc_score = gnb.score(Xtest,Ytest)
print(acc_score)

#查看预测的概率结果
Y_pred = gnb.predict(Xtest)
#查看预测的概率结果
prob = gnb.predict_proba(Xtest) #返回的是每个特征下的概率

#混淆矩阵
print(CM(Ytest, Y_pred))

伯努利分布下的朴素贝叶斯和多项式分布下的朴素贝叶斯与上述过程类似,大家可以试着实现。

注意的是:多项式朴素贝叶斯只适合对非负离散型数值特征进行分类

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

下节将讲解概率论模型独有的评估指标。

你可能感兴趣的:(贝叶斯分类器,sklearn,机器学习,算法,分类)