1. 程式人生 > >統計學習方法感知機(附簡單模型程式碼)

統計學習方法感知機(附簡單模型程式碼)

1. 感知機模型

輸入為例項的特徵向量, 輸出為例項的類別, 取+1和-1;感知機對應於輸入空間中將例項劃分為正負兩類的分離超平面, 屬於判別模型;匯入基於誤分類的損失函式;利用梯度下降法對損失函式進行極小化;感知機學習演算法具有簡單而易於實現的優點, 分為原始形式和對偶形式;1957年由Rosenblatt提出, 是神經網路與支援向量機的基礎。
定義

假設輸入空間(特徵空間) 是x⊆Rn, 輸出空間是 ={+1,-1}。輸入x∊x表示例項的特徵向量, 對應於輸入空間(特徵空間) 的點; 輸出y∊ 表示例項的類別。 由輸入空間到輸出空間的如下函式:稱為感知機。其中, w和b為感知機模型引數, w∊Rn叫作權值(weight) 或權值向量(weight vector) , b∊R叫作偏置(bias) , w·x表示w和x的內積。 sign是符號函式, 即

感知機幾何解釋:
線性方程:
對應於超平面S, w為法向量, b截距, 分離正、 負類:
分離超平面:


2. 感知機學習策略

如何定義損失函式?
自然選擇: 誤分類點的數目, 但損失函式不是w,b 連續可導, 不宜優化。
另一選擇: 誤分類點到超平面的總距離。
距離:
誤分類點:
誤分類點距離: :
假設超平面S的誤分類點集合為M, 那麼所有誤分類點到超平面S的總距離為:

不考慮 , 就得到感知機學習的損失函式。
給定訓練資料集其中, xi∊x=Rn, yi∊ ={+1,-1}, i=1,2,…,N。 感知機sign(w·x+b)學習的損失函式定義為其中M為誤分類點的集合。 這個損失函式就是感知機學習的經驗風險函式。


3. 感知機學習演算法
 

求解最優化問題:

隨機梯度下降法,
首先任意選擇一個超平面, w, b, 然後不斷極小化目標函式,損失函式L的梯度:


選取誤分:

感知機學習演算法的原始形式
輸入: 訓練資料集T={(x1, y1),(x2,y2),…,(xN,yN)}, 其中xi∊x=Rn, yi∊ ={-1,+1}, i=1,2,…,N; 學習率 (0< ≤1);
輸出: w,b; 感知機模型f(x)=sign(w·x+b)。
(1) 選取初值w0,b0
(2) 在訓練集中選取資料(xi, yi)
(3) 如果yi(w·xi+b)≤0:
(4) 轉至(2) , 直至訓練集中沒有誤分類點。

這個可以說是最簡單的感知機演算法了,下面是用隨機梯度下降實現的程式碼:

# 資料線性可分,二分類資料
# 此處為一元一次線性方程
class Model:
    def __init__(self):
        self.w = np.ones(len(data[0])-1, dtype=np.float32)
        self.b = 0
        self.l_rate = 0.1
        # self.data = data
    
    def sign(self, x, w, b):
        y = np.dot(x, w) + b
        return y
    
    # 隨機梯度下降法
    def fit(self, X_train, y_train):
        is_wrong = False
        while not is_wrong:
            wrong_count = 0
            for d in range(len(X_train)):
                X = X_train[d]
                y = y_train[d]
                if y * self.sign(X, self.w, self.b) <= 0:
                    self.w = self.w + self.l_rate*np.dot(y, X)
                    self.b = self.b + self.l_rate*y
                    wrong_count += 1
            if wrong_count == 0:
                is_wrong = True
        return 'Perceptron Model!'

其中data是你資料,是不是很簡單。

感知機學習演算法的對偶形式
輸入: 線性可分的資料集T={(x1, y1),(x2, y2),…,(xN,yN)}, 其中xi∊Rn, yi∊{-1,+1}, i=1,2,…,N; 學習率 (0< ≤1);
輸出: a,b; 感知機模型
其中a=(a1,a2,…,aN)T 。
(1) a←0, b←0
(2) 在訓練集中選取資料(xi, yi)
(3) 如果
(4) 轉至(2) 直到沒有誤分類資料。
對偶形式中訓練例項僅以內積的形式出現。 為了方便, 可以預先將訓練集中例項間的內積計算出來並以矩陣的形式儲存, 這個矩陣就是所謂的Gram矩陣(Gram matrix)。目前這個程式碼還沒看懂。

以上內容均出自李航老師的《統計學習方法》。