1. 程式人生 > >李航老師的《統計學習方法》第二章算法的matlab程序

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

com b+ -1 print nbsp 一個 while alpha 學習

參考了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程序