“Sklearn源码机器学习笔记” 系列教程以Scikit-learn 0.19.x库为基础,系列笔记从Sklearn包源码入手进行理解算法,同时对于sklearn文档的部分demo进行深入的学习。
由于能力有限,不足支持请大家多多指正,大家有什么想法也非常欢迎留言评论!
关于我的更多学习笔记,欢迎您关注“武汉AI算法研习”公众号,Sklearn官网最新原版英文文档下载,公众号回复“sklearn”。
本文分三个部分“【高斯朴素贝叶斯】”、“【多项式朴素贝叶斯】”、“【伯努利朴素贝叶斯】”来进行展开,总共阅读时间大约10分钟。
关于朴素贝叶斯原理方法文章,可见公众号文章“李航《统计学习方法》学习笔记之——第四章:朴素贝叶斯法”
朴素贝叶斯算法中,常用的又分为了高斯朴素贝叶斯、多项式朴素贝叶斯和伯努利朴素贝叶斯三种,Sklearn对于常用三种朴素贝叶斯方法进行了封装,其sklearn.naive_bayes模块就封装了朴素贝叶斯常用方法。
【高斯朴素贝叶斯】
高斯朴素贝叶斯算法是一种特殊类型的NB算法,它特别用于当特征具有连续值时,同时假定所有特征符合高斯分布,比如通过升高和体重预测性别中,由于升高和体重特征值都是连续的数值。Sklearn中GaussianNB()类是朴素贝叶斯分类方法的具体实现。
navie_bayes.GaussianNB(priors = None, var_smoothing)
以上参数中priors为先验概率,一般默认为None,当默认为None时,先验概率自动根据类别数和样本数进行计算,当给出先验概率以给出为准。var_smoothing是为了解决各个维度之间的数据差异问题,为了计算不出错。
#np.var(X, axis=0).max()得到个特征均值最大值
#如果维度之间的数据差异比率太小,则会导致数值错误。
#为了解决这个问题,我们通过epsilon人为地增加方差,这是最大维度标准差的一小部分。
elf.epsilon_ = self.var_smoothing * np.var(X, axis=0).max()
self.sigma_[:, :] += self.epsilon_
self.sigma_[:, :] -= self.epsilon_
GaussianNB()类属性包括:
import numpy as np
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
Y = np.array([1, 1, 1, 2, 2, 2])
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB(priors=None, var_smoothing=1e-09)
clf.fit(X, Y)
print "==Predict result by predict==直接给出测试集的预测类别输出"
print(clf.predict([[-0.8, -1]]))
print "==Predict result by predict_proba==给出测试集样本在各个类别上预测的概率"
print(clf.predict_proba([[-0.8, -1]]))
print "==Predict result by predict_log_proba==给出测试集样本在各个类别上预测的概率的一个对数转化"
print(clf.predict_log_proba([[-0.8, -1]]))
【多项式朴素贝叶斯】
多用于离散特征分类,例如文本分类单词统计,以出现的次数作为特征值。
sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
MultinomialNB()类参数:
MultinomialNB()类属性:
import numpy as np
X = np.random.randint(5, size=(6, 100))
y = np.array([1, 2, 3, 4, 5, 6])
from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB()
clf.fit(X, y)
MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)
print(clf.predict(X[2:3]))
【伯努利朴素贝叶斯】
与多项式模型一样,伯努利朴素贝叶斯适用于离散特征情况,只是伯努利模型中每个特征的取值必须为0或1。
sklearn.naive_bayes.BernoulliNB(alpha=1.0, binarize= 0, fit_prior=True, class_prior=None)
BernoulliNB()类参数:
BernoulliNB()类属性:
import numpy as np
X = np.random.randint(2, size=(6, 100))
Y = np.array([1, 2, 3, 4, 4, 5])
from sklearn.naive_bayes import BernoulliNB
clf = BernoulliNB()
clf.fit(X, Y)
BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)
print(clf.predict(X[2:3]))
[参考文献]
[1] 朴素贝叶斯理论推导与三种常见模型
[2] Sklearn参数详解—贝叶斯
[3] scikit-learn 朴素贝叶斯类库使用小结