《統計學習方法》 對偶感知器的python實現

2021-07-30 15:44:24 字數 1967 閱讀 6494

其原理和原始形式的感知器的原理一樣,對偶就是是:實質是一樣,只是換了一種實現方式。

我們用梯度下降法來更新權值時的公式為:

由於太懶,這裡用手寫給出解答

為了方便計算xi*xj,這裡先引入gram矩陣,有g = [xi * xj], 其中g為n*n矩陣,n為資料的個數,**實現如下:

先給出偽**:

產生資料集的**如下:其中我們把b從x中分開,方便計算:
#x為資料集,y為標籤,alpha為要迭代計算的值,b為偏置量

defcratedata

(): x = array([[3,3],[4,3],[1,1]]);

y = array([1,1,-1]);

alpha = array([0,0,0]);

b = 0;

return x,y,alpha,b;

最後,我們給出訓練alpha和偏置引數b的**

def

trainperceptron

(xvec, yvec, alpha,b):

#定義迴圈結束標誌

flag = true;

#得到gram矩陣

gramm = array(grammaxtrix(x));

while flag:

#求的樣本資料行總數

length = len(xvec);

flag = false;

for i in range(length):

ans = 0;

#計算alpha(j) * y(j) * x(i) * x(j)的和

for j in range(length):

ans += gramm[i][j] * y[j]* alpha[j];

ans += b;

#判斷是否誤分類

if y[i] * (ans) <= 0:

flag = true;

#迭代更新alpha

alpha[i] += 1;

#迭代更新偏置量b

b += y[i];

print(alpha);

print(i);

input();

return alpha,b;

來看看執行結果

>>> x,y,alhpha,b = cratedata()

>>> trainperceptron(x,y,alhpha,b)[10

0]0[10

1]2[10

2]2[10

3]2[20

3]0[20

4]2[20

5]2(array([2, 0, 5]), -3)

最後我們可以有w和alpha的關係,來求得w,最後得出分離超平面。

這裡alpha還有乙個很有趣的性質,alpha的值越大,則說明其更新的次數越多,那麼就意味著它距離分離超平面越近,也就越難正確分類。換句話說,這樣的例項對於學習結果的影響最大!

畢竟為了這乙個資料點,分離超平面移動自己移動了那麼多次呢!!

統計學習方法(二) 感知機學習方法的對偶形式

我們知道,在感知機的原始形式中,w 和 b 通過以下形式更新 w leftarrow w eta y x b leftarrow b eta y i 假設點 x i,y i 在學習過程中被使用了 n i 次 也即被分類錯誤了 i 次 那麼最後學習到的 w,b 可以表示為 w sum n i eta ...

統計學習方法(二)感知器C語音實現

感知器 perception 是二分類線性分類模型,其輸入為例項的特徵向量,輸出為例項的類別,取 1和 1的二值,感知機對應於輸入空間 特徵空間 中將例項劃分為正負兩類的分離超平面,屬於判別模型,感知機學習旨在求出將訓練資料進行線性劃分的分離超平面,為此匯入基於誤分類的損失函式,利用梯度下降法對於損...

統計學習方法(二)感知器C語音實現

感知器 perception 是二分類線性分類模型,其輸入為例項的特徵向量,輸出為例項的類別,取 1和 1的二值,感知機對應於輸入空間 特徵空間 中將例項劃分為正負兩類的分離超平面,屬於判別模型,感知機學習旨在求出將訓練資料進行線性劃分的分離超平面,為此匯入基於誤分類的損失函式,利用梯度下降法對於損...