2014年11月16日 星期日

[Algorithm] 如何使用Java 撰寫 libsvm,以XOR為例

  上一篇介紹如何使用 libsvm,以XOR為例,而這篇要介紹如何使用java撰寫libsvm(以下稱之jlibsvm),一樣使用XOR做為例子。

  jlibsvm的概念與上篇使用windows command的相同,只要想辦法把那五大驟轉換成程式碼即可。那我們就按照這五大步驟介紹,以下只針對重要介紹,完整程式請參考LibSVM
  • 步驟一:資料收集 
  • 步驟二:資料前處理 (將格式轉換成符合訓練模型的格式)
    目標將以下格式轉換成程式碼,

    0  1:-1  2:-1
    1  1:-1  2:1
    1  1:1  2:-1
    0  1:1  2:1

    用來記錄這個的類別為,
    svm_problem {
        int l; //訓練資料筆數,以此例子長度為4
        double[] y; //輸出
        svm_node[][] x; // 輸入
    }

    使用方式如下,
    l = 4
    y -> 0 1 1 0 
    x -> [ ] -> (1,-1) (2,-1)
         [ ] -> (1,-1) (2, 1)
         [ ] -> (1, 1) (2,-1)
         [ ] -> (1, 1) (2, 1)
    

  • 步驟三:訓練模型
    訓練模型並接模型儲存起來。

    // 訓練模型
    svm_model model = svm.svm_train(svmProb, svmParm);
    // 儲存SVM參數
    svm.svm_save_model(filepath, model);

  • 步驟四:測試模型
    //載入SVM參數
    svm_model model = svm.svm_load_model(filepath);
    //輸入Input
    svm_node[] x = svmProb.x[i];
    //輸出Output
    v = svm.svm_predict(model, x);

Reference
[1]碼上會!Java+libSVM分析動態資料(144行)
[2]LibSVM

沒有留言:

張貼留言