这个系列是为了应对找工作面试时面试官问的算法问题,所以只是也谢算法的简要介绍,后期会陆续补充关于此算法的常见面试的问题!
贝叶斯分类器的原理其实很简单,知道了贝叶斯公式基本上就知道了贝叶斯分类器的工作原理。对于一个待分类项,求出此项出现的条件下哪个类别的概率大,就判定为哪类,仅次而已。其实贝叶斯分类器是建立在错误的理论上建立起来的分类器,没错就是错误的理论,它假定事物之间是没有联系的(马克思告诉我们,这是不可能的。。。),从而大大的简化了计算。
算法的过程如下:
首先核心的是贝叶斯公式:P(B | A) = P(A, B) / P(B) = P(A | B) * P(A) / P(B);从而将P(B | A)转化为P(A | B) 。
设X = {a1, a2, ... , am}, a为x的一个属性,C = {y1, y2,..., yn},为类别。计算P(y1| X), P(y2| X), ...., P(yn|
X)哪个大,哪个大就判定为哪个类别。问题的关键就是求P(y1| X), P(y2| X), ...., P(yn| X),但是直接求是求不出来的,这时就要靠贝叶斯公式了。
首先可以统计某个类别出现时给个属性出现的概率
P(a1|
y1), P(a2| y1), ...., P(am| y1)
P(a1|
y2), P(a2| y2), ...., P(am| y2)
.........................................................
P(a1|
yn), P(a2| yn), ...., P(am| yn)
之后利用朴素贝叶斯的思想 + 贝叶斯公式
P(yi | X) = P(X|yi)*P(yi) / P(X),是要比较这个式子的结果谁的大,分母都是一样的,所以只需要比较P(X|yi)*P(yi) ,其中P(yi) 可以通过训练数据统计出来,P(X|yi)用朴素贝叶斯的理论求出来P(X|yi)
= P(a1| yi) * P(a2| yi) * .... * P(am| yi)
整个这个过程就是贝叶斯的思想了。
整个过程存在两个问题
1、分母为0,可以使用拉普拉斯校准;
2、概率连乘后过小,可以使用对数表示;
3、朴素贝叶斯理论错误,改用贝叶斯网络;
现在简要说下贝叶斯网络,贝叶斯网络是由有向无环图(DAG)和条件概率表组成,DAG中每个节点表示一个随机变量,是一个可以直接观测或则隐藏的变量,有向边表示随机变量的条件依赖,条件概率表中给出了DAG中边的依赖程度。
贝叶斯网络的一个核心的性质是:一个节点在给定了前驱节点的值后,此节点独立于任何非直接前驱节点。
之后的计算和前面的贝叶斯分类器差不多。
贝叶斯网络的关键在于如何训练网络,即如何得到DAG以及条件概率表,这是一个NP问题,贝叶斯网络的训练一般是用梯度下降法,而网络的拓扑结构一般由专家解决(这是资料上说的,我也没做过这个。。。)。
版权声明:本文为博主原创文章,未经博主允许不得转载。