感知機
一、感知機模型
定義(感知機):假設輸入空間(特征空間)是 \(\chi \subseteq\R^n\) ,輸出空間是 \(Y=\{+1,-1\}\) .輸入\(x\in\chi\) 表示實例的特征向量,對應於輸入空間(特征空間)的點;輸出\(y\in Y\)表示實例的類別,由輸入空間到輸出空間的的如下函數:
稱為感知機。其中$ w 和 b$ 稱為感知機模型參數,$ w \(稱為權值向量(weight vectoer),\)b\(稱為偏置(bias).\)w \cdotx\(為\)w\(和\)x\(的內積。\)sign$是符號函數,形式如下:
感知機是一種線性分類模型,屬於判別模型。其幾何意義就是在一組訓練數據組成的集合中,通過\(w\),\(b\)所確定的超平面將訓練數據分為兩類。\(w\)即為超平面的法向量,\(b\)為超平面的截距.尋找最優的\(w\)和\(b\)的過程就是感知機模型的訓練。
二、感知機的學習策略
2.1 數據的線性可分性
定義(數據集的線性可分性) 給定一個數據集:
其中,\(x_{i} \in \chi = R^n\) ,\(y_{i} \in Y={+1,-1},i = 1,2,...,N\),如果存在某個超平面\(w\bullet x+b=0\)能夠將所有的數據點正確分類,則稱給定的數據集是線性可分的。
2.2 感知機的學習策略
我們首先定義感知機算法常用的損失函數:誤分類的點到超平面\(S\)的距離之和
對於誤分類的點可知感知機得到的結果於真實的結果符號相反,
則(1)式可更改為:
又因為\(w和b\)的值同時增大和減少對超平面沒有任何影響,為了計算方方便我們把(2)式的分母去掉得到感知機模型的最終表達式:
M為所有誤分類點的集合。
2.3 感知機的學習算法
感知機的學習算法是誤分類點驅動的,通過給定的訓練集,利用隨機梯度下降(stochastic gradient) 進行模型參數的更新,優化整個感知機模型。
2.3.1 感知機算法的原始形式
算法1 (感知機算法的原始形式)
輸入:訓練集 T,學習率 \(\eta\)\(\in (0,1)\)輸出:\(w,b\);
(1) 選取初值\(w_{0},b_{0}\)
(2)在訓練集中選取\((x_{i},y_{i})\)
(3)如果\(y_{i}(w \cdot x_{i} + b)\le 0\),
\[w\leftarrow w+\eta y_{i} x_{i} \\b\leftarrow w+\eta y_{i} \](4)轉至(2),直到訓練集中沒有誤分類點。
下面我們通過代碼構建一個簡單的例子來實現感知機算法。
手動構建數據集:
import numpy as np
import matplotlib.pyplot as plt
n = 1000
X = np.random.randn(2, n) * 10
# Q = 2.5 * X[0] + 2 * X[1] + 2
X[1] = (2 - 2.5 * X[0]) / 2
pr = np.random.uniform(-5, 5, (1, n)) * 10
pr[pr > 0] = pr[pr > 0] + np.random.uniform(2, 5);
pr[pr < 0] = pr[pr < 0] - np.random.uniform(2, 5);
X = X - pr
Y = np.array(pr > 0, dtype=np.int)
plt.scatter(x=X[0][Y[0] > 0], y=X[1][Y[0] > 0], color='r')
plt.scatter(x=X[0][Y[0] <= 0], y=X[1][Y[0] <= 0], color='b')
構建的數據集如下圖所示:
使用感知機算法,計算將數據點正確分割:
lr = 0.05
w0 = np.random.randn()
w1 = np.random.randn()
b = 0
for i in range(n):
if Y[0][i] * (w0 * X[0][i] + w1 * X[1][i] + 2) <= 0:
w0 = w0 + lr * Y[0][i] * X[0][i]
w1 = w1 + lr * Y[0][i] * X[1][i]
b = b + lr * Y[0][i]
i = 0
print("W:[%f,%f]" % (w0, w1))
print("b:[%f]" % b)
X_ = (b - w0 * X[0]) / w1
plt.plot(X[0],X_,color='y')
plt.show()
最后得到的答案如下:
2.3.1 算法的收斂性
我們將\(w,x\)進行擴充$\hat{x} = (x^T,1)^T $ ,\(\hat{w}=(w^T,b)^T\) .下面對Novikoff定理進行證明。
定理(Novikoff) 設訓練數據集\(T=\{(x_{1},y_{1}),(x_{2},y_{2}),...,(x_{3},y_{3}\}\) 是線性可分的,其中\(x_{i} \in \chi = R^n,y_{i}\in Y = \{+1,-1\}\) 則:
(1) 存在滿足條件\(|| \hat{w}_{opt} ||=1\) 的超平面 \(\hat{w}_{opt} \cdot \hat{x}\) 將訓練數據集完全正確分開,且存在 \(\gamma\) >0,對所有的\(i=1,2...,N\)
(2) 令\(R=\max_{1\le i\le N}||\hat{x_i}||\) 則感知機算法在訓練集上的誤分類次數k滿足不等式:
證明:
(1) 第(1)部分很好理解,因為訓練數據集是線性可分的,所以存在\(\hat{w}\)使得\(y_{i}(\hat{w_{opt}\cdot x_i})\gt0\) 所以存在\(\gamma=\min\{y_i(\hat{w_{opt}}\cdot x_i)\}\) 使得\(y_{i}(\hat{w_{opt}}\cdot \hat{x_i}) \ge \gamma\).並且令\(||\hat{w}_{opt}||=1\)(\(\hat{w}_{opt}\)內所有參數的整體變化對模型不影響)
(2) 令\(\hat{w_{k-1}}\)是前\(k-1\)個誤分類實例的擴充權重向量,若\((x_i,y_i)\)是被\(\hat{w_{k-1}}\) 誤分類的數據,則\(w,b\)的更新是:
或者說是: \(\hat{w_k}=\hat{w_{k-1}} + \eta y_i\hat{x_i} \tag{3}\)
由(3)得:
(4)式子不斷遞推下去可以得到:
結合(5)(6)可得:
所以 \(k\le(\frac{R}{\gamma})^2\)
上式表明錯誤分類的次數是由上界的,即總會存在一次更新得到的感知器模型使得所有的訓練數據都能正確分類。
三、參考資料
統計學習方法(第二版) 李航著