李航統計學習方法 感知機的實現

2021-09-26 14:33:57 字數 2890 閱讀 9456

感知機

假設輸入空間是χ⊆rn,輸出空間是γ=(+1,−1)。輸入χ∈x表示例項的特徵向量,對應於輸入空間的點;輸出y∈γ表示例項的類別。由輸入空間到輸出空間的如下函式:

f(x)=sign(wx+b)

稱為感知機。其中,w和b為感知機模型的引數,sign是符號函式,即:

sign好像很簡單,當x大於等於0,sign輸出1,否則輸出-1。那麼往前遞迴一下,wx+b如果大於等於0,f(x)就等於1,反之f(x)等於-1。我們再回頭看一下感知機的函式f(x),簡而言之,就是我們要找到那條線,wx+b,能夠完美的將我們的資料集劃分出來。

得出結論:

如果一條直線能夠不分錯乙個點,那就是一條好的直線

進一步來說:

如果我們把所有分錯的點和直線的距離求和,讓這段求和的舉例最小(最好是0,這樣就表示沒有分錯的點了),這條直線就是我們要找的。

感知機的學習策略

就是說,我們要找到一條直線,就算這條直線不能將資料集完美切分,那麼也要使錯誤分類的點到這條線上的距離之後最小,因此我們就要求每個點到線上的距離。

其實,我們對誤分的點可以這樣理解,例如實際應該屬於線的右側,y>0,但實際上**出來是在左側(wx+b<0),那就是分錯了,結果是負,這時候再加個符號,結果就是正了,再除以w的模長,就是單個誤分類的點到超平面的舉例。舉例總和就是所有誤分類的點相加。

感知機的原始形式

感知機的對偶形式

具體演算法實現:

import numpy as np

def perceptron(dataset,eta):

# 獲取到訓練集的資料

datamat = dataset[:, 0:2]

# 獲取標籤資料

labelmat = dataset[:, -1]

# 獲取訓練資料集的shape

m,n=datamat.shape

# 初始化權重為0,樣本長度保持一致

w=np.zeros(n)

# 初始化步長為0

b=0flag=true

while flag:

for i in range(m):

# 獲取當前樣本的向量,當前樣本所對應的標籤,以及判斷是否是誤分標籤

# 如果是誤分標籤,就進行梯度下降,更新w和b

if np.any(labelmat[i] * (np.dot(w, datamat[i]) + b) <= 0):

w = w + eta * labelmat[i] * datamat[i].t

b = b + eta * labelmat[i]

print("weight, bias: ", end="")

print(w, end=" ")

print(b)

flag = true

break

else:

flag = false

return w,b

def perceptron_dual(dataset,eta):

# 獲取到訓練集的資料

datamat = dataset[:, 0:2]

# 獲取標籤資料

labelmat = dataset[:, -1].reshape((-1,1))

# 獲取訓練資料集的shape

m, n = datamat.shape

w=np.zeros((m,1))

b=0flag = true

while flag:

for i in range(m):

if (labelmat[i, 0] * (np.sum((w * labelmat * np.dot(datamat, datamat[i].t).reshape((m, 1)))) + b)) <= 0:

w[i] = w[i] + eta

b = b + eta * labelmat[i]

flag = true

break

else:

flag = false

w = np.dot(datamat.t, w * labelmat)

return w, b

if __name__ == '__main__':

# 定義樣本資料集,與課本p29上的例題資料一樣

dataset = np.array([[3, 3, 1], [4, 3, 1], [1, 1, -1]])

w, b = perceptron_dual(dataset,1)

print(w,b)

李航《統計學習方法》 感知機

這一章就講了感知機。我覺得是深受工業革命的影響,把一些可以實現功能的基本單元都喜歡叫做什麼機,這裡的感知機,還有後來的以感知機為基礎的支援向量機。直接看定義,看本質,實際上,感知機是一種線性分類模型。下面就以這句話為中心仔細闡述一下。什麼叫線性。線性liner,正如其名,兩個變數的關係的函式是一條直...

(李航統計學習方法)感知機Python實現

機器學習的三要素 模型,策略,演算法 模型 感知機是二分類線性分類模型,屬於判別模型。策略 基於誤分類點到超平面的總距離。學習演算法 略 感知機存在的問題 存在多解,解依賴於初始超平面的選擇以及迭代過程中誤分類點的選擇。訓練集線性不可分,演算法無法收斂,解決方法 pocket演算法或者使用核函式。無...

李航 統計學習方法 筆記 2 感知機學習演算法

感知機是二類分類的線性分類模型,屬於判別模型,輸入例項特徵向量,輸出例項的類別,取 1和 1。是神經網路與支援向量機的基礎。f x sign w.x b 幾何解釋 線性方程 w.x b 0 對應特徵空間的乙個超平面s,位於超平面兩側的點被分為正類或負類,s稱為分離超平面。假設資料集是線性可分的,即存...