其实这是个并不难理解的问题,但是我在很多场合(包括学术的和非学术的)都遇到过如下的对话:
A:Gaussian process是一种强大的机器学习方法,并且已经在各个领域有着不少的应用,……。
正在A侃侃而谈的兴头上,台下站起一个人
B认真的问道:可是如果这个我的数据不满足正态分布,那么Gaussian process还可以用吗?
然后A一脸无奈的样子,再然后Balabala继续讲,只不过,讲的不是进一步的内容,而是回到这个非常基础的问题上。
事情上,这是个非常重要的问题,意义非常,毕竟大家有共识的是,模型千千万,但是不能乱用呀。即便再草率,那至少拿过来也要看看模型适用条件吧,要是这都不管,那这个科研做的也太。。。所以说,问起这个问题,至少可以说明你不是个草率的人哦!
但是,如果说你会问这个问题,至少可以说明,你还不知道什么叫高斯过程,至少,你还没有真正搞懂高斯过程和高斯分布的区别!
挠挠头,那。。。那什么是高斯过程,什么又是高斯分布呢?啊?这个还问,之前讲过哦!
蓦风星吟:什么是Gaussian process? —— 说说高斯过程与高斯分布的关系zhuanlan.zhihu.com敲黑板,敲黑板了哈!!!注意听讲!重要的问题说三遍:
高斯过程不等于高斯分布!
高斯过程不等于高斯分布!
高斯过程不等于高斯分布!
可是疑惑的你,还是在认真的思考。的确,认真的思考是好的,可是思考也是讲究方法的哈!盯着发呆是没有用的哦!想想有没有什么好的方法可以确认这件事情呢?
对!最直接的方法就是做实验,举例子!
比如,找一堆显然不满足正态分布的数据,看看这些数据能不能被Gaussian process(GP)去fit,所以我们来试一下吧!
说到做这类实验,还是喜欢强大的Matlab!首先产生数据:
rng
“这个我知道,这个是正弦函数呀!这个确实应该不满足高斯分布吧!”
的确,这个当然应该知道啦!要是连大名鼎鼎的正弦函数都不知道,那么只能从初中开始啦!
什么叫应该不满足呀,是肯定不满足呀!如果还是在犹豫,那就画个直方图啦!
histfit(y)
这下可以确定不是正态了吧,简直天差地别好吧!
那么就是这样的数据,到底能不能用Gaussian process去fit呢?我的答案的是肯定的!来,还是用实验说话!还是Matlab,还是那么强大的Matlab!(不过下面要用到Statistics and Machine Learning Toolbox,而且如果我没有记错的话,应该是要Maltab2016以上版本的吧)
rng
这下放心了吧,如此不规则的数据,直方图那么奇怪的数据,仍然可以轻轻松松被Gaussian process regression去fit哦!
当心细心的你或许还会追问,具体fit这个数据的,到底是怎么样一个GP呢?
不错不错,这是个值得关注的问题哦,既然问起这个,那么回想一下GP是由什么确定的呢?
对,没错,就是mean function 和covariance function。那么,我们来看看,刚才可以fit我们的数据的是,到底是怎么样一对mean和covariance呢?从Matlab的Workspace中就可以轻易找到这个对象gpr-->KernelInformation-->Name, KernelParameters, KernelParameterNames
其中这里的kernel就是使用最为广泛的SquaredExponential(SE)又叫RBF。具体有关这个kernel的东西之后会讲,不过贴一下Matlab官方文件中的描述:
不过显然,我们现在的数据是一维的,所以d=1。
回到刚才说的,这个核函数里面的参数也可以找到
哦,对了,mean function呢?其实这个之前也讲过哦!
蓦风星吟:Gaussian process regression的简洁推导——从Function-space角度看zhuanlan.zhihu.com当我们没有明确指出的时候,一般情况下默认mean function就是0。记住哦!
说到这里,你的疑问是不是已经解决了呢?这个例子清楚的告诉我们,即便不是高斯分布的数据也可以轻松的用GP去fit哦!是不是对GP的好感有加强了呢!赶紧学习吧!
不过说到这里,还不应该结束,作为一个好学生,我们是不是还已经从理论上去理解一下这点呢?
YES!
那么问题还是要回到,什么是高斯分布,什么是高斯过程!
什么是高斯分布?wiki
正态分布(英语: normal distribution)又名 高斯分布(英语: Gaussian distribution), 是一个非常常见的连续概率分布。正态分布在统计学上十分重要,经常用在自然和社会科学来代表一个不明的随机变量。
其实说白了,就是概率密度函数长成这样的:
所以,高斯分布,它本质是个“确定”的随机变量的概率分布。这个所谓的“确定”是指虽然我们的随机变量是随机的,但是这个随机变量的概率密度函数是确定的,它由对应的
而高斯过程呢?wiki
在概率论和统计学中, 高斯过程(英语: Gaussian process)是观测值出现在一个连续域(例如时间或空间)的统计模型。在高斯过程中,连续输入空间中每个点都是与一个正态分布的随机变量相关联。此外,这些随机变量的每个有限集合都有一个多元正态分布。高斯过程的分布是所有那些(无限多个)随机变量的联合分布,正因如此,它是连续域(例如时间或空间)的分布。
什么是高斯过程?简单的说,就是一系列关于连续域(时间或空间)的随机变量的联合,而且针对每一个时间或是空间点上的随机变量都是服从高斯分布的。
对,一系列的随机变量的联合,即对个所谓的点都其实都是个随机变量。既然是随机变量,那么所谓个点不过只是“巧合”出现在了那个位置罢了,也就是说其实每个点其实并不是确定的。其实也就是之前的文章中GP样本图(这五个样本都是属于同一个GP,确定kernel,确定参数的):
对应X=1处的点出现的位置是不确定的,只有出现在某一个位置的概率而已,每一次的出现都只是“巧合”,但是如果多次反复试验,才会发现这些“巧合”内在规律,也就是这些出现的位置符合高斯分布!
所以,如果给定一系列的点,的确可以通过统计方法判断它们符合具体的概率分布,但是,无论它们符合什么分布,都可以看做是GP(给定具体kernel形式,但是参数未知)的一个“巧合”可能出现的样本点的一部分。
可能你还是会觉得非常不可思议,但事实上,这并不是Gaussian process本身的优势,而是所有随机过程的优势。不光高斯过程可以,给定一系列点,也可以看做Student-t process, Wishart process,甚至是最简单的Brownian motion的一组样本,只不过是对应的参数不同罢了。
原来如此,高斯过程的兄弟么,都很强大!
不过,求其本质,其实是因为随机过程是对概率分布的升维。这里的升维意思是,随机过程可以看做是概率分布概念的延拓,即一点概率分布,向无限个点的概率分布的延拓。
可能,这个所谓的延拓还是不好理解。再举个例子,之前讲了那么多分布和过程的区别,或许你还会问,那多维的概率分布呢?多维的分布不也可以看做是一系列的随机变量情况么?的确,多维的分布可以,但是多维分布,你至少需要告诉个维度吧,但是multivariate再多也是个有限数吧。而高斯过程一上来可是无限个哦!这就是所谓概念拓展哦!数学史上很多概念都是类似延拓的哦!
最后的最后,还说说模型的假设问题。
一般情况下,所谓的模型都很多的假设。比如因为正态分布广泛的出现在自然界中,所以很多有关自然现象的模型都是假设一些变量,常量,甚至数据总体满足的正态的分布的(当然具体的样本情况不一定满足,这就好像平穷的地方有富人,富裕的地方也有穷人哦!)
这就是模型的假设,对于经典的统计学模型,一般都对随机变量有一些确定的概率分布的假设。当然这是合理的,也是我们不得不那么做的,不然一切都无法进行。
因而我们的Gaussian process这个方法作为机器学习方法的时候,我们也对其数据进行了假设,即假设它们来自一个GP(已知核函数形式,参数待定)。然后利用数据返过去去估计这些待定的参数!
当然,由于高斯过程样本的不确定性,自然我们有充分的理由可以如此假设。并且这种假设,在理论上无懈可击哦!
那么, 如此聪明的你,还在疑惑不满足正态分布的数据到底能不能用Gaussian process的方法么?
更新2018/02/20
有小伙伴在留言中提到,这个问题是否是病句的问题,的确,这确实是个病句,但是又是一个非常常见的表述。不过,如果你发现这个是病句,那也就是说明,你已经清楚的知道了高斯过程和高斯分布的区别啦!
其实,问题简单的来说,就是一个pair的数据,(x,y),比如说,x是时间,y是股票价格(当然很多情况下应该价格的return),然后你会去用各种统计方法去分析,这个价格(或者return)是不是满足正态呢?这时候,其实分析的确只有一个set的数据,即y。我们并没有考虑到任何,x,y之间的关系,当然,验证正态以否其实只不过考虑的是一个集合的内数据的特性,如果是一个pair这是无法说正态与否的。
当验证完y不是正态的时候,有些人会问啊,我这个y不是正态,能不能用GP去拟合呀?确实,事实上,这个问题的两个对象都不是一个概念好吧。。。可事实上,问题其实就是在问:这个不满足正态的y,是否可以用GP去模型(x,y)这个序列的关系。这就是这个常见但是又很奇怪的表述吧!再退一步讲,是否可以用GP去模型(x,y)这个序列的关系的意思就是说,这样的序列(x,y)是否满足GPR模型的假设?
现在问题来了,什么是这个GPR模型真正的假设呢?
GPR的模型假设也就是这一组(x,y)可以看作是某一个GP样本的有限实现(无视noise的话)。
因此,本文实际上想要做的是:
验证所谓的正态验证后答案是否的数据,是不是可以真的来自一个GP样本的有限实现,或者说根据那个所谓的非正态的数据,是否可以找到一个可能产生,或者说最有可能产生这个样本实现的GP呢?
所以,逻辑是:这组所谓的非正态数据,是否可以满足GPR的模型假设,或者说这组所谓的非正态数据,会不会让GPR的假设不合理。如果可以满足即可以使用GP的方法,反之则不可。而此处验证是否可以满足模型的假设的方法,就是寻找,给定这组所谓的非正态数据,是否真正的存在一个GP样本的一个实现是这组非正态的数据对应的pair的呢?如若存在,便认为模型假设可以被满足,故可以用GP的方法。