常用分类问题的算法-朴素贝叶斯分类器(Naive Bayes Classifiers)

朴素贝叶斯分类器是分类算法集合中基于贝叶斯理论的一种算法。它不是单一存在的,而是一个算法家族,在这个算法家族中它们都有共同的规则。例如每个被分类的特征对与其他的特征对都是相互独立的。

朴素贝叶斯分类器的核心思想是:
1、将所有特征的取值看成已经发生的事件
2、将因变量属于某个分类也看成所有特征出现条件下的概率事件去判断。将分类问题转换为计算Xi出现的情况下 Yi 发生的概率(即为 P(Yi|Xi))。
3、在假设特征变量之间均独立的前提下,根据概率论的知识, 计算Yi 在 Xi发生时的条件概率 为 Xi和Yi同时发生的概率除以 Xi独立概率。即 P(Yi|Xi)=P(Xi|Yi)*P(Yi)/P(Xi)

朴素贝叶斯的难点和误差来源:

1、所有特征必须是分类变量
2、需要知道每个特征(X)的独立发生概率、因变量(Y)独立发生的概率和因变量发生的情况下,每个特征发生的概率。
3、需要非常有代表性的数据,尽量减少 X 的分布,Y的分布,X|Y 条件分布的误差。
4、特征之间独立性的假设,造成模型误差

基本朴素贝叶斯的变体:

1、高斯贝叶斯(GaussianNB):
将连续特征假设为高斯分布(正态分布)进行概率计算。
所以高斯贝叶斯需要连续特征符合高斯分布。

2、多项式贝叶斯(MultinomialNB):先验为高斯分布的朴素贝叶斯,用于多类型的离散变量。转换为数字即可,不需要dummy处理。

3、伯努利分布贝叶斯(BernoulliNB):先验为伯努利分布的朴素贝叶斯,用于0,1变量的离散变量。转换为数字即可。

2、条件概率的计算方法的变体(m估计法)

朴素贝叶斯注意点

这个部分的内容,本来应该在最后说的,不过为了把干货集中放在代码示例之前,先搁这儿了,大家也可以看完朴素贝叶斯的各种例子之后,回来再看看这些tips。

1)大家也知道,很多特征是连续数值型的,但是它们不一定服从正态分布,一定要想办法把它们变换调整成满足正态分布!!
2)对测试数据中的0频次项,一定要记得平滑,简单一点可以用『拉普拉斯平滑』。
3)先处理处理特征,把相关特征去掉,因为高相关度的2个特征在模型中相当于发挥了2次作用。
4)朴素贝叶斯分类器一般可调参数比较少,比如scikit-learn中的朴素贝叶斯只有拉普拉斯平滑因子alpha,类别先验概率class_prior和预算数据类别先验fit_prior。模型端可做的事情不如其他模型多,因此我们还是集中精力进行数据的预处理,以及特征的选择吧。
5)一般其他的模型(像logistic regression,SVM等)做完之后,我们都可以尝试一下bagging和boosting等融合增强方法。咳咳,很可惜,对朴素贝叶斯里这些方法都没啥用。原因?原因是这些融合方法本质上是减少过拟合,减少variance的。朴素贝叶斯是没有variance可以减小。

贝叶斯的例子
https://blog.csdn.net/han_xiaoyang/article/details/50629608

https://www.kaggle.com/c/sf-crime/data

你可能感兴趣的:(常用分类问题的算法-朴素贝叶斯分类器(Naive Bayes Classifiers))