Java ML Java机器学习库(四、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更易使用 , 避免了一些不必要参数的输入 。
【Java ML Java机器学习库(四、SVM分类器)】创建SVM分类器

Java ML Java机器学习库(四、SVM分类器)

文章插图
创建SVM分类器
上面的代码将加载示例iris数据集 。接下来 , 它创建LibSVM的一个实例 , 接下来将使用它训练出一个分类器 。
训练SVM分类器
Java ML Java机器学习库(四、SVM分类器)

文章插图
训练SVM分类器
这里我们对样本进行trainCount=5轮训练 , 训练集与测试集比例为4:1 , 训练输出结果如下
Java ML Java机器学习库(四、SVM分类器)

文章插图
训练结果
由训练输出结果我们可以看出在第4轮与第5轮训练结束精确度与准确率就已经逮到了1 。
分类器的保存与加载
Java-ML提供了一个工具类Serial , 该类提供了将Java可序列化对象保存成文件的方法和文件加载成Java可序列化对象的方法 。
Java ML Java机器学习库(四、SVM分类器)

文章插图
方法1

Java ML Java机器学习库(四、SVM分类器)

文章插图
方法2

Java ML Java机器学习库(四、SVM分类器)

文章插图
Serial使用方法
分类器的预测
Java ML Java机器学习库(四、SVM分类器)

文章插图
分类器的预测




    推荐阅读