1. 程式人生 > >說說高斯過程迴歸

說說高斯過程迴歸

作者介紹:新浪微博ID@妖僧老馮,9月將赴南京大學(直博生),方向是機器學習與資料探勘

編者:小便和作者打過幾次交道,一直以為是他是已“修成正果”的某某博士,便“畢恭畢敬”地去邀請他寫篇牛文。細聊之後才得知小夥子原來是90後,9月份才博士入學。這篇文章對GP進行了深度科普,數學公式是有一些的,但耐心讀讀,都不是問題的。高斯過程是機器學習領域一個基礎的方法,同時又和其他方法有千絲萬縷的聯絡,值得大家研究一下。文中一些細節也歡迎大家和作者一起探討。另外,推薦下小夥子的剛開的個人部落格:http://kingfengji.com/

今天起會陸續寫一些機器學習的notes,這次介紹一個很酷的idea,aka 高斯過程迴歸(Gaussian Process Regression)。

網上講高斯過程迴歸的文章很少,且往往從高斯過程講起,我比較不以為然:高斯過程迴歸(GPR), 終究是個離散的事情,用連續的高斯過程( GP) 來闡述,簡直是殺雞用牛刀。所以我們這次直接從離散的問題搞起,然後把高斯過程逆推出來。

這篇部落格的主要目的是解釋高斯過程迴歸這個主意是怎麼想出來的,模型多了去了,為毛要用它。

這篇部落格次要目的是我買了一個surface pro 2 , 我想看看好不好用。(答案是好用)

這篇部落格有兩個彩蛋,一個是揭示了高斯過程迴歸和Ridge迴歸的聯絡,另一個是介紹了貝葉斯優化具體是怎麼搞的。後者其實值得單獨寫一篇部落格,我在這裡就是做一個簡單介紹好了,但沒準就不寫了,想想就累。

  • 先說一說 高斯過程迴歸 的 Intuition:

    gaussian1

假設有一個未知的函式f : R--> R ,

在訓練集中,我們有3個點 x_1, x_2, x_3, 以及這3個點對應的結果,f1,f2,f3. (如圖) 這三個返回值可以有噪聲,也可以沒有。我們先假設沒有。

so far so good. 沒什麼驚訝的事情。

高斯過程迴歸的關鍵假設是:

給定 一些 X 的值,我們對 Y 建模,並假設 對應的這些 Y 值 服從 聯合正態分佈!

(更正式的定義後面會說到)

換言之,對於上面的例子,我們的假設是:

gaussian2

一般來說,這個聯合正態分佈的均值向量不用操心,假設成0 就蠻好。(講到後面你就知道為什麼了)

所以關鍵是,這個模型的 協方差矩陣K 從哪兒來。

為了解答這個問題,我們進行了另一個重要假設:

如果兩個x 比較相似(eg, 離得比較近),那麼對應的y值的相關性也就較高。換言之,協方差矩陣是 X 的函式。(而不是y的函式)

具體而言,對於上面的例子,由於x3和x2離得比較近,所以我們假設 f3和f2 的correlation 要比 f3和f1的correlation 高。

話句話說,我們可以假設協方差矩陣的每個元素為對應的兩個x值的一個相似性度量:

gaussian3

那麼問題來了,這個相似性怎麼算?如何保證這個相似性度量所產生的矩陣是一個合法的協方差矩陣?

好,現在不要往下看了,你自己想3分鐘。你也能想出來的。 提示:合法的協方差矩陣就是 (symmetric) Positive Semi-definite Matrix

(。。。。。。。。。。。。思考中)

好了時間到。

答案: Kernel functions !

如果你瞭解SVM的話,就會接觸過一個著名的Mercer Theorem,(當然如果你瞭解泛函分析的話也會接觸過 ),這個M定理是在說:一個矩陣是Positive Semi-definite Matrix當且僅當該矩陣是一個Mercer Kernel .

所以我們在svm裡用過的任何Kernel都能拿過來用!

舉個栗子,在高斯過程迴歸裡,一種非常常見的Kernel就是SVM裡面著名的高斯核(但是為了讓命名不是那麼混淆,文獻中一般把這個Kernel稱作squared exponential kernel.

具體而言就是

gaussian4

好了,現在可以做迴歸分析了:

如果我們現在又有了一個新的點 x*

這個新的點對應的f* 怎麼求?(如下圖)

gaussian5

根據假設,我們假設 f* 和 訓練集裡的 f1, f2, f3 同屬於一個 (4維的)聯合正態分佈!

也就是說,不僅 f1,f2,f3屬於 一個3 維的聯合正態分佈(引數可以算出來),而且 f* 和 f1,f2,f3屬於(另一個)4維的聯合正態分佈,用數學的語言來表達就是:

gaussian6

首先我們來看一看,這個4 x 4 的 矩陣能不能算出來:

黃色的大K,是依據訓練集的3維聯合分佈算出來的,綠色的K*, 是測試點x* 分別和每一個訓練集的x 求出來的。所以整個聯合分佈我們都知道了。

接下來的事情就好辦了,我們既然已經知道(f,f*)的聯合分佈P(f, f*)的所有引數, 如何求p(f*) ?好訊息是這個聯合分佈是正態的,我們直接用公式就能搞出來下面的結果(using the marginalization property):

不難求出f* 隸屬於一個1維的正態分佈, 引數是:

gaussian7

所以這是一種貝葉斯方法,和OLS迴歸不同,這個方法給出了預測值所隸屬的整個(後驗)概率分佈的。再強調一下,我們得到的是f* 的整個分佈!不是一個點估計,而是整個分佈啊同志們。

In addition, 不僅可以得到 f*這一個點的分佈,我們對這個未知的 函式 也可以進行推斷!換言之,如果把一個函式想成一個變數,那麼高斯過程迴歸可以求出這個函式的分佈來。(distribution over functions)

不幸的是,我們的計算機只能儲存離散的資料,怎麼表示一個連續的函式呢?

好辦,我們對一個區間裡面均勻地硬造出來1萬個測試點x*, 然後求出這些測試點和訓練集所對應的y(一個巨高維的向量)的聯合分佈,然後在這個巨高維的聯合分佈裡取樣一次,就得到了函式的(近似的)一個樣本。

gaussian8

比如訓練集就三個點,測試集1萬個x,圖中的每一個紅點就分別是這些點f* 的均值,(當點很多的時候,就可以假設是一個“連續”的函數了)而藍色的線代表一個或兩個標準差的bound.

我們如果從這個分佈中取樣10次,就可以得到10個巨高維的向量,也就是從這個後驗概率中sample出來的10個函式的sample. plot出來長這個樣子:

gaussian9

含有已知資料(訓練集)的地方,這些函式都離的很近(variance很低),沒有資料的時候,這個spread就比較大。

也許你會問:我為毛要搞出來函式的分佈?我為毛要關心這個variance. 在很多問題中,我們不僅僅需要知道預測值的點估計,而且要知道這個估計有多少信心在裡面(這也是貝葉斯方法的好處之一)

舉個例子:Multiple Bandit Problem

假設 我們已經有了幾個油井,每個油井的價值不一樣,我們在這個二維平面上,利用高斯過程迴歸,對每一個地理位置估計一個該位置對應的出油量。

而開發每一口井是有成本的,在預算有限的情況下,如果想盡可能少地花錢,我們就需要定義一個效益函式,同高斯過程迴歸的預測結果相結合,來指導我們下一次在哪兒打井。這個效益函式往往是 預測值 和 方差 的一個函式。

以上這個例子,就是高斯過程迴歸在貝葉斯優化中的一個典型應用。有時間專門寫一篇。

  • 好了,現在終於可以講一講高斯過程了。

高斯過程是在函式上的正態分佈。(Gaussian distribution over functions)

具體而言就是

gaussian10

我們具體用的時候,模型假設是醬紫的:

我們觀察到一個訓練集 D

gaussian11

給定一個測試集 X* ( X* 是一個 N* x D 的矩陣, D是每一個點的維度)我們希望得到 一個 N* 維的預測向量 f*. 高斯過程迴歸的模型假設是

gaussian12

然後根據貝葉斯迴歸的方法,我們可以求出來 f*的後驗概率:

gaussian13

This is it. 要啥有啥了。

下面著重說一下有噪聲情況下的結果,以及此情況下和Ridge Regression的神祕聯絡。

當觀測點有噪聲時候,即, y = f(x) + noise,where noise ~N(0, sigma^2)

我們有

gaussian14

發現沒,唯一區別就是 K 變成 了 Ky,也就是多加了一個sigma。

這個很像是一種regularization. 確實如此。

  • 好了,下面就說說這個 GPR的 insight,這個模型到底想幹什麼

如果只有一個測試點,那麼輸出的f* 就是隸屬於一個1維的正態分佈了,具體而言:

gaussian15

相關推薦

說說過程迴歸

作者介紹:新浪微博ID@妖僧老馮,9月將赴南京大學(直博生),方向是機器學習與資料探勘 編者:小便和作者打過幾次交道,一直以為是他是已“修成正果”的某某博士,便“畢恭畢敬”地去邀請他寫篇牛文。細聊之後才得知小夥子原來是90後,9月份才博士入學。這篇文章對GP進行了深度科

淺析過程迴歸(Gaussian process regression)

前言              高斯過程迴歸的和其他迴歸演算法的區別是:一般迴歸演算法給定輸入X,希望得到的是對應的Y值,擬合函式可以有多種多樣,線性擬合、多項式擬合等等,而高斯迴歸是要得到函式f(x)的分佈,那麼是如何實現的呢?         對於資料集 ,令 

機器學習-過程,隨機過程迴歸

網上講高斯過程迴歸的文章很少,且往往從高斯過程講起,我比較不以為然:高斯過程迴歸(GPR), 終究是個離散的事情,用連續的高斯過程( GP) 來闡述,簡直是殺雞用牛刀。所以我們這次直接從離散的問題搞起,然後把高斯過程逆推出來。   這篇部落格有兩個彩蛋,一個是揭示了高斯過程迴歸和Ridge迴歸的聯絡,另一

過程(GP)

gin 也有 給定 定義 表達 hle es2017 .com 接下來 GP的定義:對於任意集合S,S上的高斯過程(GP)是隨機變量序列(Zt:t∈S)的一個集合,使得所有n∈N,所有t1,t2……,tn∈S,(Zt1,Zt2,……,Ztn)是多維高斯。如果S集合中的元素個

過程(轉)

完全 核函數 -h 讓我 alpha 例如 其他 left size http://36kr.com/p/5114423.html http://bridg.land/posts/gaussian-processes-1 http://www.gaussianproce

(轉載) 淺談過程回歸

ood 兩個 相關性 plot font ron 模型 如何 隨機過程 網上講高斯過程回歸的文章很少,且往往從高斯過程講起,我比較不以為然:高斯過程回歸(GPR), 終究是個離散的事情,用連續的高斯過程( GP) 來闡述,簡直是殺雞用牛刀。所以我們這次直接從離散的

機器學習的過程-前言

譯 前言   在過去十年中,機器學習的“核心機器”領域出現了大量工作。 可能最著名的例子是支援向量機,但在此期間,高斯過程模型應用於機器學習任務的活動也很多。 本書的目標是為該領域提供系統統一的處理。 高斯過程為核心機器中的學習提供了一種原則的,實用的概率方法。

淺談:過程與貝葉優化

        高斯過程(Gaussian process)         高斯過程常在論文裡面簡寫為GP。定義:如果隨機過程的有限維分佈均為正態分佈,則稱此隨機過程為高斯過程或正態過程。         首先我們來解讀一下定義:         第一個問題:什麼是隨

《隨機過程》學習筆記--過程()

高斯過程之條件分佈(Conditional Distribution) 設X=(X1,X2)∈Rm×n∼N(μ,Σ),其中X1∈Rm,X2∈Rn,μ=(μ1,μ2),μ1=E(X1),μ2=E(X2)

機器學習中的過程

轉自:http://www.datalearner.com/blog/1051459170229238   關於高斯過程,其實網上已經有很多中文部落格的介紹了。但是很多中文部落格排版實在是太難看了,而且很多內容介紹也不太全面,搞得有點雲裡霧裡的。因此,我想自己發

過程的模擬/取樣/生成

在常用程式語言中,很容易生成一個高斯隨機變數的取樣(例如Matlab的randn函式),但是怎樣生成給定均值函式和方差函式的高斯過程的取樣呢? 問題 已知高斯過程的均值函式μ(t)以及相關函式r(t1,t2),欲生成N個符合此高斯過程的取樣x(n),n=

《隨機過程》學習筆記--過程(1)

高斯過程(1)(Gauss Processes) n-Dimensional Joint Gauss Distribution n隨機變數X(t),對∀n,∀t1,t2,⋯,tn,記(X(t1)

過程的優點和缺點

高斯過程的優點是: 1.預測值是觀察值的插值(至少對於普通的核是這樣的) 2.預測值是概率的(高斯),因此我們可以計算經驗置信區間,然後根據這些資訊,在某個感興趣區域重新擬合(線上擬合,自適應擬合)

sklearn文件 — 1.7. 過程

高斯過程(GP)是一種被設計來解決 迴歸 和 概率分類 的通用監督學習方法。 高斯過程有以下的優點: 可以預測插值(至少對常規核而言)預測是概率的(高斯分佈的)結果,因此可以根據置信區間的計算以決定是否要在一些感興趣的區域重新進行擬合(線上擬合,自適應擬合)。可以指定不同的 核 。預設是提供了一個普通核

【貝葉分析⑦】過程

貝葉斯框架下, 可以用高斯過程來估計一個函式 f : R→R. 對於每個xi, f(xi)可以用一個均值方差暫未知的高斯分佈來建模。因為連續空間的xi可以有無限個,擬合一個函式的高斯過程其實一個無限維的多元高斯。實際中,不管是我們的給定資料{(x, y)},還是測試點{x*}

1.7. 過程(Gaussian Processes)

1.7.2.3. 經驗最佳線性無偏預測(EBLUP,The empirical best linear unbiased predictor) 直到如今, 自相關模型和迴歸模型都是假設給定的。然而實際上,不能夠提前知道是這些模型的,因此要為這些模型 相關性模型(Correlation Models) 做

過程到貝葉優化

ext 分布 variant 維度 info 為什麽 向量 開發 分享圖片 第一篇博客,淺談自己對高斯過程和貝葉斯優化的理解,有誤處歡迎指正。 一. 高斯過程回歸   1. 高斯過程到底是個什麽東西?!   簡單來說,高斯過程可以看成是一個函數,函數的輸入是x,函數的

c++實現線性迴歸消元)(附python實現)

前言 寫這次blog的契機是上次筆試的時候,遇到了這個問題 當時以為numpy庫是可以用的,就先寫了個python版,結果並不能用。。 最後憤然寫了個c++版 不過最後一個小問題導致我差了兩分鐘沒交上去程式碼,所以這一版原始碼只是通過了案例但沒有提交ac。。

模糊演算法的全面優化過程分享。

void ConvertBGR8U2BGRAF_SSE(unsigned char *Src, float *Dest, int Width, int Height, int Stride) { const int BlockSize = 4; int Block = (Width - 2)

【機器學習】貝葉線性迴歸(最大後驗估計+先驗)

引言 如果要將極大似然估計應用到線性迴歸模型中,模型的複雜度會被兩個因素所控制:基函式的數目(的維數)和樣本的數目。儘管為對數極大似然估計加上一個正則項(或者是引數的先驗分佈),在一定程度上可以限制模型的複雜度,防止過擬合,但基函式的選擇對模型的效能仍然起著決定性的作用。