您的位置:首页 > 大数据 > 人工智能

ML学习笔记(一):naive bayas

2016-06-25 13:38 267 查看
学习了一个多学期的机器学习和数据挖掘的基本知识,经过一次考试认识到,目前知识还处于混乱状态,借此平台整理,加深记忆。

如果中间过程没有看懂,我相信我的例子一定能让你透彻理解。例子需要动手计算,相信算完再回顾前面的理论就会有新的理解。例子在第五部分。

1. 简介

naive bayes分类器是一种很简单的概率分类器。主要理论是bayes理论,以及对特征间强独立性的假设。就是假设所有事件互相独立。举例来说就是,决定是否买电脑时,我的年龄和我的收入是完全独立的。年龄不会影响收入。

优点:Simple and fast

缺点:在现实问题中,对于各个特征完全独立的假设可能不准确。

2. 概率模型

naive bayes分类器是一个条件概率模型,该分类器如下面公式所示:

问题描述:X=(x(1),x(2)...,x(m))其中m代表特征的数量。P(Ck|X)代表分到第k类的概率。如果满足:P(Ci|X)≥P(Cj|X) j≠i,1≤j≤K则将X分类到i类。

也就是说,选择概率最大的那一类将X归入。

基于Bayes理论,条件概率可以被表示为p(Ck|X)=p(Ck)p(X|Ck)p(x)或者表示为posterior=prior∗likelihoodevidence

下面讨论此公式的计算问题。

<1>在实际使用中p(x)可以不用计算,因为对于所有类来说p(x)相同。

<2>p(X|Ck)的计算。由概率论中的知识我们可以知道这是一个已知Ck时X的联合分布,对于计算这个联合分布是十分困难的。所以这就是naive bayes的奇妙之处,下面是详细的公式推导,使用naive bayes的特征独立性,得出来p(X|Ck)的结果。

p(x(1),x(2)...,x(m)|Ck)=p(x(1),x(2)...,x(m),Ck)p(Ck)

=p(x(1)|x(2)...,x(m),Ck)∗p(x(2)...,x(m),Ck)p(Ck)

=p(x(1)|x(2)...,x(m),Ck)∗p(x(2)|...,x(m),Ck)∗...∗p(xm,Ck)p(Ck)

=p(x(1)|x(2)...,x(m),Ck)∗p(x(2)|...,x(m),Ck)∗...∗p(xm|Ck) (1)

由于naive bayes假设所有特征独立,此时条件概率等于无条件概率即:

p(x(1)|x(2))=p(x(1),x(2))p(x(2))=p(x(1))p(x(2))p(x(2))=p(x(1))

所以(1)可以化简为:

p(x(1),x(2)...,x(m)|Ck)=∏j=1mp(x(j)|Ck)

但是读者可能又会问,p(x(j)|Ck)怎么计算呢,这个你看到第四部分,参数估计就明白了。这里是原理,请耐心阅读。

<3>P(Ck)的计算。

P(C_k)为先验概率,此概率一半为已知。

<4>接下来就是结论,编程的时候就是使用的这一部分,综上naive bayes分类器可以表示为:

ŷ =argmaxk∈1...kP(Ck)∏j=1mP(xj|Ck)

3. 事件模型

这一部分是针对上一部分P(xj|Ck)的进一步讨论,在实际计算时,我们往往将P(xj|Ck)假定为某一种分布,例如:

正态分布

P(x=v|c)=12πσ2c‾‾‾‾‾√e−(v−μc)22σ2c

Bernoulli分布

P(x=l|Ck)=plkj(1−pkj)1−l l=0,1

4. 参数估计

上一部分,就是说如果碰到实际问题,可以假设概率就是这个样子。但是如果不能假设成为这个样子,我们就需要用到参数估计的知识了。现在我们再回顾一下我们要计算的公式:

P(Ck)∏j=1mP(x(j)|Ck)

所以本节分为两个部分

part one: P(Ck)的估计

P̂ (Y=Ck)=∑ni=1I(yi=Ck)+λn+Kλ

这个式子就是说,我这一类的先验概率可以表示为,我所有已知数据中是这一类的数量/总的数量。其中λ是平滑参数,主要使用意义在part two中防止分母为0,这个值是我们预先取定的,如果λ=1则称为拉普拉斯平滑。

part two:P(x(j)|Ck)的估计

P(x(j)|Ck)=∑i=1nI(x(j)i=l,yi=Ck)+λ∑ni=1I(yi=Ck)+Sjλ

这个式子就是说,P(x(j)=l|Ck)可以用属于这一类,并且x(j)属性为l的数据的数量/这一类数据的数量。其中λ主要是为了防止分母为0,因为某一类可能一个数据也没有。Sj是这一个属性x(j)有几种情况,比如是否买电脑问题的年龄属性,这个属性可能取值为年轻,年老,中年。那么此时Sj=3。

5. 例子:是否购买电脑

好了,讲了这么多,如果没有例子我也是谜的。下面这个例子相信能让你对我上面总结的各种公式有深刻的理解。

例:现在我们已经有了一些购买电脑人的信息如下图,使用naive bayes模型,预测wxc575843同学他会不会买电脑,此同学的属性为X=(age=youth,income=medium,student=yes,credit_rating=fair)

不使用平滑即λ=0



解:

这里一共要计算两个值,P(buy|X)和P(not buy|X)

<1>P(buy|X)=P(buy)P(age=youth|buy)P(income=medium|buy)P(student=yes|buy)P(credit_rating=fair|buy)

这里我们可以数出,14个人中有9个买了电脑,所以P(buy)=914

在9个买了电脑的人中age=youth的有两个所以P(age=youth|buy)=29

在9个买了电脑的人中income=medium的有4个所以P(income=medium|buy)=49

同理

P(student=yes|buy)=69

P(credit_rating=fair|buy)=69

所以P(buy|X)=914∗29∗49∗69∗69=0.02822

<2>P(not buy|X)=P(not buy)P(age=youth|not buy)P(income=medium|not buy)P(student=yes|not buy)P(credit_rating=fair|not buy)

同<1>中的计算方式可得P(not buy|X)=514∗35∗25∗15∗25=0.006757

综上所述:P(not buy|X)<P(buy|X)$所以wxc575843同学会买电脑。

6. python 代码实现

这一部分是用代码实现naive bayes分类器。此部分待我整理好之后,这两天发出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息