機器學習——Perceptron(感知機)


Introduce

感知機模型(Perceptron)是一個最簡單的有監督的二分類線性模型。他可以從兩個方面進行介紹

方面一 問題分析

問題(一維):兒童免票乘車問題(孩子身高低於1.2m可以免票上車)

這轉換成數學表達式就是 $x:$身高,$y:\{-1:$免票 ,$1:$購票$\}$

$$ y=\left\{\begin{matrix}+1,x\ge1.2m \\ -1,x\lt1.2m\end{matrix}\right. $$

如果把$y$用函數$f(x;b)$表達出來就如下所示

$$ y=f(x;b)=\left\{\begin{matrix}+1,z=x+b\ge0 \\ -1,z=x+b \lt0 \end{matrix}\right. $$

 

用機器學習的話來說變量$x$就是一個特征,$y$就是一個標記,$b$就是一個偏置

問題(二維):西瓜分類(依靠西瓜的顏色和敲擊的響聲分類)

這里的$x$就從一個一維特征編程了二維的特稱向量$\{x_1:$顏色 ,$x_2:$響聲$\}$ $y$仍然是一個標記 $y:\{-1:$壞瓜 ,$1:$好瓜$\}$ 數據如圖所示:

 

用一般的數學方法,我們希望將兩個變量$x_1,x_2$映射到一個維度上去 就會出現如下三種經典的情況

映射到水平方向

 

映射到豎直方向

 

映射到任意方向

二維向量映射到一維空間需要有映射的方向。此時就需要一定的方向向量$\mathbb{w}=(w_1 \ w_2)^T$ 此時,如果把$y$用函數$f(\mathbb{x};\mathbb{w},b)$來表示

$$ y=f(\mathbb{x};\mathbb{w},b)=\left\{\begin{matrix}+1,\mathbb{w}^T\mathbb{x}+b\ge0 \\ -1,\mathbb{w}^T\mathbb{x}+b\lt0 \end{matrix}\right. $$

綜上所述,可以類推到n維。只要將$\mathbb{x},\mathbb{w}升維就可以了$

方面二 模型發展

1943年,McCulloch和Pits結合神經元模型Neuron提出來經典的抽象的M-P神經元模型

神經元的生物學結構

M-P神經元模型 

而感知機模型是從神經元模型發展過來的。感知機是由兩層神經元組成的一個簡單模型。只有輸出層是M-P 神經元,即只有輸出層神經元進行激活函數處理,也稱為功能神經元( functional neuron);輸入層只是接受外界信號(樣本屬性)並傳遞給輸出層(輸入層的神經元個數等於樣本的屬性數目),而沒有激活函數。示意圖如下:

 

Definition

假設輸入空間(特征空間)是$\mathcal{X} \subset \mathbb{R}^n$,輸出空間是$\mathcal{Y}=\{-1,+1\}$。輸入$x\in \mathcal{X}$表示實例的特征向量,對應於輸入空間(特征空間)的點;輸出$y\in \mathcal{Y}$表示類別。由輸入空間到輸出空間的如下函數: $$ f(x)=sign(w \cdot x+b) $$ 成為感知機。其中,$w,b$成為感知機模型的參數,$w \in \mathbb{R}^n$叫做權值(weight)或權值向量(weight vector),$b \in \mathbb{R}$叫做偏置(bias),$w \cdot x$表示兩者的內積。$sign$是符號函數,即 $$ sign(a)=\left\{\begin{matrix}+1,a\ge0\\-1,a\lt0\end{matrix}\right. $$ 感知機是一種線性分類器,屬於判別模型。感知機模型的假設空間是定義在特征空間中的所有線性分類模型(linear classification model)或線性分類器(linear classifier),即函數模型$\{f\,|\,f(x)=w \cdot x +b \}$

Loss Function

感知機學習的策略就是最小化損失函數。對於感知機來說損失函數有兩種方式。

1. 統計誤分類點: $$ l(w)=\sum_{i=1}^N \ \mathbb{I}(y_i \cdot (w^Tx +b ) < 0) $$  但是指示函數不連續,在計算過程中不太友好

2. 統計誤分類點到分來超平面的距離: $$ \begin{align}l(w) &=|w^Tx +b |\\ &=\sum_{i=1}^N - \,y_i \cdot (w^Tx +b )\end{align} $$

Algorithm

為了找到更好的$w,b$。使用隨機梯度下降SGD(Stochastic Gradient Descend), 但是該方法容易受特征縮放、學習率因素影響陷入局部最小值。 $$ w_{n+1} \leftarrow w_n +\eta \frac{\partial l}{\partial w}\\ b_{n+1} \leftarrow b_n +\eta \frac{\partial l}{\partial b} $$

對該算法的超參數:學習率$\eta$,誤差上限$\varepsilon$,學習次數$epoch$

收斂性

設訓練數據集$T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}$是線性可分的,其中$x_i\in \mathcal{X}=\mathbb{R}^n,\ y_i\in\mathcal{Y}=\{+1,-1\},\ i=1,2,\cdots,N$則:

  • 存在滿足條件$||\hat{w}_{opt}||=1$的超平面$\hat{w}_{opt} \cdot \hat{x}=w_{opt}\cdot x +b_{opt}=0$將訓練數據集完全正確分開;且存在$\gamma>0$,對所有$i=1,2,\cdots,N$: $$ y_i (\hat{w}_{opt} \cdot \hat{x})=y_i(w_{opt}\cdot x +b_{opt})\geq \gamma $$
  • 令$R=max_{1 \leq i \leq N} ||\hat{x}_i||$,則感知機算法在訓練數據集上的誤分類次數$k$滿足不等式: $$ k \leq (\frac{R}{\gamma})^2 $$

Disadvantage

1. 存在多解
2. 依賴初值,也依賴選擇順序
3. 當數據集線性不可分就會產生迭代震盪。例如XOR異或問題

針對感知機算法的缺點,提出SVM解決多解問題,Pocket Algorithm使感知機容忍一些錯誤。

Python代碼實現

import numpy as np

data1 = [[1,2],[3,3],[2,1],[5,2]]
lable1 = [1,1,-1,-1]

data2 = [[3,3],[4,3],[1,1]]
lable2 = [1,1,-1]


class Model:
    def __init__(self,data):
        self.w = np.zeros(np.shape(data)[1])  # 權重參數
        self.b = 0  # 偏置
        self.l_rate = 1  # 學習率

    def sign(self, x, w, b):
        y = np.dot(x, w) + b
        return y

    # 隨機梯度下降法
    def fit(self, data, lable):
        is_wrong = False
        while not is_wrong:
            wrong_count = 0
            for d in range(len(data)):
                X = data[d]
                y = lable[d]
                judge = y * self.sign(X, self.w, self.b)
                if judge <= 0:
                    self.w = self.w + self.l_rate * np.dot(y, X)
                    self.b = self.b + self.l_rate * y
                    if judge == 0:
                        print('未分類=', d + 1, ' ', data[d])
                    else:
                        print('誤分類=', d + 1, ' ', data[d])
                    print('w = ',self.w,'b= ',self.b)
                    wrong_count += 1
            if wrong_count == 0:
                is_wrong = True

perception1 = Model(data1)
perception1.fit(data1,lable1)

參考

李航 統計學習方法

周志華 機器學習(西瓜書)

shuhuai008 機器學習白板推導


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM