這里簡單的介紹一下支持向量機的概念。
支持向量機(Support Vector machine, SVM)是一類按監(jiān)督學習(supervised learning)方式對數(shù)據(jù)進行二元分類的廣義線性分類器(generalized linear classifier),其決策邊界是對學習樣本求解的最大邊距超平面(maximum-margin hyperplane)。
SVM使用鉸鏈損失函數(shù)(hinge loss)計算經(jīng)驗風險(empirical risk)并在求解系統(tǒng)中加入了正則化項以優(yōu)化結(jié)構(gòu)風險(structural risk),是一個具有稀疏性和穩(wěn)健性的分類器。SVM可以通過核方法(kernel method)進行非線性分類,是常見的核學習(kernel learning)方法之一。
SVM被提出于1964年,在二十世紀90年代后得到快速發(fā)展并衍生出一系列改進和擴展算法,在人像識別、文本分類等模式識別(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年開發(fā)的一套支持向量機的庫,這套庫運算速度還是挺快的,可以很方便的對數(shù)據(jù)做分類或回歸。由于LibSVM程序小,運用靈活,輸入?yún)?shù)少,并且是開源的,易于擴展,因此成為目前國內(nèi)應用最多的SVM的庫。
經(jīng)過Java-ML項目使得LibSVM更易使用,避免了一些不必要參數(shù)的輸入。
創(chuàng)建SVM分類器
創(chuàng)建SVM分類器
上面的代碼將加載示例iris數(shù)據(jù)集。接下來,它創(chuàng)建LibSVM的一個實例,接下來將使用它訓練出一個分類器。
訓練SVM分類器
訓練SVM分類器
這里我們對樣本進行trainCount=5輪訓練,訓練集與測試集比例為4:1,訓練輸出結(jié)果如下
訓練結(jié)果
由訓練輸出結(jié)果我們可以看出在第4輪與第5輪訓練結(jié)束精確度與準確率就已經(jīng)逮到了1。
分類器的保存與加載
Java-ML提供了一個工具類Serial,該類提供了將Java可序列化對象保存成文件的方法和文件加載成Java可序列化對象的方法。
方法1
方法2
Serial使用方法
分類器的預測
分類器的預測