这里简单的介绍一下支持向量机的概念。
支持向量机(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分类器
创建SVM分类器
上面的代码将加载示例iris数据集。接下来,它创建LibSVM的一个实例,接下来将使用它训练出一个分类器。
训练SVM分类器
训练SVM分类器
这里我们对样本进行trainCount=5轮训练,训练集与测试集比例为4:1,训练输出结果如下
训练结果
由训练输出结果我们可以看出在第4轮与第5轮训练结束精确度与准确率就已经逮到了1。
分类器的保存与加载
Java-ML提供了一个工具类Serial,该类提供了将Java可序列化对象保存成文件的方法和文件加载成Java可序列化对象的方法。
方法1
方法2
Serial使用方法
分类器的预测
分类器的预测