支持向量机用法

1.文件中数据格式

label index1:value1 index2:value2 ...

Label在分类中表示类别标识,在预测中表示对应的目标值

Index表示特征的序号,一般从1开始,依次增大

Value表示每个特征的值

例如:

3 1:0.122000 2:0.792000

3 1:0.144000 2:0.750000

3 1:0.194000 2:0.658000

3 1:0.244000 2:0.540000

3 1:0.328000 2:0.404000

3 1:0.402000 2:0.356000

3 1:0.490000 2:0.384000

3 1:0.548000 2:0.436000

数据文件准备好后,可以用一个python程序检查格式是否正确,这个程序在下载的libsvm文件夹的子文件夹tools下,叫checkdata.py,用法:在windows命令行中先移动到checkdata.py所在文件夹下,输入:checkdata.py 你要检查的文件完整路径(包含文件名)

回车后会提示是否正确。

2.对数据进行归一化。

该过程要用到libsvm软件包中的svm-scale.exe

Svm-scale用法:

用法:svmscale [-l lower] [-u upper] [-y y_lower y_upper] [-s save_filename] [-r restore_filename] filename     (缺省值: lower = -1,upper = 1,没有对y进行缩放)

其中, -l:数据下限标记;lower:缩放后数据下限;

-u:数据上限标记;upper:缩放后数据上限;

-y:是否对目标值同时进行缩放;y_lower为下限值,y_upper为上限值;(回归需要对目标进行缩放,因此该参数可以设定为 –y -1 1 )

-s save_filename:表示将缩放的规则保存为文件save_filename;

-r restore_filename:表示将缩放规则文件restore_filename载入后按此缩放;

filename:待缩放的数据文件(要求满足前面所述的格式)。

数据集的缩放结果在此情况下通过DOS窗口输出,当然也可以通过DOS的文件重定向符号“>”将结果另存为指定的文件。该文件中的参数可用于最后面对目标值的反归一化。反归一化的公式为:

(Value-y_lower)*(max-min)/(y_upper - y_lower)+min

其中value为归一化后的值,max,min分别是归一化之前所有目标值的最大值和最小值,其他参数与前面介绍的相同。

注意:    将训练数据集与测试数据集放在同一个文本文件中一起归一化,然后再将归一化结果分成训练集和测试集。

3.训练数据,生成模型。

用法: svmtrain [options] training_set_file [model_file]

其中, options(操作参数):可用的选项即表示的涵义如下所示

-s svm类型:设置SVM 类型,默认值为0,可选类型有(对于回归只能选3或4):

0 -- C- SVC     1 -- n - SVC     2 -- one-class-SVM     3 -- e - SVR     4 -- n - SVR

-t 核函数类型:设置核函数类型,默认值为2,可选类型有:

0 -- 线性核:u‘*v

1 -- 多项式核: (g*u‘*v+ coef 0)deg ree

2 -- RBF 核:e( u v 2) g -

3 -- sigmoid 核:tanh(g*u‘*v+ coef 0)

-d degree:核函数中的degree设置,默认值为3;

-g g :设置核函数中的g ,默认值为1/ k ;

-r coef 0:设置核函数中的coef 0,默认值为0;

-c cost:设置C- SVC、e - SVR、n - SVR中从惩罚系数C,默认值为1;

-n n :设置n - SVC、one-class-SVM 与n - SVR 中参数n ,默认值0.5;

-p e :设置n - 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 和 –g,-c和-g的调整除了自己根据经验试之外,还可以使用grid.py对这两个参数进行优化。

注意:经过实测,在用于分类时,grid.py能得到较好参数值,但用于回归时得到的参数值效果很差。

该优化过程需要用到Python(2.5),Gnuplot(4.2),grid.py(该文件需要修改路径)。

然后在命令行下面运行:

grid.py -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -s 3 -t 2 -v 5 -svmtrain E:\libsvm-2.86\windows\svm-train.exe -gnuplot E:\gnuplot\bin\pgnuplot.exe  E:\libsvm\libsvm-2.86\windows\train.txt以上三个路径根据实际安装情况进行修改。

-log2c是给出参数c的范围和步长

-log2g是给出参数g的范围和步长

-log2p是给出参数p的范围和步长上面三个参数可以用默认范围和步长

-s选择SVM类型,也是只能选3或者4

-t是选择核函数

-v 5 将训练数据分成5份做交叉验证。默认为5

搜索结束后可以在最后一行看到最优参数。

其中,最后一行的第一个参数即为-c,第二个为-g,第三个为-p,前三个参数可以直接用于模型的训练。

然后,根据搜索得到的参数,重新训练,得到模型。

命令行会出现以下内容:

optimization finished, #iter = 162

nu = 0.431029

obj = -100.877288, rho = 0.424462

nSV = 132, nBSV = 107

Total nSV = 132

  其中,#iter为迭代次数,nu 是你选择的核函数类型的参数,obj为SVM文件转换为的二次规划求解得到的最小值,rho为判决函数的偏置项b,nSV 为标准支持向量个数(0<a[i]<c),nBSV为边界上的支持向量个数(a[i]=c),Total nSV为支持向量总个数(对于两类来说,因为只有一个分类模型Total nSV = nSV,但是对于多类,这个是各个分类模型的nSV之和)。

模型文件内容前几行大致如下:

svm_type epsilon_svr//svm类型

kernel_type rbf//核函数类型

gamma 100//训练时参数g的值

nr_class 2  //类别数,此处为两分类问题

total_sv 12//支持向量个数

rho -0.35336//判决函数的偏置项b

SV //以下为各个类的权系数及相应的支持向量

文件中下面是支持向量数据

4.测试

用法:svmpredict [options] test_file model_file output_file options(操作参数): -b probability_estimates:是否需要进行概率估计预测,可选值为0 或者1,默认值为0。 model_file 是由svmtrain 产生的模型文件;

test_file 是要进行预测的数据文件;

output_file 是svmpredict 的输出文件,表示预测的结果值。

输出结果包括均方误差(Mean squared error)和相关系数(Squared correlation coefficient)。

5.实例

<1> 下载Libsvm、Python和Gnuplot。我用的版本分别是:Libsvm(2.8.1),Python(2.4),Gnuplot(3.7.3)。

<2> 修改训练和测试数据的格式:

目标值 第一维特征编号:第一维特征值 第二维特征编号:第二维特征值 …

例如:

2.3 1:5.6 2:3.2

表示训练用的特征有两维,第一维是5.6,第二维是3.2,目标值是2.3

注意:训练和测试数据的格式必须相同,都如上所示。测试数据中的目标值是为了计算误差用

检查格式正确性:用checkdata.py,上面已经介绍过

<3>开始处理数据

分别使用Libsvm中的Windows版本的工具svmscale.exe进行训练和测试数据的归一化,svmtrain.exe进行模型训练,svmpredict.exe进行预测

(1)Svm-scale.exe用法:

Svm-scale.exe -y 0 1 -l 0 -u 1 feature.txt feature.scaled

讲目标值和特征值都归一到[-1,1],默认的归一化范围是[-1,1],可以用参数-y ,-l和-u分别调整上界和下届,feature.txt是输入特征文件名

输出的归一化文件名为feature.scaled

然后将feature.scaled中的某些数据剪切到另一文件feature_test.scaled中,用于最后测试。

(2)svm-train.exe训练模型

Svm-train.exe -s 3 -p 0.0001 -t 2 -g 32 -c 0.53125 feature.scaled

训练得到的模型为feature.scaled.model

具体的参数含义可以参考帮助文档。这里-s是选择SVM的类型。对于回归来说,只能选3或者 4,3表示epsilon-support vector regression, 4表示nu-support vector regression。-t是选择核函数,通常选用RBF核函数。-p尽量选个比较小的数字。需要仔细调整的重要参数是-c和-g。除非用 grid.py来搜索最优参数,否则只能自己慢慢试了。

(3)用svm-predict.exe进行预测

Svm-predict.exe feature_test.scaled feature.scaled.model feature_test.predicted

其中feature_test.scaled是归一化后的测试特征文件名,feature.scaled.model是训练好的模型,SVM预测的值在feature_test.predicted中

6.svm-toy.exe的使用

在libsvm-3.19\windows下有个名为svm-toy.exe的,他是用来展示你的数据样式和查看预测分类结果的。

可以在上面任意点击,他会根据点击的位置生成点,”change”可以改变点的颜色,“save”用来保存这些数据到一个文件,也可以用“load”装载经过归一化后的数据文件,在按钮后面输入想设置的参数后,点击”run”就会出现分类或预测结果。利用它,可以直观地看到改变某些参数导致的变化和结果,从而便于找到合适参数。

例如:对于下列数据

0.239 1:0.000

0.351 1:0.033

0.342 1:0.067

0.338 1:0.100

0.350 1:0.133

0.375 1:0.167

0.032 1:0.200

0.192 1:0.233

0.059 1:0.267

0.242 1:0.300

0.113 1:0.333

0.437 1:0.367

0.650 1:0.400

0.796 1:0.433

0.939 1:0.467

0.892 1:0.500

0.874 1:0.533

0.768 1:0.567

0.672 1:0.600

0.411 1:0.633

0.396 1:0.667

0.184 1:0.700

0.000 1:0.733

0.118 1:0.767

0.165 1:0.800

0.293 1:0.833

0.331 1:0.867

0.356 1:0.900

0.317 1:0.933

0.329 1:0.967

0.183 1:1.000

时间: 2024-10-01 04:23:46

支持向量机用法的相关文章

支持向量机(SVM)算法的matlab的实现

支持向量机(SVM)的matlab的实现 支持向量机是一种分类算法之一,matlab中也有相应的函数来对其进行求解:下面贴一个小例子,这个例子来源于我们实际的项目. clc; clear; N=10; %下面的数据是我们实际项目中的训练样例(样例中有8个属性) correctData=[0,0.2,0.8,0,0,0,2,2]; errorData_ReversePharse=[1,0.8,0.2,1,0,0,2,2]; errorData_CountLoss=[0.2,0.4,0.6,0.2,

在kyphosis数据集建立支持向量机分类器

1.  e1701简介 R语言的e1071包提供了对libsvm的接口.库libsvm包括了常用的核,如线性,多项式,RBF,sigmoid等.多分类通过一对一的投票机制(one-against-one voting scheme)而实现.predict()是训练函数,plot()可视化数据,支持向量,决策边界(如果提供的话).参数调整tune(). 用e1071包中svm函数可以得到与libsvm相同的结果.write.svm()更是可以把R训练得到的结果写为标准的Libsvm格式,以供其他环

支持向量机(二)线性可分支持向量机与硬间隔最大化

本文原创如需转载请注明出处 阅读目录一.什么是函数间隔? 二.什么是几何间隔? 三.函数间隔与几何间隔的关系? 四.硬间隔最大化 五.学习的对偶算法 一.函数间隔 在图A,B,C三点,A离超平面是最远的,所以A被分类错误的可能性是最小的,相反C离超平面的距离是最近的,所以C被分类错误的可能性是最大的,这很好理解.那么我们就可以用“一个点距离超平面的远近”来表示分类预测的确信程度 因此我们只需要寻找一个超平面离所有边缘点都最远. a.我们用的绝对值表示点x与超平面的距离 b.对于样本点x来说,y是

在R中使用支持向量机(SVM)进行数据挖掘(上)

在R中,可以使用e1071软件包所提供的各种函数来完成基于支持向量机的数据分析与挖掘任务.请在使用相关函数之前,安装并正确引用e1071包.该包中最重要的一个函数就是用来建立支持向量机模型的svm()函数.我们将结合后面的例子来演示它的用法. 下面这个例子中的数据源于1936年费希尔发表的一篇重要论文.彼时他收集了三种鸢尾花(分别标记为setosa.versicolor和virginica)的花萼和花瓣数据.包括花萼的长度和宽度,以及花瓣的长度和宽度.我们将根据这四个特征来建立支持向量机模型从而

支持向量机 (SVM)分类器原理分析与基本应用

前言 支持向量机,也即SVM,号称分类算法,甚至机器学习界老大哥.其理论优美,发展相对完善,是非常受到推崇的算法. 本文将讲解的SVM基于一种最流行的实现 - 序列最小优化,也即SMO. 另外还将讲解将SVM扩展到非线性可分的数据集上的大致方法. 预备术语 1. 分割超平面:就是决策边界 2. 间隔:样本点到分割超平面的距离 3. 支持向量:离分割超平面距离最近的样本点 算法原理 在前一篇文章 - 逻辑回归中,讲到了通过拟合直线来进行分类. 而拟合的中心思路是求错误估计函数取得最小值,得到的拟合

支持向量机 SVM - Wenjing

概念 将向量映射到一个更高维的空间里,在这个空间里建立有一个最大间隔超平面.在分开数据的超平面的两边建有两个互相平行的超平面,分隔超平面使两个平行超平面的距离最大化.假定平行超平面间的距离或差距越大,分类器的总误差越小. 基本模型是定义在特征空间上的间隔最大的线性分类器 SVM的的学习算法就是求解凸二次规划的最优化算法. 数学理论 评估指标 ScikitLearn 中的线性回归用法 12345678910111213 from sklearn.model_selection import tra

爬虫智能解析库 Readability 和 Newspaper 的用法

舆情爬虫是网络爬虫一个比较重要的分支,舆情爬虫往往需要爬虫工程师爬取几百几千个新闻站点.比如一个新闻页面我们需要爬取其标题.正文.时间.作者等信息,如果用传统的方式来实现,每一个站点都要配置非常多的规则,如果要维护一个几百上千的站点,那人力成本简直太高了. 如果有一种方式可以在保证差不多的准确率的前提下,大幅提高提取效率的话,就需要用到智能文本提取了. 本文首先介绍一下智能文本提取的基本原理,让大家对智能提取有基本的了解.然后介绍几个比较基础的工具包,准确率并不是很高,可以尝试一用.最后再介绍几

js中获取时间new date()的用法

js中获取时间new date()的用法 获取时间:   var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获取当前年份(2位) 2 myDate.getFullYear(); //获取完整的年份(4位,1970-????) 3 myDate.getMonth(); //获取当前月份(0-11,0代表1月) 4 myDate.getDate(); //获取当前日(1-31) 5 myDate.getDay();

20.5 Shell脚本中的逻辑判断;20.6 文件目录属性判断;20.7 if特殊用法;20.8 20.9 cace判断(上下)

扩展: select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html 20.5 Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 1. 创建if1.sh测试脚本: [[email protected] ~]# vi if1.sh a=5,如果a大于3,满足这个条件,显示ok 添加内容: #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi 2. 执行if1.sh脚本: [[e