SVM学习——在matlab上安装libsvm库(一)

环境搭建

  • 平台:

    • Windows PC
    • MATLAB 软件
    • libsvm库(SVM工具箱)
  • 安装步骤

  • 准备工作

    • 安装对应的编译器,在网站上查看当前matlab版本支持的编译器版本。本文使用的matlab 2015a版本(支持编译器详情)。
    • 通过查询,发现Microsoft Windows SDK7.1支持matlab 2015a,所以下面安装这个编译器。
    • 根据安装说明,在安装这个Windows SDK7.1之前,1)首先需要安装最新的Windows service Pack,用于更新(ps:猜测每个电脑都默认安装,所以在安装过程中直接忽视了这条要求)。2)安装Microsoft .NET Framework 4,用于支持安装Microsoft Windows SDK7.1
  • 安装libsvm

    • 在libsvm官网上查找相应的libsvm库,选择MATLAB and OCTAVE语言,下载最新版的libsvm-3.22.zip
    • 下载后把工具包放在MATLAB安装目录下的toolbox文件夹中,例如, D:\Learn program\matlab2015a\toolbox\libsvm-3.22。
    • 假设你使用的是64位的操作系统和matlab。打开matlab,在matlab目录中添加(set path):D:\Learn program\matlab2015a\toolbox\libsvm-3.22\windows。因为windows下包含了matlab可执行的二进制文件libsvmread.mexw64/libsvmwrite.mexw64/svmpredict.mexw64/svmtrain.mexw64
    • 在matlab中,进入到D:\Learn program\matlab2015a\toolbox\libsvm-3.22\matlab目录下。运行mex –setup,此时按照LIBSVM在matlab下的使用安装文中提到的步骤继续操作。
    • 但是由于接口的问题,又出现警告:

      MEX 配置为使用 ‘Microsoft Visual C++ 2012 (C)’ 以进行 C 语言编译。

      警告: MATLAB C 和 Fortran API 已更改,现可支持

      包含 2^32-1 个以上元素的 MATLAB 变量。不久以后,您需要更新代码以利用新的 API。您可以在以下网址找到相关详细信息:http://www.mathworks.com/help/ma ... use-64-bit-api.html。
      
    • 根据 关于libsvm工具箱在64位matlab下的安装说明文中提到的方法,进行下面关键两步:

      • 切换matlab运行目录至:D:\Learn program\matlab2015a\toolbox\libsvm-3.22\matlab,在命令行输入make,也就是该目录下的那个make文件。这时候就像以前安装libsvm一样,会自动make出来很多文件,不用管,主要是会看到make出带有mexm64后缀名的文件,这就成功了。
      • 拷贝第一步中matlab文件夹下所有make出来的文件(.mex64),到libsvm-3.22\windows文件夹下,全部替换。这样就可以了。
  • 测试(此处将libsvm-3.22中文heart_scale拷贝到libsvm-3.22\matlab目录下,运行下面的语句)

    1
    2
    3
     [heart_scale_label,heart_scale_inst]=libsvmread('heart_scale');
    model = svmtrain(heart_scale_label,heart_scale_inst, '-c 1 -g 0.07');
    [predict_label, accuracy, dec_values] =svmpredict(heart_scale_label, heart_scale_inst, model); % test the trainingdata
  • 测试结果,出现如下结果表明安装成功

    1
    2
    3
    4
    5
    6
    optimization finished, #iter = 134
    nu = 0.433785
    obj = -101.855060, rho = 0.426412
    nSV = 130, nBSV = 107
    Total nSV = 130
    Accuracy = 86.6667% (234/270) (classification)

SVM参数优化

MATLAB中三种得到最佳g和c参数的方法:

遗传算法(GA)选择最佳的SVM参数c&g

  • 在运行案例时,报错:Undefined function or variable 'rep'.,未找到rep函数,此时,需要安装GA的工具箱,下载英国谢菲尔德大学开发的遗传算法工具箱gatbx,可从此处下载

由于其中的函数扩展名是M,而不是m,需要将其全部改为小写的m,再把文件夹复制到toolbox中,加载至matlab,即可。

  • 函数接口介绍

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    (1)利用GA参数寻优函数(分类问题):gaSVMcgForClass
    [bestCVaccuracy,bestc,bestg,ga_option]=
    gaSVMcgForClass(train_label,train,ga_option)
    输入:
    train_label:训练集的标签,格式要求与svmtrain相同。
    train:训练集,格式要求与svmtrain相同。
    ga_option:GA中的一些参数设置,可不输入,有默认值,详细请看代码的帮助说明。
    输出:
    bestCVaccuracy:最终CV意义下的最佳分类准确率。
    bestc:最佳的参数c。
    bestg:最佳的参数g。
    ga_option:记录GA中的一些参数。
    \==========================================================
    (2)利用GA参数寻优函数(回归问题):gaSVMcgForRegress
    [bestCVmse,bestc,bestg,ga_option]=
    gaSVMcgForRegress(train_label,train,ga_option)
    其输入输出与gaSVMcgForClass类似,这里不再赘述。
  • 使用案例,加入gaSVMcgForClass.m函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    % GA的参数选项初始化
    ga_option.maxgen = 200;
    ga_option.sizepop = 20;
    ga_option.cbound = [0,100];
    ga_option.gbound = [0,100];
    ga_option.v = 5;
    ga_option.ggap = 0.9;
    % 得到最佳参数
    [bestacc,bestc,bestg] = gaSVMcgForClass(train_wine_labels,train_wine,ga_option);
    % 利用最佳的参数进行SVM网络训练
    cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg)];
    model = svmtrain(train_wine_labels,train_wine,cmd);

PSO选择最佳的SVM参数c&g

  • 使用案例,加入psoSVMcgForClass.m函数

    1
    2
    3
    4
    5
    % 得到最佳参数
    [bestacc,bestc,bestg] = psoSVMcgForClass(train_wine_labels,train_wine);
    % 利用最佳的参数进行SVM网络训练
    cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg)];
    model = svmtrain(train_wine_labels,train_wine,cmd);

贪婪算法(Grid)选择最佳的SVM参数c&g

  • 使用案例,加入gridSVMcgForClass.m函数

    1
    2
    3
    4
    5
    6
    7
    % 首先进行粗略选择: c&g 的变化范围是 2^(-10),2^(-9),...,2^(10)
    [bestacc,bestc,bestg] = gridSVMcgForClass(train_wine_labels,train_wine,-10,10,-10,10);
    % 根据粗略选择的结果图再进行精细选择: c 的变化范围是 2^(-2),2^(-1.5),...,2^(4), g 的变化范围是 2^(-4),2^(-3.5),...,2^(4),
    [bestacc,bestc,bestg] = SVMcgForClass(train_wine_labels,train_wine,-2,4,-4,4,3,0.5,0.5,0.9);
    %% 利用最佳的参数进行SVM网络训练
    cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg)];
    model = svmtrain(train_wine_labels,train_wine,cmd);

参考:

  1. LIBSVM在matlab下的使用安装
  2. 关于libsvm工具箱在64位matlab下的安装说明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正则表达式练习笔记

下面的内容是一个 data1.txt 文本内容,里面记录了一些正则表达式的笔记 long long ago there is girl, shes name is little redhat.. long_long_long#long;long:long This is a test txt... my phone number is 18621735531There are a lot of good books,220123 …

逾期后,如何修复个人征信?

个人征信大家都是知道很宝贵,但是有些朋友会在有意无意之间造成逾期,结果给申请贷款、申请信用卡带来了诸多不便。逾期是谁也不想看到的,但是如果逾期已经发生了,我们就无法改变,唯一能做的就是努力去修复,…

空间谱专题16:信号个数估计

作者:桂。 时间:2017-10-24 21:50:16 链接:http://www.cnblogs.com/xingshansi/p/7726082.html 前言 记录阵列信号在DOA估计中,信源个数估计的基本方法。 一、基本估计方法 参考:王永良《空间谱估计》p42: 以MDL为例&#xff1a…

根据verilog代码画电路图

根据verilog代码画电路图 FPGA设计的本质是硬件设计,而且verilog是描述硬件设计的语言(也就是描述电路),一个标准的工程师需要学会建立电路和Verilog对应的关系,学会看到电路图,就能写出相应的Verilog代码…

VS2015编译boost 1.62.0

参考链接: http://blog.chinaunix.net/uid-22301538-id-3158997.html D:\boost_1_62_0>bjam –toolsetmsvc-14.0 –prefixD:/boost_1_62_0/output –without-python –build-typecomplete linkshared threadingmulti install

复数矩阵分解的拆解思路(矩阵求逆/特征值分解)

作者:桂。 时间:2017-10-26 07:11:02 链接:http://www.cnblogs.com/xingshansi/p/7735016.html 前言 主要记录特征值分解的硬件实现思路。 一、实数矩阵转化 在FPGA运算中,对实数运算通常优于对复数运算。假设C为复数矩阵&#…

贷款机构如何审核个人征信?

贷款是要查看征信的, 但是大家知道贷款机构是如何审查借款人的征信吗?下面我们一起来看下。1看征信报告打印时间一般贷款机构要求提供的是最新的征信报告,当然每个机构要的具体期限不一样,有的要求是最近一个月的,有的…

COMS技术

COMS技术 n型MOS(NMOS)三极管的结构如图所示,该图不是按照实际比例绘制的。三极管的衬底是被掺杂后成为p型半导体材料的硅晶片。NMOS衬底的厚度远比其他三极管要厚。在每个三极管上有两个区域,被掺入大量的杂质,成为n型半导体区域。这两个区域分别形成了三极管的源极和漏极…

VS2015 + CUDA 8.0 配置GTX1070的OpenCL 开发环境

一、查看计算机对OpenCL异构计算的支持情况 使用 GPU Caps Viewer 查看计算机对OpenCL的支持情况,目前最新的版本是 gpu-caps-viewer-1-32-0, 下载地址:http://www.geeks3d.com/20161107/gpu-caps-viewer-1-32-0-released/ 从上面两个图可以…

空间谱专题16:间距选取分析

作者:桂。 时间:2017-11-01 23:26:30 链接:http://www.cnblogs.com/xingshansi/p/7769153.html 前言 本文主要分析布阵间距选取依据,个人观点,仅供参考。 一、问题描述 对于空间谱测向(以MUSIC算法为例&a…

征信逾期了,5年后能自动消除吗?

最近有一个朋友去申请贷款,然后被拒了,理由是属于征信黑名单。这个朋友很纳闷,自己最近几年从来没有贷过款,信用卡每个月都是正常在还,没有出现逾期过,为何说征信是黑名单呢?后来一问才知道&…

常用频段及对应名称

作者:桂。 时间:2017-11-12 07:31:46 链接:http://www.cnblogs.com/xingshansi/p/7820971.html 一、主要频段 不同规定:IEEE/国际电信联盟(ITU)/北约(NATO)EU(欧盟) US(美国)&…

布尔代数值

布尔代数值 值 数字系统使用二值代数。其变量可以取由:1)接通/断开;2)真/假;3)1/0表示的两值之一。 操作符 1)NOT(非) 2)AND(与) 3)OR(或) 4)IMPLIES(蕴涵) 5)EQUIVALENCE(同或) 上面表达式中的符号“+”表示“或”;符号“”表示“与”;而横杠,例如“~A”则表示“A的非”…

人脸识别数据库

作者:许小平 链接:https://www.zhihu.com/question/33505655/answer/67492825 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 用CNN train model 数据很重要很重要很重要,我就来分享一些公开的数据。 1. …

什么样的人去贷款最受银行欢迎?

去贷款,大家是不是都想着所有的流程都能一次性顺利通过,而且拿到的贷款额度高,利息低?这是理想的一种状态,但是贷款不是你自己说了算的,而是贷款公司说了算,所以做一个让贷款公司喜欢的人将能更…

网贷申请技巧,提高90%通过率

目前网贷很流行,深受大家欢迎,而且网贷简单方便,所以是解决短期缺钱一个很好的渠道。但是网贷也不是那么好撸的,想要提高网贷的通率,你得学会一些技巧。一、申请贷款准备1、联系客服不要盲目的去申请贷款,因…

格雷码与二进制的转换

格雷码与二进制的转换 格雷码转二进制码的基本思路: 格雷码转二进制是从左边第二位起,将每位与左边一位二进制码的值异或,作为该位二进制码后的值(最左边一位依然不变)。 以其中一个为例:格雷码111-&g…

度量、符号、转换关系

作者:桂。 时间:2017-11-19 10:13:49 链接:http://www.cnblogs.com/xingshansi/p/7859240.html Power Ratio:能量比,如果幅度,需要平方转化。s.t. y 10log10(x) 参考:《Electronic Warfare and Radar Sy…

Intel CPU集成显卡被UEFI BIOS禁用想开启的设置

台式机处理器为i7-6700k, 带有HD Graphics 5300, 想用来做OpenCL开发,然后下载了intel_sdk_for_opencl_setup_6.3.0.1904.exe, 做了demo,发现识别不到OpenCL Platform, 在设备管理器中一看,发现集成显卡不见…