libsvm使用
LIBSVM 软件包简介
LIBSVM 是台湾大学林智仁 (Chih-Jen Lin) 博士等开发设计的一个操作简单、易于使用、快速有效的通用 SVM 软件包,可以解决分类问题(包括 C- SVC 、n - SVC )、回归问题(包括 e - SVR 、 n - SVR )以及分布估计( one-class-SVM )等问题,提供了线性、多项式、径向基和 S 形函数四种常用的核函数供选择,可以有效地解决多类问题、交叉验证选择参数、对不平衡样本加权、多类问题的概率估计等。 LIBSVM 是一个开源的软件包,需要者都可以免费的从作者的个人主页 http://www.csie.ntu.edu.tw/~cjlin/ 处获得。他不仅提供了 LIBSVM 的 C++ 语言的算法源代码,还提供了 Python 、 Java 、 R 、 MATLAB 、 Perl 、 Ruby 、 LabVIEW以及 C#.net 等各种语言的接口,可以方便的在 Windows 或 UNIX 平台下使用,也便于科研工作者根据自己的需要进行改进(譬如设计使用符合自己特定问题需要的核函数等)。另外还提供了 WINDOWS 平台下的可视化操作工具 SVM-toy ,并且在进行模型参数选择时可以绘制出交叉验证精度的等高线图。
SVM进行函数估计是有监督学习,进行概率密度估计是非监督学习
自从版本2.8以后 libsvm采用SMO算法
初步使用
将编译好的文件4个文件放在windows文件下(从台湾人网站上下载的文件中有个windows文件将其复制到D:盘),改名windowssvm然后把heart_scale文件拷贝到windowssvm,如下图
heart_scale文件台湾人为我们准备的一些数据,用于测试,以后我们用自己的测试数据
切换到字符目录下:
一二行出现不能打开heart_scale是没有将文件拷贝到与svm-train.exe所在目录。
其中, #iter 为迭代次数, nu 与前面的操作参数 -n n (-n n :设置 n - SVC 、 one-class-SVM 与 n - SVR 中参数 n ,默认值 0.5 ;)相同, obj 为 SVM 文件
转换为的二次规划求解得到的最小值, rho 为判决函数的常数项 b , nSV 为支持
向量个数, nBSV 为边界上的支持向量个数, Total nSV 为支持向量总个数。
注释2:
obj 是对偶SVM问题的最优目标值. rho 是判决函数sgn(w^Tx - rho)的偏项. nSV 和 nBSV 分别代表支持向量和边界支持向量 (即alpha_i = C)的个数. nu-svm 在某中程度上可以看作 C-SVM的等价形式,不过其中的 C被替换为 nu. nu 仅表明了相应的参数.
训练后的模型保存为文件 heart_scale.model:
可以看到多出了heart_scale.model文件,用写字板打开
用记事本等文本浏览器打开
可以看到其内容如下(其后“ % ”后内容为笔者所加注释):
svm_type c_svc % 训练所采用的 svm 类型,此处为 C- SVC
kernel_type rbf % 训练采用的核函数类型,此处为 RBF 核
gamma 0.0769231 % 与操作参数设置中的 g 含义相同
nr_class 2 % 分类时的类别数,此处为两分类问题
total_sv 132 % 总共的支持向量个数
rho -0.424462 % 决策函数中的常数项 b
label 0 1 % 类别标签
nr_sv 64 68 % 各类别标签对应的支持向量个数
SV % 以下为支持向量
test_file 就是我们要 predict 的数据。它的格式跟 svmtrain 的输入,也就是 training_set_file 是一样的!不过每行最前面的 label 可以省略 ( 因为 predict 就是要 predict 那个 label) 。 但如果 test_file 有 label 的值的话, predict 完会顺便拿 predict 出来的值跟 test_file 里面写的值去做比对,这代表: test_file 写的 label 是真正的分类结果,拿来跟我们 predict