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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。