[Bayesian] “我是bayesian我怕谁”系列 - Naive Bayes with Prior
机器学习路线
实用教材
先明确一些潜规则:
- 机器学习是个collection or set of models,一切实践性强的模型都会被归纳到这个领域,没有严格的定义,’有用‘可能就是唯一的共性。
机器学习大概分为三个领域:
- 一般的机器学习模型:没有掺杂太多统计概念,例如决策树,KNN聚类,感知机等。
- 统计机器学习模型:依赖统计理论,主要是贝叶斯统计,例如SVM,naive bayesian,贝叶斯线性回归,高斯过程等。
- 神经网络模型:可以简单的理解为感知机的扩展,因为扩展的太猛,单独成立门派咯。
如此定义,有助于菜鸡入门,不用纠结严谨性。
如何理解“一般的机器学习模型”和“统计机器学习模型”?
大部分人都不具备坚实的统计数学基础, such as《统计推断》,《贝叶斯分析》,但好东西仍然值得推广,那就先普及比较好理解的。
而所谓“一般的机器学习”,常以《机器学习导论》的姿态出现,见下图左。至于神经网络,首先,深度学习就是”更深“的神经网络,不要纠结这个梗,至于书,就是这典型的花书,见下图右。中间的prml,就是一本典型的贝叶斯机器学习书籍。
这些潜规则,确实会让菜鸡走火入魔,下载,打开目录,对比目录瞧上一瞧,就好了。当然,未来还会揭秘更多“潜规则”。



左:一般的机器学习 中:统计机器学习 右:深度学习
最近只是想对(个人的)统计机器学习知识体系做个梳理,写在这里。
还有一个常见问题,PGM是不是就是统计学习?PGM可以理解为一种符号工具for统计学习,“几何之于代数”,暂时先这么理解着。
当然了,不具备一定的数学基础不要碰统计学习;不会统计学习,不要自称做机器学习。所学的最最基本的数学基础是:
- 《统计推断》or《高级数理统计》的书籍可自行百度,学习基本的统计知识,比如各种分布的性质,统计量的性质等等。
- 《贝叶斯分析》推荐此书,此领域中文的好书不多,贝叶斯理论是一套体系,值得学习一本书。

先说这么多作为前言,不要小看其价值,为什么你没有成为”别人家的牛人”,往往不是智商问题,而是没有“课程表”。
小数据的福音:贝叶斯
深刻了解一下概念:最大似然估计MLE、最大后验估计MAP及贝叶斯估计
这些概念有点区别,但对于“大数据”,其实结果相差无几,后两者都趋近于MLE。
小数据当然有必要纠结细节,当然还有一个原因,就是风险估计时,详见:统计决策论
生成式模型
书归正传,一个例子:生成式模型
何为生成式模型?这是个比较形象的叫法,比如:生成式 --> 生孩子。既然能判断出各国孕妇生各种肤色孩子的概率,那么,已知一个小孩的肤色为白,也就能判断最可能的国籍是欧洲某国。
这里,生成式模型却用于了分类。生成式,体现的是一个“过程”;分类,体现的是一个“静态结果”。观看的角度不同罢了,好比:电脑可以“写代码”,也可以是“游戏机”。
所以,不要纠结模型的名字,确实会带来理解上的误导。思考其核心功能价值,然后再放置在合适的知识体系角落。
概率图模型
画个概率图,看上去清晰明了,这也就是其存在的价值之一。

基本假设:
- topic可能是几种话题之一,乃categorical分布。
- 在topic下,每个word可能出现也可能不出现,乃bernoulli分布。
先验假设
为什么要考虑prior,有“原先的经验”当然要加以利用。
那么,开始估计topic生成各个单词的概率就好了,估计好了,就可以之后拿来预测新样本。
有菜鸡问,这难道就是人们常说的高大上的主题模型?别闹,你说的东西在这里,Latent Dirichlet Allocation。至于两者区别,不在此讨论,在此有提:[IR] Concept Search and LDA。
参数的先验形式:

参数的后验估计:

代码实现
这叫做:解析解(analytical solution),跟解方程组似的,答案可以通过公式一步到位。对应的代码也易实现,如下。
def naive_bayes_posterior_mean(x, y, alpha=1, beta=1):
"""
Given an array of features `x`,
an array of labels `y`,
class prior Dirichlet parameter `alpha`, and
common class-conditional feature expectation `beta`
return a posterior mean, `pi`, of `alpha` and
a posterior mean, `theta` of the `beta`. NB: this is not the same as returning the parameters of the full posterior,
but it is sufficient to calculate the posterior predictive density.
"""
n_class = y.shape[1]
n_feat = x.shape[1] # as a convenience, we allow both alpha and beta to be scalar values
# which will be upcast to arrays for the common case of using priors to smooth
# this is a no-op for alpha
# but for beta, we must be explicit
beta = np.ones(2) * beta pi_counts = np.sum(y, axis=0) + alpha
pi = pi_counts/np.sum(pi_counts) theta = np.zeros((n_feat, n_class)) for cls in range(n_class):
docs_in_class = (y[:, cls]==1)
class_feat_count = x[docs_in_class, :].sum(axis=0)
theta[:, cls] = (class_feat_count + beta[1])/(docs_in_class.sum() + beta.sum()) return pi, theta
解析解推导
第一篇,邀你入行,门槛低,骗你入坑。至于结果(解析解)的求解过程以及求解能力,可能才有点价值。

贝叶斯公式,就是要关注两个东西:似然函数,先验。
注意,这里的先验是个联合先验,虽然两者是iid。那为何搞这么复杂?
因为有些分布的先验们并非iid,比如高斯的均值与方差,两者互为影响。
这里仍“坚持”写成联合先验的形式,只是遵循“统一框架”,思维的严谨性,菜鸡们看多了就习惯了。
最后,根据贝叶斯公式,自然得出了一个联合形式的参数的后验:

可见,两个参数各自的估计都是独立的事情,写成如此,也是为了迎合“统一框架”。
一般而言,得到联合分布,就是得到一切。积分积到看不顺眼的变量就自然得到了所需变量的边缘分布形式。
菜鸡问:为何忽然便跳出了后验分布结果?这是共轭先验的性质,故菜鸡先要打好数学基础。
参数的分布都有了,求参数的期望也就得出了最后的解析解。
贝叶斯之歌
写在本篇的最后,为什么叫这么个系列,因为:
I think I'm Bayesian.
For all my life taught
parameters are fixed they don't come from distributions.
Try to imagine:
experiments repeat forever...
such a silly notion!
Propose this: New step.
What should I do? Accept, reject?
I feel free in these chains! I think I'm a Bayesian.
How did this happen?
Just yesterday I tested H0s.
But I just learned Bayes' rule,
and priors seem cool,
have no p-value so how do I know? If I'm a Bay Bay Bay Bay... Bayesian?
Am I a Bay Bay Bay Bay... Bayesian? I don't know if this makes sense but,
I think I'm a Bayesian. Give me a sampler:
I'll go and tune it;
I'll fly to it; I'll burn it in;
'cause I love to run chains,
cut strings,
a couple things I can't do without Bayes!
Yeah I'm on top of the world,
when my samplers all converge!
Used to shrink my coefficients,
now I use stochastic search! My advisors be like, "Woah,
what happened to you?
Use a prior one more time and
I'mma banish you to Duke!!" Accept it, I know you want
to join my table at the Chinese restaurant.
My posterior is charming, so why don't you try?
We're conjugate! Don't be shy!
Yeah I know, all the frequentists say,
"Shame on you!"
But I tell them take a random walk
'cause I know this is the start of something new!
I think I'm a Bayesian! I think I'm a Bayesian.
How did this happen?
Just yesterday I tested H0s.
But I just learned Bayes' rule,
and priors seem cool,
have no p-value so how do I know?
歌词
[Bayesian] “我是bayesian我怕谁”系列 - Naive Bayes with Prior的更多相关文章
- [Bayesian] “我是bayesian我怕谁”系列 - Naive Bayes+prior
先明确一些潜规则: 机器学习是个collection or set of models,一切实践性强的模型都会被归纳到这个领域,没有严格的定义,’有用‘可能就是唯一的共性. 机器学习大概分为三个领域: ...
- [Bayesian] “我是bayesian我怕谁”系列 - Gaussian Process
科班出身,贝叶斯护体,正本清源,故拿”九阳神功“自比,而非邪气十足的”九阴真经“: 现在看来,此前的八层功力都为这第九层作基础: 本系列第九篇,助/祝你早日hold住神功第九重,加入血统纯正的人工智能 ...
- [Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders
本是neural network的内容,但偏偏有个variational打头,那就聊聊.涉及的内容可能比较杂,但终归会 end with VAE. 各个概念的详细解释请点击推荐的链接,本文只是重在理清 ...
- [Bayesian] “我是bayesian我怕谁”系列 - Exact Inferences
要整理这部分内容,一开始我是拒绝的.欣赏贝叶斯的人本就不多,这部分过后恐怕就要成为“从入门到放弃”系列. 但,这部分是基础,不管是Professor Daphne Koller,还是统计学习经典,都有 ...
- [Bayesian] “我是bayesian我怕谁”系列 - Exact Inference
要整理这部分内容,一开始我是拒绝的.欣赏贝叶斯的人本就不多,这部分过后恐怕就要成为“从入门到放弃”系列. 但,这部分是基础,不管是Professor Daphne Koller,还是统计学习经典,都有 ...
- [Bayesian] “我是bayesian我怕谁”系列 - Variational Inference
涉及的领域可能有些生僻,骗不了大家点赞.但毕竟是人工智能的主流技术,在园子却成了非主流. 不可否认的是:乃值钱的技术,提高身价的技术,改变世界观的技术. 关于变分,通常的课本思路是: GMM --&g ...
- [Bayesian] “我是bayesian我怕谁”系列 - Continuous Latent Variables
打开prml and mlapp发现这部分目录编排有点小不同,但神奇的是章节序号竟然都为“十二”. prml:pca --> ppca --> fa mlapp:fa --> pca ...
- [Bayesian] “我是bayesian我怕谁”系列 - Markov and Hidden Markov Models
循序渐进的学习步骤是: Markov Chain --> Hidden Markov Chain --> Kalman Filter --> Particle Filter Mark ...
- [Bayesian] “我是bayesian我怕谁”系列 - Boltzmann Distribution
使用Boltzmann distribution还是Gibbs distribution作为题目纠结了一阵子,选择前者可能只是因为听起来“高大上”一些.本章将会聊一些关于信息.能量这方面的东西,体会“ ...
随机推荐
- Java通过ssh连接到Linxu和Windos服务器远程启动Tomcat
一.Linxu服务器远程启动tomcat 1.首先确保linxu服务器上的tomcat jdk等必要软件正确安装,并且可以正常启动. 2.编写Java SSH工具类. 相关jar包: <depe ...
- Shell脚本 Hello World
#!/bin/bash echo "Hello World !" “#!” 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell.echo命令用于向窗口 ...
- 配置Chrome Workspace功能
配置Chrome Workspace功能 Chrome Workspace功能是将在Chrome开发者工具(F12)中对文档的修改直接应用于对应文件中.由于Chrome并不知道当然文档对应用的文件为哪 ...
- PHP 实战之设计模式:PHP 中的设计模式
本文主要讨论下Web开发中,准确而言,是PHP开发中的相关的设计模式及其应用.有经验的开发者肯定对于设计模式非常熟悉,但是本文主要是针对那 些初级的开发者.首先我们要搞清楚到底什么是设计模式,设计模式 ...
- Navi.Soft31.WinForm框架(含下载地址)
1概述 1.1应用场景 尽管互联网高速发展,互联网软件也随之越来越多,但桌面应用程序在某些领域中还是不可替代,如MIS,ERP,CRM等软件产品,同时,这类软件均包括一些通用的功能,如:与数据库操作, ...
- 自然语言交流系统 phxnet团队 创新实训 个人博客 (十三)
关于java socket的一些总结: Java Socket通信有很多的时候需要我们不断的学习.方面效率虽然不及C与C++但它以灵活语言优势,为大家广为使用. 本文就对在使用java做通信方面程序时 ...
- LEARNING TO NAVIGATE IN COMPLEX ENVIRONMENTS
任务是地图里面导航,让agent从起始点到达指定位置. 用了supervised learning + reinforcement learning + lstm 用supervised learni ...
- 【CentOS】CentOS7.0 mysql与卸载
mysql安装: 在使用命令 yum list mysql-server 安装mysql的时候,发现没有mysql的包.这时候,我们需要下载一个 下载包 wget http://repo.mysql. ...
- Hessian示例:Java和C#通信
一个简单的利用Hessian在Java和C#之间通信的例子,服务端为Java,客户端为C#. 资源下载 先要准备好C#和Java的第三方类库:http://hessian.caucho.com/ Hs ...
- Lua------------------改善Unity编辑器对Lua文件的支持
原创 2017年03月10日 18:44:22 标签: Unity / lua / 编辑器 952 当前版本的Unity(截至Unity5.5.x)中TextAsset类不支持后缀为lua的文件,将l ...