This repository has been archived on 2020-04-25. You can view files and clone it, but cannot push or open issues or pull requests.
ml/bayes
2020-04-25 14:51:45 +08:00
..
bayes.py 迁移仓库 2020-02-23 22:14:06 +08:00
README.md 修复图片问题 2020-04-25 14:51:45 +08:00

朴素贝叶斯

叶斯分类器是一种概率框架下的统计学习分类器,对分类任务而言,假设在相关概率都已知的情况下,贝叶斯分类器考虑如何基于这些概 率为样本判定最优的类标。在开始介绍贝叶斯决策论之前,我们首先来回顾下概率论委员会常委--贝叶斯公式。

条件概率

条件概率

朴素贝叶斯最核心的部分是贝叶斯法则,而贝叶斯法则的基石是条件概率。贝叶斯法则如下:

条件概率

对于给定的样本xPx与类标无关Pc称为类先验概率px | c 称为类条件概率。这时估计后验概率Pc | x就变成为 估计类先验概率和类条件概率的问题。对于先验概率和后验概率,在看这章之前也是模糊了我好久,这里普及一下它们的基本概念。

先验概率: 根据以往经验和分析得到的概率。
后验概率:后验概率是基于新的信息,修正原来的先验概率后所获得的更接近实际情况的概率估计。

实际上先验概率就是在没有任何结果出来的情况下估计的概率,而后验概率则是在有一定依据后的重新估计,直观意义上后验概率就是条 件概率。

pic

回归正题对于类先验概率Pcpc就是样本空间中各类样本所占的比例根据大数定理当样本足够多时频率趋于稳定等于其 概率这样当训练样本充足时p(c)可以使用各类出现的频率来代替。因此只剩下类条件概率px | c 它表达的意思是在类别c中 出现x的概率它涉及到属性的联合概率问题若只有一个离散属性还好当属性多时采用频率估计起来就十分困难因此这里一般采用 极大似然法进行估计。

极大似然法

极大似然估计Maximum Likelihood Estimation简称MLE是一种根据数据采样来估计概率分布的经典方法。常用的策略是先假定总 体具有某种确定的概率分布再基于训练样本对概率分布的参数进行估计。运用到类条件概率px | c 假设px | c )服从一个 参数为θ的分布,问题就变为根据已知的训练样本来估计θ。极大似然法的核心思想就是:估计出的参数使得已知样本出现的概率最大,即 使得训练数据的似然最大。

pic

所以,贝叶斯分类器的训练过程就是参数估计。总结最大似然法估计参数的过程,一般分为以下四个步骤:

  1. 写出似然函数;
  2. 对似然函数取对数,并整理;
  3. 求导数令偏导数为0得到似然方程组
  4. 解似然方程组,得到所有参数即为所求。

例如假设样本属性都是连续值px | c 服从一个多维高斯分布则通过MLE计算出的参数刚好分别为

pic

上述结果看起来十分合乎实际,但是采用最大似然法估计参数的效果很大程度上依赖于作出的假设是否合理,是否符合潜在的真实数据分 布。这就需要大量的经验知识,搞统计越来越值钱也是这个道理,大牛们掐指一算比我们搬砖几天更有效果。

朴素贝叶斯分类器

不难看出:原始的贝叶斯分类器最大的问题在于联合概率密度函数的估计,首先需要根据经验来假设联合概率分布,其次当属性很多时, 训练样本往往覆盖不够参数的估计会出现很大的偏差。为了避免这个问题朴素贝叶斯分类器naive Bayes classifier采用了“属 性条件独立性假设”即样本数据的所有属性之间相互独立。这样类条件概率px | c )可以改写为:

pic

这样,为每个样本估计类条件概率变成为每个样本的每个属性估计类条件概率。

pic

相比原始贝叶斯分类器,朴素贝叶斯分类器基于单个的属性计算类条件概率更加容易操作,需要注意的是:若某个属性值在训练集中和某 个类别没有一起出现过这样会抹掉其它的属性信息因为该样本的类条件概率被计算为0。因此在估计概率值时常常用进行平滑 smoothing处理拉普拉斯修正Laplacian correction就是其中的一种经典方法具体计算方法如下

pic

当训练集越大时,拉普拉斯修正引入的影响越来越小。对于贝叶斯分类器,模型的训练就是参数估计,因此可以事先将所有的概率储存好 ,当有新样本需要判定时,直接查表计算即可。

词集模型

对于给定文档,只统计某个侮辱性词汇(准确说是词条)是否在本文档出现

词袋模型

对于给定文档,统计某个侮辱性词汇在本文当中出现的频率,除此之外,往往还需要剔除重要性极低的高频词和停用词。因此, 词袋模型更精炼,也更有效。

数据预处理

向量化

向量化、矩阵化操作是机器学习的追求。从数学表达式上看,向量化、矩阵化表示更加简洁;在实际操作中,矩阵化(向量是特殊的矩阵)更高效。