Perceptron Learning Algorithm (PLA)

根據林軒田教授的機器學習基石課程,實作一下這個基礎的機器學習演算法。 我們探討的是監督式學習 (Supervised learning) 大架構下的二元分類 (YES/NO) 問題。

Perceptron ⇔ linear (Binary) Classifiers

EP_PLA1

我們有一組訓練資料 D,包含數據 Xn 和對應的 Yn (在這裡就是 1, -1);Hypothesis set H 代表全部可能的解 (無限多條線),經過演算法 A,從 H 找到一個可能的 g 與我們的目標函數 f 相近。

EP_PLA2

這個演算法的主要兩大步驟:找到錯誤的點,進行向量修正。 詳細課程可以參考教授的講解!!其中 naive cycle 是常用的作法。

這方法只適用於 linear separable PLA

EP_PLA3

除此以外,當資料中有雜訊也無法使用這個方式,目前在線性問題上較好的解是用 Pocket PLA

Linear separable PLA

首先整理一下資料。把原始格式如 ['x0\ty0\tz0\nx1\ty1\tz1\nx2\ty2\tz2\n....'] 轉換為 array([[(x0, y0), z0], [(x1, y1), z1], [(x2, y2), z2].....]) 的格式。

EP_PLA4

NAIVE PLA 實作,畫線則是用 ax + by = 0

EP_PLA5

最終結果

EP_PLA6

Pocket PLA

Pocket PLA 是一個貪婪演算法,把最好的權重握在手上繼續往下算,每次都會比較看有沒有比手上的好。停止方式則是讓它運行一定次數,或是多久沒有變更好等等。這裡暫不詳述。

My GitHub