學習svm時,關於類別選擇問題陷入了乙個誤區,現在把這個過程記錄下來,希望有同樣疑問的童鞋也能注意一下。
如圖1所示,直線方程為x+y-4=0,設直線上方的"o"為正例,直線下方的"+"為負例。當樣本點被超平面正確分類時,滿足yi(w*xi +b) > 0條件,但是這個前提是假設**直線上方的點為正例,下方的點為負例。
現在換一種打標籤的方式,現在我設直線下方的點為正例,上方的點為負例,顯然yi(w*xi +b) < 0(比如說取直線下方的點(0,0),代入直線方程得w*xi+b=0+0-4<0,而此時yi=+1,所以yi(wxi +b) < 0),也就是說,即使我把資料點正確分類了,但是此時滿足的是yi(wxi +b) < 0而不是yi(w*xi +b) > 0。那豈不是說明,如果我這樣打標籤的話,svm理論就不成立了?
答案當然不是,但看似這樣想也沒錯,問題究竟出在哪呢?
這是因為我們先入為主了,想像一下,如果讓你自己解決這個分類問題,你怎麼解決?現在已知的是資料點和它對應的標籤,但你並不知道這條直線方程,好,現在我們的目標當然是求這個直線方程。
(1)假設直線上方資料點是正例,下方的是負例,根據svm演算法,我們求出直線方程是x+y-4=0,此時資料點被正確分類,滿足yi(w*xi +b) > 0。
(2)再假設直線上方資料點是負例,下方的是正例,根據svm演算法,我們求出直線方程是-x-y+4=0,注意,現在的直線方程雖然與x+y-4=0是一樣的,但卻反映了不同的問題,此時資料點被正確分類,滿足yi(w*xi +b) > 0。(讀者可以把正例點(0,0)代入驗證一下。)
最後再舉乙個簡單的例子來闡述一下這個問題:
引用李航老師《統計學習方法》中的例7.1:已知乙個如圖1所示的訓練資料集,其正例點是x1=(3,3)',x2=(4,3)',負例點是x3=(1,1)',('表示轉置)試求最大間隔分離超平面。
解:根據訓練資料集構造約束優化問題:
解得:w1=w2=0.5,b=-2,所以最大間隔分離超平面為:0.5x1+0.5x2-2=0。資料點被正確分類。
現在把題目改動一下,設x1,x2為負例點,x3為正例點,則優化問題變成:
解得:w1=w2=-0.5,b=2,所以最大間隔分離超平面為:-0.5x1-0.5x2+2=0。資料點被正確分類。
也就是說,對於二分類問題,不管選哪一類為正例,哪一類為負例,都不影響分類的正確性,分離超平面也是一樣的。不同的是,乙個超平面為w*x+b=0,另乙個超平面為-w*x-b=0,雖然表示的都是同乙個超平面,但本質是不同的。這個差別保證了超平面一側的點代入w*x+b後的符號與相應的標籤y是一致的。
關於makefile的一點思考
在gnu編譯工具軟體中,如果對單一的原始檔進行編譯,可執行指令如下 gcc o x x.c 此指令會將原始檔編譯為目標檔案。若是對執行緒類檔案進行編譯,則在末尾加上 lpthread指令。但若是對多檔案進行編譯,即若是編譯的目標檔案同時包含另一檔案中的函式。則在編譯的時候需將另一檔案加到編譯原始檔中...
關於指標的一點思考
指標是乙個變數,所不同的是,它存的是位址。因為資料型別決定著如何解釋這個位址 位元組數和操作 因此根據的資料型別的不同,指標又有不同的型別。某個物件 a 的位址範圍為 a,a size n 其中size n是a所佔的位元組數 比如乙個一維陣列int a 10 位址範圍為 a,a 10 sizeof ...
關於演算法的一點思考。。。
關於演算法的一點思考。在實踐過程中,我發現 有時候要解決乙個問題,可以設計幾個演算法分步完成任務,這樣處理起來比較簡單,但是情況並非總是如此,有時,我們需要將幾個步驟放在同乙個演算法內連帶處理,這樣才比較容易處理問題。我還發現,有時候,解決問題的演算法,是被發現出來的,並加以一步一步的檢驗才得以確定...