弄了半天,總算有了小小的了解。記錄一下也分享跟我一樣是新手村的朋友。以我個人而言,搞不懂網路上這些文章到底在幹嘛,主要以下幾個原因:
- SVM原理不懂
- 沒有機器學習的Sense
- 範例太複雜
- 英文有看沒有懂
因此,我使用類神經網路的第一個問題(XOR)來測試SVM。在這之前,先簡單解釋分類演算法不外乎以下幾個步驟:
- 步驟一:資料收集
- 步驟二:資料前處理 (將格式轉換成符合訓練模型的格式)
- 步驟三:訓練模型
- 步驟四:測試模型
- 步驟五:確認模型是否符合需求,若沒有則回步驟三從新訓練
了解這些步驟後,我們就開始試看看啦。如何下載安裝已有很多資料,這裡就不多說了,不清楚的朋友們可參考 [LibSVM] Support Vector Machine (SVM) 實驗。而我選擇認windows command的方式來操作libsvm,我認為這是最簡單也最方便的方法。( windows path = .\libsvm-3.19\windows。 )
接著就開始照上面的步驟來做測試,
- 步驟一:資料收集
- XOR真值表(利用真值表的四個狀態做為資料做為訓練資料):
X1 X2 Output 0 0 0 0 1 1 1 0 1 1 1 0
- 步驟二:資料前處理
資料收集完成後,我們就要將資料轉換成libsvm看得懂得格式。 - libsvm format :
<分類> 0:<屬性> 1:<屬性>... K:<屬性>
- 將真值表轉換成libsvm format(檔案名稱 : xor.txt)0 1:0 2:0
1 1:0 2:1
1 1:1 2:0
0 1:1 2:1
- 調整對應值
svm-scale.exe xor.txt > xor.txt.scale
svm-scale主要目的將資料數值對應至[0,1]或[-1,+1]之間。若打開xor.txt.scale可發現xor.txt轉換成
0 1:-1 2:-1
1 1:-1 2:1
1 1:1 2:-1
0 1:1 2:1 - 步驟三:訓練模型
做完資料前處理之後,就可以開始訓練模型啦!!!!
- 訓練指令svm-train xor.txt.scale
產出:
xor.txt.scale.model
顯示:
*
optimization finished, #iter = 2
nu = 1.000000
obj = -2.504710, rho = 0.000000
nSV = 4, nBSV =4
Toatal nSV = 4 - 步驟四:測試模型
終於來到最後階段。到底由SVM模型準不準呢??
先準備測試檔案。
- xor-test.txt 1 1:-1 2:1
1 1:1 2:-1
0 1:-1 2:-1
0 1:1 2:1
- 測試指令
svm-predict xor-test.txt xor.txt.scale.model xor.res
產出:
xor.res
顯示 :
Accuracy = 100% <4/4> <classification>
Accuracy = 100%,這表示預測結果非常準,以上是我使用SVM預測XOR的結果。
Reference :
[1] LIBSVM -- A Library for Support Vector Machines
[2] 支持向量機器(Support Vector Machine) | 逍遙文工作室
[3] 笨蛋也可以用libsvm。
[4] [LibSVM] Support Vector Machine (SVM) 實驗。
沒有留言:
張貼留言