sklearn-朴素贝叶斯

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sklearn-朴素贝叶斯相关的知识,希望对你有一定的参考价值。

参考技术A 朴素贝叶斯分为三种:高斯朴素贝叶斯、多项式朴素贝叶斯、伯努利朴素贝叶斯。这三种的不同之处在于求条件概率的公式不同。

高斯朴素贝叶斯
Gaussian Naive Bayes (GaussianNB)(1.9.1)

参数:

priors : array-like, shape (n_classes,),先验概率,如果设置了先验概率则不会根据数据调整。

属性:
1、class_prior_ : array, shape (n_classes,),每个类别的概率。
2、class_count_ : array, shape (n_classes,),每个类别观察训练样本的数量。
3、theta_ : array, shape (n_classes, n_features),每个类别每个特征的平均值。
4、sigma_ : array, shape (n_classes, n_features),每个类别每个特征的方差。

方法:
1、fit(X, y[, sample_weight]),拟合。
2、get_params([deep]),得到参数。
3、partial_fit(X, y[, classes, sample_weight]),部分样本上的增量拟合。
4、predict(X),预测。
5、predict_log_proba(X),返回测试向量X的对数概率估计。
6、predict_proba(X),返回测试向量X的概率估计。
7、score(X, y[, sample_weight]),返回给定测试数据和label的平均精度。
8、set_params(**params),设定参数。

多项式朴素贝叶斯
Naive Bayes classifier for multinomial models(MultinomialNB,1.9.2)

参数:
1、alpha : float, optional (default=1.0),加性(Laplace/Lidstone)平滑参数(0不平滑)。
2、fit_prior : boolean, optional (default=True),是否要学习类别的先验概率。如果是False,将使用统一的先验概率。
3、class_prior : array-like, size (n_classes,), optional (default=None),类的先验概率。如果指定了先验信息,则不会根据数据进行调整。

属性:
1、class_log_prior_ : array, shape (n_classes, ),每个类的平滑的经验对数概率。
2、intercept_ : property,将多项式朴素贝叶斯理解为线性模型时,class_log_prior_的镜像。
3、feature_log_prob_ : array, shape (n_classes, n_features),给定类别的特征值的经验对数概率,P(x_i|y)。
4、coef_ : property,将多项式朴素贝叶斯理解为线性模型时,feature_log_prob_的镜像。
5、class_count_ : array, shape (n_classes,),在拟合的过程中每个类所遇到的样本数。给定这个值的时候由样本权重加权。
6、feature_count_ : array, shape (n_classes, n_features),在拟合的过程中每个(class, feature)所遇到的样本数。给定这个值的时候由样本权重加权。

方法:
1、fit(X, y[, sample_weight]),拟合
2、get_params([deep]),得到参数
3、partial_fit(X, y[, classes, sample_weight]),部分样本上的增量拟合。
4、predict(X),预测
5、predict_log_proba(X),返回测试向量X的对数概率估计。
6、predict_proba(X),返回测试向量X的概率估计。
7、score(X, y[, sample_weight]),返回给定测试数据和label的平均精度。
8、set_params(**params),设置参数。

伯努利朴素贝叶斯

参数:
1、alpha : float, optional (default=1.0),加性(Laplace/Lidstone)平滑参数(0不平滑)。
2、binarize : float or None, optional (default=0.0),二值化的样本特征阈值(映射到布尔型)。如果为None,输入被认为已经包含了二进制向量。
3、fit_prior : boolean, optional (default=True),是否要学习类别的先验概率。如果是False,将使用统一的先验概率。
4、class_prior : array-like, size (n_classes,), optional (default=None),类的先验概率。如果指定了先验信息,则不会根据数据进行调整。

属性:
1、class_log_prior_ : array, shape (n_classes, ),每个类的平滑的经验对数概率。
2、feature_log_prob_ : array, shape (n_classes, n_features),给定类别的特征值的经验对数概率,P(x_i|y)。
3、class_count_ : array, shape (n_classes,),在拟合的过程中每个类所遇到的样本数。给定这个值的时候由样本权重加权。
4、feature_count_ : array, shape (n_classes, n_features),在拟合的过程中每个(class, feature)所遇到的样本数。给定这个值的时候由样本权重加权。

方法:
和上面一样。

高斯朴素贝叶斯只有一个参数还是设置先验概率,不方便设置,因此,我没有修改,正确率86.07%,也很不错了。

多项式朴素贝叶斯,修改alpha的值,正确率有轻微的上升下降,变化不大。修改fit_prior,正确率,没有变化。

伯努利朴素贝叶斯,修改alpha,有细微的变化。修改二值化binarize,有轻微变化,修改fit_prior,没有变化。

sklearn中的朴素贝叶斯模型及其应用

1.使用朴素贝叶斯模型对iris数据集进行花分类

尝试使用3种不同类型的朴素贝叶斯:

  (1)多项式型

from sklearn import datasets
iris=datasets.load_iris()
from sklearn.model_selection import cross_val_score
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
pred = gnb.fit(iris.data, iris.target)
y_pred = pred.predict(iris.data)
print(iris.data.shape[0],(iris.target !=y_pred).sum()

  

 

  (2)高斯分布型

from sklearn.naive_bayes import GaussianNB
gnb1=GaussianNB()#构造建立模型
pred=gnb1.fit(iris.data,iris.target)#模型训练,拟合
y_pred=gnb1.predict(iris.data)#分类预测
print(iris.data.shape[0],(iris.target!=y_pred).sum())
scores=cross_val_score(gnb1,iris.data,iris.target,cv=10)
print("Accuracy:%.3f"%scores.mean())
print(y_pred)

  (3)伯努利型

from sklearn.naive_bayes import BernoulliNB
gnb2=BernoulliNB()#构造
pred=gnb2.fit(iris.data,iris.target)#模型训练,拟合
y_pred=gnb2.predict(iris.data)#分类预测
print(iris.data.shape[0],(iris.target!=y_pred).sum())
scores=cross_val_score(gnb2,iris.data,iris.target,cv=10)
print("Accuracy:%.3f"%scores.mean())
print(y_pred)

2.使用sklearn.model_selection.cross_val_score(),对模型进行验证。

 

以上是关于sklearn-朴素贝叶斯的主要内容,如果未能解决你的问题,请参考以下文章

利用sklearn进行朴素贝叶斯分类

机器学习 | Sklearn中的朴素贝叶斯全解

sklearn 高斯朴素贝叶斯 - 为啥是“高斯”?

python sklearn 朴素贝叶斯分类

实战|朴素贝叶斯分类对文档进行分类

实战:朴素贝叶斯对文档进行分类