⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 19.txt

📁 This complete matlab for neural network
💻 TXT
字号:
发信人: fpzh (fpzh), 信区: DataMining
标  题: LibSVM使用的一点体会
发信站: 南京大学小百合站 (Thu May 22 18:19:17 2003)

本人接触SVM的时间不是很长,LibSVM也只是这学期才开始用,很多功能都没用过,先简
单说一下,给大家开个头,算是抛砖引玉吧。这些东西基本上都可以从LibSVM的手册、
FAQ和Readme文件里找到,另外,GzLi说的不错,www.kernel-machines.org上的论坛里
有不少Dr. Lin的帖子(他真是个热心人)。

LibSVM是由Chih-Chung Chang 和 Chih-Jen Lin(National Taiwan University,http
://www.csie.ntu.edu.tw/~cjlin/)开发的一个C/C++的SVM工具。最新版本是2.4(居然
是在愚人节发布的),可以很容易的在VC下编译。LibSVM支持多类分类,可以做回归;
它的分解算法结合了SMO和SVMLight;还有一个Model Selection的工具。
但是这里面我只用LibSVM做过分类。

LibSVM训练数据的格式是这样的
类标签 属性标签1:属性值 ... 属性标签n:属性值
比如  1 1:4 2:9  3:16 ...
      6 2:7 5:10 7:9  ...
这些值全都是整数,类标签(Label)也是整数编码的。LibSVM支持稀疏值,如果属性值
为0,就忽略。数据格式一般要自己转换。

如果数据的值域范围比较大,训练前最好Scale一下,注意要将训练文件和测试文件合在
一起Scale,然后再分开。为什么要Scale呢,根据以前看得东西和我自己的理解,如果
数据的值域比较大,比如有的属性值可能会是十几甚至几十上百,训练迭代迭代过程中
可能会产生比较大的值,会影响精度,甚至可能很长时间都不收敛。
如果原始数据的某个属性值全为0,则Scale会忽略该属性,Scale后的数据中没有该属性
Scale时,结果会直接输出到屏幕,可以做重定向,也可以修改Scale的输出代码。

SVMTrain的选项有很多,具体可以看Readme文件。基本的命令格式是
SVMTrain train.data model.data,train.data是训练数据文件名;LibSVM将训练结果
存成一个文本格式的模型文件,model.data是模型文件名,这个参数可以省略,LibSVM
会自己为文件起名。
这样训练的结果,Model参数都是缺省的(Readme文件中有说明),核函数是RBF核,ga
mma=1/属性个数,C缺省为1(?)...


模型文件的格式是这样的
svm_type c_svc  // 训练的类型,这里是普通的SVM分类器(分类还可以是nuSVM,还可
                // 以做回归)
kernel_type rbf // 核函数类型,这里是RBF核
gamma 0.015625  // 核参数
nr_class 4      // 类别数
total_sv 348    // 支持向量总数
rho 0.423513 0.969133 0.268923 0.469667 // 各分类器中w*x-b中b的值
label 0 7 4 6   // 各类标签
nr_sv 65 86 117 80  // 各类的SV个数,顺序与Label同
SV              // 以下是支持向量。每一行是一个SV,SV按label中给出的顺序依
                // 类别列出,每类的SV个数由nr_sv决定。每一行前面是该SV在它所
                // 涉及的分类器中的系数,即Alpha*y。系数的格式比较麻烦,
                // 先不说了。
0 1 0 1:-0.733333 2:-0.466667 3:-0.466667 ...
0 1 0 1:-0.733333 2:-0.466667 3:-0.333333 ...
0 0 1 1:-0.466667 2:0.0666667 3:-0.333333 ...


LibSVM用One Against One作多类分类,即构造N*(N-1)/2个分类器(N是类别数),用
Max Win判别。在对类i&j构造分类器时,如果i类的第一个样本出现在j类的样本前面,
则总是认为i类是正例。
训练后的屏幕输出类似于这样(这是两类的)
*
optimization finished, #iter = 194  //迭代次数
nu = 0.127487   // ?,不懂,请高人指点
obj = -91.524213, rho = -0.140919  // 也不太明白,obj是二次函数的目标函数值?
rho是b的值吧
nSV = 152, nBSV = 140   // nSV是支持向量个数,前两天听人说是nBSV是Boundary SV的
个数,就是SV=C的个数吧
Dr. Lin的主页上有很多资料可以下载。
先想到这么多,请大家继续...

--
※ 来源:.南京大学小百合站 bbs.nju.edu.cn.[FROM: 211.81.59.105]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -