lwlr 區域性加權線性回歸

2021-07-17 03:28:15 字數 1273 閱讀 2591

根據《機器學習實戰》中的phthon**改編而來,詳細說明參見原書,測試資料都是用的原書資料

主程式:lwlr_test.m

clc;

clear;

%高斯核波長

k=0.01;

%讀取資料,

fid=fopen('ex0.txt','r');

dataset=zeros(1,3);

m=size(dataset,1);

while(~feof(fid))

lineinfo=fgetl(fid);

%將字元轉換為數字組成的陣列

c=str2num(lineinfo);    

dataset(m,:)=c;

m=m+1;

endy_p=zeros(1,m);

x=dataset(:,1:2);

y=dataset(:,3);

x_test=x;

m=size(x_test,1);

d=ones(m,1)/m;

for i=1:m

y_p(i)=lwlr(x_test(i,:),x,y,k);    

endy_p(length(y_p))=;

xx=cat(2,x_test(:,2),y);

xx=sortrows(xx);

xxp=cat(2,x_test(:,2),y_p');

xxp=sortrows(xxp);

scatter(xx(:,1),xx(:,2),'.');

%plot(xx(:,1),xx(:,2));

hold on 

plot(xxp(:,1),xxp(:,2),'r')

函式檔案:lwlr.m

function result=lwlr(point,x,y,k)

%y轉置

yt=y';

%獲得x的行

m=size(x,1);

weights=eye(m);

for i=1:m

diff=point-x(i,:);

weights(i,i)=exp(diff*diff'/(-2.0*k^2));

endxx=x'*(weights*x);

if det(xx)==0

display ('this matrix is singular, cannot do inverse');

return;

endws=xx^-1*(x'*(weights*y));

result=point*ws;

end

區域性加權線性回歸(LWLR)

對於線性回歸演算法,容易出現欠擬合,而多項式回歸又容易出現過擬合。因此出現了區域性加權回歸y i t x i 和線性回歸的模型相同,但是對於每乙個 點,都需要重新計算,並不是固定不變的。l 1 2m i 1mw i yi tx i 2 wi e xp xi x 22 k2 對於 點x,wi 表示xi...

區域性加權線性回歸

簡單來說,這個過程其實是在先擬合出一條曲線,然後再用這個曲線去 需要 的點。但是如果這個曲線擬合得不好 或者說樣本資料含有大量噪音 那麼這個 結果就會很差。區域性加權線性回歸 對於乙個資料集合 x0,y0 x1,y1 xm,ym 我們 它在x點時對應的y值時,如果採用的是傳統的 線性回歸模型,那麼 ...

區域性加權線性回歸

區域性加權線性回歸是機器學習裡的一種經典的方法,彌補了普通線性回歸模型欠擬合或者過擬合的問題。機器學習裡分為無監督學習和有監督學習,線性回歸裡是屬於有監督的學習。普通的線性回歸屬於引數學習演算法 parametric learning algorithm 而區域性加權線性回歸屬於非引數學習演算法 n...