python实现svm算法,pythonsvm代码

  python实现svm算法,pythonsvm代码

  主要是借用了一些博客和自己的经验。我觉得收藏起来更有用。

  支持向量机

  数据格式需求-

  属性决策条件属性a条件属性b .

  21:72:5 .

  11:42:2 .

  数据格式转换-

  如果数据较少,可以使用formatdatalibsvm轻松地将文本数据转换为svm工具使用的数据。

  用法如下。

  1.打开FormatDataLibsvm.xls,将数据粘贴到sheet1的topleft单元格中。

  输入格式如下。

  属性a条件属性b决定属性

  75.2

  42.1

  输出数据格式为

  属性决策条件属性a条件属性b .

  21:72:5 .

  11:42:2 .

  2.此外,在“工具”-“宏”-“运行”下还有一个选项(FormatDatatoLibsvm)。只要检查并执行这个。这将解决数据转换问题(如果没有宏选项,请单击“开始- excel选项-”,然后单击功能区上的“开发工具”)

  3.你可以把它复制到记事本上。但是,请注意,在使用libsvm时,请输入。命令行中的txt后缀。

  svm的参数描述-

  要输出类的概率,需要-b参数。

  SVM-train training _ set _ file model _ file

  SVM-预测测试文件模型文件输出文件

  自动脚本:python easy.py train_data

  测试数据

  自动选择最佳参数并自动归一化。

  将训练集与测试结合使用,以使用相同的规范化参数。

  -c:参数

  -g:参数

  -v:交叉检查号

  -ssvm _ type:settypeofsvm(default 0)).

  0

  - C-SVC

  一个

  nu-SVC

  2

  -一级SVM

  三

  --SVR

  四

  - nu-SVR

  -tkernel _ type:settypeofkernelfunction(默认值2))。

  0

  -线性:u*v

  一个

  -多项式:(gamm a* u * v coef0) ^degree

  2

  -radialbasisfunction:exp(-伽马a*u-v^2) ) ) ) ) 0

  三

  - sigmoid : tanh (gamm a* u * v coef0))))))))).

  -d degree:setdegreeinkernelfunction(默认值3))。

  -g gamma:设置gammainkernel函数(default1/num _ features))。

  -r coef 0:set coef 0 inkernelfunction(default 0))。

  - ccost : settheparametercofc-SVC、epsilon-SVR和nu-SVR

  (默认为1)

  -nnu:设置参数转换器-SVC、一级SVM和nu-SVR。

  (默认值为0.5)

  -p:settheepsiloninlossfunctionofepsilon-SVR

  (默认值为0.1)

  -m cachesize:setcache memory size inmb(默认值为100)。

  -e:settoleranceofterminationcriterion(默认值

  0.001 )

  -h shrinking:shrinking heuristics,0还是1

  (默认为1)

  - bprobability _ estimates 3360

  概率估计,0or1(default0))如果需要估计分类到每个类中的概率,必须设置概率)))))。

  -wi重量:套

  ito级重量的参数* C,用于C-SVC

  (默认为1)

  -g选项中的k表示

  输入数据中的属性。

  libsvm的误用。

  (1)简单地将训练集和测试集归一化到[0,1]区间可能导致较差的实验结果。

  (2)如果样本的特征数量非常大,就没有必要使用RBF核将样本映射到高维空间。

  a)当特征数量很大时,使用线性核,结果已经很好了,只需要选择参数C。

  b)虽然RBF核的结果至少比线性核好,但是在前提下搜索整个空间。

  (3)样本数量

  a)推荐线性核,可以达到和RBF一样的性能。

  (4)样本和特性很多:推荐liblinear,时间和内存较少,精度相当。

  (5)样本数和特征:如果要用线性模型,可以用liblinear,用-s。

  2个参数

  当libsvm训练模型时,需要设置以下参数。当然有默认参数,但是在具体应用中效果会大打折扣。

  选项:可用选项的含义如下

  -s svm类型:svm设置类型(默认值为0)

  0 - C-SVC

  1 - v-SVC

  2一种SVM

  3 - e -SVR

  4伏支持向量回归机

  -t内核函数类型:内核函数设置类型(默认为2)

  0线性度:uv

  1-多项式:(r * u v coef0)次

  2RBF函数:exp (-gamma u-v 2)

  3乙状结肠:tanh(r*uv coef0)

  -d degree:核函数中的次数设置(对于多项式核函数)(默认为3)

  -g r(gama):核函数中的伽马函数设置(针对多项式/rbf/sigmoid核函数)(默认为1/k)

  -r coef0:核函数中的coef0设置(对于多项式/sigmoid核函数)((默认值为0)

  -c cost:设置C-SVC、e -SVR和v-SVR的参数(损失函数)(默认为1)

  -n nu:设置v-SVC(一种SVM和v- SVR)的参数(默认为0.5)

  -p p:设置e -SVR中损失函数p的值(默认为0.1)

  -m cachesize:以MB为单位设置缓存内存大小(默认为40)

  -e eps:设置允许的终止标准(默认值为0.001)

  -h收缩:是否使用启发式,0或1(默认为1)

  -wi weight:将哪个类的参数c设置为weight * c(c-SVC中的c)(默认为1)

  -v n: n折交叉校验模式,其中n是折的次数,必须大于等于2。

  其中-g选项中的k是指输入数据中属性的数量。Option -v将数据随机分成n部分。

  建立模型时,需要为上述参数选择合适的值。方法主要有Gridsearch,其他感觉不常用。说白了,Gridsearch是穷尽式的。

  参数优化函数(分类问题):SVMcgForClass

  [bestCVaccuracy,bestc,bestg]=

  SVMcgForClass(train_label,train,

  cmin、cmax、gmin、gmax、v、cstep、gstep、accstep)

  输入:

  Train_label:训练集的标签。格式与svmtrain相同。

  Train:与svmtrain格式相同的训练集。

  Cmin,cmax:罚参数C的取值范围,即在[2 cmin,2 Cmax]范围内寻找最佳参数C。默认值为cmin=-8,cmax=8,即默认惩罚参数C的取值范围为[2 (-8),2 8]。

  Gmin,gmax:RBF核参数g的变化范围,即在[2 gmin,2 gmax]范围内寻找最佳的RBF核参数g。默认值为gmin=-8,gmax=8,即RBF核参数g的默认取值范围为[2 (-8),2 ^ 8]。

  v:十字架

  参数,也就是对定型集进行v折叠。

  交叉验证,默认值为3,即默认执行3重CV过程。

  Cstep,gstep:参数优化是C和G的步长,即C的值为2 cmin,2 (cmin CSTEP),…,2 Cmax,G的值为2 gmin,2 (gmin GSTEP),…,2 GMAX,默认值为CSTEP=1。

  Accstep:最后选择结果图中精度离散显示的步长区间大小(0,100之间的一个数),默认值为4.5。

  输出:

  BestCVaccuracy:最终CV意义上的最佳分类精度。

  Bestc:最佳参数c。

  Bestg:最佳参数g。

  参数优化函数(回归问题):SVMcgForRegress

  [bestCVmse,bestc,bestg]=

  svmcgforegress(train _ label,train,

  cmin、cmax、gmin、gmax、v、cstep、gstep、msestep)

  它的输入和输出与SVMcgForClass类似,这里不再赘述。

  而悲烟已经完成了训练模型,所以在使用它进行分类或者回归之前,你要了解模型的内容和意义。

  它用于训练libsvm附带的心脏数据。

  型号=

  参数:

  [5x1 double]

  nr_class:

  2

  总计v:

  支持向量数量的29%

  rho:

  0.0514%硼

  标签:

  [2x1

  双]%分类中的标签数量

  普罗巴:

  []

  ProbB:

  []

  nSV:

  [2x1

  Double]%每种类型的支持向量的数量

  空间系数:

  [259x1 double]% Wi对应于支持向量

  SVs:

  [259x13 double]%包含259个支持向量。

  模型的意义。参数参数从上到下依次是:

  -s svm类型:svm设置类型(默认值为0)

  -t内核函数类型:内核函数设置类型(默认为2)

  -d degree:核函数中的次数设置(对于多项式核函数)(默认为3)

  -g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)(默认类别数的倒数)

  -r coef0:核函数中的coef0设置(对于多项式/sigmoid核函数)((默认值为0)

  SVM怎样才能取得好成绩?

  1.标准化数据(简单

  缩放)

  2.径向基函数的应用

  核心

  3.使用交叉验证和网格搜索来获得最佳的C和g。

  4.用获得的最优C和g训练训练数据。

  测试

  C语言的参数设置与svm核函数。

  参考文献:支持向量机几种常用核函数及参数选择的比较研究。

  一般可以选择c为:10 t,t=-

  4.4是0.0001到10000。

  选择面越大,错案处罚力度越大,可能导致模型过度拟合。

  在LIBSVM -t中用于指定内核函数类型(缺省值为2)。

  0)线性核函数

  (无其他参数)

  1)多项式核函数

  (重点是顺序的选择,也就是D,一般是1-11: 1 3 5 7 9 11,或者2,4,6……)

  2)RBF核函数

  (RBF核,exp {- Xi-XJ 2/均方误差},其中均方误差反映了数据的波动性。

  通常可以选择以下数的倒数作为参数:0.1 0.2 0.4。

  0.6 0.8 1.6 3.2 6.4 12.8,默认值是类别数的倒数,即1/k,如果按2分类则为0.5)

  3)sigmoid核函数也叫S形核。

  两个参数g和r: g通常是可选的。

  3,R 0.2 0.4 0.60.8 1

  4)自定义内核函数

  对应于四种常见核函数的公式如下:

  对应于内核函数的Libsvm参数:

  1)对于线性核函数,没有需要设置的特殊参数。

  2)对于多项式核函数,有三个参数。-d用于设置多项式核函数的最高次,即公式中的D。默认值为3。-g用于设置核函数中的伽玛参数设置,即公式中的第一个r(伽玛)。默认值是1/k(k是类别数)。-r用于设置核函数中的coef0,这是公式中的第二个r。默认值为0。

  3)对于RBF核函数,有一个参数。-g用于设置核函数中的伽玛参数设置,即公式中的第一个r(伽玛)。默认值是1/k(k是类别数)。

  4)对于sigmoid核函数,有两个参数。-g用于设置核函数中的伽玛参数设置,即公式中的第一个r(伽玛)。默认值是1/k(k是类别数)。-r用于设置核函数中的coef0,这是公式中的第二个r。默认值为0。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: