Java機器學習庫(Java ML)(四、SVM分類器)

支持向量機

這裡簡單的介紹一下支持向量機的概念。

支持向量機(Support Vector Machine, SVM)是一類按監督學習(supervised learning)方式對數據進行二元分類的廣義線性分類器(generalized linear classifier),其決策邊界是對學習樣本求解的最大邊距超平面(maximum-margin hyperplane)。

SVM使用鉸鏈損失函數(hinge loss)計算經驗風險(empirical risk)並在求解系統中加入了正則化項以優化結構風險(structural risk),是一個具有稀疏性和穩健性的分類器。SVM可以通過核方法(kernel method)進行非線性分類,是常見的核學習(kernel learning)方法之一。

SVM被提出於1964年,在二十世紀90年代後得到快速發展並衍生出一系列改進和擴展算法,在人像識別、文本分類等模式識別(pattern recognition)問題中有得到應用。

分類器常用術語

* True Positive (TP): "真正"指被model預測為正的正樣本,即判斷為真的正確率

* True Negative(TN): "真負" 指被model預測為負的負樣本,即判斷為假的正確率

* False Positive(FP): "假正" 指被模型預測為正的負樣本,即誤報率

* False Negative(FN): "假負" 指被模型預測為負的正樣本,即漏報率

* 精準度(precision): P = TP/(TP+FP) 指被分類器判定正例中的正樣本的比重

* 召回率(Recall): R=TP/(TP+FN) = 1- FN/T 指的是被預測為正例的佔總的正例的比重

* 準確率(Accuracy): A = TP/(TP+FN)=(TP+TN)/(TP+FN+FP+TN) 分類器的準確度,能將正的判定為正,負的判定為負。

LIBSVM

Java-ML中封裝了java開源支持向量機的庫。LibSVM是臺灣林智仁(Chih-Jen Lin)教授2001年開發的一套支持向量機的庫,這套庫運算速度還是挺快的,可以很方便的對數據做分類或迴歸。由於LibSVM程序小,運用靈活,輸入參數少,並且是開源的,易於擴展,因此成為目前國內應用最多的SVM的庫。

經過Java-ML項目使得LibSVM更易使用,避免了一些不必要參數的輸入。

創建SVM分類器

Java機器學習庫(Java ML)(四、SVM分類器)

創建SVM分類器

上面的代碼將加載示例iris數據集。接下來,它創建LibSVM的一個實例,接下來將使用它訓練出一個分類器。

訓練SVM分類器

Java機器學習庫(Java ML)(四、SVM分類器)

訓練SVM分類器

這裡我們對樣本進行trainCount=5輪訓練,訓練集與測試集比例為4:1,訓練輸出結果如下

Java機器學習庫(Java ML)(四、SVM分類器)

訓練結果

由訓練輸出結果我們可以看出在第4輪與第5輪訓練結束精確度與準確率就已經逮到了1。

分類器的保存與加載

Java-ML提供了一個工具類Serial,該類提供了將Java可序列化對象保存成文件的方法和文件加載成Java可序列化對象的方法。

Java機器學習庫(Java ML)(四、SVM分類器)

方法1

Java機器學習庫(Java ML)(四、SVM分類器)

方法2

Java機器學習庫(Java ML)(四、SVM分類器)

Serial使用方法

分類器的預測

Java機器學習庫(Java ML)(四、SVM分類器)

分類器的預測

Java機器學習庫(Java ML)(四、SVM分類器)

預測結果


分享到:


相關文章: