朴素贝叶斯分类器--个人笔记

朴素贝叶斯分类器作为基于贝叶斯定理的监督学习算法,曾入选“数据挖掘十大算法”。本文结合个人学习笔记和scikit-learn中朴素贝叶斯算法的官方文档,总结朴素贝叶斯算法的基本思想原理和scikit-learn中三种类型的朴素贝叶斯分类器的适用范围,供以后学习使用。

朴素贝叶斯分类算法的基本原理:

最小化分类错误率的最优贝叶斯分类是使后验概率P(y|x)最大化,即:

根据贝叶斯公式:

P(y \mid x_1, \dots, x_n) = \frac{P(y) P(x_1, \dots x_n \mid y)}                                 {P(x_1, \dots, x_n)}

朴素贝叶斯假设每个样本的所有属性相互独立,则有:

P(x_i | y, x_1, \dots, x_{i-1}, x_{i+1}, \dots, x_n) = P(x_i | y),

所以我们的贝叶斯公式可转化为:

P(y \mid x_1, \dots, x_n) = \frac{P(y) \prod_{i=1}^{n} P(x_i \mid y)}                                 {P(x_1, \dots, x_n)}

由于 P(x_1, \dots, x_n)为已知常数,则 转化为:

这就是朴素贝叶斯的表达式。

根据大数定律,当训练集中包含充足的独立同分布样本时,P(y)可通过各类样本出现的频率来进行估计,所以问题的关键就在于如何合理地估计 P(x_i \mid y)。所以根据假设 P(x_i \mid y)服从不同的分布,我们可以得到不同的贝叶斯分类器。这里介绍scikit-learn官方文档中的3中朴素贝叶斯分类器。

1、Gaussian Naive Bayes(GaussianNB)

Gaussian Naive Bayes算法假设P(x_i \mid y)服从

P(x_i \mid y) &= \frac{1}{\sqrt{2\pi\sigma^2_y}} \exp\left(-\frac{(x_i - \mu_y)^2}{2\sigma^2_y}\right)

所以对于连续属性,GaussianNB分类器是个不错的选择,这里附上scikit-learn官方文档中的一个例子的Python代码:

>>> 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()
>>> clf.fit(X, Y)
GaussianNB(priors=None)
>>> print(clf.predict([[-0.8, -1]]))
[1]
>>> clf_pf = GaussianNB()
>>> clf_pf.partial_fit(X, Y, np.unique(Y))
GaussianNB(priors=None)
>>> print(clf_pf.predict([[-0.8, -1]]))
[1]
2、 Multinomial Naive Bayes(MultinomialNB)
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]))
[3]
3、 Bernoulli Naive Bayes(BernoulliNB
BernoulliNB分类器顾名思义,伯努利贝叶斯分类器,是一种特殊的 MultinomialNB,其样本的 所有特征只取两种属性值(0,1),所以BernoulliNB分类器基于公式:

P(x_i \mid y) = P(i \mid y) x_i + (1 - P(i \mid y)) (1 - x_i)

来计算 P(x_i \mid y)。官方文档中的样例代码:
>>> 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]))
[3]
三种类型的朴素贝叶斯分类器,其适用的样本范围不同。本文参考scikit-learn官方文档的简单总结,以期以后在使用时能够用上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值