vlambda博客
学习文章列表

「数据分类」朴素贝叶斯算法


1.贝叶斯公式

    一般情况下,令F1,F2,...,FN表示一组互不相容事件,在E(新的证据)已发生的情况下,Fk发生的概率为:

「数据分类」朴素贝叶斯算法

贝叶斯公式

其中:

·P(Fk)称为先验概率(Prior Probability)

·P(E|Fk)称为类似然(Class Likelihood)

·分母称为证据(Evidence)

·P(Fk|E)称为后验概率(Posterior Probability)

2.贝叶斯分类器

    假设分类问题有N种类别c1,c2,...,cN,对于一个实例x进行分类时,贝叶斯分类器先根据贝叶斯公式分别计算在x条件下属于各个类别的条件概率,即后验概率:

「数据分类」朴素贝叶斯算法

贝叶斯分类器

然后根据后验概率最大化准则(期望风险最小化),将x归为有最大后验概率的类别。

3.三种贝叶斯分类算法:

(1)高斯朴素贝叶斯:sklearn.naive_bayes.GaussianNB()

「数据分类」朴素贝叶斯算法

高斯朴素贝叶斯

注】

①属性:

·priors属性:默认值为None,获取各个类标记对应的先验概率。可以利用set_params()方法更改该属性的属性值。

>>>gnb.set_params(priors=[0.6,0.4])

GaussianNB(priors=[0.6, 0.4], var_smoothing=1e-09)

·class_prior_属性:与priors属性一样,获取各个类标记对应的先验概率。区别在于priors属性返回列表,class_prior_返回的是数组。

>>> gnb.class_prior_

array([0.625, 0.375])

>>> gnb.priors

[0.6, 0.4]

·class_count_属性:获取各类标记对应的训练样本数.

>>>gnb.class_count_

array([5., 3.])

·theta_属性:获取各个类标记在各个特征上的均值.

>>> gnb.theta_

array([[-3., -3.],

     [ 2.,  2.]])

·sigma_属性:获取各个类标记在各个特征上的方差.

>>> gnb.sigma_

array([[2.00000001, 2.00000001],

     [0.66666667, 0.66666667]])

②方法

·get_params(deep=True):返回priors与其参数值组成字典,deep属性默认值为True.

 >>>gnb.get_params(deep=True)

{'priors': [0.6, 0.4], 'var_smoothing': 1e-09}

·set_params(params=[]):设置priors参数.

·fit(x, y, sample_weight=None):训练样本,X表示特征向量,y类标记,sample_weight表各样本权重数组.

·partial_fit(X, y, classes=None, sample_weight=None):增量式训练,当训练数据集数据量非常大,不能一次性全部载入内存时,可以将数据集划分若干份,重复调用partial_fit在线学习模型参数,在第一次调用partial_fit函数时,必须制定classes参数,在随后的调用可以忽略.

·predict(X):直接输出测试集预测的类标记.

·predict_proba(X):输出测试样本在各个类标记预测概率值.

·predict_log_proba(X):输出测试样本在各个类标记上预测概率值对应对数值.

·score(X, y, sample_weight=None):返回测试样本映射到指定类标记上的得分(准确率).

(2)多项式朴素贝叶斯:sklearn.naive_bayes.MultinomialNB(),主要用于离散特征分类,例如文本分类单词统计,以出现的次数作为特征值。

多项式朴素贝叶斯

【注】

①多项式朴素贝叶斯参数:

·alpha:浮点型,可选项,默认1.0,添加拉普拉修/Lidstone平滑参数。

·fit_prior:布尔型,可选项,默认True,表示是否学习先验概率,参数为False表示所有类标记具有相同的先验概率。

·class_prior:类似数组,数组大小为(n_classes,),默认None,类先验概率。

②除高斯朴素贝叶斯算法下注释的属性外,多项式朴素贝叶斯算法还包括的不同属性有:

·class_log_prior_:各类标记的平滑先验概率对数值,其取值会受fit_prior和class_prior参数的影响。

·intercept_:将多项式朴素贝叶斯解释的class_log_prior_映射为线性模型,其值和class_log_propr相同。

·coef_:将多项式朴素贝叶斯解释feature_log_prob_映射成线性模型,其值和feature_log_prob相同。

·feature_log_prob_:指定类的各特征概率(条件概率)对数值,返回形状为(n_classes, n_features)数组【特征的条件概率=(指定类下指定特征出现的次数+alpha)/(指定类下所有特征出现次数之和+类的可能取值个数*alpha)】。

>>> mnb.feature_log_prob_

array([[-2.15948425, -1.46633707, -1.178655  , -1.06087196],

       [-1.89711998, -1.60943791, -1.04982212, -1.2039728 ],

       [-1.02961942, -1.94591015, -1.54044504, -1.25276297],

       [-1.89711998, -1.38629436, -1.2039728 , -1.2039728 ]])

·feature_count_:各类别各个特征出现的次数,返回形状为(n_classes, n_features)数组。

>>> mnb.feature_count_

array([[2., 5., 7., 8.],

       [2., 3., 6., 5.],

       [9., 3., 5., 7.],

       [2., 4., 5., 5.]])

(3)伯努利朴素贝叶斯:sklearn.naive_bayes.BernoulliNB(),类似于多项式朴素贝叶斯,也主要用户离散特征分类,和MultinomialNB的区别是:MultinomialNB以出现的次数为特征值,BernoulliNB为二进制或布尔型特性。

4.贝叶斯应用场景实例:

    经常被应用在文本分类中,包括互联网新闻的分类,垃圾邮件的筛选等。


声明:https://www.jianshu.com/p/48ee3eb0820c