原创 | 一文读懂高斯过程

6a78ec33df10705f660aed9bc3d89459.png

作者:贾恩东
本文约2700字,建议阅读9分钟
本文将使用通俗易懂的语言引导读者入门高斯过程。

高斯过程(Gaussian Process)是机器学习中一个相当基础的概念,本文中笔者将使用通俗的语言让读者入门高斯过程。

高斯过程,顾名思义,包含了高斯分布(Gaussian Distribution)和随机过程(Stochastic Process)。简单来说,高斯过程是一个无限维的高斯分布。

无限维,对于未接触过随机过程的读者们来说可能还是难以理解,我们可以先从一维的高斯分布说起。

一维的高斯分布,即:对于一个随机变量 X 来说,如果其概率密度函数(probability density function, PDF)如下形式:

6f118e054b1b5c976c359c4f0495ccea.png

使用Normal 符号,简单记为:

a354ba6c9c13663d876cff53fd0c0e3a.png

那么这个一维变量X 就服从一维高斯分布,这个高斯分布里有两个参数,均值 63f90774f36f8c86c31179563900cf66.png和方差3975ea7e8bdbeb128175f261e5d533b5.png

我们在下图中,展示了10个关于 X的采样,图中纵轴表示采样的值,横轴我们全部放在1的位置,表示这是从同一个变量中采样得到的。

import numpy as npimport matplotlib.pyplot as plt
n= 1         # 随机变量的维度n
m= 10       # 做了m次采样  
# 这里简单假设所有维度是独立的# 且每个维度上的均值为0,标准差为1# 所以协方差矩阵是一个单位矩阵


mean= np.zeros(n)
cov= np.eye(n)
# 得到随机变量的采样值
f_random= np.random.multivariate_normal(mean, cov, m).T
# 把不同维度的值分别指定到对应的横轴上去
Xshow= np.linspace(1, n, n).reshape(-1,1)
# 开始绘图
plt.figure(figsize=(12,8))
plt.plot(Xshow, f_random, 'x', linewidth=1, markersize=5, markeredgewidth=2)
plt.show()

e67f963bc224867df770906dcc22ffd9.png

图1

多维的高斯分布,或者说,多元高斯分布(multivariate gaussian distribution),则是对于一维高斯分布的一个扩展。对于N维变量 X 来说,它本身是一个N维向量,f8b8d136bbcd17ed31e5e2129244ff32.png,因此它的参数不仅包括了每一个维度上的均值,还包括了每两个维度上的协方差。

这里为了示意,我们先简单画一个二元高斯分布的采样过程,而且我们先简单将这两个维度认为是独立的,即不同的维度协方差为0。如下图:

n= 2         # 随机变量的维度n
m= 10       # 做了m次采样  
# 这里简单假设所有维度是独立的# 且每个维度上的均值为0,标准差为1# 所以协方差矩阵是一个单位矩阵
mean= np.zeros(n)
cov= np.eye(n)
# 得到随机变量的采样值
f_random= np.random.multivariate_normal(mean, cov, m).T
# 把不同维度的值分别指定到对应的横轴上去
Xshow= np.linspace(1, n, n).reshape(-1,1)
# 开始绘图
plt.figure(figsize=(12,8))
plt.plot(Xshow, f_random, 'x', linewidth=1, markersize=5, markeredgewidth=2)
plt.show()

d291885854705881d270f960817dd06b.png

如果进一步增加采样点,并且将概率直观的用直方图标记出来,大概是如下的感受。

5d767c91325de95b9c8c1f23d412d4c2.png

如果我们继续增加维度N到3,4,...,看起来依然平平无奇,我们只是需要更多的均值和方差的参数需要事先指定(先验)。这里我们先不急拓展到无限维度,我们先想像这样一个场景。

班级里有10个学生,每个学生都参加了同一场考试。这些学生在同一场考试的得分刻画了这场考试的试卷难度。如果参加了第二场考试,依次类推...,我们把学生的数目当作采样次数,考试的种类当作随机变量的维度。那么上图就是10个学生在两场考试中的表现。

进一步,我们想观察同一个学生随不同考试的分数变化情况,我们做一个相邻维度的连接看看。

n = 2         # 考试次数n
m= 10       # m个学生 
# 这里简单假设所有维度是独立的# 且每个维度上的均值为0,标准差为1# 所以协方差矩阵是一个单位矩阵


mean = np.zeros(n)
cov = np.eye(n)
# 得到随机变量的采样值
f_random = np.random.multivariate_normal(mean, cov, m).T
# 把不同维度的值分别指定到对应的横轴上去
Xshow = np.linspace(1, n, n).reshape(-1,1)
# 开始绘图
plt.figure(figsize=(12,8))
plt.plot(Xshow, f_random, '-x', linewidth=1, markersize=5, markeredgewidth=2)
plt.show()

0688409ca73e9e9e2671412b6b3a4834.png

这时,我们增加考试的场数到7(n=7),继续观察。

3955a8b23e0c3a488497b58b63ead785.png

感觉到哪里不对了吗? 如果仍然没有感觉,我们进一步增加考试的次数到30。 

07caf6a43a9c8c0f9e23f256ca0be851.png

这下应该感觉了哪里不对劲了吧。

那就是这个图不符合常识,为什么?学生的考试分数完全没有规律,不同学生没有明显的分数差距。

这是因为我们事先做的不同维度独立的假设太理想,事实上时间前后相邻的不同维度是通常不独立的。

这里我们使用一种协方差函数(径向基函数,Radial Basis Function,这里先不用深究,只需要知道是帮我们生成一种常见先验协方差的用的)生成多元高斯分布来替代之前的不同维度独立的多元高斯分布。

如下图。

def kernel(a, b):
    sqdist = np.sum(a**2,axis=1).reshape(-1,1) + np.sum(b**2,1) - 2*np.dot(a, b.T)
    return np.exp(-0.5 * sqdist)


n = 30        # 考试次数n
m= 10       # m个学生 
# 这里假设所有维度不再独立# 每个维度上的均值为0# 协方差矩阵由kernel函数生成
mean = np.zeros(n)# 考虑数值的影响,重置横轴scale
Xshow = np.linspace(0, 1, n).reshape(-1,1)
cov  = kernel(Xshow, Xshow)
# 得到随机变量的采样值
f_prior = np.random.multivariate_normal(mean, cov, m).T


# 开始绘图
plt.figure(figsize=(12,8))for i in range(m):
    plt.plot(Xshow, f_prior, '-x', linewidth=1)


plt.show()

d5f2d94dca343266b5b2f78a07e81dae.png

这样看起来,有的学生分数在多数考试中均较低,有的学生分数在多数考试中均较高,还有持续进步和持续退步的学生。很合理!

这时候我们可以将维度推广到无限了。假如我们每一个时刻都有一个随机变量,当我们取连续的时刻(区别于之前的离散维度),就得到了无穷维度的高斯分布。值得注意的是,因为维度是无限的,对于所有维度,我们需要得到无穷多个先验的均值和一个无穷维度的协方差矩阵。但是为了简化这个描述,我们干脆使用函数来描述均值和协方差。

对于时刻t ,这个时刻的均值我们用函数取,称为均值函数,94d1d0ba499caf5d6ac9f28d2702930f.png

对于任意两个不同时刻t1和t2,这两个时刻上的协方差我们也用一个二元函数取,称为协方差函数或者核函数,cov(t1,t2 ) = k(t1,t2),之前用到的RBF函数是一种常用的核函数,形式为:

2b2e1ddf6bdbac01e4fdcf98be51abf9.png

其中08c943f149682590a066dbc3b3d6a0ee.png 和 l 是RBF函数的超参数。这个核函数看起来是合理的,因为当这两个不同时刻很接近时,这个协方差的值约大,相关性也就越大。

到这里我们对于高斯过程的简单介绍就结束了。

关于高斯过程的应用和其他领域相关之后有机会再给读者介绍。

编辑:黄继彦‍‍‍

欢迎留言,有机会与本文作者互动哦~

数据派研究部介绍

数据派研究部成立于2017年初,以兴趣为核心划分多个组别,各组既遵循研究部整体的知识分享实践项目规划,又各具特色:

算法模型组:积极组队参加kaggle等比赛,原创手把手教系列文章;

调研分析组:通过专访等方式调研大数据的应用,探索数据产品之美;

系统平台组:追踪大数据&人工智能系统平台技术前沿,对话专家;

自然语言处理组:重于实践,积极参加比赛及策划各类文本分析项目;

制造业大数据组:秉工业强国之梦,产学研政结合,挖掘数据价值;

数据可视化组:将信息与艺术融合,探索数据之美,学用可视化讲故事;

网络爬虫组:爬取网络信息,配合其他各组开发创意项目。

点击文末“阅读原文”,报名数据派研究部志愿者,总有一组适合你~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派THUID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

未经许可的转载以及改编者,我们将依法追究其法律责任。

595de273d0811677b474eb3ff2c8d9f5.png点击“阅读原文”加入组织~

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值