精华内容
下载资源
问答
  • DE差分进化算法优化SVM参数找不到最优的参数集
    2021-04-19 02:07:02

    [color=darkgreen]function [bestc,bestg,test_pre]=my_DE_SVR(para,input_train,output_train,input_test,output_test)

    % 参数向量 parameters [n,N_iteration,beta_min,beta_max,pCR]

    % n为种群规模,N_iteration为迭代次数

    % beta_min 缩放因子下界 Lower Bound of Scaling Factor

    % beta_max=0.8; % 缩放因子上界 Upper Bound of Scaling Factor

    % pCR 交叉概率 Crossover Probability

    % 要求输入数据为列向量(矩阵)

    %% 测试参数 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    % % 清空环境

    % clc

    % clear

    % close all

    % format compact

    % para=[30,200,0.2,0.8,0.2];

    % % 数据准备

    % load Shanghai

    % shanghai_ori=num';

    % clear num

    % [imfs_num,cols]=size(shanghai_ori);

    % train_size=150;

    % test_size=cols-train_size;

    % tag=3; % 设定滞后期数

    % train_input=cell(1,imfs_num); % 训练输入集

    % test_input=cell(1,imfs_num); % 测试输入集

    % train_output=ones(imfs_num,train_size-tag); % 训练输出集

    % test_output=ones(imfs_num,test_size-tag); % 测试输出集

    % for imfs_index=1:imfs_num

    %     for tag_index=1:tag

    %         train_input{imfs_index}(tag_index,:)=shanghai_ori(imfs_index,tag_index:train_size-tag-1+tag_index);

    %         train_output(imfs_index,:)=shanghai_ori(imfs_index,tag+1:train_size);

    %         test_input{imfs_index}(tag_index,:)=shanghai_ori(imfs_index,train_size+tag_index:end-tag-1+tag_index);

    %         test_output(imfs_index,:)=shanghai_ori(imfs_index,train_size+tag+1:end);

    %     end

    % end

    % input_train=[train_input{1,1}]';

    % output_train=train_output';

    % input_test=[test_input{1,1}]';

    % output_test=test_output';

    %%% 测试参数 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    %% 数据归一化

    [input_train,rule1]=mapminmax(input_train');

    [output_train,rule2]=mapminmax(output_train');

    input_test=mapminmax('apply',input_test',rule1);

    output_test=mapminmax('apply',output_test',rule2);

    input_train=input_train';

    output_train=output_train';

    input_test=input_test';

    output_test=output_test';

    %% 利用差分进化(DE)算法选择最佳的SVR参数

    nPop=para(1); % 种群规模 Population Size

    MaxIt=para(2); % 最大迭代次数Maximum Number of Iterations

    nVar=2; % 自变量维数,此例需要优化两个参数c和g Number of Decision Variables

    VarSize=[1,nVar]; % 决策变量矩阵大小 Decision Variables Matrix Size

    beta_min=para(3); % 缩放因子下界 Lower Bound of Scaling Factor

    beta_max=para(4); % 缩放因子上界 Upper Bound of Scaling Factor

    pCR=para(5); %  交叉概率 Crossover Probability

    lb=[0.01,0.01]; % 参数取值下界

    ub=[100,100]; % 参数取值上界

    %% 初始化 Initialization

    empty_individual.Position=[]; % 种群初始化

    empty_individual.Cost=[]; % 种群目标函数值初始化

    BestSol.Cost=inf; % 最优值初始化

    pop=repmat(empty_individual,nPop,1); % 将保存种群信息的结构体扩展为结构体矩阵,行数等于种群大小

    for i=1:nPop % 遍历每个个体

    pop(i).Position=init_individual(lb,ub,nVar,1); % 随机初始化个体

    pop(i).Cost=fobj(pop(i).Position,input_train,output_train,input_test,output_test); % 计算个体目标函数值

    if pop(i).Cost

    BestSol=pop(i); % 更新最优值

    end

    end

    BestCost=zeros(MaxIt,1); % 初始化迭代最优值

    %% 主循环 DE Main Loop

    for it=1:MaxIt

    for i=1:nPop % 遍历每个个体

    x=pop(i).Position; % 提取个体位置

    % 随机选择三个个体以备变异使用

    A=randperm(nPop); % 个体顺序重新随机排列

    A(A==i)=[]; % 当前个体所排位置腾空(产生变异中间体时当前个体不参与)

    a=A(1);

    b=A(2);

    c=A(3);

    % 变异操作 Mutation

    beta=unifrnd(beta_min,beta_max,VarSize); % 随机产生缩放因子

    y=pop(a).Position+beta.*(pop(b).Position-pop(c).Position); % 产生中间体

    % 防止中间体越界

    y=max(y,lb);

    y=min(y,ub);

    % 交叉操作 Crossover

    z=zeros(size(x)); % 初始化一个新个体

    j0=randi([1,numel(x)]); % 产生一个伪随机数,即选取待交换维度编号???

    for j=1:numel(x) % 遍历每个维度

    if j==j0 || rand<=pCR % 如果当前维度是待交换维度或者随机概率小于交叉概率

    z(j)=y(j); % 新个体当前维度值等于中间体对应维度值

    else

    z(j)=x(j); % 新个体当前维度值等于当前个体对应维度值

    end

    end

    NewSol.Position=z; % 交叉操作之后得到新个体

    NewSol.Cost=fobj(NewSol.Position,input_train,output_train,input_test,output_test); % 新个体目标函数值

    if NewSol.Cost

    pop(i)=NewSol; % 更新当前个体

    if pop(i).Cost

    BestSol=pop(i); % 更新最优个体

    end

    end

    end

    % 保存当前迭代最优个体函数值 Update Best Cost

    BestCost(it)=BestSol.Cost;

    end

    bestc=BestSol.Position(1,1);

    bestg=BestSol.Position(1,2);

    %% 图示寻优过程

    plot(BestCost);

    xlabel('Iteration');

    ylabel('Best Val');

    grid on;

    %% 利用回归预测分析最佳的参数进行SVM网络训练

    cmd_cs_svr=['-s 3 -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg)];

    model_cs_svr=svmtrain(output_train,input_train,cmd_cs_svr); % SVM模型训练

    %% SVM网络回归预测

    [output_test_pre,~]=svmpredict(output_test,input_test,model_cs_svr); % SVM模型预测及其精度

    test_pre=mapminmax('reverse',output_test_pre',rule2);

    test_pre = test_pre';[/color]

    更多相关内容
  • SVM参数设置

    千次阅读 2021-02-03 00:43:09
    主要参考了一些博客以及自己使用经验。收集来觉得比较有用的。...数据格式转换----------------------当数据较少时,可以用formatdatalibsvm轻松地将文本数据转换成为svm工具使用的数据。使用方法为:1,打开Form...

    主要参考了一些博客以及自己使用经验。收集来觉得比较有用的。

    LIBSVM

    数据格式需要----------------------

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

    2 1:7 2:5 ...

    1 1:4 2:2 ...

    数据格式转换----------------------

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

    使用方法为:

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

    输入格式为:

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

    7 5 ... 2

    4 2 ... 1

    输出数据格式是

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

    2 1:7 2:5 ...

    1 1:4 2:2 ...

    2,再"工具"-->"宏"-->执行下面有一个选项(FormatDatatoLibsvm)-->执行,要选中这个然后运行就可以了,这时数据转换的问题就解决了(如果没有宏选项,点击“开始--excel选项---在功能区显示“开发工具”选项卡”)

    3,可以copy到一个记事本中即可。但是注意在用libsvm的时候要在命令行输入.txt后缀。

    svm参数说明----------------------

    如果你要输出类的概率,一定要有-b参数

    svm-train training_set_file model_file

    svm-predict test_file model_fileoutput_file

    自动脚本:python easy.py train_data

    test_data

    自动选择最优参数,自动进行归一化。

    对训练集合和测试结合,使用同一个归一化参数。

    -c:参数

    -g:参数

    -v:交叉验证数

    -s svm_type : set type of SVM (default 0)

    0

    -- C-SVC

    1

    -- nu-SVC

    2

    -- one-class SVM

    3

    -- epsilon-SVR

    4

    -- nu-SVR

    -t kernel_type : set type of kernelfunction (default 2)

    0

    -- linear: u'*v

    1

    -- polynomial: (gamma*u'*v + coef0)^degree

    2

    -- radial basis function: exp(-gamma*|u-v|^2)

    3

    -- sigmoid: tanh(gamma*u'*v + coef0)

    -d degree : set degree in kernel function(default 3)

    -g gamma : set gamma in kernel function(default 1/num_features)

    -r coef0 : set coef0 in kernel function(default 0)

    -c cost : set the parameter C of C-SVC,epsilon-SVR, and nu-SVR

    (default 1)

    -n nu : set the parameter nu of nu-SVC,one-class SVM, and nu-SVR

    (default 0.5)

    -p epsilon : set the epsilon in lossfunction of epsilon-SVR

    (default 0.1)

    -m cachesize : set cache memory size in MB(default 100)

    -e epsilon : set tolerance of terminationcriterion (default

    0.001)

    -h shrinking: whether to use the shrinkingheuristics, 0 or 1

    (default 1)

    -b probability_estimates: whether to traina SVC or SVR model for

    probability estimates, 0 or 1 (default 0)(如果需要估计分到每个类的概率,则需要设置这个)

    -wi weight: set the parameter C of class ito weight*C, for C-SVC

    (default 1)

    Thek in the -g option means the number of

    attributes in the input data.

    libsvm使用误区----------------------

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

    (2) 如果样本的特征数非常多,那么就不必使用RBF核将样本映射到高维空间。

    a) 在特征数非常多的情况下,使用线性核,结果已经非常好,并且只需要选择参数C即可。

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

    (3) 样本数<

    a) 推荐使用线性核,可以达到与RBF同样的性能。

    (4) 样本数和特征数都非常多:推荐使用liblinear,更少的时间和内存,可比的准确率。

    (5) 样本数>>特征数:如果想使用线性模型,可以使用liblinear,并且使用-s

    2参数

    libsvm在训练model的时候,有如下参数要设置,当然有默认的参数,但是在具体应用方面效果会大大折扣。

    Options:可用的选项即表示的涵义如下

    -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(-gamma|u-v|^2)

    3–sigmoid:tanh(r*u'v + coef0)

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

    -g r(gama):核函数中的gamma函数设置(针对多项式/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:设置cache内存大小,以MB为单位(默认40)

    -e eps:设置允许的终止判据(默认0.001)

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

    -wi weight:设置第几类的参数C为weight*C(C-SVC中的C)(默认1)

    -v n: n-fold交互检验模式,n为fold的个数,必须大于等于2

    其中-g选项中的k是指输入数据中的属性数。option -v随机地将数据剖分为n部

    当构建完成model后,还要为上述参数选择合适的值,方法主要有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:进行Cross

    Validation过程中的参数,即对训练集进行v-fold

    Cross Validation,默认为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,gstep=1。

    accstep:最后参数选择结果图中准确率离散化显示的步进间隔大小([0,100]之间的一个数),默认为4.5。

    输出:

    bestCVaccuracy:最终CV意义下的最佳分类准确率。

    bestc:最佳的参数c。

    bestg:最佳的参数g。

    网格参数寻优函数(回归问题):SVMcgForRegress

    [bestCVmse,bestc,bestg]=

    SVMcgForRegress(train_label,train,

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

    其输入输出与SVMcgForClass类似,这里不再赘述。

    而当你训练完了model,在用它做classification或regression之前,应该知道model中的内容,以及其含义。

    用来训练的是libsvm自带的heart数据

    model =

    Parameters:

    [5x1 double]

    nr_class:

    2

    totalSV:

    259 %支持向量的数目

    rho:

    0.0514 % b

    Label:

    [2x1

    double] % classification中标签的个数

    ProbA:

    []

    ProbB:

    []

    nSV:

    [2x1

    double] % 每类支持向量的个数

    sv_coef:

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

    SVs:

    [259x13 double] % 装的是259个支持向量

    model.Parameters参数意义从上到下依次为:

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

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

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

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

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

    SVM怎样能得到好的结果

    1. 对数据做归一化(simple

    scaling)

    2. 应用RBF

    kernel

    3. 用cross-validation和grid-search得到最优的c和g

    4. 用得到的最优c和g训练训练数据

    5. 测试

    关于svm的C以及核函数参数设置----------------------

    参考自:对支持向量机几种常用核函数和参数选择的比较研究

    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一般可选1 2

    3 4,r选0.2 0.4 0.60.8 1

    4)自定义核函数

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

    与核函数相对应的libsvm参数:

    1)对于线性核函数,没有专门需要设置的参数

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

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

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

    展开全文
  • SVM参数设置及各种参数意义

    万次阅读 2017-05-26 21:54:04
    Parameters: [5x1 double] %结构体变量,依次保存的是 -s -t -d -g -r等参数  nr_class: 4 %分类的个数  totalSV: 39 %总的支持向量个数  rho: [6x1 double] %b=-model.rho  Label: [4x1 double]
    Parameters: [5x1 double]  %结构体变量,依次保存的是 -s -t -d -g -r等参数
          nr_class: 4    %分类的个数   
           totalSV: 39    %总的支持向量个数
               rho: [6x1 double]   %b=-model.rho
             Label: [4x1 double]
             ProbA: []
             ProbB: []
               nSV: [4x1 double]  %每一类的支持向量的个数
           sv_coef: [39x3 double] %支持向量的系数
               SVs: [39x12 double] %具体的支持向量,以稀疏矩阵的形式存储
        
        w*x+b=0 其中
        w=model.SVs'*model.sv_coef
            b=-model.rho

           w是高维空间中分类 超平面的法向量,b是常数项。

    1. 参考网站:

    LIBSVM 库下载:http://www.csie.ntu.edu.tw/~cjlin/libsvm/

    https://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html?js=1#svm-toy-js

    视频: 
    http://v.youku.com/v_showMini/id_XMjc2NTY3MzYw_ft_131.html

    详解:http://www.matlabsky.com/thread-11925-1-1.html

    更多细节可查看 
    https://sites.google.com/site/kittipat/libsvm_matlab

    2. 操作流程:

    请注意:详细操作流程请参考上面的“详解”网站,这里只说大框架和详解里没有提到的问题。

    A.设置path

    方法1 
    File->set path ->add with subfolders->加入libsvm-3.21文件夹的路径

    方法2

    addpath(genpath(currentFolder))
     
    • 1
    • 1

    currentFolder 为 libsvm-3.21 所在路径

    B. 在matlab中编译

    目的:将libsvm-3.21\matlab 中 libsvmwrite.c 等 C++文件编译成 libsvmread.mexw64等matlab文件,这样就可以在command window中被直接调用了。

    C.加载数据集

    训练集和测试集都是自带的 heart_scale

    cd D:\CMWang\libsvm-3.21
    [heart_scale_label, heart_scale_inst] = libsvmread('heart_scale');
    
    model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');
    
    [predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst, model); % test the training data
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    还可以使用 load来载入数据

    load heart_scale
     
    • 1
    • 1

    有两个数据集,一个是C++的, 一个是matlab的。libsvm库中下载的是C++数据,所以matlab加载我们下载的heart_scale是会报错的, .mat 格式的数据下载地址

    下载matlab数据集(http://download.csdn.net/detail/abcjennifer/4215779

    For probability estimate

    %For probability estimates, you need '-b 1' for training and testing:
    
    [heart_scale_label, heart_scale_inst] = libsvmread('heart_scale');
    model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07 -b 1');
    [predict_label, accuracy, prob_estimates] = svmpredict(heart_scale_label, heart_scale_inst, model, '-b 1');
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5

    For Linear Kernel and Precomputed Kernel

    % We give the following detailed example by splitting heart_scale into
    % 150 training and 120 testing data.  Constructing a linear kernel
    % matrix and then using the precomputed kernel gives exactly the same
    % testing error as using the LIBSVM built-in linear kernel.
    
     [heart_scale_label, heart_scale_inst] = libsvmread('heart_scale');
    
     % Split Data
     train_data = heart_scale_inst(1:150,:);
     train_label = heart_scale_label(1:150,:);
     test_data = heart_scale_inst(151:270,:);
     test_label = heart_scale_label(151:270,:);
    
     % Linear Kernel
     model_linear = svmtrain(train_label, train_data, '-t 0');
     [predict_label_L, accuracy_L, dec_values_L] = svmpredict(test_label, test_data, model_linear);
    
     % Precomputed Kernel
     model_precomputed = svmtrain(train_label, [(1:150)', train_data*train_data'], '-t 4');
     [predict_label_P, accuracy_P, dec_values_P] = svmpredict(test_label, [(1:120)', test_data*train_data'], model_precomputed);
    
     accuracy_L % Display the accuracy using linear kernel
     accuracy_P % Display the accuracy using precomputed kernel
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    备注:

    (1) libsvmread主要用于读取数据

    这里的数据是非matlab下的.mat数据,比如说是.txt,.data等等,这个时候需要使用libsvmread函数进行转化为matlab可识别数据,比如自带的数据是heart_scale数据,那么导入到matlab有两种方式, 
    一种使用libsvmread函数,在matlab下直接libsvmread(heart_scale); 
    第二种方式为点击matlab的‘导入数据’按钮,然后导向heart_scale所在位置,直接选择就可以了。因为有的数据libsvmread读取不管用,但是‘导入数据’后就可以变成matlab下数据。

    (2)libsvmwrite写函数,就是把已知数据存起来

    使用方式为:libsvmwrite(‘filename’,label_vector, instance_matrix); 
    label_vector是标签,instance_matrix为数据矩阵(注意这个数据必须是稀疏矩阵,就是里面的数据不包含没用的数据(比如很多0),有这样的数据应该去掉再存)。

    (3)svmtrain训练函数,训练数据产生模型的

    一般直接使用为:model=svmtrain(label,data,cmd); label为标签,data为训练数据(数据有讲究,每一行为一个样本的所有数据,列数代表的是样本的个数),每一个样本都要对应一个标签(分类问题的话一般为二分类问题,也就是每一个样本对应一个标签)。 
    cmd为相应的命令集合,都有哪些命令呢?很多,-v,-t,-g,-c,等等,不同的参数代表的含义不同, 
    比如对于分类问题,这里-t就表示选择的核函数类型,-t=0时线性核。-t=1多项式核,-t=2,径向基函数(高斯),-t=3,sigmod核函数,新版出了个-t=4,预计算核(还不会用); 
    -g为核函数的参数系数-c为惩罚因子系数-v为交叉验证的数,默认为5,这个参数在svmtrain写出来使用与不写出来不使用的时候,model出来的东西不一样,不写的时候,model为一个结构体,是一个模型,可以带到svmpredict中直接使用,写出来的时候,出来的是一个训练模型的准确率,为一个数值。

    用法: svmtrain [options] training_set_file [model_file]
    
    其中, options为操作参数, 可用的选项即表示的涵义如下所示:
    
    -s 设置svm类型:
    
     0 – C-SVC
    
     1 – v-SVC
    
     2 – one-class-SVM
    
     3 – ε-SVR
    
     4 – n – SVR
    
    -t 设置核函数类型, 默认值为2
    
    0 — 线性核: μ‘∗ν
    
    1 — 多项式核:    (γ∗μ‘∗ν+coef0)degree
    
    2 — RBF核: exp(–γ∗∥μ−ν∥2)
    
    3 — sigmoid 核: tanh(γ∗μ‘∗ν+coef0)
    
    -d degree: 核函数中的degree设置(针对多项式核函数)(默认3);
    
    -g r(gama): 核函数中的gamma函数设置(针对多项式/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: 设置cache内存大小, 以MB为单位(默认40);
    
    -e eps: 设置允许的终止判据(默认0.001);
    
    -h shrinking: 是否使用启发式, 01(默认1);
    
    -wi weight: 设置第几类的参数C为weight*C (C-SVC中的C) (默认1);
    
    -v n: n-fold交互检验模式, n为fold的个数, 必须大于等于2;
    
    -b 概率估计: 是否计算SVCSVR的概率估计, 可选值01, 默认0;
    
    model_file: 可选项, 为要保存的结果文件, 称为模型文件, 以便在预测时使用.
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    (3)svmpredict训练函数,使用训练的模型去预测来的数据类型

    使用方式为:

    [predicted_label,accuracy,decision_values/prob_estimates]= svmpredict(testing_label_vector,testing_instance_matrix,model,’libsvm_options’) 
     
    • 1
    • 1

    或者:

    [predicted_label]=svmpredict(testing_label_vector,testing_instance_matrix, model, ‘libsvm_options’) 
     
    • 1
    • 1

    第一种方式中,输出为三个参数,预测的类型,准确率,评估值(非分类问题用着),输入为测试类型(这个可与可无,如果没有,那么预测的准确率accuracy就没有意义了,如果有,那么就可以通过这个值与预测出来的那个类型值相比较得出准确率accuracy,但是要说明一点的是,无论这个值有没有,在使用的时候都得加上,即使没有,也要随便加上一个类型值,反正你也不管它对不对,这是函数使用所规定的的),再就是输入数据值,最后是参数值(这里的参数值只有两种选择,-p和-b参数),曾经遇到一个这样的问题,比如说我在训练函数中规定了-g参数为0.1,那么在预测的时候是不是也要规定这个参数呢?当你规定了以后,程序反而错误,提醒没有svmpredict的-g参数,原因是在svmtrain后会出现一个model,而在svmpredict中你已经用了这个model,而这个model中就已经包含了你所有的训练参数了,所以svmpredict中没有这个参数,那么对于的libsvm_options就是-p和-b参数了。对于函数的输出,两种方式调用的方法不一样,第一种调用把所有需要的数据都调用出来了,二第二种调用,只调用了predicted_label预测的类型,这里我们可以看到,在单纯的分类预测模型中,其实第二种方式更好一些吧,既简单有实用。

    下面给出一个在Matlab中运行SVM的示例 
    https://sites.google.com/site/kittipat/libsvm_matlab

    本文转自:

    http://blog.csdn.net/abcjennifer/article/details/7370177

    http://blog.csdn.net/on2way/article/details/47733861

    http://blog.csdn.net/m624197265/article/details/41894261

    https://sites.google.com/site/kittipat/libsvm_matlab

    关于SVM参数c&g选取的总结(matlab-libsvm)

    选取SVM中参数 c和g的最佳值 
    寻找最佳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会造成过学习状态,往往都是惩罚参数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)

    示例

    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);
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    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
    % 使用说明.如下:
    % [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
    
    %% 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;
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102

    具体详情请查看 
    http://blog.csdn.net/alextowarson/article/details/4764801


    展开全文
  • python中SVM分类的参数

    2013-04-11 17:52:33
    这里面有一些tmsvm的程序参数可供大家参考
  • <OpenCV> SVM参数配置

    千次阅读 2021-11-02 10:27:57
    设置了自定义内核时,由SVM::getKernelType返回 LINEAR //!< 线性内核。相当于不进行映射处理,在原始特征空间中进行线性判别(或回归)。这是运行速度最快的选择,但是拟合程度不高。K(x,z)=xTz. POLY //!&...

    OpenCV SVM

    模型参数配置

    • Types
    enum cv::ml::SVM::Types
    {
    	C_SVC=100, 			//!< C-Support向量分类。n类分类(n≥2),允许对异常值使用惩罚乘子C进行不完全分类。
    	NU_SVC=101, 		//!< ν支持向量分类。n类分类,可能不完全分离。参数ν(范围0-1、值越大,决策边界越平滑),用来代替C。
    	ONE_CLASS=102, 		//!< 分布估计(一类支持向量机)。所有的训练数据都来自同一类,支持向量机建立了一个边界,将类从特征空间的其余部分分离出来。
    	EPS_SVR=103, 		//!< ϵ支持向量回归。从训练集到拟合超平面的特征向量之间的距离必须小于p。对于异常值,使用惩罚乘法器C。
    	NU_SVR=104 			//!< ν支持向量回归。ν代替p。
    }
    
    • KernelTypes
    enum cv::ml::SVM::KernelTypes
    {
    	CUSTOM=-1, 	//!< 当设置了自定义内核时,由SVM::getKernelType返回;
    	LINEAR=0, 	//!< 线性内核。相当于不进行映射处理,在原始特征空间中进行线性判别(或回归)。这是运行速度最快的选择,但是拟合程度不高;
    	POLY=1, 	//!< 多项式的内核 ;参数:[GAMMA,COEF,DEGREE]
    	RBF=2, 		//!< 径向基函数(RBF)是一种很好的选择;参数:[GAMMA] 
    	SIGMOID=3, 	//!< Sigmoid kernel;参数:[GAMMA,COEF]
    	CHI2=4, 	//!< Chi2指数核,类似于RBF核;参数:[GAMMA]
    	INTER=5 	//!< 直方图相交的内核。一个快速的内核。
    }
    

    LINEAR: K ( x i , x j ) = x i T x j K(x_i,x_j)=x_i^Tx_j K(xi,xj)=xiTxj

    POLY: K ( x i , x j ) = ( γ x i T x j + c o e f 0 ) d e g r e e K(x_i,x_j)=(γx_i^Tx_j+coef0)^{degree} K(xi,xj)=(γxiTxj+coef0)degree

    RBF: K ( x i , x j ) = e − γ ∣ ∣ x i − x j ∣ ∣ 2 K(x_i,x_j)=e^{-γ||x_i-x_j||^2} K(xi,xj)=eγxixj2 γ > 0 γ>0 γ>0

    SIGMOID: t a n h ( γ x i T x j + c o e f 0 ) tanh(γx_i^Tx_j+coef0) tanh(γxiTxj+coef0)

    CHI2: K ( x i , x j ) = e − γ χ 2 ( x i , x j ) K(x_i,x_j)=e^{-γ\chi^2(x_i,x_j)} K(xi,xj)=eγχ2(xi,xj) χ 2 ( x i , x j ) = ( x i − x j ) 2 / ( x i + x j ) , γ > 0 \chi^2(x_i,x_j)=(x_i-x_j)^2/(x_i+x_j),γ>0 χ2(xi,xj)=(xixj)2/(xi+xj),γ>0

    INTER: K ( x i , x j ) = m i n ( x i , x j ) K(x_i,x_j)=min(x_i,x_j) K(xi,xj)=min(xi,xj)

    • ParamTypes
    enum cv::ml::SVM::ParamTypes
    {
    	C=0, 	
    	GAMMA=1, 	
    	P=2, 	
    	NU=3, 	
    	COEF=4, 	
    	DEGREE=5
    }
    
    • 创建空的模型
      使用StatModel::train来训练模型。由于SVM有几个参数,您可能希望为您的问题找到最佳参数,这可以使用SVM::trainAuto完成。
    static Ptr<SVM> cv::ml::SVM::create()
    
    • 从文件加载并创建序列化的支持向量机
      使用SVM::save序列化并存储SVM到磁盘。通过调用这个函数并指定文件的路径,再次从这个文件加载SVM。
    static Ptr<SVM> cv::ml::SVM::load(const String& filepath)	
    //!< 参数
    //!< filepath	 序列化支持向量机的路径
    
    • 支持向量机优化问题的参数:C
      类别数量,支持向量机::C_SVC、支持向量机::EPS_SVR或支持向量机::NU_SVR。默认值为0。
    virtual void cv::ml::SVM::setC(double val)	
    
    • 支持向量机::C_SVC问题中的可选权值,分配给特定的类
      它们乘以 C C C,则类 i i i的参数 C C C就变成了 c l a s s W e i g h t s ( i ) ∗ C classWeights(i) *C classWeights(i)C,因此这些权重影响不同类的误分类惩罚。权重越大,对应类数据的错误分类惩罚越大。默认值为空Mat。
    virtual void cv::ml::SVM::setClassWeights(const cv::Mat& val)	
    
    • 核函数的参数:coef0
      对于SVM::POLY或SVM::SIGMOID。默认值为0。
    virtual void cv::ml::SVM::setCoef0(double val)	
    
    • 当设置了自定义内核
    virtual void cv::ml::SVM::setCustomKernel(const Ptr<Kernel>& _kernel)	
    
    • 核函数的参数:degree
      对于SVM::POLY。默认值为0。
    virtual void cv::ml::SVM::setDegree(double val)
    
    • 核函数的参数:γ
      SVM::POLY, SVM::RBF, SVM::SIGMOID或SVM::CHI2。默认值为1。
    virtual void cv::ml::SVM::setGamma(double val)	
    
    • 支持向量机核的类型
      SVM:: KernelTypes。默认值为SVM::RBF。
    virtual void cv::ml::SVM::setKernel(int kernelType)	
    
    • SVM优化问题的参数:ν
      SVM::NU_SVC, SVM::ONE_CLASS或SVM::NU_SVR。默认值为0。
    virtual void cv::ml::SVM::setNu(double val)	
    
    • 支持向量机的参数柱一优化问题
      SVM::EPS_SVR。默认值为0。
    virtual void cv::ml::SVM::setP(double val)	
    
    • 终止迭代支持向量机训练的条件
      您可以指定最大迭代次数及训练终止的指定精度。默认值是TermCriteria(TermCriteria::MAX_ITER + TermCriteria::EPS, 1000, FLT_EPSILON);
    virtual void cv::ml::SVM::setTermCriteria(const cv::TermCriteria& val)	
    
    • 支持向量机公式的类型
      SVM:Type。默认值为SVM::C_SVC。
    virtual void cv::ml::SVM::setType	(	int 	val	)	
    
    • 自动训练
    virtual bool cv::ml::SVM::trainAuto(const Ptr<TrainData>& data,
    									int kFold = 10,
    									ParamGrid Cgrid = getDefaultGrid(C),
    									ParamGrid gammaGrid = getDefaultGrid(GAMMA),
    									ParamGrid pGrid = getDefaultGrid(P),
    									ParamGrid nuGrid = getDefaultGrid(NU),
    									ParamGrid coeffGrid = getDefaultGrid(COEF),
    									ParamGrid degreeGrid = getDefaultGrid(DEGREE),
    									bool balanced = false)	
    
    //!< 参数
    //!< data			可以使用TrainData::create或TrainData::loadFromCSV构造的训练数据。
    //!< kFold			交叉验证参数。训练集被划分为kFold子集。其中一个子集用于测试模型,其他子集构成列车集。因此,SVM算法执行kFold次。
    //!< Cgrid			grid for C
    //!< gammaGrid		grid for gamma
    //!< pGrid			grid for p
    //!< nuGrid			grid for nu
    //!< coeffGrid		grid for coeff
    //!< degreeGrid		grid for degree
    //!< balanced		如果问题是2类分类,则该方法创建更平衡的交叉验证子集,子集中的类之间的比例接近于整个训练数据集中的比例。
    
    • 自动训练
    virtual bool cv::ml::SVM::trainAuto	(InputArray 	samples,
    									int layout,
    									InputArray 	responses,
    									int kFold = 10,
    									Ptr<ParamGrid> 	Cgrid = SVM::getDefaultGridPtr(SVM::C),
    									Ptr<ParamGrid> 	gammaGrid = SVM::getDefaultGridPtr(SVM::GAMMA),
    									Ptr<ParamGrid> 	pGrid = SVM::getDefaultGridPtr(SVM::P),
    									Ptr<ParamGrid> 	nuGrid = SVM::getDefaultGridPtr(SVM::NU),
    									Ptr<ParamGrid> 	coeffGrid = SVM::getDefaultGridPtr(SVM::COEF),
    									Ptr<ParamGrid> 	degreeGrid = SVM::getDefaultGridPtr(SVM::DEGREE),
    									bool balanced = false)	
    
    //!< 参数
    //!< samples		训练样本
    //!< layout			ROW_SAMPLE or COL_SAMPLE
    //!< responses		与训练样本相关的响应向量。
    //!< kFold			交叉验证参数。训练集被划分为kFold子集。其中一个子集用于测试模型,其他子集构成训练集。
    //!< Cgrid			grid for C
    //!< gammaGrid		grid for gamma
    //!< pGrid			grid for p
    //!< nuGrid			grid for nu
    //!< coeffGrid		grid for coeff
    //!< degreeGrid		grid for degree
    //!< balanced		如果问题是2类分类,则该方法创建更平衡的交叉验证子集,子集中的类之间的比例接近于整个训练数据集中的比例。
    
    • 常规训练
    virtual bool train( const Ptr<TrainData>& trainData, int flags=0 )
    virtual bool train( InputArray samples, int layout, InputArray responses )
    
    展开全文
  • SVM 参数调整过程实例

    千次阅读 2020-03-18 15:00:08
    小彩笔的学习笔记 from sklearn.datasets import load_...from sklearn.svm import SVC from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt import numpy as np from time i...
  • SVM参数详解

    万次阅读 多人点赞 2016-05-26 14:02:40
    svm参数说明---------------------- 如果你要输出类的概率,一定要有-b参数 svm-train training_set_file model_file svm-predict test_file model_fileoutput_file 自动脚本:python easy.py train_data test_...
  • SVM参数设定

    千次阅读 2017-03-08 19:57:20
    以及核函数参数设置 ---------------------- 参考自:对支持向量机几种常用核函数和参数选择的比较研究     C 一般可以选择为: 10^t , t=- 4..4 就是 0.0001   到 10000   选择的越大...
  • 满意答案-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 – ...
  • opencv——SVM参数详解

    千次阅读 2018-10-24 09:50:22
    SVM是一种训练机器学习的算法,可以用于解决分类和回归问题,同时还使用了一种称之为kernel trick(支持向量机的核函数)的技术进行数据的转换,然后再根据这些转换信息,在可能的输出之中找到一个最优的边界(超平面...
  • opencv3.0和2.4的SVM接口有不同,基本可以按照以下的格式来执行: ml::SVM::Params params; params.svmType = ml::SVM::C_SVC; params.kernelType = ml::SVM::POLY; params.gamma = 3; Ptr<ml::SVM> svm = ...
  • 本身这个函数也是基于libsvm实现的,所以在参数设置上有很多相似的地方。(PS: libsvm中的二次规划问题的解决算法是SMO)。sklearn.svm.SVC(C=1.0,kernel='rbf',degree=3,gamma='auto',coef0=0.0,shr...
  • OpenCV中的SVM参数优化

    万次阅读 多人点赞 2014-08-19 10:31:18
    SVM(支持向量机)是机器学习算法里用得最多的算法。... 网上讲opencv中SVM使用的文章有很多,但讲SVM参数优化的文章却很少。所以在这里不重点讲怎么使用SVM,而是谈谈怎样通过opencv自带的库优化SVM中的参数。
  • -s svm_type:设置SVM的类型(默认为0) 0-- C-SVC (支持向量分类) 1-- nu-SVC (支持向量分类) 2-- one-class SVM(一类SVM,分布估计) 3-- epsilon-SVR (回归) 4-- nu-SVR (回归) -t kernel_type:设置...
  • SVM参数和函数介绍

    万次阅读 2019-03-28 21:33:02
    // 设置SVM参数 CvSVMParams params; params.svm_type = CvSVM::C_SVC; params.kernel_type = CvSVM::LINEAR; params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6); // 对SVM进行训练 CvSVM ...
  • opencv中SVM类是提供了优化参数值功能
  • sklearn中SVM调参说明

    2021-01-12 05:18:15
    于是这篇来总结一下sklearn中svm参数说明以及调参经验。方便以后查询和回忆。常用核函数1.linear核函数:K(xi,xj)=xTixjK(xi,xj)=xiTxj2.polynomial核函数:K(xi,xj)=(γxTixj+r)d,d>1K(xi,xj)=(γxiTxj+r)d,d&g....
  • 【实例简介】本程序有算例分析,详细介绍了三种优化SVM方法:遗传算法、PSO、网格搜索法【实例截图】【核心代码】SVM参数优化└── SVM参数优化├── chapter13_GA.m├── chapter13_GridSearch.m├── chapter...
  • SVM参数参数介绍以及python实现GA对SVM参数的优化

    万次阅读 多人点赞 2018-12-15 15:41:53
    最近开始玩起了机器学习,以前都是用matlab做一些机器学习的东西,毕竟要真正放到工程上应用还是python用起来比较好,所以今天就开始学习下使用SVM进行回归(分类)预测。 SVM 使用的一般步骤是: 1)准备数据集,...
  • SVM参数说明

    千次阅读 2020-12-22 02:09:53
     for C-SVC (default 1) -v n: n-fold cross validation mode ========================================================== Chinese: Options :可用的选项即表示的涵义如下 -s svm 类型: SVM 设置类型 ...
  • SVM参数及方法

    2020-03-01 15:05:13
    SVM的基本概念 一些简单的基本概念: 分隔超平面:将数据集分割开来的直线叫做分隔超平面。 超平面:如果数据集是N维的,那么就需要N-1维的某对象来对数据进行分割。该对象叫做超平面,也就是分类的决策边界。 间隔...
  • svm核函数及参数优化

    2015-11-22 17:04:47
    svm核函数及参数优化,实现多类分类并进行参数优化
  • 在python中使用SVM

    千次阅读 2022-03-12 11:30:08
    iris.data[:, :2] # 选取前两列作为X参数 y = iris.target # 采集标签作为y参数 C = 1.0 # SVM regularization parameter # 将所得参数进行模型训练 svc = svm.SVC(kernel='linear', C=1, gamma='auto').fit(X, y) #...
  • SVM 参数解释

    2019-09-28 14:10:57
    SVM(支持向量机)是机器学习算法里用得最多的一种算法。SVM最常用的是用于分类,不过SVM也可以用于回归,我的实验中就是用SVM来实现SVR(支持向量回归)。 对于功能这么强的算法,opencv中自然也是有集成好了,...
  • SVM 调参策略

    万次阅读 多人点赞 2017-10-12 22:24:32
    SVM 调参策略 1. 对数据做归一化(simple scaling) 2. 应用 RBF kernel 3. 用cross-validation和grid-search 得到最优的c和g 4. 用得到的最优c和g训练训练数据 5. 测试1 关于svm的C以及核函数参数设置
  • 支持向量机(support vector machines,SVM)的性能在很大程度上取决于参数的设置,所以参数选择问题一直是 SVM理论和应用研究中...为此,将DE算法用于SVM参数选择,提出了基于DE算法的SVM参数选择方法(DE-SVM)。在标准数据集

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,140
精华内容 10,456
关键字:

svm参数设置