朴素贝叶斯

  朴素贝叶斯属于生成方法。朴素体现在样本独立同分布及特征属性条件独立。朴素贝叶斯很直观,计算量不大,在很多领域有广泛的应用

  • 生成方法:直接找出特征输出Y和特征X的联合分布P(X,Y),然后根据条件概率公式P(Y|X) = \frac{P(X,Y)}{P(X)}得出结果,eg:NB、GMM、马尔可夫随机场。
  • 判别方法:直接学习出特征输出Y和特征X之间的关系,要么是决策函数Y = f(X),要么是条件分布P(Y|X)。eg:线性回归、NN、决策树、LR,CRF、SVM等;

事实上,概率模型的训练过程就是参数估计的过程,对于参数估计:

  • 频率学派:认为参数虽然未知,但却是客观存在的固定值,因此可通过优化似然函数等准则来确定参数值,eg:Maximum Likelhood Estimation(MLE);
  • 贝叶斯学派:认为参数是未观察到的随机变量,其本身也可有分布,因此,可假定参数服从一个先验分布,然后基于观测到的数据来计算参数的后验分布。

贝叶斯学派的思想可以概括为先验概率+数据=后验概率。
条件独立公式,如果X和Y相互独立:
P(X,Y) = P(X)P(Y)条件概率公式:P(Y|X) = \frac{P(X,Y)}{P(X)}P(X|Y) = \frac{P(X,Y)}{P(Y)},则P(Y|X) = \frac{P(Y)P(X|Y)}{P(X)}全概率公式:P(X) = \sum_kP(X|Y=Y_k)P(Y_k),其中\sum_kP(Y_k) = 1
从上面的公式很容易得出贝叶斯公式:P(Y_k|X) = \frac{P(Y)P(X|Y)}{ \sum_kP(X|Y=Y_k)P(Y_k)}

1. 朴素贝叶斯模型

假如我们的分类模型样本是:(x_1^{(1)},x_2^{(1)},...,x_n^{(1)},y_1),(x_1^{(2)},x_2^{(2)},...,x_n^{(2)},y_2),...,(x_1^{(m)},x_2^{(m)},...,x_n^{(m)},y_m)
即我们有m个样本,每个样本有n个特征,特征输出有K个类别,定义为C_1,C_2,...,C_K

从样本我们可以学习得到朴素贝叶斯的先验分布P(Y=C_k),(𝑘=1,2,...𝐾),接着学习到条件概率分布P(X=x|Y=C_k)=P(X_1=x_1,X_2=x_2,...,X_n=x_n|Y=C_k),然后就可以用贝叶斯公式得到XY的联合分布P(X,Y)了。联合分布P(X,Y)定义为:P(X,Y=C_k) = P(Y=C_k)P(X=x|Y=C_k)=P(X_1=x_1,X_2=x_2,...,X_n=x_n|Y=C_k)从上面的式子可以看出P(Y=C_k)比较容易通过最大似然法求出,得到的P(Y=C_k)就是类别C_k在训练集里面出现的频率。但是P(X=x|Y=C_k)很难求出,这是一个超级复杂的有n个维度的条件分布。朴素贝叶斯模型在这里做了一个大胆的假设,即X的n个维度之间相互独立,这样就可以得出:P(X_1=x_1,X_2=x_2,...,X_n=x_n|Y=C_k) = P(X_1=x_1|Y=C_k)P(X_2=x_2|Y=C_k)...P(X_n=x_n|Y=C_k)
  从上式可以看出,这个很难的条件分布大大的简化了,但是这也可能带来预测的不准确性。你会说如果我的特征之间非常不独立怎么办?如果真是非常不独立的话,那就尽量不要使用朴素贝叶斯模型了,考虑使用其他的分类方法比较好。但是一般情况下,样本的特征之间独立这个条件的确是弱成立的,尤其是数据量非常大的时候。虽然我们牺牲了准确性,但是得到的好处是模型的条件分布的计算大大简化了,这就是贝叶斯模型的选择。

  对于测试样本,既然是贝叶斯模型,当然是后验概率最大化来判断分类了。我们只要计算出所有的K个条件概率𝑃(𝑌=𝐶𝑘|𝑋=𝑋(𝑡𝑒𝑠𝑡)),然后找出最大的条件概率对应的类别,这就是朴素贝叶斯的预测了。

2. 朴素贝叶斯的推断过程

  我们预测的类别𝐶_{𝑟𝑒𝑠𝑢𝑙𝑡}是使P(Y=C_k|X=X^{(test)})最大化的类别,数学表达式为:
𝐶_{𝑟𝑒𝑠𝑢𝑙𝑡} = argmax_{C_k}P(Y=C_k|X=X^{(test)}) = argmax_{C_k}\frac{P(X=X^{(test)}|Y=C_k)P(Y=C_k)}{P(X=X^{(test)})}
由于对于所有的类别,上式的分母是一样的,因此,预测公式可以简化为:
𝐶_{𝑟𝑒𝑠𝑢𝑙𝑡} = argmax_{C_k}P(X=X^{(test)}|Y=C_k)P(Y=C_k)
接着我们利用朴素贝叶斯的独立性假设,就可以得到通常意义上的朴素贝叶斯推断公式:
𝐶_{𝑟𝑒𝑠𝑢𝑙𝑡} = argmax_{C_k}P(Y=C_k)\prod_{j=1}^nP(X=X^{(test)}|Y=C_k)

3. 朴素贝叶斯的参数估计

  在上一节中,我们知道只要求出P(Y=C_k)P(X=X^{(test)}|Y=C_k), (𝑗=1,2,...𝑛),我们通过比较就可以得到朴素贝叶斯的推断结果。这一节我们就讨论怎么通过训练集计算这两个概率。

对于P(Y=C_k),比较简单,通过极大似然估计我们很容易得到P(Y=C_k)为样本类别C_k出现的频率,即样本类别C_k出现的次数𝑚𝑘除以样本总数m。

对于P(X=X^{(test)}|Y=C_k), (𝑗=1,2,...𝑛),这个取决于我们的先验条件:

  • 如果X_j是离散的值,那么我们可以假设X_j符合多项式分布,这样得到P(X=X^{(test)}|Y=C_k)是在样本类别C_k中,特征X_j^{(test)}出现的频率。即:P(X=X^{(test)}|Y=C_k) = \frac{m_{kj^{test}}}{m_k},其中m_k为样本类别C_k总的特征计数,而m_{kj^{test}}为类别为C_k的样本中,第j维特征X_j^{(test)}出现的计数。
    某些时候,可能某些类别在样本中没有出现,这样可能导致P(X=X^{(test)}|Y=C_k)为0,这样会影响后验的估计,为了解决这种情况,我们引入了拉普拉斯平滑,即此时有:P(X=X^{(test)}|Y=C_k) = \frac{m_{kj^{test}}+ \lambda}{m_k+O_j\lambda},其中\lambda为一个大于0的常数,常常取为1。O_j为第j个特征的取值个数。
  • 如果X_j是非常稀疏的离散值,即各个特征出现概率很低,这时我们可以假设X_j符合伯努利分布,即特征X_j出现记为1,不出现记为0。即只要X_j出现即可,我们不关注X_j的次数。这样得到P(X=X^{(test)}|Y=C_k)是在样本类别C_k中,X_j^{(test)}出现的频率。此时有:P(X=X^{(test)}|Y=C_k) = P(X=1|Y=C_k)X_j^{(test)} + (1-P(X=1|Y=C_k))(1-X_j^{(test)}),其中,X_j^{(test)}取值为0和1。
  • 如果我们我们的X_j是连续值,我们通常取X_j的先验概率为正态分布,即在样本类别C_k中,X_j的值符合正态分布。这样P(X=X^{(test)}|Y=C_k)的概率分布是:P(X=X^{(test)}|Y=C_k) = \frac{1}{\sqrt{2\pi\delta_k^2}}exp(-\frac{(X_j^{(test)}-u_k)^2}{2\delta_k^2})
    其中u_k\delta_k^2是正态分布的期望和方差,可以通过极大似然估计求得。u_k为在样本类别𝐶𝑘中,所有X_j的平均值。\delta_k^2为在样本类别C_k中,所有X_j的方差。对于一个连续的样本值,带入正态分布的公式,就可以求出概率分布了。

从上面的计算可以看出,NB没有复杂的求导和矩阵运算,因此效率很高。

总结
朴素贝叶斯的主要优点有:

  • 算法逻辑简单,易于实现(算法思路很简单,只要使用贝叶斯公式转化即可!)
  • 分类过程中时空开销小(假设特征相互独立,只会涉及到二维存储)
  • 对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。
  • 对缺失数据不太敏感,算法也比较简单,常用于文本分类。

朴素贝叶斯的主要缺点有:

  • 假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
  • 对输入数据的表达形式很敏感。
4. 朴素贝叶斯实战

sklearn 中有3种不同类型的朴素贝叶斯,对应上节提到的三种条件概率求法:

  • 高斯分布型:用于classification问题,假定属性/特征服从正态分布的。
  • 多项式型:用于离散值模型里。比如文本分类问题里面我们提到过,我们不光看词语是否在文本中出现,也得看出现次数。如果总词数为n,出现词数为m的话,有点像掷骰子n次出现m次这个词的场景。
  • 伯努利型:最后得到的特征只有0(没出现)和1(出现过)。

我们使用 iris 数据集进行分类

from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import cross_val_score
from sklearn import datasets
iris = datasets.load_iris()
gnb = GaussianNB()
scores = cross_val_score(gnb, iris.data, iris.target, cv=10)
print("Accuracy:%.3f"%scores.mean())
"""
Accuracy:0.953
"""
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • 朴素贝叶斯 在机器学习中,朴素贝叶斯分类器是一系列以假设特征之间强(朴素)独立下运用贝叶斯定理为基础的简单概率分类...
    七八音阅读 20,391评论 0 21
  • 概率有向图模型 朴素贝叶斯也是最简单的概率有向图模型。 生成模型与判别模型 朴素贝叶斯方法实际上学习到的是生成数据...
    李威威阅读 2,737评论 0 7
  • 在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻...
    云时之间阅读 1,874评论 6 24
  • 总教练:林坚 教练.潘饶平 队员:张景轩 我的宣誓:我是一个自信负责任的男人 我的立场. 我我们承若创造一个博爱...
    为梦想而起航阅读 200评论 0 0
  • 自从学校搬迁到市东北城郊之后,我就开始乘公交车上下班了。不喜欢开车的原因一是本身技术不是很好,本着不给人添麻烦的原...
    太空土豆阅读 365评论 2 6