【十大经典数据挖掘算法】Naïve Bayes
【十大经典数据挖掘算法】系列
朴素贝叶斯(Naïve Bayes)属于无监督学习的一种,实现简单,没有迭代,学习效率高,在大样本量下会有较好的表现。但因为假设太强——假设特征条件独立,在输入向量的特征条件有关联的场景下并不适用。
1. 朴素贝叶斯算法
朴素贝叶斯分类器的主要思路:通过联合概率\(P(x,y) = P(x|y) P(y)\)建模,运用贝叶斯定理求解后验概率\(P(y|x)\);将后验概率最大者对应的的类别作为预测类别。
分类方法
首先,我们定义训练集\(T = \lbrace (x_1,y_1),(x_2,y_2), \cdots ,(x_N,y_N)\rbrace\),其类别\(y_i \in \lbrace c_1,c_2, \cdots ,c_K\rbrace\),则训练集中样本点数为\(N\),类别数为\(K\)。输入待预测数据\(x\),则预测类别
\begin{equation}
\arg \mathop{\max}\limits_{c_k}p(y=c_k|x)
\label{eq:obj1}
\end{equation}
由贝叶斯定理可知:
\[p(y=c_k|x)= {p(x|y=c_k)p(y=c_k)\over p(x)} \]
对于类别\(c_k\)而言,\(p(x)\)是恒等的,因此式子\eqref{eq:obj1}等价于
\begin{equation}
\arg \mathop{\max}\limits_{c_k} p(x|y=c_k)p(y=c_k)
\label{eq:obj2}
\end{equation}
从上面式子可以看出:朴素贝叶斯将分类问题转化成了求条件概率与先验概率的最大乘积问题。先验概率\(p(y=c_k)\)可通过计算类别的频率得到,但如何计算条件概率 \(p(x|y=c_k)\)呢?
朴素贝叶斯对条件概率做了条件独立性的假设,即特征条件相互独立。设输入\(x\)为n维特征向量\((x^{(1)},x^{(2)},\cdots,x^{(j)},\cdots, x^{(n)})\),第\(j\)维特征\(x^{(j)}\)的取值有\(S_j\)个。由概率论的知识可知:
\[p(x|y=c_k)=\prod _{j}p(x^{(j)}|y=c_k)\]
式子\eqref{eq:obj2}等价于
\begin{equation}
\arg \mathop{\max}\limits_{c_k}p(y=c_k)\prod _{j}p(x^{(j)}|y=c_k)
\end{equation}
为什么要选择后验概率最大的类别作为预测类别呢?因为后验概率最大化,可以使得期望风险最小化,具体证明参看[1]。
极大似然估计
在朴素贝叶斯学习中,需要估计先验概率与条件概率,一般时采用极大似然估计。先验概率的极大似然估计:
\[\hat {p}(y=c_k) = {\sum _{i} I(y_i=c_k)\over N}\]
其中,\(I\)是指示函数,满足括号内条件时为1否则为0;可以看作为计数。
设第\(j\)维特征的取值空间为\(\lbrace a_{j1},a_{j2}, \cdots, a_{jS_j} \rbrace\),且输入变量的第\(j\)维\(x^{(j)}=a_{jl}\),则条件概率的极大似然估计:
\[\hat p(x^{(j)}=a_{jl}|y=c_k)={\sum \limits_{i}I(x_i^{(j)}=a_{jl},y=c_k)\over I(y_i=c_k)}\]
贝叶斯估计
在估计先验概率与条件概率时,有可能出现为0的情况,则计算得到的后验概率亦为0,从而影响分类的效果。因此,需要在估计时做平滑,这种方法被称为贝叶斯估计(Bayesian estimation)。先验概率的贝叶斯估计:
\[\hat {p}(y=c_k) = {\sum _{i} I(y_i=c_k)+\lambda \over N+k\lambda}\]
后验概率的贝叶斯估计:
\[\hat p(x^{(j)}=a_{jl}|y=c_k)={\sum \limits_{i}I(x_i^{(j)}=a_{jl},y=c_k)+\lambda\over I(y_i=c_k)+S_j\lambda}\]
常取\(\lambda =1\),这时被称为Laplace平滑(Laplace smoothing)。下面提到的拼写检查则用到了Laplace平滑——初始时将所有单词的计数置为1。
2. 拼写检查
当用户在输入拼写错误单词时,如何返回他想输入的拼写正确单词。比如,用户输入单词thew
,用户有到底是想输入the
,还是想输入thaw
?这种拼写检查的问题等同于分类问题:在许多可能拼写正确单词中,到底哪一个时最有可能的呢?大神Peter Norvig [2]采用朴素贝叶斯解决这个拼写问题。
朴素贝叶斯分类
设用户输入的单词为\(w\),要返回的拼写正确单词为\(c\),拼写检查要找出最大可能的\(c\),即
\[\arg \mathop{\max}_{c} p(c|w)\]
\(p(c|w)\)可以理解为在已发生\(w\)的情况下发生\(c\)的概率。根据贝叶斯定理:
\[p(c|w)={p(w|c)p(c)\over p(w)}\]
贝叶斯分类器可表示为:
\[\arg \mathop{\max}_{c} p(w|c)p(c)\]
如何估计\(p(w|c)\)与\(p(c)\)呢?估计\(p(c)\)的办法可以在文本库中统计单词\(c\)的频率。\(p(w|c)\)表示大多数用户在输入\(c\)时拼写错误输入成了\(w\)的概率,可以看作时错误模型。这需要对大量的错误输入进行统计,才能对\(p(w|c)\)估计得较为准确。Norvig对此做了简易化的处理:
- 统计所有与\(w\)编辑距离为1的拼写正确单词,选出在文本库中频率最高者;
- 若未找到与\(w\)编辑距离为1的拼写正确单词,则统计所有与\(w\)编辑距离为2的拼写正确单词,选出在文本库中频率最高者
- 若与\(w\)编辑距离为2的拼写正确单词也未找到,则返回\(w\)(即分类失败)。
所谓编辑距离为1,指单词可以通过增加、删除、修改(一个字母)或交换(相邻两个字母)变成另外的单词。上述处理办法默认了:编辑距离为1的拼写正确单词永远比编辑距离为2的更有可能。
存在问题
Norvig所介绍的拼写检查是非常简单的一种,他在博文[2]中指出不足。此外,还有一些需要优化的地方:
- 上下文关联,比如输入
thew
,在不同的上下文中可能返回的拼写正确单词不同; - 输入媒介,比如用户用键盘输入与用手机的九宫格输入,其拼写错误的方式时不一样的。
3. 参考资料
[1] 李航,《统计学习方法》.
[2] Peter Norvig, How to Write a Spelling Corrector.
【十大经典数据挖掘算法】Naïve Bayes的更多相关文章
- 【十大经典数据挖掘算法】PageRank
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 我特地把PageRank作为[十大经 ...
- 【十大经典数据挖掘算法】EM
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 极大似然 极大似然(Maxim ...
- 【十大经典数据挖掘算法】AdaBoost
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 集成学习 集成学习(ensem ...
- 【十大经典数据挖掘算法】SVM
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART SVM(Support Vector ...
- 【十大经典数据挖掘算法】C4.5
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 决策树模型与学习 决策树(de ...
- 【十大经典数据挖掘算法】k-means
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 引言 k-means与kNN虽 ...
- 【十大经典数据挖掘算法】Apriori
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 关联分析 关联分析是一类非常有 ...
- 【十大经典数据挖掘算法】kNN
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 引言 顶级数据挖掘会议ICDM ...
- 【十大经典数据挖掘算法】CART
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 前言 分类与回归树(Class ...
随机推荐
- reactjs 接入数据模型以及markdown语法的支持
页面如下: reactjs 数据接入,直接定义数据(json),如下: reactjs 数据接入,从服务器抓取数据(json),如下:
- HTTP method POST is not supported by this URL
修改提交页面的提交方式,修改method为get(在index页面中html标签 method="get") 示例代码修改后的代码: <form action="s ...
- .NET 4.5.1 预览版新特性
上个月的微软Build大会上宣布了.NET 4.5.1的推出,Heydarian的这个演讲题为".NET开发中的新内容",涵盖了.NET Framework中一些重要的新特性. H ...
- ABP理论学习之授权(Authorization)
返回总目录 本篇目录 介绍 定义权限 检查权限 使用AbpAuthorize特性 使用IPermissionChecker Razor视图 客户端(Javascript) 权限管理者 介绍 几乎所有的 ...
- Javascript基础回顾 之(一) 类型
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- node(async原理)
node中的async是用来实现同步操作的,提供包括map.Series等方法,本文不做赘述. 由于项目需要在浏览器端用了async.js,因此仔细看了下它的代码.原来,一直以为node是在服务端调用 ...
- [nRF51822] 7、基础实验代码解析大全(前十)
实验01 - GPIO输出控制LED 引脚输出配置:nrf_gpio_cfg_output(LED_1); 引脚输出置高:nrf_gpio_pin_set(LED_1); 引脚电平转换:nrf_gpi ...
- Azure PowerShell (9) 使用PowerShell导出订阅下所有的Azure VM的Public IP和Private IP
<Windows Azure Platform 系列文章目录> 笔者在之前的工作中,有客户提出想一次性查看Azure订阅下的所有Azure VM的Public IP和Private IP. ...
- Hystrix框架5--请求缓存和collapser
简介 在Hystrix中有个Request的概念,有一些操作需要在request中进行 缓存 在Hystrix调用服务时,如果只是查询接口,可以使用缓存进行优化,从而跳过真实访问请求. 应用 需要启用 ...
- JAVA spring hibernate 多数据源配置记录
数据源配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...