在这个万物皆可“Machine Learning”的时代,各个研究领域都想和“ML”沾点边,好像论文里有了“…with machine learning”、“learning based…”便能立即高大上起来。不过确实很多传统领域的问题都被大佬们解决的差不多了,为了毕业,我也不能免俗,也想在研究中结合一点机器学习的东西。
机器学习只是一个宏观的概念,下面还包含很多种不同的方法需要根据各自的研究情况具体确定。我这里用到的是一个相对小众的算法,相比于神经网络、KNN、朴素贝叶斯、SVM等都不那么出名,不过它的能力却是非常巨大的。它就是高斯过程(Gaussian processes)。有感于介绍高斯过程回归的文章写得不够明晰,看完还是一头雾水,亦或是没有结合代码,算法理解始终流于纸面。因此接下来我会用最通俗易懂的方式讲解并配以详细的代码解释,同时知道想学习高斯过程的小伙伴光看我这一篇文章是不够的,因此文中送出多重“福(链)利(接)”,都是我在学习过程中觉得相当不错的文章。
一、深入高斯过程回归之前你需要了解的一些名词
1.什么叫“回归”(regression)
首先我们从命名开始认识一个事物。我们先来说回归,学过一点机器学习的都知道有监督学习的两大任务就是分类(classification)和回归(regression)。用一句话来简单概括回归就是:回归就是找到一个函数来尽可能表示一组数据输入与输出之间的关系。对于线性模型,常用 Y = X T w Y=X^Tw Y=XTw来描述其输入输出关系。回归就是通过这一等式把输出 Y Y Y与实际观测值进行比较,并用其结果不断地更新权重矩阵 w w w以求输出最大限度的接近实际值。
2.什么叫“高斯过程”(Gaussian Process)
A Gaussian process is a probability distribution over possible functions that fit a set of points.
如果有人突然问你什么叫高斯过程,回他这句话就好了。详细一点的说明便是对于一组给定的数据点,或许存在无限多个函数可以用来拟合,高斯过程就是给每个函数(权重)分配一个概率值,这个概率分布的均值便代表了这个数据最有可能的表征,同时它通过置信区间将不确定性也表示出来。
通过图能看得更清晰一点。红色的点是给定的,但连接他们的线(函数)并不只有这一根,其中深蓝色的代表可能性最高的一条,淡蓝色的部分代表在这一区域内有无数条线段的组成可能,并且所有这些线(函数)的分布服从高斯分布。
有人或许会问,为什么不放书本里的定义?好,我把原文中的定义放在下面。
A Gaussian process is a collection of random variables, any finite number of which have a joint Gaussian distribution.
你品,你细品,对于初识高斯过程的人这句话读完可能是一脸懵逼,脑海中什么都没留下,完全不如“一群函数的概率分布服从高斯分布”来的简洁明了。但是定义毕竟是定义,这么写自然有他的道理,我们接下来就详细解释为什么高斯过程这么定义。
OK, 到目前为止我们弄清楚了“高斯过程”+“回归”。而高斯过程回归便是GP(高斯过程缩写GP,下同)在回归问题上的应用,当然也可以用于分类问题,不过这就不在本文讨论的范畴了,有兴趣的同学建议阅读"Gaussian Processes for Machine Learning"。
二、一切的一切还得从贝叶斯推论讲起
1. 贝叶斯线性回归
相信学习机器学习的小伙伴一定会有感而发,这个贝叶斯就是概率论和统计学的祖宗,到哪都离不开它。的确,今天的故事也因他而起。
首先我们回到前面讲的输入输出模型,我们将其表示为 Y = X T w Y=X^Tw Y=XTw。一般来说,估计值总是会与实际值有一定的差别,我们将这个差别表示成 ε \varepsilon ε,于是系统模型就变为 Y = X T w + ε Y=X^Tw+\varepsilon Y=XTw+ε。这是一个可加性的噪声(additive noise),同时我们假设其服从正态分布(至于为什么能这么假设,只能说大自然就是这么神奇,很多东西都服从正态分布):
ε ∼ N ( 0 , σ n 2 ) \varepsilon \sim N(0, \sigma_n^2) ε∼N(0,σn2) 知道了噪声的概率分布,又有这个系统模型,于是我们就得到了“似然”(likelihood)。似然就是在给定参数的条件下的观察值所服从的概率分布或满足的概率密度函数,记为 P ( y ∣ X , w ) P(y|X,w) P(y∣X,w),由于这些数据集都是独立的,因此 P ( y ∣ X , w ) = ∏ i = 1 n P ( y i ∣ x i , w ) = ∏ i = 1 n 1 2 π σ n e x p ( − ( y i − x i T w ) 2 2 σ n 2 ) P(y|X,w)=\prod_{i=1}^n P(y_i|x_i,w)=\prod_{i=1}^n \frac{1}{\sqrt{2\pi}\sigma_n}exp(-\frac{(y_i-x_i^Tw)^2}{2 \sigma_n^2}) P(y∣X,w)=i=1∏nP(yi∣xi,w)=i=1∏n2πσn1exp(−2σn2(yi−xiTw)2)
和正态分布的形式一对照便知, P ( y ∣ X , w ) P(y|X,w) P(y∣X,w)也服从正态分布。其实这很好理解,相当于一个常数 X T w X^Tw XTw加上了一个服从均值为0,方差为 σ n 2 \sigma_n^2 σn2的高斯分布的随机变量,结果显然还是高斯分布: y ∣ X , w ∼ N ( X T w , σ n 2 I ) y|X,w \sim N(X^Tw, \sigma_n^2I) y∣X,w∼N(XTw,σn2I)
到这里都还没和贝叶斯推论产生关系,别急,接下来就是重头戏。贝叶斯推论就是后验正比于似然乘先验,既然似然我们已经求得,接下来就是先验了。于是我们再次假设权重w的概率分布也服从高斯分布: w ∼ N ( 0 , Σ p ) w \sim N(0, \Sigma_p) w∼N(0,Σp)
根据贝叶斯公式: p ( w ∣ y , X ) = p ( y ∣ X , w ) p ( w ) p ( y ∣ X ) p(w|y,X)=\frac{p(y|X,w)p(w)}{p(y|X)} p(w∣y,X)=p