線性迴歸

線性迴歸

給定數據集D={(**x1**,y1),(**x2**,y2).....,(**xm**,ym)},(有m個樣本)其中**xi**=(xi1;xi2;xi3.....;xid),(每個樣本有d個特稱或者屬性)線性迴歸試圖學得一個線性模型儘可能準確地預測實值輸出標記。
我們考慮一種最簡單的情形:輸入屬性的數目只有一個,即預測的線性模型可以表示爲f(xi)=w*xi+b
確定w和b就是我們要做的事情,顯然,關鍵在於如何衡量f(x)和y之間的差距,而均方誤差是迴歸任務中最常用的性能度量,因此我們可以試圖讓均方誤差最小化,即

在這裏插入圖片描述
基於均方誤差最小化來進行模型求解的方法稱爲“最下二乘法”,在迴歸方程中最小二乘法就是試圖找到一條直線,使所有樣本到直線的歐式距離之和最小。
求解w,b,將上式分別對w和b求偏導數,得到
在這裏插入圖片描述
在這裏插入圖片描述
matlab實現代碼:

num=100;
a=1;
b=3;%生成y=ax+b的100個隨機數字
Xbuf=zeros(num,1);
Ybuf=zeros(num,1);
for i=1:num
    Xbuf(i,1)=10*rand;
    Ybuf(i,1)=a*Xbuf(i,1)+b +rand*2;
end
plot(Xbuf,Ybuf,'.r');
sum=0;
for i=1:100
    sum=sum+Xbuf(i,1);
end
xave=sum/100;
divisor=0;
for i=1:100
    divisor=divisor+Ybuf(i,1)*(Xbuf(i,1)-xave);
end
mod=0;
Xsquare=0;
for i=1:100
    Xsquare=Xsquare+Xbuf(i,1)*Xbuf(i,1);
end
w=divisor/(Xsquare-sum*sum/100);%y=wx+b的w計算
b_sum=0;
for i=1:100
   b_sum= b_sum+Ybuf(i,1)-w*Xbuf(i,1);
end
b=b_sum/100; %y=wx+b的b的計算
x=0:0.1:10;
y=w*x+b;
hold on;
plot(x,y,'-');
hold off;


結果展示:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章