热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

libsvm支持向量机回归示例

这篇文章主要介绍了libsvm支持向量机回归示例,需要的朋友可以参考下

libsvm支持向量机算法包的基本使用,此处演示的是支持向量回归机

代码如下:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

import libsvm.svm;
import libsvm.svm_model;
import libsvm.svm_node;
import libsvm.svm_parameter;
import libsvm.svm_problem;

public class SVM {
 public static void main(String[] args) {
  // 定义训练集点a{10.0, 10.0} 和 点b{-10.0, -10.0},对应lable为{1.0, -1.0}
  List label = new ArrayList();
  List nodeSet = new ArrayList();
  getData(nodeSet, label, "file/train.txt");

  int dataRange=nodeSet.get(0).length;
  svm_node[][] datas = new svm_node[nodeSet.size()][dataRange]; // 训练集的向量表
  for (int i = 0; i    for (int j = 0; j     datas[i][j] = nodeSet.get(i)[j];
   }
  }
  double[] lables = new double[label.size()]; // a,b 对应的lable
  for (int i = 0; i    lables[i] = label.get(i);
  }

  // 定义svm_problem对象
  svm_problem problem = new svm_problem();
  problem.l = nodeSet.size(); // 向量个数
  problem.x = datas; // 训练集向量表
  problem.y = lables; // 对应的lable数组

  // 定义svm_parameter对象
  svm_parameter param = new svm_parameter();
  param.svm_type = svm_parameter.EPSILON_SVR;
  param.kernel_type = svm_parameter.LINEAR;
  param.cache_size = 100;
  param.eps = 0.00001;
  param.C = 1.9;
  // 训练SVM分类模型
  System.out.println(svm.svm_check_parameter(problem, param));
  // 如果参数没有问题,则svm.svm_check_parameter()函数返回null,否则返回error描述。
  svm_model model = svm.svm_train(problem, param);
  // svm.svm_train()训练出SVM分类模型

  // 获取测试数据
  List testlabel = new ArrayList();
  List testnodeSet = new ArrayList();
  getData(testnodeSet, testlabel, "file/test.txt");

  svm_node[][] testdatas = new svm_node[testnodeSet.size()][dataRange]; // 训练集的向量表
  for (int i = 0; i    for (int j = 0; j     testdatas[i][j] = testnodeSet.get(i)[j];
   }
  }
  double[] testlables = new double[testlabel.size()]; // a,b 对应的lable
  for (int i = 0; i    testlables[i] = testlabel.get(i);
  }

  // 预测测试数据的lable
  double err = 0.0;
  for (int i = 0; i    double truevalue = testlables[i];
   System.out.print(truevalue + " ");
   double predictValue = svm.svm_predict(model, testdatas[i]);
   System.out.println(predictValue);
   err += Math.abs(predictValue - truevalue);
  }
  System.out.println("err=" + err / datas.length);
 }

 public static void getData(List nodeSet, List label,
   String filename) {
  try {

   FileReader fr = new FileReader(new File(filename));
   BufferedReader br = new BufferedReader(fr);
   String line = null;
   while ((line = br.readLine()) != null) {
    String[] datas = line.split(",");
    svm_node[] vector = new svm_node[datas.length - 1];
    for (int i = 0; i      svm_node node = new svm_node();
     node.index = i + 1;
     node.value = Double.parseDouble(datas[i]);
     vector[i] = node;
    }
    nodeSet.add(vector);
    double lablevalue = Double.parseDouble(datas[datas.length - 1]);
    label.add(lablevalue);
   }
  } catch (Exception e) {
   e.printStackTrace();
  }

 }
}

训练数据,最后一列为目标值

代码如下:

17.6,17.7,17.7,17.7,17.8
17.7,17.7,17.7,17.8,17.8
17.7,17.7,17.8,17.8,17.9
17.7,17.8,17.8,17.9,18
17.8,17.8,17.9,18,18.1
17.8,17.9,18,18.1,18.2
17.9,18,18.1,18.2,18.4
18,18.1,18.2,18.4,18.6
18.1,18.2,18.4,18.6,18.7
18.2,18.4,18.6,18.7,18.9
18.4,18.6,18.7,18.9,19.1
18.6,18.7,18.9,19.1,19.3

测试数据

代码如下:

18.7,18.9,19.1,19.3,19.6
18.9,19.1,19.3,19.6,19.9
19.1,19.3,19.6,19.9,20.2
19.3,19.6,19.9,20.2,20.6
19.6,19.9,20.2,20.6,21
19.9,20.2,20.6,21,21.5
20.2,20.6,21,21.5,22



推荐阅读
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 自学编程与计算机专业背景者的差异分析
    本文探讨了自学编程者和计算机专业毕业生在技能、知识结构及职业发展上的不同之处,结合实际案例分析两者的优势与劣势。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 深入浅出:Google工程师的算法学习指南
    通过Google工程师的专业视角,带你系统掌握算法的核心概念与实践技巧。 ... [详细]
  • 本文深入探讨了 Python 列表切片的基本概念和实际应用,通过具体示例展示了不同切片方式的使用方法及其背后的逻辑。 ... [详细]
  • 本文详细介绍了K-Medoids聚类算法,这是一种基于划分的聚类方法,适用于处理大规模数据集。文章探讨了其优点、缺点以及具体实现步骤,并通过实例进行说明。 ... [详细]
  • 本文探讨如何利用人工智能算法自动区分网页是详情页还是列表页,介绍具体的实现思路和技术细节。 ... [详细]
  • 本文探讨了 C++ 中普通数组和标准库类型 vector 的初始化方法。普通数组具有固定长度,而 vector 是一种可扩展的容器,允许动态调整大小。文章详细介绍了不同初始化方式及其应用场景,并提供了代码示例以加深理解。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • MATLAB实现n条线段交点计算
    本文介绍了一种通过逐对比较线段来求解交点的简单算法。此外,还提到了一种基于排序的方法,但该方法较为复杂,尚未完全理解。文中详细描述了如何根据线段端点求交点,并判断交点是否在线段上。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • 帝国CMS多图上传插件详解及使用指南
    本文介绍了一款用于帝国CMS的多图上传插件,该插件通过Flash技术实现批量图片上传功能,显著提升了多图上传效率。文章详细说明了插件的安装、配置和使用方法。 ... [详细]
  • 解决Windows 10无法正确加载ICA文件的问题:设置Citrix Receiver为默认打开程序
    当在Windows 10系统中遇到无法正确加载ICA文件的情况时,可以通过下载并安装Citrix Receiver,并将其设置为ICA文件的默认打开方式来解决问题。具体操作步骤包括找到ICA文件,选择合适的打开程序路径(通常是C:\Program Files (x86)\Citrix\ICA Client\wfcrun32.exe),并确保该程序被设为始终使用。 ... [详细]
author-avatar
deadman21
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有