logo
Loading...

林軒田 機器學習基石作業的PLA與PLA Pocket - Cupoy

https://github.com/Gaprs/Machine-Learning-Foundati...

林軒田 機器學習基石作業的PLA與PLA Pocket

2020/03/14 10:14 AM
機器學習新手論壇
Gaprs
觀看數:0
回答數:2
收藏數:1

https://github.com/Gaprs/Machine-Learning-Foundations/blob/master/PLA_Pocket.py


嗨~想請教關於PLA與PLA pocket的一些問題,附上我的程式碼

對於演算法的部分我沒有問題,只是在實現的時候遇到了一些困難以及在debug的時候有一些問題想問,如果有人有做過該題目是否能夠幫助我解惑呢?

[問題有點長,不好意思><]


1. 為什麼必須將X的資料集中第一行均設為1才能將PLA執行正確?

例如原本給的X資料可能是 X = [ [2,3,4,5],

                                                      [5,6,7,8],

                                                      [3,4,5,6] ]

但必須將每個資料前面設為1,X = [ [1,2,3,4,5],

                                                             [1,5,6,7,8],

                                                             [1,3,4,5,6] ]


2. 我的答案在PLA的部分都有正確跑出0.4的答案,但我不確定這個答案是否是正確的,畢竟題目的選項是0.3-0.5之間?


3. 在PLA pocket的部分我在debug很多天之後跑出自己最佳的解答0.23但正確答案是<0.2...我始終跑不出這麼精確的數字,想請問我的程式是否在哪個環節出錯了呢?


4. 在PLA 更新W的部分,我如果再遇到wx != y的資料時就立刻更新w,跟我如果跑完全部的X,發現有錯才更新的話,似乎結果會完全不同?但根據PLA演算法的想法是有錯才修正,所以似乎是只要遇到wx != y就直接更新W(t+1) = W(t) +XY,而且對於準確性來說應該也是直接更新才會比較精確?

5. 在PLA pocket更新W的部分,大概問題同(4)差不多,都是在更新w遇到的困惑,

我目前的做法是有兩個W分別是w, w_test,當每次遇到錯誤就去更新w_test,檢查完全部的X資料集後,再去比較目前最佳w與w_test對於X資料集的錯誤次數,若w_test表現比較好就取代目前最佳的w。

但在更新w_test的過程中,我發現:

(1)在檢查完全部的X資料集,若遇到有錯就立刻更新並且break迴圈去與目前最佳w比較錯誤次數若是表現比較好就取代,若不是則反之。

(2)在檢查完全部的X資料集,每次遇到錯誤就更新一次w_test,檢查完後再用最後的w_test去跟目前最佳w比較錯誤次數若是表現比較好就取代,若不是則反之。

跑出來的答案就會不一樣,我比較直觀的想法是,能夠更新越多次,對於模型來說就能取得更好的結果,因此我最後選擇(2)的方式,只是我最後跑出來的結果還是跟該題目的解答不一樣...

6.請問執行PLA跟PLA pocket是否都需要花費較長時間呢? 我知道取決於repeat跟train的次數,train的次數越高會得到一個較好的模型,repeat的次數較多次會得到一個較客觀的結果,畢竟每次都是隨機打亂資料集在去更新w,若是以這個題目來說的話,是否有用更少迴圈就能將PLA跑完的方式呢,我的意思是說...以我的程式碼來說的話,是否還有能讓執行速度更快的方式呢?

像我跑repeat 2000次 trian model 50次就花了兩三個小時,所以我想說是不是我的coding太差所以才會跑這麼久...


謝謝撥冗看完的各位><