- 浏览: 3558458 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (1491)
- Hibernate (28)
- spring (37)
- struts2 (19)
- jsp (12)
- servlet (2)
- mysql (24)
- tomcat (3)
- weblogic (1)
- ajax (36)
- jquery (47)
- html (43)
- JS (32)
- ibatis (0)
- DWR (3)
- EXTJS (43)
- Linux (15)
- Maven (3)
- python (8)
- 其他 (8)
- JAVASE (6)
- java javase string (0)
- JAVA 语法 (3)
- juddiv3 (15)
- Mule (1)
- jquery easyui (2)
- mule esb (1)
- java (644)
- log4j (4)
- weka (12)
- android (257)
- web services (4)
- PHP (1)
- 算法 (18)
- 数据结构 算法 (7)
- 数据挖掘 (4)
- 期刊 (6)
- 面试 (5)
- C++ (1)
- 论文 (10)
- 工作 (1)
- 数据结构 (6)
- JAVA配置 (1)
- JAVA垃圾回收 (2)
- SVM (13)
- web st (1)
- jvm (7)
- weka libsvm (1)
- weka屈伟 (1)
- job (2)
- 排序 算法 面试 (3)
- spss (2)
- 搜索引擎 (6)
- java 爬虫 (6)
- 分布式 (1)
- data ming (1)
- eclipse (6)
- 正则表达式 (1)
- 分词器 (2)
- 张孝祥 (1)
- solr (3)
- nutch (1)
- 爬虫 (4)
- lucene (3)
- 狗日的腾讯 (1)
- 我的收藏网址 (13)
- 网络 (1)
- java 数据结构 (22)
- ACM (7)
- jboss (0)
- 大纸 (10)
- maven2 (0)
- elipse (0)
- SVN使用 (2)
- office (1)
- .net (14)
- extjs4 (2)
- zhaopin (0)
- C (2)
- spring mvc (5)
- JPA (9)
- iphone (3)
- css (3)
- 前端框架 (2)
- jui (1)
- dwz (1)
- joomla (1)
- im (1)
- web (2)
- 1 (0)
- 移动UI (1)
- java (1)
- jsoup (1)
- 管理模板 (2)
- javajava (1)
- kali (7)
- 单片机 (1)
- 嵌入式 (1)
- mybatis (2)
- layui (7)
- asp (12)
- asp.net (1)
- sql (1)
- c# (4)
- andorid (1)
- 地价 (1)
- yihuo (1)
- oracle (1)
最新评论
-
endual:
https://blog.csdn.net/chenxbxh2 ...
IE6 bug -
ice86rain:
你好,ES跑起来了吗?我的在tomcat启动时卡在这里Hibe ...
ES架构技术介绍 -
TopLongMan:
...
java public ,protect,friendly,private的方法权限(转) -
贝塔ZQ:
java实现操作word中的表格内容,用插件实现的话,可以试试 ...
java 读取 doc poi读取word中的表格(转) -
ysj570440569:
Maven多模块spring + springMVC + JP ...
Spring+SpringMVC+JPA
本文转自Bluenight在《Libsvm 使 用心得》,本人测试完成,只不过是libSVM是3.1版本,python和gnuplot都是最新版本,发现一个问题,在交叉验证时候使用:svm- train -c x -g x -v x trainfile 格式不输出.mode文件!去除-v x 就可输出model文件。另外,在此有个问题:下图中为什么说最好的C g是这样的?到底是如何解释呢?有待进一步解决中,希望同行探讨。
首先下载 Libsvm 、 Python 和 Gnuplot :
l libsvm 的主页 http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 上下载 libsvm (我自己用2.86版本)
l python 的主页 http://www.python.org 下载 python (我自己用2.5版本)
l gnuplot 的主页 http://www.gnuplot.info/ 下载 gnuplot (我用4.0版本)
LIBSVM 使用的一般步骤是:
1 )按照 LIBSVM 软件包所要求的格式准备数据集;
2 )对数据进行简单的缩放操作;
3 )首要考虑选用 RBF 核函数;
4 )采用交叉验证选择最佳参数 C 与 g ;
5 )采用最佳参数 C 与 g 对整个训练集进行训练获取支持向量机模型;
6 )利用获取的模型进行测试与预测。
1 ) LIBSVM 使用的数据格式
该软件使用的训练数据和检验数据文件格式如下:
[label] [index1]:[value1] [index2]:[value2] ...
[label] [index1]:[value1] [index2]:[value2] ...
一行一条记录数据,如 :
+1 1 :0.708 2 :1 3 :1 4 :-0.320 5 :-0.105 6 :-1
这里 (x,y) à ((0.708,1,1, -0.320, -0.105, -1), +1)
label 或说是 class, 就是你要分类的种类,通常是一些整数。
index 是有順序的索引,通常是连续的整数。
value 就是用来 train 的数据,通常是一堆实数。
2 )对数据进行简单的缩放操作
扫描数据 . 因为原始数据可能范围过大或过小 , svmscale 可以先将数据重新 scale ( 縮放 ) 到适当范围使训练与预测速度更快。
svmscale.exe 的用法: svmscale.exe feature.txt feature.scaled
默认的归一化范围是 [-1,1] ,可以用参数 -l 和 -u 分别调整上界和下届 ,feature.txt 是输入特征文件名 输出的归一化特征名为 feature.scaled
3 ) 考虑选用 RBF 核函数
训练数据形成模型( model ) , 实质是算出了 wx+b=0 中的 w,b.
Svmtrain 的用法: svmtrain [options] training_set_file [model_file]
其中 options 涵义如下 :
-s svm 类型:设置 SVM 类型,默认值为 0 ,可选类型有:
0 -- C- SVC
1 -- nu - SVC
2 -- one-class-SVM
3 -- e - SVR
4 -- nu-SVR
-t 核函数类型:设置核函数类型,默认值为 2 ,可选类型有:
0 -- 线性核: u'*v
1 -- 多项式核: (g*u'*v+ coef0)degree
2 -- RBF 核 :exp(-||u-v||*||u-v||/g*g)
3 -- sigmoid 核: tanh(g*u'*v+ coef 0)
-d degree :核函数中的 degree 设置,默认值为 3 ;
-g r(gama) :核函数中的函数设置 ( 默认 1/ k);
-r coef 0 :设置核函数中的 coef0 ,默认值为 0 ;
-c cost :设置 C- SVC 、 e - SVR 、 n - SVR 中从惩罚系数 C ,默认值为 1 ;
-n nu :设置 nu - SVC 、 one-class-SVM 与 nu - SVR 中参数 nu ,默认值 0.5 ;
-p e :核宽 , 设置 e - SVR 的损失函数中的 e ,默认值为 0.1 ;
-m cachesize :设置 cache 内存大小,以 MB 为单位 ( 默认 40) :
-e e :设置终止准则中的可容忍偏差,默认值为 0.001 ;
-h shrinking :是否使用启发式,可选值为 0 或 1 ,默认值为 1 ;
-b 概率估计:是否计算 SVC 或 SVR 的概率估计,可选值 0 或 1 ,默认 0 ;
-wi weight :对各类样本的惩罚系数 C 加权,默认值为 1 ;
-v n : n 折交叉验证模式。
其中 -g 选项中的 k 是指输入数据中的属性数。操作参数 -v 随机地将数据剖分为 n 部分并计算交叉检验准确度和均方根误差。以上这些参数设置可以按照 SVM 的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或 SVM 类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值 。 training_set_file 是要进行训练的数据集 ; model_file 是训练结束后产生的模型文件 ,该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。举个例子如下:
C:/libsvm-2.85/windows>svmtrain heart_scale
*
optimization finished, #iter = 162
nu = 0.431029
obj = -100.877288, rho = 0.424462
nSV = 132, nBSV = 107
Total nSV = 132
现简单对屏幕回显信息进行说明:
#iter 为迭代次数,
nu 与前面的操作参数 -n nu 相同,
obj 为 SVM 文件转换为的二次规划求解得到的最小值,
rho 为判决函数的常数项 b ,
nSV 为支持向量个数,
nBSV 为边界上的支持向量个数,
Total nSV 为支持向量总个数。
训练后的模型保存为文件 *.model ,用记事本打开其内容如下:
svm_type c_svc % 训练所采用的 svm 类型,此处为 C- SVC
kernel_type rbf % 训练采用的核函数类型,此处为 RBF 核
gamma 0.0769231 % 设置核函数中的 g ,默认值为 1/ k
nr_class 2 % 分类时的类别数,此处为两分类问题
total_sv 132 % 总共的支持向量个数
rho 0.424462 % 决策函数中的常数项 b
label 1 -1% 类别标签
nr_sv 64 68 % 各类别标签对应的支持向量个数
SV % 以下为支持向量
1 1:0.166667 2:1 3:-0.333333 4:-0.433962 5:-0.383562 6:-1 7:-1 8:0.0687023 9:-1 10:-0.903226 11:-1 12:-1 13:1
0.5104832128985164 1:0.125 2:1 3:0.333333 4:-0.320755 5:-0.406393 6:1 7:1 8:0.0839695 9:1 10:-0.806452 12:-0.333333 13:0.5
1 1:0.333333 2:1 3:-1 4:-0.245283 5:-0.506849 6:-1 7:-1 8:0.129771 9:-1 10:-0.16129 12:0.333333 13:-1
1 1:0.208333 2:1 3:0.333333 4:-0.660377 5:-0.525114 6:-1 7:1 8:0.435115 9:-1 10:-0.193548 12:-0.333333 13:1
4 )采用交叉验证选择最佳参数 C 与 g
通常而言,比较重要的参数是 gamma (-g) 跟 cost (-c) 。而 cross validation (-v)
的参数常用 5 。那么如何去选取最优的参数 c 和 g 呢? libsvm 的 python 子目录下面的 grid.py 可以帮助我们。 此时。其中安装 python2.5 需要(一般默认安装到 c:/python25
下),将 gnuplot 解压。安装解压完毕后,进入 /libsvm/tools 目录下,用文本编辑器(记事
本, edit 都可以)修改 grid.py 文件,找到其中关于 gnuplot 路径的那项(其默认路径为
gnuplot_exe=r"c:/tmp/gnuplot/bin/pgnuplot.exe" ),根据实际路径进行修改,并保存。然
后,将 grid.py 和 C:/Python25 目录下的 python.exe 文件拷贝到 libsvm/windows 目录下,键入以下命令: $ python grid.py train.1.scale 执行后,即可得到最优参数 c 和 g 。
另外,至于下 libsvm 和 python 的接口的问题,在 libsvm2.86 中林老师已经帮助我们解决,在 /libsvm/windows/python 目录下自带了 svmc.pyd 这个文件,将该文件文件复制到
libsvm/python 目录下,同时,也将 python.exe 文件复制到该目录下,键入以下命令以检验效
果(注意: .Py 文件中关于 gnuplot 路径的那项路径一定要根据实际路径修改):
python svm_test.py
如果能看到程序执行结果,说明 libsvm 和 python 之间的接口已经配置完成,以后就可以直接在 python 程序里调用 libsvm 的函数了!
5 ) 采用最佳参数 C 与 g 对整个训练集进行训练获取支持向量机模型
$ svmtrain –c x –g x –v x training_set_file [model_file]
x 为上述得到的最优参数 c 和 g 的值, v 的值一般取 5 。
6 )利用获取的模型进行测试与预测
使用 Svmtrain 训练好的模型进行测试。输入新的 X 值,给出 SVM 预测出的 Y 值
$ Svmpredict test_file model_file output_file
如: ./svm-predict heart_scale heart_scale.model heart_scale.out
Accuracy = 86.6667% (234/270) (classification)
这里显示的是结果
一个具体使用的例子。
以 libsvm 中的 heart_scale 作为训练数据和测试数据,同时已经将 python 安装至 c 盘,并将 grid.py 文件中关于 gnuplot 路径的默认值修改为实际解压缩后的路径,将
heart_scale 、 grid.py 和 python.exe 拷贝至 /libsvm/windows 文件夹下。
./svm-train heart_scale
optimization finished, #iter = 162
nu = 0.431029
obj = -100.877288, rho = 0.424462
nSV = 132, nBSV = 107
Total nSV = 132
此时,已经得到 heart_scale.model ,进行预测:
./svm-predict heart_scale heart_scale.model heart_scale.out
Accuracy = 86.6667% (234/270) (classification)
正确率为 Accuracy = 86.6667% 。
./python grid.py heart_scale
得到最优参数 c=2048 , g=0.0001220703125.
./svm-train -c 2048 -g 0.0001220703125 heart_scale 得到 model 后,由 ./svm-predict heart_scale heart_scale.model heart_scale.out 得到的正确
率为 Accuracy = 85.1852%.这块还有点迷惑?为什么正确率降低了?
当然也可以结合subset.py 和 easy.py 实现自动化过程。
如果要训练多次,可以写个批处理程序省好多事。
这里举个例子:
::@ echo off
cls
:: split the data and output the results
for /L %%i in (1,1,1000) do python subset.py b59.txt 546 b59(%%i).in8 b59(%%i).out2
for /L %%i in (1,1,1000) do python easy.py b59(%%i).in8 b59(%%i).out2 >> result89.txt
这段批处理代码首先调用subset.py对文件b59.txt执行1000次分层随机抽样(对数据进行80-20%分割)然后调用easy.py 进行1000次参数寻优,把记录结果写到result89.txt中
(包括1000次训练的分类准确率和参数对)。
还可以调用fselect.py进行特征选择,调用plotroc.py进行roc曲线绘制。
先写到这里吧,希望能和大家一起学习libsvm,进一步学好svm。
发表评论
-
LIBSVM简介及其使用方法
2011-11-19 21:53 57975LIBSVM简介及其使用方法(台湾大学林智仁(Lin Chih ... -
LibSvm 使用说明 学习心得
2011-11-19 21:47 5061LibSvm 使用说明 学习心得 (本页内容来自互联网, ... -
libsvm与python的使用
2011-11-19 21:35 2904libsvm与python的使用 ... -
libsvm-2.91中python接口的使用方法
2011-11-19 21:31 4230libsvm-2.91中python接口的 ... -
LibSvm python
2011-11-19 21:29 1803LibSvm python 调试实验 ... -
libsvm的使用
2011-11-18 22:00 1611http://hi.baidu.com/sjk2412/blo ... -
libsvm支持向量机C-SVM和NU-Svm的区别
2011-11-17 14:49 15742c-svc和 nu-svc本质差不多 c-svc中c的范围是 ... -
Weka LibSVM (WLSVM)
2011-11-16 20:09 2381Weka LibSVM (WLSVM): Integrat ... -
LibSvm---API
2011-11-16 14:35 2339http://java-ml.sourceforge.net/ ... -
LIBSVM使用心得(JAVA)
2011-11-16 14:33 4652libsvm 是著名的SVM开源组件,目前有JAVA.C/C ... -
LIBSVM使用心得
2011-11-16 14:31 4142首先下载Libsvm、Python和Gnuplot: l ... -
LIBSVM做回归预测
2011-11-16 14:26 2858LIBSVM做回归预测--终于弄通(原创) (2009- ...
相关推荐
### LIBSVM中归一化和参数估计的重要性 #### 一、引言 LIBSVM是一种广泛应用于机器学习领域的支持向量机(SVM)工具包。它在处理分类和回归问题方面表现优异,尤其适合小到中等规模的数据集。在使用LIBSVM时,数据...
本文将详细介绍LIBSVM的实现细节,并讨论与SVM优化问题、理论收敛性、多分类、概率估计及参数选择等相关的关键议题。 #### 支持向量机简介 支持向量机是一种监督学习模型,主要用于分类和回归分析。它通过寻找一个...
LIBSVM 的特点是对 SVM 所涉及的参数调节相对比较少,提供了很多的默认参数,利用这些默认参数就可以解决很多问题;并且提供了交互检验(Cross Validation)的功能。 七、结论 本文介绍了如何将 LIBSVM 集成到 ...
4. **网格搜索**:libsvm提供了网格搜索工具,用于自动寻找最佳的惩罚参数C和核函数参数γ。 5. **多类分类**:除了二分类,libsvm还支持多类分类任务,通过一对多策略或直接多类算法实现。 6. **兼容性**:库具有...
LIBSVM提供了一系列工具帮助用户选择合适的模型参数,包括交叉验证等技术。这些工具可以帮助用户找到最优的超参数组合,从而提高模型的泛化能力。 #### 实际应用案例 LIBSVM在多个领域都有成功应用,以下是一些...
- **线性核**:使用LIBSVM提供的`svm-train`命令,设置-t参数为0表示采用线性核。根据实验结果,得到的支持向量总数为3个,ρ值为-0.773825,这表明线性核可以较好地拟合该数据集。 - **高斯核**:同样使用`svm-...
此外,惩罚因子也是SVM中的一个关键参数。它控制着误分类样本的惩罚程度,即平衡经验风险和模型复杂度之间的关系。选择合适的惩罚因子对于模型的性能至关重要。 #### 结论 本文提出了一种基于LIBSVM的葡萄酒品质评判...
3. **自动调参**:rb-libsvm可以配合LIBSVM的网格搜索功能进行参数优化,自动寻找最佳的C(惩罚因子)和γ(核函数参数)组合。 4. **内存管理**:rb-libsvm处理了内存分配和释放,使得在Ruby中使用LIBSVM更加安全...
在实现SVM时,LIBSVM考虑了多个关键问题,包括SVM优化问题的解决、理论收敛性、多类分类、概率估计以及参数选择。对于SVM优化问题,LIBSVM采用了高效的优化算法,确保了在大规模数据集上的快速收敛。对于多类分类...
#### 五、结论 通过对上海交通大学模式分析与机器智能实验室对LibSVM-2.6版本的深入分析,我们可以了解到LibSVM在数据结构设计上的巧妙之处,以及在算法实现方面的高效性。这些细节对于理解和支持向量机的学习者来...
LibSVM分类器\n\nLibSVM是一种基于支持向量机(SVM)的分类器,通过设置不同的参数如-S、-K、-D等进行调优。实验结果显示,采用LibSVM的十折交叉验证准确率达到了96.6667%。在测试集上,准确率提升至98.6667%,表现...
【支持向量机(SVM)】支持向量机是一种基于...【结论】SVM作为一种有效的分类工具,在人脸识别领域表现出色。通过优化模型参数和选择合适的核函数,可以提高识别的准确性,因此SVM在人脸识别技术中具有广阔的应用前景。
在Windows系统下使用JGibbs,而在Ubuntu系统下使用BTM-master进行Gibbs抽样参数估计。对于文本分类,研究者选用了Weka中提供的libsvm、Bagging和AdaBoost方法。 6. 实验结果与分析 经过六次实验,研究者发现BTM+...
### 结论 `liblinear`是机器学习库中的重要工具,尤其适用于大型稀疏数据集的线性分类任务。其高效的优化算法、丰富的参数调整选项以及多语言支持,使得它在实际应用中具有很高的价值。了解并熟练掌握`liblinear`,...