高斯過程是一種非參數模型估計方法。不像最小二乘,需要知道模型的參數,如:y=ax+b,我們就需要知道a和b來對模型進行估計。
高斯過程要設置一個核函數,來給不同觀測值確定關系。這里我們需要設置核函數的超參數,比如下面的alpha和beta。
下面是幾種常見的計算不同觀測關系的核函數:

設置好核函數后我們需要計算三組矩陣,分別是自觀測矩陣K,觀測預測矩陣Ks和預測矩陣Kss。
計算方法就是將觀測自變量和預測自變量代入設定的核函數即可,具體可以參考后面代碼,不是很麻煩。
得到三個矩陣后只需要根據下面兩個公式就能得到預測數據的均值和方差。

其中Y是觀測因變量,sigma是觀測可能的不確定性。
代碼如下:
clear all; close all; clc; x=0:0.1:8; %原始數據 y = x.*sin(x) + x/5; plot(x,y,'r') gc_x = x(1:end); %觀測數據加噪聲 gc_y = y(1:end) + (rand(1,length(gc_x))-0.5)/3; hold on; plot(gc_x,gc_y,'ro') x=0:0.05:8; %帶預測數據 num = length(gc_x); K = zeros(num,num); %根據核函數給出自觀測矩陣 Ks = zeros(num,length(x)); %根據核函數給出觀測預測矩陣 Kss = zeros(length(x),length(x)); %根據核函數給出預測矩陣 %根據核函數賦值 for i=1:num for j=1:num K(i,j) =exp(-((gc_x(i)-gc_x(j))*(gc_x(i)-gc_x(j)))); end for j=1:length(x) Ks(i,j) = exp(-((gc_x(i)-x(j))*(gc_x(i)-x(j)))); end end for i=1:length(x) for j=1:length(x) Kss(i,j) = exp(-((x(i)-x(j))*(x(i)-x(j)))); end end %計算均值與方差 sigma = 0.001; %sigma改成2可以明顯看出方差范圍 mean_y = Ks'*inv(K + sigma*eye(length(K)))*gc_y'; std_y = diag(Kss - Ks'*inv(K + sigma*eye(length(K)))*Ks); plot(x,mean_y,'c'); %畫出方差范圍 max_y = mean_y + abs(std_y); min_y = mean_y - abs(std_y); yFill = [max_y', fliplr(min_y')]; xFill = [x, fliplr(x)]; plot(x,max_y,'c'); plot(x,min_y,'c'); fill(xFill, yFill, 'c','edgealpha',0,'facealpha',0.1);
結果如下:

