机器学习算法面试—口述(3):贝叶斯分类器

来源:互联网 发布:手机贴膜好不好知乎 编辑:程序博客网 时间:2024/04/29 06:32


这个系列是为了应对找工作面试时面试官问的算法问题,所以只是也谢算法的简要介绍,后期会陆续补充关于此算法的常见面试的问题!


贝叶斯分类器的原理其实很简单,知道了贝叶斯公式基本上就知道了贝叶斯分类器的工作原理。对于一个待分类项,求出此项出现的条件下哪个类别的概率大,就判定为哪类,仅次而已。其实贝叶斯分类器是建立在错误的理论上建立起来的分类器,没错就是错误的理论,它假定事物之间是没有联系的(马克思告诉我们,这是不可能的。。。),从而大大的简化了计算。

算法的过程如下:

首先核心的是贝叶斯公式: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问题,贝叶斯网络的训练一般是用梯度下降法,而网络的拓扑结构一般由专家解决(这是资料上说的,我也没做过这个。。。)。


0 0
原创粉丝点击