ML学习笔记(一):naive bayas

来源:互联网 发布:美容美发管理软件源码 编辑:程序博客网 时间:2024/06/03 04:24

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

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

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)  ji,1jK
则将X分类到i类。
也就是说,选择概率最大的那一类将X归入。

基于Bayes理论,条件概率可以被表示为

p(Ck|X)=p(Ck)p(X|Ck)p(x)
或者表示为
posterior=priorlikelihoodevidence

下面讨论此公式的计算问题。
<1>在实际使用中p(x)可以不用计算,因为对于所有类来说p(x)相同。

<2>p(X|Ck)的计算。由概率论中的知识我们可以知道这是一个已知CkX的联合分布,对于计算这个联合分布是十分困难的。所以这就是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分类器可以表示为:

ŷ =argmaxk1...kP(Ck)j=1mP(xj|Ck)

3. 事件模型

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

  • 正态分布

    P(x=v|c)=12πσ2ce(vμc)22σ2c

  • Bernoulli分布

    P(x=l|Ck)=plkj(1pkj)1l  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)=91429496969=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)=51435251525=0.006757

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

6. python 代码实现

这一部分是用代码实现naive bayes分类器。此部分待我整理好之后,这两天发出。

0 0
原创粉丝点击