本文主要介绍sklearn中关于朴素贝叶斯模型的用法,其中主要包含以下两类模型:


  • 离散型:所有维度的特征都是离散型的随机变量
  • 连续型:所有维度的特征都是连续型的随机变量

1.sklearn.naive_bayes.MultinomialNB

多项式朴素贝叶斯(Multinomial Naive Bayes),即所有特征都是离散型的随机变量(例如在做文本分类时所使用的词向量就是离散型的).在sklearn中,这个方法的名称为MultinaomialNB.其相关信息如下:

参数表

含义

alpha

平滑项;浮点型,默认值为1,即拉普拉斯平滑

fit_prior

是否学习先验概率;布尔型,默认值为True.若为false,将使用均匀分布作为先验概率

class_prior

指定先验概率;默认为不指定

注:在sklearn中,计算先验概率时并没有加入平滑项

属性表

含义

class_log_prior_

先验概率取自然对数

class_count_

每个类别中各有多少实例数

方法表

含义

fix(X,y)

拟合

get_params()

获取参数表中的参数

predict(X)

返回预测出的结果

predict_proba(X)

返回预测出的概率值

score(X,y)

返回准确率

  • 示例
import textProcess as tp
from sklearn.naive_bayes import MultinomialNB
from sklearn.cross_validation import train_test_split
from sklearn.metrics import classification_report
import numpy as np

data,target= tp.preProcessing()
X_train,X_test,y_train,y_test = train_test_split(data,target,test_size=0.30)
mnb = MultinomialNB()
mnb.fit(X_train,y_train)
y_pre = mnb.predict((X_test))
# print y_pre
# print y_test
print 'class count',mnb.class_count_
print 'The accuracy of Naive Bayes Classifier is',mnb.score(X_test,y_test)
print classification_report(y_test,y_pre)

​源码​

2.sklearn.naive_bayes.GaussianNB

处理离散型随机变量有一个最直观的方法:使用小区间切割,直接使其离散化.由于这种方法较难控制小区间的大小,而且对训练集质量的要求较高;所以采用第二种方法:假设该变量服从高斯分布(正太分布),在利用极大似然估计来计算变量的条件密度.

该方法没有参数,方法表同上

属性表

含义

class_prior_

先验概率

class_count_

每个类别中各有多少实例数

theta_

高斯分布参数

sigma_

高斯分布参数

  • 示例
import textProcess as tp
from sklearn.naive_bayes import MultinomialNB
from sklearn.naive_bayes import GaussianNB
from sklearn.cross_validation import train_test_split
from sklearn.metrics import classification_report
import numpy as np



data,target= tp.preProcessing()
X_train,X_test,y_train,y_test = train_test_split(data,target,test_size=0.30)

mnb = MultinomialNB()
mnb.fit(X_train,y_train)
print 'The accuracy of Naive Bayes Classifier is',mnb.score(X_test,y_test)

gnb = GaussianNB()
gnb.fit(X_train,y_train)
print 'The accuracy of Naive Bayes Classifier is',gnb.score(X_test,y_test)

>>
>>
The accuracy of Naive Bayes Classifier is 1.0
The accuracy of Naive Bayes Classifier is 1.0

有时离散型的随机变量,也可以强制为连续型

3.sklearn.naive_bayes.BernoulliNB

该方法同MultinomialNB类似,只是它是专门针对随机变量为伯努利分布时的情况,也就是说每个维度的取值情况只有两种.

参考


  • Python与机器学习实战
  • scikit learn 0.17