LibSVM 安装使用
知道这个库已经很长的时间了,一直没有实践,以前也看过svm的理论,今天开始安装一下一直感觉有错误,结果自己傻了,根本没有错,可以直接使用。。。
libsvm参考资料:
libsvm下载网址:http://www.csie.ntu.edu.tw/~cjlin/libsvm/
我的系统环境为 Win7 64bit + Matlab R2014a ,下载的是最新版的libsvm-3.22
具体流程
- 下载:
从libsvm的主页下载合适的软件安装包,并解压,比如我解压到Matlab的Toolbox目录下,具体路径如下:....\Matlab\R2014b\toolbox - 设置Path:
在Matlab中依次选择设置路径-添加并包含子文件夹..,加入以上解压后存放的路径。 - 编译:
事实上,对于64位的系统,我们是不需要进行编译的,自带的软件包中已经包含了对应于64位系统的编译好的文件:libsvmread.mexw64、libsvmwrite.mexw64、svmtrain.mexw64、svmpredict.mexw64,以上文件位于压缩包'..\windows'文件夹中。对于非64位系统,或者需要自己编译的特殊情况,采用如下de步骤编译自己的二进制文件。- 在matlab中切换到解压后的
libsvm-3.22\matlab目录(如我的系统为:...\Matlab\R2014b\toolbox\libsvm-3.20\matlab) - 在命令窗口输入
mex -setup,此时会提示你选择编译器,就选择一个已安装的编译器,如Microsoft Visual C++ 2013。之后Matlab会提示确认选择的编译器,输入y进行确认。 - 在命令窗口输入
make,等待make完成,生成相应的后缀为mexw64(64位系统)或mexw32(32位系统)的文件。 - 这里要说明,其实前一步的
mex -setup并不是必须的,在make指令不奏效的时候调用一下即可;另外,在我的配置过程中,会提示有问题,大致如下所示, 其实并不需要在意,直接调用make也会成功编译文件。
- 在matlab中切换到解压后的
MEX 配置为使用 ‘Microsoft Visual C++ 2013 Professional (C)’ 以进行 C 语言编译。
警告…您需要更新代码以利用新的 API。您可以在以下网址找到相关详细信息…
先一直没有看到类似的:
mex -setup
显示Please choose your compiler for building external interface (MEX) files:Would you like mex to locate installed compilers [y]/n?输入y
Select a compiler:[1] Lcc-win32 C 2.4.1 in D:\MATLAB\R2010a\sys\lcc[2] Microsoft Visual C++ 2008 SP1 in D:\Program Files\Microsoft Visual Studio 9.0[3] Microsoft Visual C++ 6.0 in D:\Program Files\Microsoft Visual Studio以为没有安装上,没有编译通过,结果是可以用的。load数据也有问题,路径不对:有两个数据集,一个是C++的, 一个是matlab的。libsvm库中下载的是C++数据,
所以matlab加载我们下载的heart_scale是会报错的:<这就是视频中遗漏的小问题>
- 重命名:
这并不是必须的操作,但鉴于个人的经验,建议执行。
编译完成后,在当前目录下回出现svmtrain.mexw64、svmpredict.mexw64(64位系统)或者svmtrain.mexw32、svmpredict.mexw32(32位系统)这两个文件,把文件名svmtrain和svmpredict相应改成libsvmtrain和libsvmpredict。
这是因为Matlab中自带有SVM的工具箱,而且其函数名字就是svmtrain和svmpredict,和libsvm默认的名字一样,在实际使用的时候有时会产生一定的问题,比如想调用libsvm的变成了调用Matlab SVM。
如果有进行重命名的,以后使用libsvm时一律使用libsvmtrain和libsvmpredict这两个名字进行调用。
特别补充:
以上是普通的libsvm在matlab 2014b 的设置,起初对于我而言,也是并不需要编译的,直接设置路径就可以使用libsvm,但是由于我需要使用对样本加权的训练方法,于是经过搜索,发现他们也是提供libsvm-weights-3.20版本的,参见这里,其中提供了Matlab和Python的接口,而并不存在已经编译好的文件,所以我需要进行编译并使用这一带权重的版本。
测试
以下测试是基于我配置的加权的libsvm的版本。
libsvm软件包下的heart_scale和heart_scale.wgt文件分别提供了样本的label及feature信息和权重信息。要注意对于以上两个文件,其读取指令是不同的,以下将简单演示:在matlab命令窗口执行如下命令:
[heart_scale_label, heart_scale_inst] = libsvmread('heart_scale'); %读取方法
heart_scale_weight = load('heart_scale.wgt');
model = libsvmtrain(heart_scale_weight, heart_scale_label, heart_scale_inst, '-c 1'); %改名字了吧 +lib
[predict_label, accuracy, dec_values] = libsvmpredict(heart_scale_label, heart_scale_inst, model);
结果如下:
*
optimization finished, #iter = 166
obj = -107.553365, rho = 0.449867
nSV = 131, nBSV = 103
Total nSV = 131
Accuracy = 86.2963% (233/270) (classification)
特别的,对于不需要对样本考虑权重的情况,只需要修改训练的指令为:
model = libsvmtrain([], heart_scale_label, heart_scale_inst, '-c 1');
ok,以上就是对于Matlab 2014a使用libsvm(libsvm-weights)的简要记录。
svmtrain函数相关参数说明
svmtrain函数返回的model可以用来对测试数据集进行预测。这是一个结构体变量,主要包括了以下几个域。[Parameters, nr_class, totalSV, rho, Label, ProbA, ProbB, nSV,sv_coef, SVs]。英文说明如下:
-Parameters: parameters
-nr_class: number of classes; = 2 for regression/one-class svm
-totalSV: total #SV
-rho: -b of the decision function(s) wx+b
-Label: label of each class; empty for regression/one-class SVM
-ProbA: pairwise probability information; empty if -b 0 or in one-classSVM
-ProbB: pairwise probability information; empty if -b 0 or in one-classSVM
-nSV: number of SVs for each class; empty for regression/one-class SVM
-sv_coef: coefficients for SVs in decision functions
-SVs: support vectors
如果没有指定’-b 1’选项则ProbA和ProbB为空矩阵。此外,当指定’-v’选项时,返回的model是一个数值,是cross-validation的准确率。
其中model.paramter是一个5X1的向量,参数意义为:
model.Parameters参数意义从上到下依次为:
-s svm类型:SVM设置类型(默认0)
-t 核函数类型:核函数设置类型(默认2)
-d degree:核函数中的degree设置(针对多项式核函数)(默认3)
-g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数) (默认类别数目的倒数)
-r coef0:核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)
svmpredict函数参数说明
svmpredict函数返回三个值,predict_label,是训练集预测得到的label向量。第二个输出是accuracy,是一个3维的向量,从上到下分别是:分类准率(分类问题中用到的参数指标);平均平方误差(MSE (mean squared error))(回归问题中用到的参数指标);平方相关系数(r2 (squared correlation coefficient))(回归问题中用到的参数指标)。第三个输出是个矩阵,包含着决策值或者是概率估计(当’-b 1’被指定时)。当训练数据有k类时,决策值矩阵是一个n行k*(k-1)/2列的矩阵(n为测试数据集个数,k为类别数),而每一行的输出是k*(k-1)/2个二分类器的结果。当’-b 1’被指定时,概率估计矩阵是一个n行k类的矩阵(n为测试数据集个数,k为类别数),每一行的输出是该测试数据属于每个类的概率。
先试着学习,孰能生巧。。。
特别感谢:Matlab配置libsvm
LibSVM 在matlab中的配置(包括SVDD、libsvm-faruto)
LibSVM 安装使用的更多相关文章
- 【转】python平台libsvm安装
来源:http://blog.csdn.net/prom1201/article/details/51382358 网上有很多麻烦的在win64机器上安装libsvm的步骤,实际上只要在下面网站找到l ...
- (转)java +libsvm 安装与测试:
libsvm 用SVM实现简单线性分类 (转自:http://www.cnblogs.com/freedomshe/archive/2012/10/09/2717356.html) 0. 下载lib ...
- Matlab的libsvm的安装
最关键的是compilers的选择(对于把Microsoft visual stdio 2005或者其他的编译器安装在自定义目录下的这一步非常关键) 以下是步骤:>> mex -setu ...
- 学习笔记24—win10环境下python版libsvm的安装
1.前言 由于毕业设计需要用到libsvm,所以最近专心于配置libsvm,曾经尝试过在matlab中安装,但是没有成功.最终在Python环境中完成安装. 2.LIBSVM介绍 LIBSVM 是台湾 ...
- 在Matlab中安装使用libsvm详细步骤(附图)
今天自己在matlab中安装libsvm,下面是详细的步骤 1.首先下载libsvmhttp://www.csie.ntu.edu.tw/~cjlin/libsvm/我的matlab版本 R2016a ...
- MATLAB安装libsvm无法使用解决办法(转)
buaasuozi 这是原作者: 安装libsvm 不成功有可能是你的MATLAB版本或者是编译文件版本的问题,但是不要急着换其他版本....说不定就有别的解决办法呢 首先感谢Lin教授及其实验室提 ...
- MATLAB 安装使用libsvm详细步骤
根据本文后面部分博友提出的在配置过程中出现的问题,其中需要特别强调的一点:整个过程,都是在 libsvm-3.12\matlab目录下操作的.如果这一点你忽视了,你不可能解决配置中报的Bug,即使重新 ...
- libsvm的安装,数据格式,常见错误,grid.py参数选择,c-SVC过程,libsvm参数解释,svm训练数据,libsvm的使用详解,SVM核函数的选择
直接conda install libsvm安装的不完整,缺几个.py文件. 第一种安装方法: 下载:http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm. ...
- libsvm 用在 婚介数据集中 预测 用户配对
分类前具备的数据集: 书本第九章数据集(训练集):agesonly.csv和matchmaker.csv. agesonly.csv 格式是: 男年龄,女年龄,是否匹配成功 24,30,1 30,4 ...
随机推荐
- virtual 三种用法
virtual用法一 #include using namespace std;class A{public: virtual void display(){ cout<<& ...
- 0016.Linux基础之常用基本命令讲解
开启linux系统,开启xshell pwd:printing workding directory 打印当前目录 /:代表根目录 cd:change directory 改变目录 ls:list 查 ...
- 浮动 float
1.未设浮动属性,位于标准流中 2.如果设置浮动属性,则容器不再位于标准流中,不再占用空间.容器会根据内容确定宽度 3.尽量将搜索引擎要搜索的内容放到网页的前部,更要容易排名到 4.clear属性清除 ...
- Java多线程框架源码阅读之---ReentrantLock
ReentrantLock基于Sync内部类来完成锁.Sync有两个不同的子类NonfairSync和FairSync.Sync继承于AbstractQueuedSynchronizer. Reent ...
- HDU——1799循环多少次(杨辉三角/动态规划/C(m,n)组合数)
循环多少次? Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- HDU-1528/1962 Card Game Cheater
两组牌中两张牌相比能赢的就连,后求最大匹配. #include <cmath> #include <cstdlib> #include <cstdio> #incl ...
- java面试题之spring aop中jdk和cglib哪个动态代理的性能更好?
在jdk6和jdk7的时候,jdk比cglib要慢: 在jdk8的时候,jdk性能得到提升比cglib要快很多: 结论出自:https://www.cnblogs.com/xuliugen/p/104 ...
- 实验六 TLS协议报文解析
一.实验目的 1.访问一个https://....的网站,捕TLS包并分析报文序列. 2.分析连接建立的完整过程,如:TCP三次握手.SSL安全连接,使用TLS协议连接.协商过程,加密传送的状态.TC ...
- Python 使用cx_freeze 生成exe文件
在python中比较常用的python转exe方法有三种,分别是cx_freeze,py2exe,PyInstaller.py2exe恐怕是三者里面知名度最高的一个,但是同时相对来说它的打包质量恐怕也 ...
- 一次向linux开源社区提交补丁的经历
背景 在开发过程中,偶然发现了spinand驱动的一个bug,满怀欣喜地往社区提补丁.这是怎么样的一个bug呢? static int spinand_mtd_read(struct mtd_info ...
