本文不会介绍SVM的基本原理,如果想了解SVM基本原理,请参阅相关书籍。

1. 二分类

Smile 库的SVM类是一个泛型类型,默认情况下进行二分类,选择参数为核函数类型和惩罚项参数。

import smile.classification.SVM;
import smile.math.kernel.GaussianKernel;double gamma = 1.0;double C = 1.0;//通过某种方式获取训练数据及其类标double[][] data = ...int[] label = ...SVM<double[]> svm = new SVM<double[]>(new GaussianKernel(gamma), C);svm.learn(data, label); //训练模型svm.finish();

接下来就可以对未知数据进行分类:

  //获取测试数据double[][] testData = ...int[] result = new int[testData.length];for(int i=0; i < testData.length; i++){result[i] = svm.predict(testData[i]);}

2. 多分类

接下来是我利用SVM对iris数据集进行分类的程序。首先我们将iris数据保存iris.txt文件,如下结构:

5.1 3.5 1.4 0.2 0
4.9 3   1.4 0.2 0
...

每一行代表一个测试数据项,前4列是属性向量,最后一列是类标(在Smile中类标不能为负数,并且只能是从0开始的正整数,所以上述类标为:0、1、2)。检测的完整的源代码如下:

import smile.classification.SVM;
import smile.math.kernel.GaussianKernel;import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/*** Created by zhanghuayan on 2017/1/16.*/
public class ClassificationTest {public static void main(String[] args) throws Exception {List<List<Double>> datas = new ArrayList<List<Double>>();List<Double> data = new ArrayList<Double>();List<Integer> labels = new ArrayList<Integer>();String line;List<String> lines;File file = new File("iris.txt");BufferedReader reader = new BufferedReader(new FileReader(file));while ((line = reader.readLine()) != null) {lines = Arrays.asList(line.trim().split("\t"));for (int i = 0; i < lines.size() - 1; i++) {data.add(Double.parseDouble(lines.get(i)));}labels.add(Integer.parseInt(lines.get(lines.size() - 1)));datas.add(data);data = new ArrayList<Double>();}//转换labelint[] label = new int[labels.size()];for (int i = 0; i < label.length; i++) {label[i] = labels.get(i);}//转换属性int rows = datas.size();int cols = datas.get(0).size();double[][] srcData = new double[rows][cols];for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {srcData[i][j] = datas.get(i).get(j);}}SVM<double[]> svm = new SVM<double[]>(new GaussianKernel(1.0), 1.0, 3, SVM.Multiclass.ONE_VS_ALL);svm.learn(srcData, label);svm.finish();double right = 0;for (int i = 0; i < srcData.length; i++) {int tag = svm.predict(srcData[i]);if (tag == label[i]) {right += 1;}}right = right / srcData.length;System.out.println("Accrurate: " + right * 100 + "%");}
}

SVM初始化的四个参数分别为

  1. 核函数类型;
  2. 惩罚项参数;
  3. 类标种类数;
  4. 多分类策略。

对机器学习,人工智能感兴趣的小伙伴,请关注我的公众号:

Java 机器学习库Smile实战(一)SVM相关推荐

  1. Java机器学习库ML之六关于模型迭代训练的思考

    我遇到的场景是:样本集有5000万条,接近5个G,那么这样的样本集一次导入训练,我放着一天一夜都没跑出结果,机器性能还特别好,是64位linux有128G内存. 针对这样的情况,我想到的是两种思路: ...

  2. java机器学习库_6大最常用的Java机器学习库一览

    在 MLOSS.org 网站上,列出了 70 多个基于 Java 的开源机器学习项目,可能还有更多未列出的项目,存于大学里的服务器.GitHub 或 Bitbucket 中.我们将在本文中回顾 Jav ...

  3. Java机器学习库ML之一Dataset和Instance

    Java机器学习库ML官网:http://java-ml.sourceforge.net/ 对于一个机器学习库来说,最基础就是数据处理能力,ml库给了dataset和instance两个类,datas ...

  4. python sklearn 支持向量机_python机器学习库sklearn之支持向量机svm介绍

    python机器学习库sklearn之支持向量机svm介绍tcB太阳2平台注册|网站分类目录 python数据挖掘系列教程tcB太阳2平台注册|网站分类目录 这里只讲述sklearn中如何使用svm算 ...

  5. Java机器学习库ML之十一线性SVM

    线性SVM的原理就不多说了,最强大的就是libsvm库(ml库也是用这个),参考:http://blog.csdn.net/fjssharpsword/article/details/53883340 ...

  6. Java 机器学习库 Tribuo

    Oracle 开源了一个用 Java 编写的机器学习库,名为 Tribuo.它提供了用于分类.回归.聚类.模型开发等的工具.也为许多流行的第三方机器学习库提供了统一的接口 Tribuo 从其他系统和语 ...

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

    支持向量机 这里简单的介绍一下支持向量机的概念. 支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的 ...

  8. Java机器学习库ML之四模型训练和预测示例

    基于ML库机器学习的步骤: 1)样本数据导入: 2)样本数据特征抽取和特征值处理(结合模型需要归一化或离散化):这里本文没有做处理,特征选择和特征值处理本身就很大: 3)样本集划分训练集和验证集: 4 ...

  9. Java机器学习库ML之二Feature Selection(特征选择)

    机器学习中训练模型的前提必备工作就是特征选择,起到降维和降低计算开销的目的,当然在获取尽可能小的特征子集的同时,应不显著降低分类精度.不影响类分布.保持特征子集的稳定适应性强等. ML库提供了特征选择 ...

  10. Java机器学习库ML之十模型选择准则AIC和BIC

    学习任务所建立的模型多数是参数估计并采用似然函数作为目标函数,当训练数据足够多时,可以不断提高模型精度,但是以提高模型复杂度为代价的,同时也带来一个机器学习中非常普遍的问题--过拟合.模型选择问题是在 ...

最新文章

  1. 腾讯微视AI新技术曝光:斩获VCR榜单第一
  2. Boost:projection years投影年的测试程序
  3. python算程序员吗_我算是优秀的程序员吗?
  4. java-01 JAVA三大版本比较JDK、JRE、JVM 的关系
  5. php函数从数组中取出指定的数目,PHP数组函数
  6. 美味果冻(牛客练习赛53B)
  7. 简单的时间间隔调度任务
  8. 循序渐进之Spring AOP(1) - 原理
  9. Swing 线程之SwingUtilities.invokeLater()
  10. mapreduce对日志数据上下行流量汇总
  11. CMD命令提示符大全
  12. Oracle函数返回Table集合
  13. 大学四年,靠着这些学习网站,我从挂科学渣变成了别人眼中的大神
  14. mshflexgrid如何删除当前鼠标选择的行,并且一并删除行所对应的数据库中的记录
  15. docker — 容器镜像
  16. 公众号精选评论点赞_十大和编辑精选:六月评论
  17. Unity游戏开发——新发教你做游戏(三):3种资源加载方式
  18. 2020最新C#顺丰丰桥平台下单接口
  19. 毕业设计 单片机太空游戏机设计与实现
  20. 推荐6本入门Python数据分析公认的必看经典教材

热门文章

  1. android root刷机包包,安卓ROOT卡刷包通用版【安致提供】
  2. python自动化转码屏幕录像专家exe为mp4
  3. 【税务基础知识】--很实用的常识
  4. Springboot+ssm高校会议预约系统javaweb
  5. 做自媒体必备的神器:文章相似度检测工具
  6. 测试工程师面试题整理
  7. 谈谈5G的信道编码方法
  8. Android 4G 模块添加 TV平台Mstar HISI
  9. 继暗影机器人跑路,守护者群管作者也宣布退网
  10. 黑色的cms商城网站后台管理模板——后台