感知機的matlab實現

感知機是二類分類的線性分類模型,其輸入爲實實例的特徵向量,輸出是實例的類別,兩類分別取+1和-1。

輸入空間到輸出空間的函數爲:f(x) = sign(w*x+b)

其中w,b感知機模型參數,w是權值(權向量),b是偏置,w*x是w和x的內積。sign是函數符號,輸入爲正時輸出+1,輸入爲負時,輸出爲-1.

感知機是一種線性分類模型,屬於判別模型。感知機模型的假設空間是定義在特徵空間中的所有線性分類模型或線性分類器。


感知機的分類面: w*x+b = 0      是對應於特徵空間的一個超平面S,其中W是超平面法向量,b是超平面截距,這個超平面將特徵空間化爲兩半,每一邊代表一類。

在訓練感知機的時候首先初始化w,b,然後使用誤分點來驅動超平面的更新

當一個x(i)被誤分時,通過 w = w+L*y(i)*x(i) , b = b+L*y(i) 來更新w,b.   其中L是學習的步長(0<L<=1)'


這裏在matlab中產生兩類(X和Y,各60個點)高斯分佈的點,通過感知機算法來尋找一個分類面。



load gaoData2;
x1 = x; %第一類點
x2 = y; %第一類點
plot(x1(1,:),x1(2,:),'ro',x2(1,:),x2(2,:),'b*');hold on 
y1 = ones(1,60);
y2 = -ones(1,60);
x = [x1 x2];    %實例輸入點
y = [y1 y2];    %對應的輸出
w = [0 0];        %初始化
b = 0;
itary = 0.05;      %步長
cont = 0;
cont1 = 0;
cont2 = 0;
tic;     %給出程序在tic,toc之間程序運行時間
for j = 1:50000   %設定循環次數,避免數據不是線性可分

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