关于SVM参数c&g选取的总结帖[matlab-libsvm]

采用交叉验证选择最佳参数C与g 在svm_train中-c和-g是最常用的两个参数,其中-c是设置C-SVC、e-SVR、n-SVR中从罚系数C,默认值为1;-g是核函数中函数设置。那么如何去选取最优的参数c和g呢?libsvm 的 python 子目录下面的 grid.py 可以帮助我们     1.解压gnuplot,如果没有的话,可以在网上下载,网址为http://www.gnuplot.info/download.ht 阅读详情
 

写了个程序 来选取SVM中参数 c和g的最佳值.
[写这个的目的是方便大家用这个小程序直接来寻找
c和g的最佳值,不用再另外编写东西了. ]
其实原本libsvm C语言版本中有相应的子程序可以找到最佳的c和g,需装载python语言然后用py 那个画图 就可以找到最佳的c和g,我写了个matlab版本的.算是弥补了libsvm在matlab版本下的空缺.


测试数据 还是我视频 里的wine data.

寻找最佳c和g的思想仍然是让c和g在一定的范围里跑(比如 c = 2^(-5),2^(-4),...,2^(5),g = 2^(-5),2^(-4),...,2^(5)),然后用cross validation的想法找到是的准确率最高的c和g,在这里我做了一点修改(纯粹是个人的一点小经验和想法),我改进的是: 因为会有不同的c和g都对应最高的的准确率,我把具有最小c的那组c和g认为是最佳的c和g,因为惩罚参数不能设置 太高,很高的惩罚参数能使得validation数据的准确率提高,但过高的惩罚参数c会造成过学习状态,反正从我用SVM到现在,往往都是惩罚参数c过高会导致最终测试集合的准确率并不是很理想..

在使用这个程序时也有小技巧,可以先大范围粗糙的找 比较理想的c和g,然后再细范围找更加理想的c和g.

比如首先让 c = 2^(-5),2^(-4),...,2^(5),g = 2^(-5),2^(-4),...,2^(5)在这个范围找比较理想的c和g,如图:
======

======
此时bestc = 0.5,bestg=1,bestacc = 98.8764[cross validation 的准确率]

最终测试集合的准确率 Accuracy = 96.6292% (86/89) (classification)
======
此时看到可以把c和g的范围缩小.还有步进的大小也可以缩小(程序里都有参数可以自己调节,也有默认值可不调节).
让 c = 2^(-2),2^(-1.5),...,2^(4),g = 2^(-4),2^(-3.5),...,2^(4)在这个范围找比较理想的c和g,如图:
=============

===============
此时bestc = 0.3536,bestg=0.7017,bestacc = 98.8764[cross validation 的准确率]
最终测试集合的准确率 Accuracy = 96.6292% (86/89) (classification)
===================
上面第二个的测试的代码

:

复制内容到剪贴板
代码:
load wine_SVM;

train_wine = [wine(1:30,:);wine(60:95,:);wine(131:153,:)];
train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];

test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];
test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];

[train_wine,pstrain] = mapminmax(train_wine');
pstrain.ymin = 0;
pstrain.ymax = 1;
[train_wine,pstrain] = mapminmax(train_wine,pstrain);

[test_wine,pstest] = mapminmax(test_wine');
pstest.ymin = 0;
pstest.ymax = 1;
[test_wine,pstest] = mapminmax(test_wine,pstest);

train_wine = train_wine';
test_wine = test_wine';

[bestacc,bestc,bestg] = SVMcg(train_wine_labels,train_wine,-2,4,-4,4,3,0.5,0.5,0.9);

cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg)];
model = svmtrain(train_wine_labels,train_wine,cmd);
[pre,acc] = svmpredict(test_wine_labels,test_wine,model);

============我写的那个选取SVM中参数c和g的最佳值.的程序的代码  SVMcg.m====================

复制内容到剪贴板
代码:
function [bestacc,bestc,bestg] = SVMcg(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,accstep)
%SVMcg cross validation by faruto
%Email:farutoliyang@gmail.com QQ:516667408 http://blog.sina.com.cn/faruto BNU
%last modified 2009.8.23
%Super Moderator @ www.ilovematlab.cn
%% about the parameters of SVMcg
if nargin < 10
    accstep = 1.5;
end
if nargin < 8
    accstep = 1.5;
    cstep = 1;
    gstep = 1;
end
if nargin < 7
    accstep = 1.5;
    v = 3;
    cstep = 1;
    gstep = 1;
end
if nargin < 6
    accstep = 1.5;
    v = 3;
    cstep = 1;
    gstep = 1;
    gmax = 5;
end
if nargin < 5
    accstep = 1.5;
    v = 3;
    cstep = 1;
    gstep = 1;
    gmax = 5;
    gmin = -5;
end
if nargin < 4
    accstep = 1.5;
    v = 3;
    cstep = 1;
    gstep = 1;
    gmax = 5;
    gmin = -5;
    cmax = 5;
end
if nargin < 3
    accstep = 1.5;
    v = 3;
    cstep = 1;
    gstep = 1;
    gmax = 5;
    gmin = -5;
    cmax = 5;
    cmin = -5;
end
%% X:c Y:g cg:acc
[X,Y] = meshgrid(cmin:cstep:cmax,gmin:gstep:gmax);
[m,n] = size(X);
cg = zeros(m,n);
%% record acc with different c & g,and find the bestacc with the smallest c
bestc = 0;
bestg = 0;
bestacc = 0;
basenum = 2;
for i = 1:m
    for j = 1:n
        cmd = ['-v ',num2str(v),' -c ',num2str( basenum^X(i,j) ),' -g ',num2str( basenum^Y(i,j) )];
        cg(i,j) = svmtrain(train_label, train, cmd);
        
        if cg(i,j) > bestacc
            bestacc = cg(i,j);
            bestc = basenum^X(i,j);
            bestg = basenum^Y(i,j);
        end
        if ( cg(i,j) == bestacc && bestc > basenum^X(i,j) )
            bestacc = cg(i,j);
            bestc = basenum^X(i,j);
            bestg = basenum^Y(i,j);
        end
        
    end
end
%% to draw the acc with different c & g
[C,h] = contour(X,Y,cg,60:accstep:100);
clabel(C,h,'FontSize',10,'Color','r');
xlabel('log2c','FontSize',10);
ylabel('log2g','FontSize',10);
grid on;

=====================================


这样那个libsvm-matlab工具箱 我就有了自己的一个升级版本的了.大家可以把这个SVMcg.m加进去 一起用了...

里面有SVMcg.m使用说明.如下:
[bestacc,bestc,bestg] = SVMcg(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,accstep)

train_label:训练 集标签.要求与libsvm工具箱中要求一致.
train:训练集.要求与libsvm工具箱中要求一致.
cmin:惩罚参数c的变化范围的最小值(取以2为底的对数后),即 c_min = 2^(cmin).默认为 -5
cmax:惩罚参数c的变化范围的最大值(取以2为底的对数后),即 c_max = 2^(cmax).默认为 5
gmin:参数g的变化范围的最小值(取以2为底的对数后),即 g_min = 2^(gmin).默认为 -5
gmax:参数g的变化范围的最小值(取以2为底的对数后),即 g_min = 2^(gmax).默认为 5

v:cross validation的参数,即给测试集分为几部分进行cross validation.默认为 3
cstep:参数c步进的大小.默认为 1
gstep:参数g步进的大小.默认为 1
accstep:最后显示准确率图时的步进大小. 默认为 1.5
[上面这些参数大家可以更改以期达到最佳效果,也可不改用默认值]

====================

SVM模型应用(四)SVM模型的超参数选择 SVM模型超参数优化目前常用的方法是让C和g在一定的范围内取值,对于取定的c和g,把训练集作为原始数据集利用K-CV方法得到在此对c和g组合下验证集的分类准确率,最终取得训练集验证分类准确率最高的那组c和g作为最佳参数。对于可能会有多组的c和g对应着最高的验证分类准备率的情况下,选取能够达到最高验证分类准确率中参数c最小的那对c和g作为最佳的参数,在取最小c的情况下,可能还会存在多组g,那么就选取... 阅读详情

相关推荐

SVM模型中的C和gamma参数及其影响

在SVM中,我们的目标是找到一个最佳的超平面来分割数据集,并最小化误分类的样本数。然而,这并不是唯一的目标,因为如果我们希望获得更大的边界间隔(Margin),即让超平面与数据点之间的距离尽可能大,我们可以试着减少误分类的样本数。其中,'kernel’表示核函数类型,C是一个数组,定义了C参数的取值范围,gamma也是一个数组,定义了gamma参数的取值范围。C和gamma参数都会影响模型的分类效果和泛化能力,因此,我们需要根据数据集的特性,来调整这些参数,以获得更好的模型性能。

qq_37934722的博客 2894

SVM参数优化

SVM参数优化 导入包 from sklearn.svm import SVC from sklearn.model_selection import GridSearchCV 将SVM的C值和gamma调参,C值范围为2−5{2^{-5}}2−5到215{2^{15}}215, gamma值范围为2−15{2^{-15}}2−15到23{2^{3}}23. lmh_svm = SVC(deci...

awd5174119的博客 5633

【疾病检测】基于支持向量机SVM实现玉米种子破损识别含Matlab源码

1 简介 针对农业领域植物病虫害检测问题,提出一种基于高清视频图像融合特征的支持向量机( SVM)的检测方法,实现农业生产中植物病虫害的快速检测.对每幅植物叶片图像的颜色,HSV,纹理和方向梯度直方图四种特征采用基于特征包的多特征融合方法,形成特征向量,并利用SVM分类器进行训练分类.对单特征与融合特征的SVM分类器性能进行试验比较,所提出的方法具有较高的准确率. 植物病害是指植物在生物或非生物因素的影响下,发生的形态、生理和生化上的病理变化,会阻碍植物正常生长、发育和结果的进程。其中,植物叶部病害非常

qq_59747472的博客 597

SVM模型进行分类预测时的参数调整技巧

一:如何判断调参范围是否合理 正常来说,当我们参数在合理范围时,模型在训练集和测试集的准确率都比较高;当模型在训练集上准确率比较高,而测试集上的准确率比较低时,模型处于过拟合状态;当模型训练集和测试集上准确率都比较低,模型处于欠拟合状态。正常来说测试集上的准确率都会比训练集要低。 二:如何确定参数的调节方向 当使用线性支持向量机时,我们只需调节正则化参数C的范围即可。 这里我们以RBF作为核的SVM为例,这时候我们需要调节的参数是正则化参数C和核函数参数gamma。为了保证调参的精确度,一般我们都使用网格搜

baidu_39123902的博客 6115

利用Arcgis提取nc数据并计算区域年均温

1.下载数据。2.解压数据至不含中文的路径中。打开工具箱中的多维分析工具-创建NetCDF栅格图层,导入数据。3.打开工具箱中的数据管理工具-图层和表视图-创建栅格图层,导入数据,对输出数据进行命名,得到月均温栅格数据。4.选择工具箱-Spatial Analyst工具(空间分析工具)-地图代数-栅格计算器,计算全国一年年均温。​5.将其导出为.tif格式数据,方便后期使用。6.选择工具箱-Spatial Analyst工具(空间分析工具)-区域分析--以表格显示分区统计,得到分区域的气温数据。

什么都学亿点点的博客 7993

FTPClient使用中,碰到SocketTimeoutException 坑

ftpclient设置soTimeout无效

u010379794的博客 1951

svm参数c和g matlab论坛,[转载]关于SVM参数c&g选取的总结帖[matlab-libsvm]

function [bestacc,bestc,bestg] =SVMcg(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,accstep)%SVMcg cross validation by faruto%Email:farutoliyang@gmail.com QQ:516667408http://blog.sina.com.cn/far...

weixin_39695306的博客 720

Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的理论简述和python仿真实现(附源码)

经典论文Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的学习与编程仿真,提供源码

m0_59701926的博客 1238

[matlab-libsvm] 关于SVM参数c&g选取程序

http://blog.youkuaiyun.com/AlextoWarson/article/details/4764801#comments 写了个程序 来选取SVM中参数 c和g的最佳值. [写这个的目的是方便大家用这个小程序直接来寻找 c和g的最佳值,不用再另外编写东西了. ] 其实原本libsvm C语言版本中有相应的子程序可以找到最佳的c和g,需装载python语言然后用py 那个画

luckxu的专栏 2949

【华为OD机试】创建二叉树(python, java, c++, js)

请按下列描达构建一颗二叉树,并返回该树的根节点: 1、先创建值为-1的根结点,根节点在第0层; 2、然后根据operations依次添加节点: operations[i] = [height, index] 表示对第 height 层的第index 个节点node, 添加值为i 的子节点: 若node 无「左子节点」。则添加左子节点; 若node 有「左子节点」但无「右子节点」,则添加右子节点: 否则不作任何处理。 height、index 均从0开始计数;index 指所在层的创建顺序。

A_D_I_D_A_S的博客 188

LPDDR6与LPDDR5 ZQ Calibration技术探讨

LPDDR6与LPDDR5 ZQ Calibration技术探讨

zilan23的博客 1104

SVM的参数优化——交叉验证选择最佳参数c&g

支持向量机(Support Vector Machine,SVM)是一种广泛应用的监督式机器学习算法。它主要用于分类任务,但也适用于回归任务。在本文中,我们将深入探讨支持向量机的两个重要参数:C和gamma。

人工智能算法学习matlab 1719

YOLOv11模型改进-模块-引入空间池化模块StripPooling 解决遮挡、小目标

本文介绍了一种新的空间池化策略,称为,用于场景解析。结构:包括两个平行路径,分别进行水平和垂直方向的条带池化,然后通过1D卷积层进行特征调整。:结合了条带池化和传统的空间池化,分别用于捕捉长距离和短距离的依赖关系。作用捕捉长距离依赖:通过长条形的池化窗口,有效捕捉分布离散的区域之间的关系。避免不相关信息干扰:窄条形的池化窗口有助于捕捉局部上下文,防止不相关区域干扰标签预测。提高场景解析性能:在多个基准数据集上,证明了这种方法能够显著提升场景解析的效果。

qq_64693987的博客 4205

SVM 调参策略

SVM 调参策略 1. 对数据做归一化(simple scaling) 2. 应用 RBF kernel 3. 用cross-validation和grid-search 得到最优的c和g 4. 用得到的最优c和g训练训练数据 5. 测试1 关于svm的C以及核函数参数设置

爱明爱夏的博客 3万+

YOLOv11改进策略【独家融合改进】| 模型轻量化二次改进:StarNet + FreqFusion,极限降参,适用专栏内所有轻量化模型

FreqFusion是一种旨在解决密集图像预测任务中特征融合问题。

Limiiiing的博客 2125

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

支持向量机(SVM)的超参数调整 C 和 Gamma 参数

在本文中,我们将深入探讨支持向量机的两个重要参数:C和gamma。

养乐多的博客 2万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

核支持向量机SVM的应用

文章目录1. 核技巧2. 理解SVM3. 调参4. 应用乳腺癌数据集-分类-RBF核SVM5. 优缺点与参数6. some docstring 核支持向量机(kernelized support vector machine)(通常简称为SVM),可以同时用于分类和回归,在sklearn中为SVC和SVR。背后数学比较复杂,可参见《统计学习基础》。 from sklearn.svm import ...

梅花落 1652

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SVM需要调的参数

svm肯定需要调参~,对结果影响也很大。SVC参数解释 (1)C: 目标函数的惩罚系数C,用来平衡分类间隔margin和错分样本的,default C = 1.0; (2)kernel:参数选择有RBF, Linear, Poly, Sigmoid, 默认的是”RBF”; (3)degree:if you choose ‘Poly’ in param 2, this is effecti

6丁儿的猫 1万+

SVM、SVR学习文章

https://blog.youkuaiyun.com/qq_16633405/article/details/70243030(介绍SVR、SVM的基本知识) https://scikit-learn.org/stable/auto_examples/svm/plot_rbf_parameters.html#sphx-glr-auto-examples-svm-plot-rbf-parameters-py...

kazhaxi的博客 957

MATLAB实现LIBSVM中的c和g的参数寻优

引言:LIBSVM是台湾大学林智仁(Lin Chih-Jen)教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进、修改以及在其它操作系统上应用;该软件对SVM所涉及的参数调节相对比较少,提供了很多的默认参数,利用这些默认参数可以解决很多问题;并提供了交互检验(Cross Validation...

qq_35166974的博客 1万+

SVM的两个参数 C 和 gamma

SVM模型有两个非常重要的参数C与gamma。其中 C是惩罚系数,即对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。C过大或过小,泛化能力变差 gamma是选择RBF函数作为kernel后,该函数自带的一个参数。隐含地决定了数据映射到新的特征空间后的分布,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持...

weixin_30446197的博客 8672
上一篇: java.lang.OutOfMemoryError: Java heap space错误及处理办法(收集整理、转)
下一篇: Felomeng翻译:libsvm2.88之“svm-train”的使用
AlextoWarson
博客等级 码龄17年 33粉丝 12原创
评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值