matlab練習程序(高斯過程回歸)


高斯過程是一種非參數模型估計方法。不像最小二乘,需要知道模型的參數,如: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);

結果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM