-
使用具有特定參數m和b的線性方程式 y = mx + b 來生成30個2D數據樣本。將右側的15個數據樣本標記為正,左側的15個數據樣本標記為負。並且沒有樣本在線上。
-
用您自己的初始w實現Perceptron Learning Algorithm。 討論PLA是否停止或它暫停了多少次迭代。生成三次數據樣本併計算平均值PLA暫停時的迭代次數。
-
在問題1中,生成1000個正樣本和1000個負樣本。 利用Pocket Algorithm,並將執行時間與同一數據集上的PLA進行比較。
-
作業系統: Windows 10
-
Requirments
python==3.6.5 numpy==1.14.3 matplotlib==2.2.2
- 在作業資料夾中打開命令提示字元
- 輸入以下指令即可執行
python hw1.py
-
自訂初始 w([1,1]),實作PLA,並重複三次計算每次執行PLA的迭代次數以及三次平均次數
-
生成1000個正樣本和1000個負樣本。 自訂初始 w([1,1]),實作Pocket Algorithm,並將執行時間與同一數據集上的PLA進行比較。
-
用在可以完全二分的問題中,經由不斷的修正錯誤,求得一個完美的分類器。
-
如何判斷錯誤?
- 將${w_t}$ 與
${x_{n(t)}}$ 做內積,看是不是我們要的正負號。$$sign({w_t^T}{x_{n(t)}}) \neq {y_{n(t)}}$$
- 將${w_t}$ 與
-
如何修正錯誤?
-
根據正負耗去調整w,如果是正的,那就把w轉的靠近x一點,如果是負的,就把w轉的遠離x一點。
$${w_{t+1}}\space\leftarrow\space{w_t}+{y_{n(t)}}{x_{n(t)}}$$
-
-
不斷重複上述兩步驟直到沒有錯誤
- 為PLA的變形,目的是找出一個相對好的分類器
- 在每次進行修正的時候都把新的${w_t}$跟舊的${w}$做比較,如果${w_t}$的誤差值較小,則更新目前口袋中的${w}$值,經過不斷的迭代,${w}$中的值必定可以找到當下最好的分類器
-
為什麼PLA有時候會無法停止?
- 因為資料樣本不是線性可分
-
為什麼使用Pocket Algorithm的時候,會出現沒被準確分類的樣本?
- 因為Pocket Algorithm的目的是找出相對好的w,為了避免遇到不是線性可分的資料,有限制迭代的上限次數,所以有時候會出現沒被準確分類的樣本。
-
為什麼Pocket Algorithm常常比PLA慢?
- 因為Pocket Algorithm每次調整w時,都會重新計算一次w的正確率,所以通常會比較久