感知機原理解析與python實現

2021-10-09 02:57:06 字數 2917 閱讀 5785

講完線性回歸本來應該乘熱打鐵講講邏輯回歸的,但是我覺得應該先講講感知機的原理,它不僅可以幫助理解分類和回歸,也能幫助理解邏輯回歸。

感知機就實現了用線性模型來完成分類任務,那麼它是怎麼實現這個功能的?通過乙個sign()函式將線性模型的輸出y進行處理,使得最終的輸出變成[1,-1],1和-1各代表乙個類別,這樣就相當於乙個二分類的模型了

感知機的數學模型也比較簡單,可以表示為如下形式

注:sign()函式也可以理解為神經網路中的啟用函式

我們知道感知機是為了實現分類任務而設計的,那麼它是如何進行二分類任務的?它在特徵空間(特徵向量x的集合)尋找乙個將正負樣本完全正確分離的超平面,超平面的兩側即為分類的兩個類別。下圖直觀的表現了感知機的思想

超平面是指在n維空間中的乙個n-1維平面,例如三維空間的超平面是乙個二維平面,二維空間的超平面是一條直線。為什麼是平面而不是曲面呢?因為在進入啟用函式之前的模型是線性模型。

感知機的模型求解就是找到乙個超平面將兩個類別分離開,那麼我們期望錯誤分類的樣本到超平面的距離之和最小,最好小到為0,那麼就沒有錯誤分類的樣本點了。

錯分樣本點到超平面的距離可以根據數學中點到平面距離公式求得,如下

簡化後的公式如下

根據感知機的數學公式可知,wx+b>0則y=1,wx+b<0則y=-1,那麼y(wx+b)<0即可表示樣本錯分,因此只需通過y(wx+b)的正負就可以判斷樣本是否錯分。我們的目標是期望錯誤分類的樣本到超平面的距離之和最小,損失函式可以設計如下

注:損失函式設計時將距離公式中的

求解模型即需要最小化損失函式l(w,b),這裡主要採用梯度下降法來實現,因為損失函式定義的是只有誤分類樣本才能參與,所以不能使用批量梯度下降法(bgd),只能使用隨機梯度下降法(sgd)。

這裡梯度下降法的實現有兩種形式,不同形式是為了應對不同的情況,下面會詳細介紹

1)原始形式

注:最小化損失函式時,更新梯度本來是w=w-梯度,但是損失函式前有負號,求導後的梯度前也有負號,最終就變成加號了

2)對偶形式

當特徵空間的維度很高(x的維度很高)時,原始形式會帶來很大的計算量,為了減少計算量將原始形式進行改進得到了對偶形式

'''因為是隨機梯度下降,所以是單樣本進行梯度更新

:param data: 樣本 (m,n) m個樣本,每個樣本n維

:param label: 標籤 (m,1) m個樣本的標籤

:param lr: 學習率

:param iter: 迭代次數

:return: w,b

'''m = data.shape[0]

n = data.shape[1]

w = np.zeros((n, 1)) # 權重 (n,1)

b = 0.0 # 偏置bias (1)

for k in range(iter):

for i in range(m):

x = np.array([data[i]]) # (1,n)

y = label[i]

d = -y*(np.dot(x, w) + b)

if d >= 0:

w = w + lr*y*np.transpose(x) # (n,1)

b = b + lr*y

return w, b

def test(data, label, w, b):

m = data.shape[0]

errorcount = 0.0

for i in range(m):

x = data[i]

y = label[i]

result = -y * (np.dot(x, w) + b)

if result >= 0:

errorcount += 1

accuracy = 1 - errorcount/m

return accuracy

if __name__ == '__main__':

#載入訓練集和驗證集

traindata, trainlabel = loaddata('../mnist/mnist_train.csv')

evaldata, evallabel = loaddata('../mnist/mnist_test.csv')

w, b = perceptron(traindata, trainlabel)

accuracy = test(evaldata, evallabel, w, b)

print('accuracy rate is:', accuracy)

利用mnist資料進行訓練(0-4為一類,5-9為另一類),最終測試結果如下圖

Python機器學習多層感知機原理解析

目錄 我們在前面描述了仿射變換,它是乙個帶有偏置項的線性變換。首先,回想下之前下圖中所示的softmax回歸的模型結構。該模型通過單個仿射變換將我們的輸入直接對映到輸出,然後進行softmax操作。如果我們的標籤通過仿射變換後確實與我們的輸入資料相關,那麼這種方法就足夠了。但是,仿射變換中的線性是乙...

感知機原理及python實現

感知機python實現 給定乙個資料集 t yi 輸入空間中任意一點x0 到超平面s的距離為 1 w yi w x0 b 這裡 w 是 w的l2 範數 假 設超平面 s的誤分 點集合為 m,那麼 所有誤分 點到超平 面s的總 距離為 1 w xi myi w xi b 在不考慮 1 w 的情 況下得...

感知機模型簡介與Python實現

感知機是乙個線性二分類模型,該模型是svm和神經網路的基礎。假設輸入空間為x特徵向量,輸出空間為y 從輸入空間到輸出空間函式可以表示為 f x si gn w t b f x sign w t b f x s ign wt b 對於分類錯誤的點 xe ye x e,y e xe y e 有 ye w...