原文:http://freehello.blogspot.com/2009/04/libsvm.html
Libsvm使用心得
最近在做基于SVM的短信分类的项目,对libsvm的使用进行了小小研究,结合网上泛滥成灾的libsvm使用方法介绍,自己做一简短总结。
libsvm是实现svm的便捷开源工具,应用广泛(除此之外还有lightsvm,没用过)由国立台湾大学Chih-Chung Chang和 Chih-Jen Lin编写,可以实现基于SVM的分类和回归。
由于个人对SVM的理论只是“略懂”,下面只介绍libsvm在win32平台的基本使用方法 。对SVM一窍不通的强烈建议看一下入门文章http://ntu.csie.org/~piaip/svm/svm_tutorial.html
先介绍一下大概的流程。
准备数据集(短信语料),处理成libsvm接受的格式,之后进行训练(svm-train)得到模型
,然后进行测试,完成。其中训练的过程需要不断选取参数寻求最佳分类结果,为此libsvm提供了grid.py(python文件)专门用来帮助自动选取最佳参数。
1、资源准备
下载Libsvm、Python和Gnuplot:
libsvm——那必须有啊,最新版本2.89,主页http://www.csie.ntu.edu.tw/~cjlin/libsvm/上下载得到,建议同时下载一个libsvm的初学者guide
Python——主要是为了运行grid.py,最新版是2.5,可以在python的主页http://www.python.org/上下载
Gnuplot——同样为了选取最佳参数和绘图,自己搜一下,win32版的为gp423win32.zip
2、具体流程
LIBSVM 使用的一般步骤是:
1)准备数据集,转化为 LIBSVM支持的数据格式 :
[label] [index1]:[value1] [index2]:[value2] ...
即 [l类别标号] [特征1]:[特征值] [特征2]:[特征值] ...
2)对数据进行简单的缩放操作(scale);(为什么要scale,这里不解释了)
3)考虑选用核函数(通常选取径函数,程序默认);
4)采用交叉验证(一般采用5折交叉验证),选择最佳参数C与g ;
5)用得到的最佳参数C与g 对整个训练集进行训练得到SVM模型;
6)用得到的SVM模型进行测试
3、操作实现:
先进行各种安装和配置。
在C盘建立一个文件夹libsvm
解压libsvm-2.89.rar,将解压后得到的文件夹下的整个windows目录全部考到C:\libsvm下
python装在C盘,文件夹是Python25,将里面的python.exe复制到C:\libsvm\windows下
gnuplot也装在C盘,
修改grid.py文件,找到其中关于gnuplot路径的那项(其默认路径为gnuplot_exe=r"c:\tmp\gnuplot\bin\pgnuplot.exe"),根据实际路径进行修改,并保存。
1)如果只是进行简单练习,可以在http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/下载合适的数据集,如果是自己的实际项目,要自己编程转换一下。假定我们选取的数据集叫做trainset。
2)对数据进行简单的缩放操作。 svm-scale [options] data_filename
开始->cmd->进入C:\libsvm\windows
然后输入:svm-scale -l 0 -u 1 trainset
得到scale后的文件trainset.scale
使用svm-scale 对数据进行缩放是必要的。因为适当的scale有助于参数的选取和建svm模型的速度。svm-scale 会对value 做scale。 范围用 -l, -u 指定,通常是[0,1],或是[-1,1]。(文本分类一般选[0,1])。輸出在 stdout。另外要注意的是 testing data 和 training data要一起scale。而svm-scale 最难用的地方就是沒办法指定testing data/training data为同一文档,然后一起scale。
因此为了后面测试,还要对测试集进行scale。
输入:svm-scale -l 0 -u 1 testset
得到scale后的文件testset.scale
3) 考虑选用RBF 核函数
Svm-train的用法: svm-train [options] training_set_file [model_file]
training_set_file为之前训练数据,而 model_file 如果不给就会自动生成
[training_set_file].model 。 options 可以先不要给。Options:常用可用的选项即表示的涵义
如下
-s svm类型:SVM设置类型(默认0)
0 -- C-SVC 1 -- v-SVC 2 -- 一类SVM 3 -- e -SVR 4 -- v-SVR-t 核函数类型:核函数设置类型(默认2)
0 – 线性:u'v
1 – 多项式:(r*u'v + coef0)^degree
2 – RBF函数:exp(-ru-v^2)
-g r(gama):核函数中的函数设置(默认1/ k)
-c cost:设置C-SVC和-SVR的参数(默认1),
-v n: n-fold交互检验模式
4)采用交叉验证选择最佳参数C与g
注意:(3)中列出的,不同的参数(最常用的就是g和c)条件下会训练出不同的SVM,那怎么选取使SVM最好的参数呢——试,一个一个试!而grid.py就是干这个的。
因此,这里要先用grid选取合适的C和g值。
Usage: grid.py [-log2c begin,end,step] [-log2g begin,end,step] [-v fold][-svmtrain pathname] [-gnuplot pathname] [-out pathname] [-png pathname][additional parameters for svm-train] dataset
一般log2c -10,10,1 ;log2g 10,-10,-1, -v 5即可
输入:
python grid.py -log2c -10,10,1 -log2g 10,-10,-1 trainset.scale
返回结果告诉你best-c和best-g,以后我们就用这个进行正式训练了!另外,还同时还返回准确率。
5)训练
输入:svm-train -c 得到的best-c -g 得到的best-g trainset.scale
得到:trainset.scale.model
6)测试
Svmpredict的用法:$ svmpredict test_file model_file output_file
model_file是由svmtrain产生的模型文件;test_file是要进行预测的数据文件,其格式
和 svmtrain的输入,也就是 training_set_file 是一样的!不过每行最前面的 label 可以
省略 ( 因为 predict 就是要 predict 那个 label) 。 但如果 test_file 有 label 的值的
话, predict 完会顺便拿 predict 出来的值跟 test_file 里面写的值去做比对,这代表:
test_file 写的 label 是真正的分类结果,拿来跟我们 predict 的结果比对就可以 知道
predict 有没有猜对了;Output_file是svmpredict的输出文件。svm-predict没有其它的选
项。
输入:svm-predict testset.scale trainset.scale.model result
ok,返回测试结果,enjoy it!
分享到:
相关推荐
《深入理解libsvm-mat-2.89-3与LibSvm:实践与学习心得》 LibSVM,全称“Library for Support Vector Machines”,是由台湾大学的Chih-Chung Chang和Chih-Jen Lin开发的一个开源软件库,主要用于支持向量机(SVM)...
《libsvm学习心得》 libsvm,全称“Library for Support Vector Machines”,是由台湾大学的Chih-Chung Chang和Chih-Jen Lin开发的一款开源工具,主要用于支持向量机(SVM)的学习与预测。这款强大的库在机器学习...
#### 五、使用心得与技巧分享 1. **数据预处理的重要性**:正确的数据预处理可以显著提高模型性能。 2. **选择合适的核函数**:根据问题的性质选择最适合的核函数。 3. **参数选择的影响**:合理设置惩罚系数`C`和...
在本主题中,我们将深入探讨如何使用C++和LIBSVM库来实现机器学习和样本分类。 1. **支持向量机(SVM)基本概念**: - SVM是一种基于结构风险最小化的分类模型,它的核心思想是找到一个超平面,使得两类样本之间的...
在这个文档中,我们将重点讨论如何在Java环境下使用LibSVM进行二次开发。 首先,你需要从官方网站(http://www.csie.ntu.edu.tw/~cjlin/libsvm/)下载LibSVM的源代码包。解压后,找到`java`文件夹,并将其导入到...
### Python 下的 LibSVM 使用详解 #### 一、引言 LibSVM 是由台湾学者林智仁教授团队开发的一款支持向量机(Support Vector Machine, SVM)软件包,它以其高效性和易于使用性而著称。通常情况下,LibSVM 的应用集中在...
### LIBSVM使用介绍 #### 一、LIBSVM软件包简介 LIBSVM是由台湾大学林智仁(Chih-Jen Lin)博士等人开发的一款高效、易用且功能全面的支持向量机(Support Vector Machine, SVM)软件包。这款软件能够解决多种类型的...
### libSVM 使用方法基于 Python #### 一、前言 `libSVM` 是一个简单、易用且高效的 SVM(支持向量机)软件包,广泛应用于机器学习领域中的分类与回归问题。本文旨在详细介绍如何在 Python 环境下使用 `libSVM` ...
matlab使用Libsvm例子,本人技术小白,刚开始也在如何安装和使用libsvm上出现了很多问题,是为了毕设的一个分类问题,希望可以与大家共同进步。资源中包括java、matlab、python与c++。
在libsvm的使用说明中,通常会涵盖以下几个方面: 1. 数据预处理:SVM需要将原始数据转化为适合模型训练的格式,例如,libsvm要求数据以特定的文本格式输入,每一行代表一个样本,每个特征由空格或制表符分隔,最后...
本文将详细讲解LibSVM的FarutoGUI版本及其使用方法。 首先,让我们了解什么是支持向量机(SVM)。SVM是一种二分类和多分类的监督学习模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器。SVM的核心思想是...
还有我写的libsvm简单使用步骤,很清楚,对新手很有用。 网上很多文章说这几个软件的兼容有版本的要求,我在我的电脑上试过,这几个软件可以兼容,没有出现不能使用的情况。 具体安装方法,压缩包里面有。
在进行机器学习或数据科学的实践过程中,LIBSVM 是一个广泛使用的工具,用于解决分类和回归问题。LIBSVM 由台湾大学的林智仁教授开发,它是支持向量机(SVM)算法的一种实现。MATLAB 是一个高性能的数值计算和可视化...
matlab使用libsvm进行分类代码实例, 这里包括一个数据集合, 一个代码(包括详细注释),而且代码经过修改,已经符合最新的libsvm调用格式,不会出错,用于SVM分类。 首先通过博客,安装好libsvm库,博客地址:...
LibSVM使用交叉验证来寻找最优的C和γ组合。用户可以设置不同的参数网格,然后通过`svm-scale`对数据进行标准化,以确保在不同尺度上的特征具有相同的重要性。 6. **核函数的选择** 选择合适的核函数对于解决特定...
VS2010 使用 libsvm (libsvm 3 18)工具箱的过程 目前互联网搜索数据libsvm工具箱在 VS 中以C++工程呈现的讲解非常稀少而且对初学者有一定的难度 所以在笔者完成工作后写了这篇小记或称为简单教程 呈现给大家 ...