利用梯度下降法實現線性回歸的演算法及matlab實現

2022-11-23 04:54:12 字數 3828 閱讀 3710

線性回歸屬於監督學習,因此方法和監督學習應該是一樣的,先給定乙個訓練集,根據這個訓練集學習出乙個線性函式,然後測試這個函式訓練的好不好(即此函式是否足夠擬合訓練集資料),挑選出最好的函式(cost function最小)即可;

注意:(1)因為是線性回歸,所以學習到的函式為線性函式,即直線函式;

(2)線性回歸可分為單變數線性回歸和多變數線性回歸;對於單變數線性回歸而言,只有乙個輸入變數x;

我們能夠給出單變數線性回歸的模型:

我們常稱x為feature,h(x)為hypothesis;上述模型中的θ0和θ1在**中分別用theta0和theta1表示。

從上面「方法」中,我們肯定有乙個疑問,怎麼樣能夠看出線性函式擬合的好不好呢?我們需要使用到cost function(代價函式),代價函式越小,說明線性回歸地越好(和訓練集擬合地越好),當然最小就是0,即完全擬合。cost function的內部構造如下面公式所述:

其中:表示向量x中的第i個元素;

表示向量y中的第i個元素;

表示已知的假設函式;

m為訓練集的數量;

雖然給定乙個函式,我們能夠根據cost function知道這個函式擬合的好不好,但是畢竟函式有這麼多,總不可能乙個乙個試吧?因此我們引出了梯度下降:能夠找出cost function函式的最小值;

梯度下降原理:將函式比作一座山,我們站在某個山坡上,往四周看,從哪個方向向下走一小步,能夠下降的最快;當然解決問題的方法有很多,梯度下降只是其中乙個,還有一種方法叫normal equation;

方法:(1)先確定向下一步的步伐大小,我們稱為learning rate(alpha);

(2)任意給定乙個初始值:(用theta0和theta1表示);

(3)確定乙個向下的方向,並向下走預先規定的步伐,並更新;

(4)當下降的高度小於某個定義的值,則停止下降;

演算法:特點:

(1)初始點不同,獲得的最小值也不同,因此梯度下降求得的只是區域性最小值;

(2)越接近最小值時,下降速度越慢;

梯度下降能夠求出乙個函式的最小值;

線性回歸需要使得cost function的最小;

因此我們能夠對cost function運用梯度下降,即將梯度下降和線性回歸進行整合,如下圖所示:

上式中右邊的公式推導過程如下:

從上面的推導中可以看出,要想滿足梯度下降的條件,則項後面必須乘以對應的輸入訊號。

梯度下降是通過不停的迭代,而我們比較關注迭代的次數,因為這關係到梯度下降的執行速度,為了減少迭代次數,因此引入了feature scaling。

此種方法應用於梯度下降,為了加快梯度下降的執行速度;

思想:將各個feature的值標準化,使得取值範圍大致都在-1<=x<=1之間;

常用的方法是mean normalization,即

或者:[x-mean(x)]/std(x);

clear all

clc% training sample data;

p0=3;

p1=7;

x=1:3;

y=p0+p1*x;

num_sample=size(y,2);

% gradient descending process

% initial values of parameters

theta0=1;

theta1=3;

%learning rate

alpha=0.02;

% if alpha is too large, the final error will be much large.

% if alpha is too small, the convergence will be slow

epoch=500;

for k=1:epoch

v_k=k

h_theta_x=theta0+theta1*x; % hypothesis function

jcost(k)=((h_theta_x(1)-y(1))^2+(h_theta_x(2)-y(2))^2+(h_theta_x(3)-y(3))^2)/num_sample

theta0=theta0-alpha*((h_theta_x(1)-y(1))+(h_theta_x(2)-y(2))+(h_theta_x(3)-y(3)))/num_sample;

theta1=theta1-alpha*((h_theta_x(1)-y(1))*x(1)+(h_theta_x(2)-y(2))*x(2)+(h_theta_x(3)-y(3))*x(3))/num_sample;

endplot(jcost)

clear all

clc% training sample data;

p0=26;

p1=73;

x=1:3;

y=p0+p1*x;

num_sample=size(y,2);

% gradient descending process

% initial values of parameters

theta0=1;

theta1=3;

%learning rate

alpha=0.08;

% if alpha is too large, the final error will be much large.

% if alpha is too small, the convergence will be slow

epoch=500;

for k=1:epoch

v_k=k

h_theta_x=theta0+theta1*x; % hypothesis function

jcost(k)=((h_theta_x(1)-y(1))^2+(h_theta_x(2)-y(2))^2+(h_theta_x(3)-y(3))^2)/num_sample;

theta0=theta0-alpha*((h_theta_x(1)-y(1))+(h_theta_x(2)-y(2))+(h_theta_x(3)-y(3)))/num_sample;

theta1=theta1-alpha*((h_theta_x(1)-y(1))*x(1)+(h_theta_x(2)-y(2))*x(2)+(h_theta_x(3)-y(3))*x(3))/num_sample;

% dispcomp 1

r1=((h_theta_x(1)-y(1))+(h_theta_x(2)-y(2))+(h_theta_x(3)-y(3)));

r2=sum(h_theta_x-y);

% dispcomp 2

r3=((h_theta_x(1)-y(1))^2+(h_theta_x(2)-y(2))^2+(h_theta_x(3)-y(3))^2);

r4=sum((h_theta_x-y).^2);

% dispcomp 3

r5=((h_theta_x(1)-y(1))*x(1)+(h_theta_x(2)-y(2))*x(2)+(h_theta_x(3)-y(3))*x(3));

r6=sum((h_theta_x-y).*x);

if((r1~=r2)||(r3~=r4)||(r5~=r6))

disp('***wrong result******')

endend

plot(jcost)

單變數線性回歸的模型:

與單神經元模型具有對應的關係,可實現相同的功能。其中θ0相當於單神經元的偏置值bias值,x相當於單神經元的單個輸入,θ1相當於單神經元的權值w。如果不包含θ0,那麼則可能無法準確完成線性回歸的功能。

因此,對於單神經元結構而言,偏置值bias是必不可少的。

對於雙變數線性回歸模型:

而言,可實現雙輸入單神經元的功能。其偏置值對應θ0。

MATLAB最速下降法,牛頓法和共軛梯度法求解的方法

實驗要求 1 所屬課程名稱 最優化方法 2 實驗日期 2010年5月10日 2010年5月15日 3 實驗目的 掌握最速下降法,牛頓法和共軛梯度法的演算法思想,並能上機程式設計實現相應的演算法。二 實驗要求 用matlab實現最速下降法,牛頓法和共軛梯度法求解例項。四 實驗原理 最速下降法是以負梯度...

影象處理中的梯度 梯度方向總結

一 數學中的方向導數與梯度 方向導數為函式沿某一指定方向的變化率。方向導數的定義為 若此時的極限存在。其中為與l同方向的單位向量,該方向導數就是處沿方向l的變化率。進而有,其中為方向l的方向餘玄。向量稱為函式在點的梯度,記為。若函式在點可微分,與方向l同向的單位向量,則 其中,此式表明方向導數與梯度...

志願填報何拉開梯度

在很多志願填報過程中,我們經常說到要注意梯度,學校志願要有梯度,專業志願要有梯度,那麼究竟什麼是梯度?填報志願過程中又該怎樣把握梯度呢?2011年,某省理科考生小強 化名 的志願填報為我們給出了答案。小強2009年的高考分數是566分,高出當地一本線47分,一本平行志願依次報考廈門大學 哈爾濱工業大...