高斯過程回歸詳解

2021-02-13 機器學習研究院

本文介紹了高斯回歸的基本概念,並在 R 中利用高斯回歸實現對時間序列的預測。

為什麼要用高斯過程回歸

現實實生活中,我們遇到的一個典型問題就是選擇合適的模型擬合訓練集中自變量 X 與因變量 y 之間的關係,並根據新的自變量 x 來預測對應的因變量 f

如果關係足夠簡單,那麼線性回歸就能實現很好的預測,但現實情況往往十分複雜,此時,高斯過程回歸就為我們提供了擬合複雜關係(quadratic, cubic, or even nonpolynomial)的絕佳方法

什麼是高斯過程回歸

高斯過程可以看做是多維高斯分布向無限維的擴展,我們可以將 y=y1,y2,…,yn看作是從 n 維高斯分布中隨機抽取的一個點

對高斯過程的刻畫,如同高斯分布一樣,也是用均值和方差來刻畫。通常在應用高斯過程 f∼GP(m,K)的方法中,都是假設均值 m 為零,而協方差函數 K 則是根據具體應用而定

高斯回歸的本質其實就是通過一個映射把自變量從低維空間映射到高維空間(類似於支持向量機中的核函數將低維線性不可分映射為高維線性可分),只需找到合適的核函數,就可以知道 p(f|x,X,y)的分布,最常用的就是高斯核函數

高斯過程回歸的基本流程

再利用高斯過程回歸時,不需要指明 f(x)的具體形式,如線性 f(x)=mx+c,或者二次等具體式,n 個訓練集的觀測值 y1,y2,…,yn會被看做多維(n 維)高斯分布中採樣出來的一個點

現在給定訓練集 x1,x2,…,xn與對應的觀測值y1,y2,…,yn,由於觀測通常是帶噪聲的,所以將每個觀測 y 建模為某個隱函數 f(x) 加上一個高斯噪聲,即 

其中,f(x)被假定給予一個高斯過程先驗,即

其中協方差函數 k(x,x′)可以選擇不同的單一形式,也可以採用協方差函數的組合形式,由於假設均值為零,因此最後結果的好壞很大程度上取決於協方差函數的選擇。不同的協方差函數形式參見這篇文章對 Covariance Functions 的詳細介紹。常見的協方差函數如下,參見 Wikipedia-Gaussian Process

根據高斯分布的性質以及測試集和訓練集數據來自同一分布的特點,可以得到訓練數據與測試數據的聯合分布為高維的高斯分布,有了聯合分布就可以比較容易地求出預測數據 y∗ 的條件分布 p(y∗|y),對 y∗的估計的估計,我們就用分布的均值來作為其估計值

利用高斯過程進行時間序列預測

R 中 kernlab 包的 gausspr 函數可以進行高斯回歸,並實現預測,以下面這個包含 46 個月的時間序列 ts7 為例 

利用趨勢回歸併進行預測

library(kernlab)

library(ggplot2)

library(gplots)

library(forecast)

library(data.table)

library(tidyr)

library(plotly)

temp <- data.table(ts7)

fit <- gausspr(demand~t, data=temp)

temp$fitted <- predict(fit, temp[,.(t)])

ggplot(temp, aes(x=year_month, group=1))

   + geom_line(aes(y=demand, col="demand"), size=1)

   + geom_line(aes(y=fitted, col="fitted"), size=1)

   + theme_bw() + theme(axis.text.x=element_text(angle=45,hjust=1,vjust=1))

   + scale_x_discrete(breaks=temp$year_month[seq(2,44,3)])

只利用趨勢項進行高斯回歸的擬合效果如下

然後用過去三年的時間序列作為訓練集對未來一個月的需求進行循環預測

temp1 <- data.table(ts7, fitted=0)

for (k in 0:9){

 train <- temp1[(1+k):(36+k),3:4]

 fit <- gausspr(demand~t, data=train)

 temp1[(37+k), "fitted"] <- predict(fit, temp1[(37+k),.(t)])

}

利用趨勢+季節回歸併進行預測

首先,去除趨勢之後,檢查去趨勢之後的時間序列是否具有明顯的季節性,並找出 CV 最小的前三個季節

temp$demand_detrend <- temp$demand - temp$fitted

ggplot(temp, aes(x=year_month, group=1)) + geom_line(aes(y=demand, col="demand"), size=1) + geom_line(aes(y=fitted, col="fitted"), size=1) + geom_line(aes(y=demand_detrend, col="demand_detrend")) + theme_bw() + theme(axis.text.x=element_text(angle=45,hjust=1,vjust=1)) + scale_x_discrete(breaks=temp$year_month[seq(2,44,3)])

季節性雷達圖

ggseasonplot(temp$demand_detrend, polar=TRUE) + ggtitle("Seasonal Plot") + geom_line(size=1) + theme_bw()


季節性箱形圖

ggplot(temp, aes(x=month, y=demand_detrend)) + geom_boxplot() + theme_bw()

獲取季節 cv 最小的前 3 個季節分別是12月、2月、10月

as.numeric(temp[, .(cv=sd(demand_detrend)/mean(abs(demand_detrend))), by=month][order(cv)][1:3,month])

加入全部 12 個月作為季節性之後,再對最後的 10 個月進行循環預測

temp2 <- data.table(ts7, fitted=0)

for (k in 0:9){

 train <- temp2[(1+k):(36+k),3:15]

 fit <- gausspr(demand~., data=train)

 temp2[(37+k), "fitted"] <- predict(fit, temp2[(37+k),4:15])

}

預測結果比較

temp <- data.frame(temp1[,c(1:3,16)], temp2[,16])

colnames(temp)[3:5] <- c("Actual_demand","Predict_trend","Predict_trend+seasonal")

temp[4:5] <- round(temp[4:5], 2)

temp[temp==0] <- NA

temp <- gather(temp[,-2], key="Series", value="value", -year_month)

p <- ggplot(temp, aes(x=year_month, y=value, group=Series, col=Series))

   + geom_line(size=1) + geom_point() + theme_bw()

   + theme(axis.text.x=element_text(angle=45,hjust=1,vjust=1))

   + scale_x_discrete(breaks=temp$year_month[seq(2,44,3)])

postlink <- plotly_POST(p, filename = "GPR Prediction Example")

postlink

總結

當隨機變量呈現明顯的非線性趨勢時,高斯過程回歸能夠很好地預測線性預測的不足

季節性並不一定能夠提高預測效果,當某些月份的需求變動幅度很大時,加入季節虛擬變量反而會增大預測誤差

高斯過程不僅能用於回歸預測,還能用於解決分類問題,有興趣的讀者請自行探究

Tips:iOS 9系統顯示上面代碼可能不正常,iOS 8\10\11都沒問題,電腦瀏覽器和Android顯示都沒問題,如果顯示代碼不正常,可以用電腦瀏覽器打開試試。

相關焦點

  • 看得見的高斯過程:這是一份直觀的入門解讀
    本文旨在向讀者介紹高斯過程,並且把它背後的數學原理講得更加直觀易懂。高斯過程是機器學習工具箱裡一種相當有用的工具 [1]。它讓我們得以結合先驗知識,對數據做出預測。它最直觀的應用領域是回歸問題,比如在機器人學裡會用到。同時,也可以把它拓展到分類和聚類任務裡。
  • 高斯濾波器詳解
    本文主要介紹了高斯濾波器的原理及其實現過程高斯濾波器是一種線性濾波器,能夠有效的抑制噪聲,平滑圖像。
  • 從數學到實現,全面回顧高斯過程中的函數最優化
    高斯過程可以被認為是一種機器學習算法,它利用點與點之間同質性的度量作為核函數,以從輸入的訓練數據預測未知點的值。本文從理論推導和實現詳細地介紹了高斯過程,並在後面提供了用它來近似求未知函數最優解的方法。
  • 【高斯過程】到底有何過人之處?
    大數據文摘作品,編譯:丁慧、文明、Katherine Hou、雲舟 高斯過程可能不是當前機器學習最火的研究方向,但仍然在很多前沿的研究中被使用到——例如,最近在AlphaGo Zero中自動調整MCTS超參數就使用了它。在建模能力和進行不確定性估計方面,它們具有非常高的易用性。
  • 「高斯過程」到底有何過人之處?
    然而,高斯過程很難掌握,尤其是當你習慣了深度學習中其他常見的模型之後。所以本文希望在具備相當少的ML知識背景下,對高斯過程提供一個直觀的理論介紹,請學習者下載notebook並實現本文中提到的所有代碼。
  • 一文了解高斯濾波器,附原理及實現過程
    生成的過程,首先根據模板的大小,找到模板的中心位置ksize/2。然後就是遍歷,根據高斯分布的函數,計算模板中每個係數的值。需要注意的是,最後歸一化的過程,使用模板左上角的係數的倒數作為歸一化的係數(左上角的係數值被歸一化為1),模板中的每個係數都乘以該值(左上角係數的倒數),然後將得到的值取整,就得到了整數型的高斯濾波器模板。
  • 線性回歸分析詳解10(完結篇):線性回歸分析預測的十大步驟
    許栩原創專欄《從入門到高手:線性回歸分析詳解》第10章,這是本專欄的最後一章,是專欄的完結篇:用線性回歸分析做預測,多元線性回歸分析預測的十大步驟。以回歸分析做需求預測,同樣需要有數據,最先開始的,是數據收集。數據收集是按照確定的數據分析和框架內容,有目的的收集、整合相關數據的一個過程。從上面數據收集的定義可以看出,數據收集需要有明確的目的,即我們先要確定我們是為了什麼事而去收集數據。
  • 深度圖高斯過程 | NeurIPS 2020論文分享第一期
    高斯過程是概率機器學習中的核心方法,憑藉其良好的解析性質和出色的不確定性建模能力,被廣泛應用於各類機器學習問題。採用深度學習層次化建模範式的「深度高斯過程」則進一步增強了其建模能力,拓寬了其應用範圍。然而,絕大多數現有方法不能很好的擴展到圖結構數據。
  • npj:高光譜掃描探針顯微成像—高斯過程建模
    Kalinin(本刊編輯委成員)領導的團隊,以信息量較弱的先驗(Priors)分析了帶激發獲取的壓電響應力顯微鏡數據,探索了高斯過程(GP)回歸在次分析中的適用性。他們研究了3D(x、y、頻率)參數空間中的信號,發現即使信息量較弱的先驗,GP方法也可以在空間和頻域中明確地確定成像過程的特徵長度尺寸。他們進一步揭示,BE數據集傾向於被過度採樣,原始數據集的〜30%足以進行高質量地重建微觀形貌。
  • 線性回歸分析詳解7:多元回歸方程的精度,R平方與調整後的R平方
    許栩原創專欄《從入門到高手:線性回歸分析詳解》第七章,回歸方程的精度,R平方與調整後的R平方。多元線性回歸分析,我們在求出多元線性回歸方程後,這個方程到底怎麼樣,能不能起到效果,需要對求出的回歸方程進行一系列評價和評估。這些評價和評估,首先要做的,是確認回歸方程的精度。本章,我將分如下三個小節講述回歸方程的精度,歡迎閱讀與探討。我的《線性回歸分析》專欄總目錄見下圖。
  • 一種兼具神經網絡高效性和高斯過程靈活性的方法——神經過程
    編者按:幾個月前,Deepmind在ICML上發表了一篇論文《Neural Processes》,提出了一種兼具神經網絡高效性和高斯過程靈活性的方法——神經過程,被稱為是高斯過程的深度學習版本。雖然倍受關注,但目前真正能直觀解讀神經過程的文章並不多,今天論智帶來的是牛津大學在讀PHD Kaspar Märtens的一篇可視化佳作。
  • 正態分布和高斯分布的作用_高斯分布的定義_誤差服從高斯分布
    打開APP 正態分布和高斯分布的作用_高斯分布的定義_誤差服從高斯分布 發表於 2017-12-04 16:38:44   正態分布
  • 高斯分布與曼德布羅特分布
    還有一些在高斯世界之外沒有或者沒有重大意義的概念:相關性以及更糟糕的回歸。但它們在我們的方法根深蒂固,在商業談話中不聽到「相關性」這個詞是很難的。只需看一看涉及兩個極端斯坦變量的歷史序列,比如,債券和股市、兩隻股票的價格,或者房地產價格和股市收益率,計算這些成對變量在不同子期間的相關性,比如1994年、1995年、1996年,等等。
  • 基於貝葉斯推斷的回歸模型(理論篇)| 機器學習你會遇到的「坑」
    但是我們可以用一個概率密度函數來指定屬性的類條件概率的估計,比如我們可以令條件概率為一個高斯分布:高斯分布由兩個參數(均值和標準差)唯一確定,我們在訓練分類器的過程,其實就是對每個屬性的每個類條件概率的參數進行估計,這裡面所用的方法就是極大似然估計。
  • 高斯分布性質與繪圖
    本章定義了高斯分布,並探討了其性質。從實域高斯分布的定義開始。在研究高斯函數實域性質的過程中,引入了傅立葉變換和熱方程,推導了它們與高斯函數的關係。定義了多維空間中的高斯分布,以及該分布的剪切和摺疊。以高斯分布為例,具體介紹了概率統計中的均值、方差、邊緣化和概率密度等概念。
  • 愛迪不愧是老戰士,一句場面話,犧牲了賽羅,換來了高斯不開月神
    導語:奧特銀河格鬥的驚喜並不在於他的劇情有多麼精彩,而是在於能夠見到諸多回歸的奧特曼。特別是高斯和傑斯提斯的回歸,那真的是全場尖叫,曾經可是有人斷言過沒機會再見到正義姐的,這一期人家老CP回歸又打臉了吧?
  • 什麼是回歸?什麼是回歸分析?回歸分析預測的分類方法有哪些?
    大家好,歡迎來到許栩原創專欄《從入門到高手:線性回歸分析詳解》,本篇是專欄的第三篇文章,回歸分析的歷史、概念和分類。本專欄第一章和第二章,我分別講解了學習回歸分析之前必須了解的兩個基礎概念:變量和相關性。本章,講解回歸分析的相關概念和的分類,主要包括以下四個內容。
  • 高斯濾波器的原理和實現
    生成的過程,首先根據模板的大小,找到模板的中心位置ksize/2。然後就是遍歷,根據高斯分布的函數,計算模板中每個係數的值。 需要注意的是,最後歸一化的過程,使用模板左上角的係數的倒數作為歸一化的係數(左上角的係數值被歸一化為1),模板中的每個係數都乘以該值(左上角係數的倒數),然後將得到的值取整,就得到了整數型的高斯濾波器模板。
  • 數學天才——高斯的故事
    迪德裡赫後來娶了羅捷雅,第二年他們的孩子高斯出生了,這是他們唯一的孩子。父親對高斯要求極為嚴厲,甚至有些過份,常常喜歡憑自己的經驗為年幼的高斯規劃人生。高斯尊重他的父親,並且秉承了其父誠實、謹慎的性格。1806年迪德裡赫逝世,此時高斯已經做出了許多劃時代的成就。   在成長過程中,幼年的高斯主要是力於母親和舅舅。
  • DeepMind的最新研究結合了神經網絡和隨機過程的優點提出神經過程...
    作為神經網絡的一種替代方案,還可以對隨機過程進行推理以執行函數回歸。這種方法最常見的實例是高斯過程( Gaussian process, GP),這是一種具有互補性質的神經網絡模型:GP不需要昂貴的訓練階段,可以根據某些觀察結果對潛在的ground truth函數進行推斷,這使得它們在測試時非常靈活。