朴素贝叶斯的假设前提有两个第一个为:各特征彼此独立;第二个为且对被解释变量的影响一致,不能进行变量筛选。但是很多情况这一假设是无法做到的,比如解决文本分类时,相邻词的关系、近义词的关系等等。彼此不独立的特征之间的关系没法通过朴素贝叶斯分类器训练得到,同时这种不独立性也给问题的解决方案引入了更多的复杂性。
此时,更具普遍意义的贝叶斯网络在特征彼此不独立情况下,可进行建模。但是贝叶斯网络并不放宽第二个假设,故不能对变量进行筛选,因为视解释变量的作用一致。
贝叶斯分类方法是一种展现已知数据集属性分布的方法,其最终计算结果完全依赖于训练样本中类别和特征的分布。与SVM等分类方法不同,它只是对事实进行展现。
朴素贝叶斯是一类比较简单的算法,scikit-learn中朴素贝叶斯类库的使用也比较简单。相对于决策树,KNN之类的算法,朴素贝叶斯需要关注的参数是比较少的,这样也比较容易掌握。在scikit-learn中,一共有3个朴素贝叶斯的分类算法类。分别是GaussianNB,MultinomialNB和BernoulliNB。
其中GaussianNB就是先验为高斯分布的朴素贝叶斯,MultinomialNB就是先验为多项式分布的朴素贝叶斯,而BernoulliNB就是先验为伯努利分布的朴素贝叶斯。
这三个类适用的分类场景各不相同,一般来说,如果样本特征的分布大部分是连续值,使用GaussianNB会比较好。如果如果样本特征的分大部分是多元离散值,使用MultinomialNB比较合适。而如果样本特征是二元离散值或者很稀疏的多元离散值,应该使用BernoulliNB。
贝叶斯网络基本概念有两个:引入了一个有向无环图(Directed Acyclic Graph)和一个条件概率表集合。
DAG。DAG的结点V包括随机变量(类别和特征),有向连接E(A->B)表示结点A是结点B的parent,且B与A是有依赖关系的(不独立)。
条件概率表集合。同时引入了一个条件性独立(conditional independence)概念:即图中任意结点v在给定v的parent结点的情况下,与图中其它结点都是独立的,也就是说P(v|par(v),x1,x2...,xn) = P(v|par(v))。这里par(v)表示v的parent结点集,x1,x2,...,xn表示图中其它结点。
我们清楚,如果已知所有联合概率值(joint distribution),那么任何形式的概率问题都可以迎刃而解。而现实是当特征集合过大(>10)时你几乎无法通过统计得到。而特征集合的大小在"一定程度上"与最终的分类效果是一个正反馈关系。
贝叶斯网络原理较为简单,所以在实际应用中较为广泛。比如垃圾邮件的处理,先对垃圾邮件分词,一些垃圾词“培训”、“打折”...,只需要做每个单词在每个文档中出现的频次就可以用贝叶斯网络推断哪一些是垃圾邮件;