编程语言
首页 > 编程语言> > 机器学习 - 算法 - 贝叶斯算法概述 , 拼写检查器实现

机器学习 - 算法 - 贝叶斯算法概述 , 拼写检查器实现

作者:互联网

贝叶斯公式原理概述

贝叶斯要解决的问题

正向概率

逆向概率

公式推导 - 男女裤子问题

概率

求解

 

 

 

即显示意义就是 欲求解 B 条件下 A 发生的概率,

可以转换成 用 A 条件下 B 发生的概率 A , B 各自发生的概率 进行计算

这样可以通过已知的条件组合为想要求解的概率

现实实例 - 拼写纠错

 

P(h)   表示某一词在总数据库的出现占比即词频  - 先验概率 , 拿到此数据, 是可以得知他的频率的

P(D|h)   表示在 h 的情况下, 转换成 D 成功的概率 - 即猜测生成观测到数据的可能性大小

    这个的变量也是存在一定的衡量标准, 也是一个可以考量出来的数据

      比如 计划输入 the 结果输成了 thr , 是因为 r 和 e 键盘位置很近, 所以输错可能性很大

      比如 计划输入 the 结果输成了 then, 是因为 then 顺手就打出来了, 输错的可能性也很大

      再比如 计划输入 the 却输成了 there 这就比较不现实, 存在很大的编辑距离偏差, 所以这种可能性的衡量就会很小

P(D)   表示用户输入一个任意单词是 D 的概率 - 这个变量之后对于每个 h 的来说都是一样的因此可以约分掉了

模型比较理论

最大似然

比如现在投掷硬币, 只投掷一次, 结果为 正面

于是我们根据现有的测试结果统计投掷结果 正面 100%

因此我们有理由预测下一次的结果是 100% 的正面, 这就是最大似然的想法

奥卡姆剃刀

而奥卡姆剃刀的想法是 先验概率对结果有较大的权重

这里有这样的呀一个实例

空间中存在多个点, 近似的构成了一个直线, 但是不是精准的直线

我们想对这些点进行拟合

可以直接使用直线

也可以使用二阶多项式

或者三阶多项式或者更高阶多项式

当然如果使用了 N-1 阶多项式必然可以完美拟合 N 个数据点

但是这样的话到底哪个更好呢 ?

奥卡姆剃刀的想法是按照先验数据中  - 在生活中我们基本上很少简单那么复杂的高阶多项式

而且越是高阶的多项式就越小可能性

因此在选择的时候回优先选择低阶多项式比过高阶多项式

实例 - 垃圾优先过滤

P(D) 在正常邮件和垃圾邮件的判断中都有, 相同变量没有什么影响, 忽略即可

先验概率

P(h+) , P(h-) 表示先验概率, 大白话来说就是 一万封邮件中是正常和垃圾的概率, 这个是已知或者可求的概率

条件概率

P(D|h+) , P(D|h-)  表示, 当前是 正常 / 垃圾 邮件下, 这个邮件里面含有这些词的概率

条件概率优化

但是原始问题比较严苛, 不能将 D 完全作为考量, 因为按照这个判定是都含有情况下的判定, 实际情况不一定包含所有的词才算垃圾邮件

大致都有或者存在几个核心的都能算是垃圾邮件的, 因此对这个条件进行展开处理

展开的含义就是 在是正常 / 垃圾邮件的前提下, 包含 d1 的概率 * 在包含 d1 的情况下 又包含 d2  * 在包含 d1. d2 的情况下 又包含 d3 .....

很明显这个的拓展虽然合理但是瞬间麻烦了不少, 因此需要进行简化 - 朴素贝叶斯处理 (假设特征独立)

因此简化成了 P(d1|h+) * P(d2|h+) * P(d3|h+) ....

对于特定的 di 这个词出现在 正常 / 垃圾 邮件中的概率这个也是可以预先得到或者可求的 即 : 10000 个 正常 / 垃圾邮件出现 di 这个词的频率

最终

 

再回到这个最初的公式上, 可见所有的部分都是可以求出, 因此可以求解了

Ps:

 这里使用了朴素贝叶斯消除了彼此特征的影响, 必然会是对最终结果造成一定的影响的

 但是考虑到计算的程度以及对结果的影响, 也算是一定的妥协下最合理的选择而已

贝叶斯实例 - 拼写检查器

 

 

 

 

 

标签:概率,多项式,拼写,算法,垃圾邮件,先验概率,贝叶斯,d1
来源: https://www.cnblogs.com/shijieli/p/11813893.html