这个章节,我们一起来学习朴素贝叶斯模型。朴素贝叶斯模型的知名度非常高,感觉可以当成机器学习和数据挖掘领域中的ABC。
如之前所说,朴素贝叶斯模型属于概率图模型的一类,也是当中拓扑结构最简单的一种。那么,在朴素贝叶斯模型当中,我们需要了解哪些内容呢?
贝叶斯定理;
特征独立性假设。
贝叶斯定理
接触过数理统计和概率论课程的同学,想必对贝叶斯公式一定不陌生。不介意我贴一下公式吧。
\[ P(Y = y_i | X = x_i) = \frac{P(X = x_i,Y = y_i)}{P(X = x_i)}
\ = \frac{P(X = x_i|Y = y_i)P(Y = y_i)}{\sum_j P(X = x_i |Y = y_j)P(Y = y_j)} \]
也就是说,假设我们知道每个类别的概率分布以及各类别下的特征分布,那么对于未知类别样本,我们可以利用贝叶斯定理求的该样本属于各个类别的概率。
不仅如此,通过后验概率最大化准则,我们可以选择后验概率最大的类别作为判别结果,并进行系统决策。
为什么后验概率最大化准则是合理的?这是因为后验概率最大化准则等同于期望风险最小化。
假设,我们选择0-1损失函数\(L(Y, f(x))\)作为朴素贝叶斯模型的代价损失函数。如果说要让我们的模型可以很好表征数据,那么可以尽量使模型的经验风险越小,即可以让代价损失函数在我们估计的后验概率分布或联合概率分布上的期望越小越好。
\[ f(x) = argmin_{y∈Y} \sum_{k=1}^K L(c_k, y) P(c_k| X = x_i)
\ = argmin_{y∈Y} \sum_{k=1}^K P(y ≠ c_k| X = x_i)
\ = argmin_{y∈Y} (1 - \sum_{k=1}^K P(y = c_k| X = x_i))
\ = argmax_{y∈Y} \sum_{k=1}^K P(y = c_k| X = x_i) \]
这就是贝叶斯定理用于解决分类问题的数学原理。
特征独立性假设
既然我们已经有了贝叶斯定理这把利刃,是不是就代表所有问题就都迎刃而解来呢?先等等,让我们再想想。
仔细看一下贝叶斯公式,有什么问题? 噢,好像对于不同类别求后验概率的时候,分母都一样啊!嗯,这部分计算可以不用做了,因为不影响我们最终的结果嘛。
那还有什么问题呢?我们再看看分子。
分子中类别的概率分布应该没有什么问题,那类别条件下特征分布呢?好像这个复杂度有点高啊!
假设,我们一共有100个特征,每个特征有100种取值,然后有10个类别,那需要统计多少参数? 应该是100000个参数。而且,这个参数量级会随着特征数、特征取值范围以及类别数呈现指数级增长。
除了参数多估计工作量大之外,随之会带来数据严重稀疏、过拟合等问题。因此,必须对模型做一些简化。
朴素贝叶斯模型解决这个问题的手段是简单粗暴的,直接做出了特征独立性假设。
\[ P(Y = y_i | X = x_i) = \frac{P(X = x_i|Y = y_i)P(Y = y_i)}{\sum_j P(X = x_i |Y = y_j)P(Y = y_j)}
\ = \frac {P(Y=y_i)∏_jP(x_j|Y=y_i)}{\sum_j P(X = x_i |Y = y_j)P(Y = y_j)} \]
那么现在我们只需要估计多少参数呢?应该是1000个,大大降低了模型复杂度。
参数估计
朴素贝叶斯模型的参数估计,就是采用极大似然估计法。但是由于数据稀疏问题,导致我们在进行参数估计时往往得到0值。
解决这个问题,一般采用平滑的思想。比如,最简单的可以在分子分母都同时加上常数。这样可以保证分子不为0且概率归一化。
\[ P(X^j=x_{ij} | Y = c_k) = \frac{\sum_{i=1}^N I(x_i^j= x_{ij}, y_i = c_k) + λ}{\sum_{i=1}^N I(y_i = c_k) + S_jλ}\]
\[ P(Y = c_k) = \frac{\sum_{i=1}^N I(y_i = c_k) + λ}{N + Kλ}\]
\(K\)为类别数,\(S_j\)为特征\(j\)的取值个数。当\(λ\)=1时,称为拉普拉斯平滑。
至此,朴素贝叶斯的关键知识点也就粗略地讲完了。
总结
朴素贝叶斯模型相对来说,还是非常容易理解的。在自然语言处理领域有着广泛的使用,比如情感分析、垃圾邮件过滤等。
实际上,朴素贝叶斯建模一般可能还会涉及到连续特征的分布建模和阈值分割等问题,这些都和实际的业务数据相关。
可以这么说,朴素贝叶斯模型向我们表明了概率论、贝叶斯公式以及其他数学知识可以有效地帮助我们解决实际的生产问题。
参考资料
统计学习方法 李航