机器学习算法面试—口述(3):贝叶斯分类器
2015-08-25 15:30
239 查看
这个系列是为了应对找工作面试时面试官问的算法问题,所以只是也谢算法的简要介绍,后期会陆续补充关于此算法的常见面试的问题!
贝叶斯分类器的原理其实很简单,知道了贝叶斯公式基本上就知道了贝叶斯分类器的工作原理。对于一个待分类项,求出此项出现的条件下哪个类别的概率大,就判定为哪类,仅次而已。其实贝叶斯分类器是建立在错误的理论上建立起来的分类器,没错就是错误的理论,它假定事物之间是没有联系的(马克思告诉我们,这是不可能的。。。),从而大大的简化了计算。
算法的过程如下:
首先核心的是贝叶斯公式: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问题,贝叶斯网络的训练一般是用梯度下降法,而网络的拓扑结构一般由专家解决(这是资料上说的,我也没做过这个。。。)。
贝叶斯分类器的原理其实很简单,知道了贝叶斯公式基本上就知道了贝叶斯分类器的工作原理。对于一个待分类项,求出此项出现的条件下哪个类别的概率大,就判定为哪类,仅次而已。其实贝叶斯分类器是建立在错误的理论上建立起来的分类器,没错就是错误的理论,它假定事物之间是没有联系的(马克思告诉我们,这是不可能的。。。),从而大大的简化了计算。
算法的过程如下:
首先核心的是贝叶斯公式: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问题,贝叶斯网络的训练一般是用梯度下降法,而网络的拓扑结构一般由专家解决(这是资料上说的,我也没做过这个。。。)。
相关文章推荐
- 华为近两年嵌入式面试题目
- 面试题总结(有空就更新)
- 黑马程序员——C语言之构造类型(结构体、枚举)
- 黑马程序员——C语言之字符串操作函数与内存管理
- 黑马程序员——C语言之字符串指针与二维字符串数组
- 程序员开发学习网站
- 黑马程序员——异常Exception
- 国外程序员常去的14个开发社区
- 面试题25二叉树中和为某一值的路径
- 程序员应有素质
- 黑马程序员--OC学习篇之Foundation框架中的NSString对象和NSMutableString对象
- 黑马程序员——Java 基础 面向对象之封装 (复习)
- 金指科技(大连)公司-面试总结
- Android(java)学习笔记195:三重for循环的优化(Java面试题)
- iOS面试(二)
- google通过者面试经历
- 黑马程序员——反射Reflection
- 最老程序员创业开发实训1---Android应用架构之MVC
- 黑马程序员——IO(二)File类,其它IO类
- 两道笔试题