講完線性回歸本來應該乘熱打鐵講講邏輯回歸的,但是我覺得應該先講講感知機的原理,它不僅可以幫助理解分類和回歸,也能幫助理解邏輯回歸。
感知機就實現了用線性模型來完成分類任務,那麼它是怎麼實現這個功能的?通過乙個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...