数据科学之机器学习6: 分类之朴素贝叶斯

artical 20

“文章原创,转载请注明出处”


0、kNN算法的优缺点

与kNN算法一样,朴素贝叶斯算法也是数据挖掘十大算法之一。我们介绍kNN算法时,并没有讨论kNN算法的优缺点,这边首先看看这个问题。

从构造kNN算法的过程可以看到,这个分类算法的精度很高。因为这个算法计算了所有点与待分类点之间的相似度,然后去确定带分类点的类别。由此可见,这个算法对异常值并不敏感。但是正是因为它需要计算所有点之间的距离,所以其复杂度是很高的,换句话就是,如果数据量大的话,这个算法会很费时,并不高效。

一、贝叶斯决策


贝叶斯定理给出了条件概率之间的关系,是一个非常重要的定理。这里直接给出贝叶斯定理的结论:

P(BA)=P(AB)P(B)P(A)

在贝叶斯决策理论里面,要判断点 x 是否属于 Ci 类,只要验证是否存在:

p(Cix)=maxj{P(Cjx)}

即是,使得 p(Cix) 达到最大的那个 Ci 就是 x 所属的类别。

二、具体流程


要计算 P(Cix) ,那么就需要计算 P(xCi)P(Ci)P(x) ,我们知道对于每一个 P(Cix) ,其计算公式中的分母都是 P(x) ,所以有:

P(Cix)P(xCi)P(Ci)

所以我们实际计算时,只需要考虑上式右侧的大小即可。首先我们来确定一些符号的意思:

  • x=[x1,x2,,xp] 为一个带分类的项, xi 为其特征;
  • data表示一个已知分类的数据集( n×p 的矩阵),其每一行代表一个观测,每一列代表一个特征;
  • label表示data中每一个数据对应的类别标签( n×1 的矩阵),比如data的第一行观测的类别就是label中的第一个取值;
  • C=[C1,C2,,Cm] 为一个类别集合,一般来说 m<p
步骤:
  1. 在已知分类的数据集data中统计:

    P(Ci),i=1,2,,m
    P(xjCi),i=1,2,,m;j=1,2,p
  2. 计算

    P(xCi)P(Ci)=P(Ci)j=1pP(xjCi),i=1,2,,m
  3. P(xCk)P(Ck)=max{P(xCi)P(Ci)}

    xCk

三、一些存在的问题


  1. 当步骤的第2步中, P(xCi)P(Ci)=P(Ci)pj=1P(xjCi),i=1,2,,m ,中 P(xjCi) 可能在样本较小时取值出现0,那么就会影响乘积;
  2. 计算机计算时会出现精度问题,比如,如果 P(xjCi) 的值有很多都是非常小的(像0.000001),那么计算机在计算是会将其四舍五入成0。

出现上面的情况应该怎么办呢?

学数学的应该都清楚,遇到这种问题有一个很简单的处理方式,那就是取个对数。虽说取对数后会改变值的大小,但是取对数不会改变原本数据趋势,即原来大的数,取对数后还是大的。

此外,对于 P(xjCi) 可能在样本较小时取值出现0的情况,处理也很简单,那就是将每一个 xj 的初值都设置成1,所有特征的基数都从1开始,不会影响结果。(这时需要注意,所有特征的初值都是1,对应的总数初值也会发生变化。)

四、R语言实现


我的项目


转自:http://jackycode.github.io/blog/2014/04/08/naive-bayes/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值