zoukankan      html  css  js  c++  java
  • 机器学习:SVM实践:Libsvm的使用

    引言

       

    本文从应用的角度出发,使用Libsvm函数库解决SVM模型的分类与回归问题

       

    首先说明一下实验数据,实验数据是Libsvm自带的heart_sacle,是个mat文件

       

    加载数据集

       

    mat文件导入MATLAB后会有270*13的实例矩阵变量heart_scale_inst和270*1的标签矩阵heart_scale_label

       

       

       

    分类

       

    将数据集分为训练数据和测试数据

       

    首先我们将实验数据分为训练数据和测试数据

       

    load heart_scale;

       

    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,:);

       

    利用训练数据集训练得到训练模型

       

    然后我们就可以用训练数据得到训练模型

       

    model=svmtrain(train_label,train_data);%%具体参数可以参见svmtrain.c

       

    我们查看返回的model变量可以发现是如下形式

       

       

    下面对返回模型的参数进行一些说明

       

    model参数说明

       

    首先是Parameters,其变量打开是以下五个数据

       

       

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

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

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

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

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

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

       

    然后是model.nr_class,这个变量表示数据集中有多少类别;= 2 for regression/one-class svm

       

    接下来是model.Label,这个变量表示数据集中类别的标签都是什么

       

    然后是model.totalSV,代表总共的支持向量的数目

    model.nSV表示每类样本的支持向量的数目,有多少类就有多少个值

       

    而对于model.ProbAmodel.ProbB是要使用-b参数时才能用到,用于概率估计。

       

    -b probability_estimates: whether to train a SVC or SVR model for probability estimates,0 or 1 (default 0)

    可以参见《A note on Platt's probabilistic outputs for support vector machines》论文

       

    然后是model.sv_coef,这是一个totalSV*1的矩阵,承装的是totalSV个支持向量在决策函数中的系数

       

       

    model.SVs是一个totalSV×维度的稀疏矩阵,承装的是totalSV个支持向量

       

       

    最后是model.rho是决策函数中的常数项的相反数

       

    然后是利用测试数据集进行测试

       

    [predict_label, accuracy, dec_values] = svmpredict(test_label, test_data, model);

       

    得到三个参数,分别对参数说明如下

       

    返回参数:

    predict_label是预测标签向量

    accuracy从上到下依次的意义分别是:

    -分类准率(分类问题中用到的参数指标)

    -平均平方误差(MSE (mean squared error))[回归问题中用到的参数指标]

    -平方相关系数(r2 (squared correlation coefficient))[回归问题中用到的参数指标]

    dec_values是一个包含decision值或概率估计(-b 1)的矩阵

       

    最终的类别判断就是根据这个dec_value和阈值作比较得到的

    另外多说一句如果k个类,对于decision值,每行包含k(k-1)/2个二分类问题的结果;对于概率,每列包含k个属于每类的概率值

       

    回归

       

    对于回归依旧是用svmtrain这个函数

    但是对于回归来说选择的SVM类型有限制,svmtrain-s这个选项指定的SVM的类型(default 0)

    0 – C-SVC

    1 – nu-SVC

    2 – one-class SVM

    3 – epsilon-SVR

    4 – nu-SVR

    对于回归来说,只能选3或者43表示epsilon-support vector regression, 4表示nu-support vector regression-t是选择核函数,通常选用RBF核函数,原因在"A Practical Guide support vector classification"中已经简单介绍过了。-p尽量选个比较小的数字。需要仔细调整的重要参数是-c-g。我们用以下代码来进行参数寻优

       

    mse = 10^10;

    for log2c = -10:10,

    for log2g = -10:10,

    cmd = ['-v 3 -c ', num2str(2^log2c), ' -g ', num2str(2^log2g) , ' -s 3 -p 0.4 -n 0.1'];

    cv = svmtrain(train_Y,train_x,cmd);

    if (cv < mse),

    mse = cv; bestc = 2^log2c; bestg = 2^log2g;

    end

    end

    end

       

    -log2c是给出参数c的范围和步长

    -log2g是给出参数g的范围和步长

    -log2p是给出参数p的范围和步长

  • 相关阅读:
    中国历史朝代公元对照简表
    [Solved] DashBoard – Excel Service: The data sources may be unreachable, may not be responding, or may have denied you access.
    Delete/Remove Project from TFS 2010
    Sharepoint site showing system account instead of my username on the top right corner.
    你的成功在于你每天养成的习惯
    Internet Information Services is running in 32bit emulation mode. Correct the issue listed above and rerun setup.
    Prepare to back up and restore a farm (Office SharePoint Server 2007)
    Word中字号与磅值的对应关系
    How to: Change the Frequency for Refreshing the Data Warehouse for Team System
    UI Automation in WPF/Silverlight
  • 原文地址:https://www.cnblogs.com/keedor/p/4486403.html
Copyright © 2011-2022 走看看