李航老師的《統計學習方法》第二章演算法的matlab程式

來源:互聯網
上載者:User

標籤:break   matlab   size   printf   調整   ros   老師   乘法   clear   

參考了http://blog.sina.com.cn/s/blog_bceeae150102v11v.html#post

 


% 感知機學習演算法的原始形式,演算法2.1參考李航《統計學習方法》書中第二章的演算法P29

close all
clear all
clc
X=[3,3;4,3;1,1];Y=[1,1,-1];%訓練資料集及標記
learnRate=1;%學習率
Omega=zeros(1,size(X,2))
b=0 %% ω和b的初值
i=1;k=0;
while 1
if Y(i)*(sum(Omega.*X(i,:))+b)<=0 %該點未被正確分類,調整之
Omega=Omega+learnRate*Y(i)*X(i,:);
b=b+learnRate*Y(i);
i=1;%調整w,b之後,重新對每個點檢查
k=k+1;%記錄迭代次數
fprintf(‘迭代次數k=%d‘,k);
omega=sprintf(‘%2.0f\t‘,Omega)
fprintf(‘b=%d\n‘,b);
continue;
else
i=i+1;
end
if i>size(X,1)
break;
end
end
w=Omega
b

% 感知機學習演算法的對偶形式,演算法2.2參考李航《統計學習方法》書中第二章的演算法P33

close all
clear all
clc
X=[3,3;4,3;1,1];Y=[1,1,-1];%訓練資料集及標記
learnRate=1;%學習率(0,1]
alpha=zeros(1,size(X,1))
b=0 %%alpha和b的初值 size(X,dim) dim=1返回行數(有幾個x點),dim=2返回列數
G=X*X‘;%%計算Gram矩陣
i=1;k=0;
while 1
if Y(i)*(sum(alpha.*Y.*G(i,:))+b)<=0 %該點未被正確分類,調整之
alpha(i)=alpha(i)+1;
b=b+Y(i);
i=1;%調整w,b之後,重新對每個點檢查
k=k+1;%記錄迭代次數
fprintf(‘迭代次數k=%d‘,k);
Alpha=sprintf(‘%2.0f\t‘,alpha)
fprintf(‘b=%d\n‘,b);
continue;%跳過迴圈體中的某些語句。當在迴圈體內執行到該語句的時候,程式將跳過迴圈體內中剩下的所有語句,繼續執行下一次迴圈。
else
i=i+1;
end
if i>size(X,1)
break;%終止迴圈的執行,當在迴圈體內執行到break語句的時候,程式將跳出該迴圈體,繼續執行迴圈體外的下一個語句
end
end
w=alpha.*Y*X % *是乘法,即矩陣乘法,.*是點乘,即對應元素相乘
b

李航老師的《統計學習方法》第二章演算法的matlab程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.