1.LIBSVM 是支持向量机svm的库,支持不同版本,这里选用python接口。
在libsvm-3.22的python文件夹下主要包括了两个文件svm.py和svmutil.py。
svmutil.py接口主要包括了high-level的函数,这些函数的使用和LIBSVM的MATLAB接口大体类似。
svmutil中主要包含了以下几个函数:
svm_train() : 训练svm模型,接受特定的输入才能产生模型,才能对模型进行预测
svm_predict(): 依照已经 train 好的 model, 再加上给定的输入 ( 新值 ), 输出 predict ( 预测 ) 新值所对应的类别 (class)
svm_read_problem() : 从libsvm格式的文件读取数据
svmscale:重新调整数据,因为原始数据可能范围过大或者过小,svmscale可以将数据重新缩放到适当范围,方便使用稀疏矩阵
svm_load_model() : 加载libsvm模型
svm_save_model(): 保存模型到文件中
evaluations() : 评估预测结果
svm.py接口主要包括了一些low-level的应用。在svm.py中采用了python内置的ctypes库,由此python可以直接访问svm.h中定义的C结构和接口函数。svm.py主要运用了四个数据结构svm_node, svm_problem, svm_parameter和svm_model。
2. 使用LIBSVM的一般步骤:
1)按照LIBSVM软件包所要求的格式准备数据集;
2)对数据进行简单的缩放操作;
3)首要考虑选用RBF 核函数;
4)采用交叉验证选择最佳参数C与g ;
5)采用最佳参数C与g 对整个训练集进行训练获取支持向量机模型;
6)利用获取的模型进行测试与预测。
3.1 libsvm的数据格式:
[label] [index1]:[value1] [index2]:[value2] ... E:+1 1:0.708 2:1 3:1 4:-0.320 5:-0.105 6:-1
[类别编号][特征1][特征值][特征2][特征值]...
label(class)要分类的种类,一般为整数,可以自己随意定,但如果是回归的话就要实事求是
index:有顺序的索引,通常是连续的整数,若value为0,序号可以不连续
value:要训练的数据,从分类的角度说就是特征值
不同数据之间用空格隔开。
3.2对数据进行简单的缩放操作
svmscale是用来对原始样本进行缩放的, 因为原始数据可能范围过大或过小,缩放到适当范围使训练与预测速度更快,范围可以自己定, 一般是[0,1]或[-1,1].
用法: svmscale [-l lower] [-u upper] [-l 数据下限值] [-u 数据上限值]
[-y y_lower y_upper] [-y 缩放的下限值 缩放的上限值]
[-s save_filename] [-s 将缩放的规则保存的文件名]
[-r restore_filename] filename [-r 将已经存在的规则文件名restore_filename进行缩放] [要缩放的文件名]
其中, []中都是可选项:
-l: 设定数据下限; lower: 设定的数据下限值, 缺省为-1
-u: 设定数据上限; upper: 设定的数据上限值, 缺省为1
-y: 是否对目标值同时进行缩放; y_lower为下限值, y_upper为上限值;
-s save_filename: 表示将缩放的规则保存为文件save_filename;
-r restore_filename: 表示将按照已经存在的规则文件restore_filename进行缩放;
filename: 待缩放的数据文件, 文件格式按照libsvm格式.
默认情况下, 只需要输入要缩放的文件名就可以了: 比如(已经存在的文件为test.txt)
svmscale test.txt
这时, test.txt中的数据已经变成[-1,1]之间的数据了. 但是, 这样原来的数据就被覆盖了, 为了让规划好的数据另存为其他的文件, 我们用一dos的重定向符>来另存为(假设为out.txt):
svmscale test.txt > out.txt
运行后, 我们就可以看到目录下多了一个out.txt文件, 那就是规范后的数据. 假如, 我们想设定数据范围[0,1], 并把规则保存为test.range文件:
svmscale –l 0 –u 1 –s test.range test.txt > out.txt
这时, 目录下又多了一个test.range文件, 可以用记事本打开, 下次就可以用-r test.range来载入了.
3.3考虑选用RBF核函数
svmtrain主要实现对训练数据集的训练, 并可以获得SVM模型
用法: svmtrain [options] training_set_file [model_file]
其中, options为操作参数, 可用的选项即表示的涵义如下所示:
-s 设置svm类型:
0 – C-SVC
1 – v-SVC
2 – one-class-SVM
3 – ε-SVR
4 – n – SVR