SVMtrain的参数c和g的优化

SVMtrain的参数c和g的优化

在svm训练过程中,需要对惩罚参数c和核函数的参数g进行优化,选取最好的参数

知道测试集标签的情况下

是让两个参数c和g在某一范围内取离散值,然后,取测试集分类准确率最佳的参数

不知道测试集标签的情况下

(1)利用交叉验证的方法:(k-fold cross validation)

  1. Start


  2. bestAccuracy = 0 

  3. bestc = 0 

  4. bestg = 0 


  5. //n1 , n2 ,k都是事先给定的值 

  6. for c = 2^(-n1) : 2^(n1) 

  7. for g = 2^(-n2) : 2^(n2) 

  8. 将训练集平均分为k部分,设为 

  9. train(1),train(2), ... ,train(k). 

  10. 分别让每一部分作为测试集进行预测(剩下的k-1部分作为训练集对分类器进行训练)取得最后得到的所有分类的准确率的平均数,设为cv 

  11. if(cv>bestAccuracy) 

  12. bestAccuracy = cv; bestc = c; bestg = g 

  13. end 

  14. end 

  15. end 

  16. over 

(2)leave-one-out cross validation(loo交叉验证)

设原始数据有N个样本,那么LOO-CVj就是N-CV,即每一个样本作为验证集,其余的N-1个样本作为训练集,所以在LOO-CV下会得到N个模型,用N个模型的最终验证集的分类准确率的平均数做为在LOO-CV下分类器的性能指标

** 但是LOO-cv计算量太大,每个样本都要建立一个模型,计算成本太大

当计算出所有的c和g时,这时候这些c和g有可能会出现的是:某些成对出现的c和g验证准确率一样高,这时候选择的是惩罚参数最小的c和g,认为c小的那个对象是最佳的选择

伪代码如下

bestAccuracy = 0

bestc = 0

bestg = 0

//将c和g划分为网格进行搜索

for c = 2 (cmin):2(cmax)

for c = 2 (gmin):2(gmax)

%%采用K-CV方法

将train大致分为K组,记为train(1)train(2)…train(k)

相应的标签也要分离出来记为train_label(1),train_label(2)…train_label(k)

for run = 1:k

让train(run),作为验证集,其他的作为训练集,记录此时的验证准确率为acc(run)

end

cv = (acc(1)+acc(2)+…acc(k))/k

if (cv>bestAccuracy)

bestAccury = cv;bestc=c;bestg=g;

end

end

end

over

时间: 2024-10-14 23:09:25

SVMtrain的参数c和g的优化的相关文章

参数返回值及NRV优化(named return value optimization)

C++11中的移动构造函数又把NRV优化翻出来了,都是采用临时中间值优化,两者不能共存. 参数传递如何实现? [实现模型1]引入临时对象,使用拷贝构造函数初始化.然后利用bitwise copy将其拷贝到x0的位置.比如: void foo( X x0 ); X xx; foo( xx ); 改写成 X __temp0; __temp0.X::X ( xx ); foo( __temp0 );还有一件事需要做,修改foo的声明,可以避免bit-wise copy的那一步. void foo( X

svmtrain输入参数介绍【转】

-s svm类型:SVM设置类型(默认0) 0 -- C-SVC 1 --v-SVC 2 – 一类SVM 3 -- e -SVR 4 -- v-SVR -t 核函数类型:核函数设置类型(默认2) 0 – 线性:u'v 1 – 多项式:(r*u'v + coef0)^degree 2 – RBF函数:exp(-r|u-v|^2) 3 –sigmoid:tanh(r*u'v + coef0) -d degree:核函数中的degree设置(针对多项式核函数)(默认3) -g r(gama):核函数中

第九节,改善深层神经网络:超参数调试、正则化以优化(下)

一 批标准化 (batch normalization)        部分内容来自: Batch Normalization 批标准化 深度学习Deep Learning(05):Batch Normalization(BN)批标准化 参考论文:http://jmlr.org/proceedings/papers/v37/ioffe15.pdf 2015年Google提出的Batch Normalization 训练深层的神经网络很复杂,因为训练时每一层输入的分布在变化,导致训练过程中的饱和,

改善深层神经网络:超参数调试、正则化及优化

第一周   深度学习的实用层面 1.1 训练.验证.测试集 应用机器学习是个高度迭代的过程:想法--->编码--->实验 (1)神经网络的层数 (2)隐含层神经元个数 (3)学习率 (4)激励函数 小规模数据:训练集70%,验证集30%   或者 训练60% 验证20% 测试20% 大规模数据:训练90%以上 注:可以没有测试集,验证集用于检测各种算法模型,选出最好的,验证集和测试集必须来源于同一分布 1.2 偏差.方差 人眼识别错误率(最优误差,贝叶斯误差)0%左右,训练集验证集来源于同一分

]DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week2优化算法

1. Mini batch梯度下降法 介绍 假设我们的数据量非常多,达到了500万以上,那么此时如果按照传统的梯度下降算法,那么训练模型所花费的时间将非常巨大,所以我们对数据做如下处理: 如图所示,我们以1000为单位,将数据进行划分,令$x^{\{1\}}=\{x^{(1)},x^{(2)}……x http://pic.cnhubei.com/space.php?uid=1132&do=album&id=825921http://pic.cnhubei.com/space.php?uid

linux内核参数注释与优化

转自:http://yangrong.blog.51cto.com/6945369/1321594 目录 1.linux内核参数注释 2.两种修改内核参数方法 3.内核优化参数生产配置 参数解释由网络上收集整理,常用优化参数对比了网上多个实际应用进行表格化整理,使查看更直观. 学习linux也有不少时间了,每次优化linux内核参数时,都是在网上拷贝而使用,甚至别人没有列出来的参数就不管了,难道我就不需要了吗? 参考文章: linux内核TCP相关参数解释 http://os.chinaunix

一些影响优化器的初始化参数

一些影响优化器的初始化参数 OPTIMIZER_FEATURES_ENABLE:每个版本的Oracle优化器特性都不相同,特别是做了版本升级以后一定要修改这个参数才可以使用仅被该版本支持的优化器特性.可以赋予它的值如:9.2.0.9.0.2.9.0.1.8.1.7.8.1.6等. CURSOR_SHARING:这个参数会将SQL语句中的直接量用变量来替换,存在大批直接量的OLTP系统可以考虑启用这个参数.但是要注意,绑定变量虽然可以使大量的SQL重用,减少分析时间,但是执行计划可能会不理想.通常

PHP引擎php.ini参数优化

参数以外常见的PHP优化方法手段 1)php引擎缓存加速优化 #xcache.ZendOpcache.eaccelerator #http://www.lichengbing.cn/archivers/270.html 2) 使用tmpfs作为缓存加速缓存的文件目录 tmpfs,基于内存的文件系统,加快转存暂存文件的速度 [[email protected] ~]# mount -t tmpfs tmpfs /dev/shm -o size=256m [[email protected] ~]#

ceph配置参数优化

ceph的配置文件/etc/ceph.conf中可配置参数很多,可以通过以下命令查看: [email protected]:/var/run/ceph# ceph --admin-daemon ceph-mon.osd2.asok config show|wc -l 759 一直想对一些参数进行修改以达到优化性能的目的.以前一篇文章和其它一些资料为基础,总结一下可优化的配置.