本文譯自: Duane Rich 的文章Which is your favorite Machine Learning algorithm?
幾乎所有的有監督機器學習算法都專注於找到一個函數,這個函數是從特徵到標籤的映射的一個近似。通常情況下一個函數的參數決定了一個函數。根據數據,我們通過確定這些參數的(後驗)分佈來確定可能的函數。
高斯過程允許我們根據一組任意有限的輸入和輸出來引用函數。我們通過一個分佈來指定函數:
其中和是給定的函數,分別叫做mean函數和kernel函數。爲了理解這一點,你可以想象你能從這個GP中採樣出大量的函數,不妨稱它們爲。如果你能在一個特定的中評估這N個函數,你會發現者N個函數的輸出的平均值是。同樣的,如果你在兩個輸入中評估這些函數,這些輸出的協方差是。
正如你可以從一個隨機變量的分佈中採樣出一些值一樣,你也可以從高斯過程中採樣出函數。舉個例子,如果你指定。你採樣出來的函數可能長這樣:
因此,一個高斯過程包括一個指定的先驗分佈,。然後以我們數據爲條件,確定出一個函數的後驗分佈。
在實際應用中,我們會使用一個向量對kernel進行參數化,然後選擇一個可以最大化我們的數據和的特定向量。這個技術的真正藝術之處在於選擇合適的Kernel function。
最後,我們將使用一個優化好的,它可以由於評估任何給定的輸入,我們不需要得到一個輸出值,而是得到一個關於輸出的分佈。
好了,讓我們現在來使用高斯過程吧!
下面是我6個月的體重:
你能看出什麼規律麼?其實我也看不出來。但是:
- 這些時刻很接近
- 這些時刻在一些週期的同一部分(一週或者一個月中的同一天等)
所以,讓我們來構造出我們的kernel metric吧。
考慮到,這些時間特徵並不是影響體重唯一的因素,應該還有其他特徵來影響體重,所以我們應該在我們的kernel中加入一些噪音。
最後,我的體重應該有一些長期趨勢,比如我可能在兩週裏吃了太多的披薩。或者我在某些日子生病了導致身體日漸消瘦。考慮到這些因素,我們將使用Matern Kernel。
好,現在讓我們測試一下。我們將隱藏25%的數據用於預測。我將根據測試結果畫出一個和兩個標準偏差的置信區間。因此我們得到了:
從圖中可以看出規律已經比較清晰了。我的體重大約有個時長一週的週期,並且會在幾周內趨於正常。 樣本不足,我們得到了不錯的預測,因爲它依賴於週期性並且不會從虛假的趨勢中推斷出來。分佈的輸出似乎對數據進行了很好的校準。
總之,高斯過程很靈活,你可以將你的一些直覺插入模型中,用於解決一些小問題。但是這不是一個通用的模型,他的拓展性不太好。