序
本次记录朴素贝叶斯的相关原理,并上一张手写的面试级推导过程
朴素贝叶斯模型是什么?
朴素贝叶斯是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的数据集,首先基于特征条件独立性假设学习输入/输出的联合概率分布;然后基于此模型对给定的预测样本x,利用贝叶斯定理求出后验概率最大的输出y。
核心思想
朴素贝叶斯核心思想利用先验概率得到后验概率,并且最终由期望风险最小化得出后验概率最大化,从而输出让后验概率最大化的值(具体概率与先验概率由加入拉普拉斯平滑的极大似然估计而成的贝叶斯估计得到),特征必须相互独立。
基本原理
对于给定的训练数据集,先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。
前馈知识:贝叶斯参数估计
用极大似然估计可能会出现所要估计的概率值为0的情况,使分类产生偏差,解决这一问题的方法是采用贝叶斯估计。条件概率的贝叶斯估计为:
先验概率的贝叶斯估计为:
其中,在两个估计的公式中,lambda >= 0,等价于在随机变量各个取值的频数上赋予一个正数,常去lambda = 1,表示拉普拉斯平滑。
朴素贝叶斯推导
优缺点
优点:
算法逻辑简单,易于实现
分类过程的空间开销较小,可以实现小批量的增量训练
对缺失值不是很敏感,常用于文本分类
缺点:
属性间独立性假设过强,对于属性间相关性较大的数据,贝叶斯模型无法做出很好地分类效果。
对数据特征的形势要求较高,比如要求离散型、二元特征或连续型,每种类型特征其计算的先验都不一样。
朴素贝叶斯与LR的比较
(1)判别式与生成式
Naive Bayes是一个生成模型,在计算P(y|x)之前,先要从训练数据中计算P(x|y)和P(y)的概率,从而利用贝叶斯公式计算P(y|x)。
Logistic Regression是一个判别模型,它通过在训练数据集上最大化判别函数P(y|x)学习得到,不需要知道P(x|y)和P(y)。
(2)独立性
Naive Bayes是建立在条件独立假设基础之上的,设特征X含有n个特征属性(X1,X2,...Xn),那么在给定Y的情况下,X1,X2,...Xn是条件独立的。
Logistic Regression的限制则要宽松很多,如果数据满足条件独立假设,Logistic Regression能够取得非常好的效果;当数据不满度条件独立假设时,Logistic Regression仍然能够通过调整参数让模型最大化的符合数据的分布,从而训练得到在现有数据集下的一个最优模型。
(3)数据集大小
当数据集比较小的时候,应该选用Naive Bayes,为了能够取得很好的效果,数据的需求量为O(log n)。
当数据集比较大的时候,应该选用Logistic Regression,为了能够取得很好的效果,数据的需求量为O( n)。
(4)训练方式
Naive Bayes运用了比较严格的条件独立假设,为了计算P(y|x),我们可以利用统计的方法统计数据集中P(x|y)和P(y)出现的次数,从而求得P(x|y)和P(y)。
Logistic Regression在计算时,是在整个参数空间进行线性搜索的。
贝叶斯使用技巧
1、sklearn中的朴素贝叶斯模型
朴素贝叶斯是一类比较简单的算法,scikit-learn中朴素贝叶斯类库的使用也比较简单。相对于决策树,KNN之类的算法,朴素贝叶斯需要关注的参数是比较少的,这样也比较容易掌握。
在scikit-learn中,一共有3个朴素贝叶斯的分类算法类。
分别是GaussianNB,MultinomialNB和BernoulliNB。
其中GaussianNB就是先验为高斯分布的朴素贝叶斯,
MultinomialNB就是先验为多项式分布的朴素贝叶斯,
而BernoulliNB就是先验为伯努利分布的朴素贝叶斯。
2、如何选择?
如果样本特征的分布大部分是连续值,使用GaussianNB会比较好。
如果如果样本特征的分大部分是多元离散值,使用MultinomialNB比较合适。
而如果样本特征是二元离散值或者很稀疏的多元离散值,应该使用BernoulliNB。
网友评论