• 朴素贝叶斯


    朴素贝叶斯算法是以后验概率最大为理论基础而得出的分类模型。要了解朴素贝叶斯,就需要先了解贝叶斯公式。

    贝叶斯公式

    首先,先看下面这个例子:

    假设一所学校里面有40%的男生,60%的女生。
    你在这所学校的大道上走,迎面走来一个人,由于比较远,看不清楚特征。现在需要你判断Ta的性别,请问你的答案是什么?
    根据学校人数的分布情况,你知道这个学校女生多,因此,回答女生没一点毛病。
    好了,现在Ta走近了一点,可以看到这个人穿着长裤。已知,男生总是穿着长裤,女生有一般穿着长裤,一半穿着裙子(短裤什么的在这个学校不流行,所以没人穿)。那么,现在你的回答是什么?
    这个虽然麻烦一点,但是,简单的算一算还是能够得到答案的:男生全部穿长裤,所以所有男生都有可能是Ta,但女生有一般是穿的长裙,因此只有一半的女生有可能Ta。假设学校总共有100人(虽然有点小,但毕竟有人),那么候选人中有40个男生,30个女生。因此,是男生的概率大一些。
    OK,你们又近了一些,你发现Ta留着长发!!!仔细想想,女生中有2/3的是留着长发的,而男生,嘻嘻,就只有一个(比较非主流撒)。那个留着长发的男生你正好认识,好像他是戴眼镜的,而Ta,并没有戴眼镜!!!没错,真相只有一个,Ta是一个女生,哇咔咔,真佩服自己,推理小王子有没有。

    这个例子中,根据一个又一个特征的出现,我们得到了最后的结果,而从Bayes的角度,则可以这样理解:

    在刚开始,我们仅仅知道先验概率,即学校的男女比例P(男生)和P(女生)。

    之后,我们又得到了Ta的一个特征——穿长裤。那么,我们就需要来修正之前得到的先验概率了,因为有一半的女生已经被排除了。

    [P(Ta = 男生) = P(男生) * P(长裤|男生) / P(长裤) ]

    [P(Ta = 女生) = P(女生) * P(长裤|女生) / P(长裤) ]

    这个就是Bayes公式,其一半形式如下:

    [posterior = frac{likehood imes prior}{evidence} ]

    或者是:

    [P(omega_i | x) = frac{p(x|omega_i) imes P(omega_i)}{p(x)} ]

    高大上的Bayes公式就这么出来了。

    朴素贝叶斯

    朴素贝叶斯的思想基础可以概括如下:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就分到哪一类中。仅仅如此,还不能称之为朴素。其之所以朴素,是因为它假定了变量之间相互独立。这个假设很强,强到是个人都觉得有问题。简单想想,如果有两个特征:穿裙子和性别,那么,很容易想到,穿裙子的基本都是女生(男生穿个裙子,确定不是在演小品?),所以,这两个特征之间相互不独立。在现实中,像这种例子还有很多,但是,朴素贝叶斯作为大杀器,在这种强假设的情况下,仍有优异的表现,不得不说,贝叶斯的强大啊。

    朴素贝叶斯的正式定义如下:

    [x={a_1,a_2,...,a_m} ]

    为一个待分类项,而每个(a)(x)的一个特征属性。

    有类别集合

    [C={y_1,y_2,...,y_n} ]

    计算

    [P(y_1|x),P(y_2|x),...,P(y_n|x) ]

    [mathop{argmax}_{y_k} P(y_k|x) ]

    所以,问题的关键就在于求解(P(y_k|x))

    计算(P(y_k|x))

    假设我们已经有一个训练样本集(X)。那么,就可以统计各个特征在各个类别下的条件概率估计,即

    [P(a_1|y_1),P(a_2|y_1),...,P(a_m|y_1);\ P(a_1|y_2),P(a_2|y_2),...,P(a_m|y_2);\ ...\ P(a_1|y_n),P(a_2|y_n),...,P(a_m|y_m) ]

    如果各个属性见条件独立,则根据贝叶斯定理可得

    [P(y_y|x)=frac{P(x|y_i)P(y_i)}{P(x)} ]

    由于分母是个常数,因此只需要将分子最大化即可,又因为各特征属性是条件独立的,所以有

    [P(x|y_i)P(y_i)=P(y_i)Pi_{j=1}^mP(a_j|y_i) ]

    拉普拉斯修正

    计算(P(y_k|x))时,由于特征空间较为稀疏,因此,常常会出现概率为0的情况,这是我们不愿意看到了。

    比如:

    [P(a_1|y) = 0, P(a_k|y)=1,kin[2,3,...m] ]

    在这种情况下,认为其概率为0显然是不合适的,因此,需要对其进行一些修正。常用的修正方法是拉普拉斯修正法。

    原有的(P(a_j|y_i))的计算方式为

    [P(a_j=a_{jk}|y_i) = frac{Count(y=y_i, a_j=a_{jk})}{Count(y=y_i)} ]

    引入拉普拉斯修正以后,计算公式变为

    [P(a_j=a{jk}|y_i) = frac{Count(y=y_i, a_j=a{jk}) + 1}{Count(y=y_i) + n} ]

    由于分子中含有常数1,因此分子必定非0,也就消除了上述的风险。

    优缺点

    优点

    • 易执行
    • 特征空间大
    • 有效

    缺点

    • 无语义分析
  • 相关阅读:
    【JavaScript数据结构系列】04-优先队列PriorityQueue
    【JavaScript数据结构系列】02-栈Stack
    【JavaScript数据结构系列】01-数组Array
    【JavaScript数据结构系列】00-开篇
    2019个人年度总结
    批处理·命令行中常用的操作
    flutter 环境出错后排查
    [图解算法]线性时间选择Linear Select——<递归与分治策略>
    阿里云轻量应用服务器——配置MySQL远程连接(踩坑,LAMP+CentOS)
    [知识复习] C语言文件读写
  • 原文地址:https://www.cnblogs.com/magle/p/7653120.html
Copyright © 2020-2023  润新知