ML 感知機及其matlab實現

2021-09-12 21:27:42 字數 2919 閱讀 1982

1. 感知機原理:

感知機是二分類的線性模型,其輸入是例項的特徵向量,輸出的是事例的類別,分別是+1和-1,屬於判別模型。

假設訓練資料集是線性可分的,感知機學習的目標是求得乙個能夠將訓練資料集正例項點和負例項點完全正確分開的分離超平面。如果是非線性可分的資料,則最後無法獲得超平面。

感知機從輸入空間到輸出空間的模型如下:

損失函式的優化目標是期望使誤分類的所有樣本,到超平面的距離之和最小。所以損失函式定義如下:

不考慮1/(||w||),就得到感知機模型的損失函式:

為什麼忽略1/(||w||)呢?網上有人說1/(||w||)是個定值,但是個人覺得平面不唯一,這個值肯定也會變。通過參考他人觀點結合思考,我覺得原因可以列為以下兩點。

1)1/(||w||)不影響yi(w⋅xi+b)正負的判斷,即不影響學習演算法的中間過程。因為感知機學習演算法是誤分類驅動的,這裡需要注意的是所謂的「誤分類驅動」指的是我們只需要判斷−yi(w⋅xi+b)的正負來判斷分類的正確與否,而1/(||w||)並不影響正負值的判斷。所以1/(||w||)對感知機學習演算法的中間過程可以不考慮。

2)1/(||w||)不影響感知機學習演算法的最終結果。因為感知機學習演算法最終的終止條件是所有的輸入都被正確分類,即不存在誤分類的點。

綜上所述,即使忽略1/(||w||),也不會對感知機學習演算法的執行過程產生任何影響。反而還能簡化運算,提高演算法執行效率。

2. 感知機學習演算法:

感知機學習演算法是對上述損失函式進行極小化,求得w和b。但是用普通的基於所有樣本的梯度和的均值的批量梯度下降法(bgd)是行不通的,原因在於我們的損失函式裡面有限定,只有誤分類的m集合裡面的樣本才能參與損失函式的優化。所以我們不能用最普通的批量梯度下降,只能採用隨機梯度下降(sgd)。目標函式如下:

輸入:訓練資料集t。

輸出:w和b;感知機模型f(x)=sign(w⋅x+b)。

更新:判斷該資料點是否為當前模型的誤分類點,即判斷若yi(w⋅xi+b)<=0則更新:

3. matlab**

1.感知機**:

function perceptron(data)

x=data(:,[1,2]);

y=data(:,3);

m=size(x,1);

plotdata(x,y);

axis([-4 4 -4 4]);

hold on

x1=-4:0.2:4;

w=[0;0];

b=0;

alph=1;

error=1;

while error>0

error=0;

for i=1:m

if (((w'*x(i,:)'+b)*y(i))<=0)

error=error+1;

w=w+alph*y(i)*x(i,:)';

b=b+alph*y(i);

y1=(-w(1)*x1-b)/w(2);

plot(x1,y1,'-b');

pause(0.5);

endend

endplot(x1,y1,'-r','linewidth',3);

end

獲得線性可分資料集**:

function [sample]=generate_sample(step,error)

aa=0.5;

bb=2;

b1=0.3;

rr =error;

s=step;

x1(:,1) = -4:s:4;

n = length(x1(:,1));

x1(:,2) = aa.x1(:,1) + bb + b1 + rrabs(randn(n,1));

y1 = -ones(n,1);

x2(:,1) = -4:s:4;

x2(:,2) = aa.x2(:,1) + bb - b1 - rrabs(randn(n,1));

y2 = ones(n,1);

figure;

plot(x1(:,1),x1(:,2),『bx』,x2(:,1),x2(:,2),『k.』);

feature=[x1 y1];

category=[x2 y2];

sample=[feature;category];

繪製資料集**:

function plotdata(x,y)

figure;

hold on;

pos=find(y==1);

neg=find(y==-1);

plot(x(pos,1),x(pos,2),'k+','linewidth',2,'markersize',9);

plot(x(neg,1),x(neg,2),'ko','marke***cecolor','r','linewidth',2,'markersize',7);

hold off;

end

4. matlab**生成大小為20的線性可分資料集,繪製(x,y)以及平面上的目標函式f。如圖:不同的方式標記了不同類別,迭代次數如圖藍線條個數,目標函式如紅線所示。(學習率n = 1)

將演算法執行在大小為為100和1000的線性可分資料集。如圖:不同的方式標記了不同類別,迭代次數如圖藍線條個數,目標函式如紅線所示。(學習率n = 1)

2 感知機模型實現 matlab

對於超平面性質的證明在筆記中可以見到,書中對於感知機的介紹已足夠詳細 輸入空間即特徵空間,假設空間是所有w及b確定的超平面,輸出空間為 資料集 以書中資料為例 t 3,3,1 4,3,1 1,1,1 w zeros size t,1 1,1 b 0 訓練模型,學習速率為1 w,b train w,b...

感知機perceptron 機器學習ML

參考 1.統計學習方法 李航 2.3.在機器學習中,感知機 perceptron 是二分類的線性分類模型,屬於監督學習演算法。輸入為例項的特徵向量,輸出為例項的類別 取 1和 1 感知機對應於輸入空間中將例項劃分為兩類的分離超平面。感知機旨在求出該超平面,為求得超平面匯入了基於誤分類的損失函式,利用...

MLP 多層感知機的原理及Matlab實現

關於這個看過很多資料,很多資料好像還將感知機和人體大腦感知系統聯絡起來什麼的,深深的乙個白眼。根本沒必要說的多麼高大上,學過模電的同學就很好理解,其實每個感知器都相當於乙個二極體,將很多很多二極體組合在一起就可以完成乙個邏輯電路,實現我們需要的功能。不同的只是這個 二極體 的引數是機器自己更新學習到...