• svm训练显示信息说明


    现简单对屏幕回显信息进行说明:

    #iter 为迭代次数,

    nu  与前面的操作参数 -n nu  相同,

    obj 为 SVM 文件转换为的二次规划求解得到的最小值,

    rho  为判决函数的常数项 b 

    nSV  为支持向量个数,

    nBSV 为边界上的支持向量个数,

    Total nSV 为支持向量总个数。

    训练后的模型保存为文件 *.model ,用记事本打开其内容如下:

    svm_type c_svc  训练所采用的 svm 类型,此处为 C- SVC

    kernel_type rbf % 训练采用的核函数类型,此处为 RBF 

    gamma 0.0769231 % 设置核函数中的 g  ,默认值为 1/ k

    nr_class 2 % 分类时的类别数,此处为两分类问题

    total_sv 132 % 总共的支持向量个数

    rho 0.424462 % 决策函数中的常数项 b

    label 1 -1% 类别标签

    nr_sv 64 68 % 各类别标签对应的支持向量个数

    SV % 以下为支持向量

    1 1:0.166667 2:1 3:-0.333333 4:-0.433962 5:-0.383562 6:-1 7:-1 8:0.0687023 9:-1 10:-0.903226 11:-1 12:-1 13:1

    0.5104832128985164 1:0.125 2:1 3:0.333333 4:-0.320755 5:-0.406393 6:1 7:1 8:0.0839695 9:1 10:-0.806452 12:-0.333333 13:0.5

    1 1:0.333333 2:1 3:-1 4:-0.245283 5:-0.506849 6:-1 7:-1 8:0.129771 9:-1 10:-0.16129 12:0.333333 13:-1

    1 1:0.208333 2:1 3:0.333333 4:-0.660377 5:-0.525114 6:-1 7:1 8:0.435115 9:-1 10:-0.193548 12:-0.333333 13:1

    4 )采用交叉验证选择最佳参数 C 与 g

         通常而言,比较重要的参数是  gamma (-g)  跟  cost (-c)  。而  cross validation (-v)

    的参数常用 5 。那么如何去选取最优的参数 c 和 g 呢? libsvm  的  python  子目录下面的  grid.py  可以帮助我们。   此时。其中安装 python2.5 需要(一般默认安装到 c:/python25

    下),将 gnuplot 解压。安装解压完毕后,进入 /libsvm/tools 目录下,用文本编辑器(记事

    本, edit 都可以)修改 grid.py 文件,找到其中关于 gnuplot 路径的那项(其默认路径为

    gnuplot_exe=r"c:/tmp/gnuplot/bin/pgnuplot.exe" ),根据实际路径进行修改,并保存。然

    后,将 grid.py 和 C:/Python25 目录下的 python.exe 文件拷贝到 libsvm/windows 目录下,键入以下命令: $ python grid.py train.1.scale  执行后,即可得到最优参数 c 和 g 。

         另外,至于下 libsvm 和 python 的接口的问题,在 libsvm2.86 中林老师已经帮助我们解决,在/libsvm/windows/python 目录下自带了 svmc.pyd 这个文件,将该文件文件复制到

    libsvm/python 目录下,同时,也将 python.exe 文件复制到该目录下,键入以下命令以检验效

    果(注意: .Py 文件中关于 gnuplot 路径的那项路径一定要根据实际路径修改):

    python svm_test.py

         如果能看到程序执行结果,说明 libsvm 和 python 之间的接口已经配置完成,以后就可以直接在python 程序里调用 libsvm 的函数了!

    5 )   采用最佳参数 C 与 g  对整个训练集进行训练获取支持向量机模型

        $ svmtrain –c x –g x –v x training_set_file [model_file]

        x 为上述得到的最优参数 c 和 g 的值, v 的值一般取 5 。

    6 )利用获取的模型进行测试与预测

    使用 Svmtrain 训练好的模型进行测试。输入新的 X 值,给出 SVM 预测出的 Y 值

      $ Svmpredict   test_file   model_file   output_file

    如: ./svm-predict heart_scale  heart_scale.model  heart_scale.out

    Accuracy = 86.6667% (234/270) (classification)

    这里显示的是结果

    一个具体使用的例子。

          以 libsvm 中的 heart_scale 作为训练数据和测试数据,同时已经将 python 安装至 c 盘,并将grid.py 文件中关于 gnuplot 路径的默认值修改为实际解压缩后的路径,将

    heart_scale 、 grid.py 和 python.exe 拷贝至 /libsvm/windows 文件夹下。

    ./svm-train heart_scale

    optimization finished, #iter = 162

    nu = 0.431029

    obj = -100.877288, rho = 0.424462

    nSV = 132, nBSV = 107

    Total nSV = 132

    此时,已经得到 heart_scale.model ,进行预测:

    ./svm-predict heart_scale   heart_scale.model   heart_scale.out

    Accuracy = 86.6667% (234/270) (classification)

    正确率为 Accuracy = 86.6667% 。

    ./python grid.py heart_scale

    得到最优参数 c=2048 , g=0.0001220703125.

    ./svm-train -c 2048 -g 0.0001220703125 heart_scale 得到 model 后,由 ./svm-predict heart_scale  heart_scale.model heart_scale.out 得到的正确

    率为 Accuracy = 85.1852%.这块还有点迷惑?为什么正确率降低了?

    当然也可以结合subset.py 和 easy.py 实现自动化过程。

    如果要训练多次,可以写个批处理程序省好多事。

    这里举个例子:

    ::@ echo off
    cls
    :: split the data and output the results
    for /L %%i in (1,1,1000) do python subset.py b59.txt 546 b59(%%i).in8 b59(%%i).out2

    for /L %%i in (1,1,1000) do python easy.py b59(%%i).in8 b59(%%i).out2 >> result89.txt

    这段批处理代码首先调用subset.py对文件b59.txt执行1000次分层随机抽样(对数据进行80-20%分割)然后调用easy.py 进行1000次参数寻优,把记录结果写到result89.txt中

    (包括1000次训练的分类准确率和参数对)。

    还可以调用fselect.py进行特征选择,调用plotroc.py进行roc曲线绘制。

    先写到这里吧,希望能和大家一起学习libsvm,进一步学好svm。

  • 相关阅读:
    来自极客标签10款最新设计素材系列七
    支持触摸设备的响应式HTML5音频播放器 AudioPlayer.js
    最流行的JavaScript库,jQuery不再支持IE旧版本
    来自极客标签10款最新设计素材系列六
    来自极客标签10款最新设计素材系列四
    推荐10款来自极客标签的超棒前端特效[第四期]
    响应式的无限滚动全屏dribbble作品集布局展示效果
    推荐10款来自极客标签的超棒前端特效[第五期]
    基于属性编程
    郁闷的企业软件开发
  • 原文地址:https://www.cnblogs.com/jiahuiyu/p/5415955.html
Copyright © 2020-2023  润新知