本文主要介绍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