Perceptron Learning Algorithm (PLA)
根據林軒田教授的機器學習基石課程,實作一下這個基礎的機器學習演算法。 我們探討的是監督式學習 (Supervised learning) 大架構下的二元分類 (YES/NO) 問題。
Perceptron ⇔ linear (Binary) Classifiers
我們有一組訓練資料 D,包含數據 Xn 和對應的 Yn (在這裡就是 1, -1);Hypothesis set H 代表全部可能的解 (無限多條線),經過演算法 A,從 H 找到一個可能的 g 與我們的目標函數 f 相近。
這個演算法的主要兩大步驟:找到錯誤的點,進行向量修正。
詳細課程可以參考教授的講解!!其中 naive cycle 是常用的作法。
這方法只適用於 linear separable PLA。
除此以外,當資料中有雜訊也無法使用這個方式,目前在線性問題上較好的解是用 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].....]) 的格式。
NAIVE PLA 實作,畫線則是用 ax + by = 0。
最終結果
Pocket PLA
Pocket PLA 是一個貪婪演算法,把最好的權重握在手上繼續往下算,每次都會比較看有沒有比手上的好。停止方式則是讓它運行一定次數,或是多久沒有變更好等等。這裡暫不詳述。