使用Libsvm自动分类训练数据详细入门流程(二)

上一篇我们讲到了函数的自动参数寻优问题,官方提供的 grid.py 以及 easy.py 两种文件都可以实现对训练数据的参数寻优,不过在使用方法和具体效果上有些不同,下面我将依次介绍这两种文件的相关配置及使用方法

grid.py

文件grid.py是对C-SVC的参数c和γ做优选的,原理是网格遍历。在使用grid.py 之前请确保你安装了gnuplot工具。

1、 首先用python编译器打开grid.py,找到如下几行代码:

        if sys.platform != 'win32':
            self.svmtrain_pathname = os.path.join(dirname, '../svm-train')
            self.gnuplot_pathname = '/usr/bin/gnuplot'
        else:
            # example for windows
            self.svmtrain_pathname = os.path.join(dirname, r'..\windows\svm-train.exe')
            # svmtrain_pathname = r'c:\Program Files\libsvm\windows\svm-train.exe'
            self.gnuplot_pathname = r'C:\gnuplot\bin\gnuplot.exe'

将下面这行代码中的路径修改为你安装gnuplot的可执行程序路径:

self.gnuplot_pathname = r'C:\gnuplot\bin\gnuplot.exe'

2、运行cmd进入dos环境,然后进入到工程文件夹下放置grid.py的目录下,示例:
cmd

3、将libsvm根目录下的 heart_scale 官方示例数据文件拷贝到grid.py文件目录下,在cmd中输入以下命令进行测试:

 python grid.py heart_scale

示例:
test1

运行过程中你会看到gnuplot的输出窗口,像下面这样:
gnuplot

还有cmd窗口中寻找参数c和g的过程以及结果,输出的最后一行的三个数值依次为寻找到的最优的c值(2048.0)、g值(0.0001220703125)以及交叉验证精度(84.0741%):
样例cg

4、将得到的c值和g值加入到训练函数中,比如:

m = svm_train(y, x, '-c 2048.0 -g 0.0001220703125')

然后执行代码就可以得到最优的分类结果

5、将样例数据文件替换为你的训练数据文件并按照以上流程寻找最优参数,然后将得到的参数添加到训练函数进行训练

easy.py

文件easy.py对样本文件做了从参数优选,到文件预测的整套流程。因此,其对grid.py、svm-train、svm-scale和svm-predict都进行了调用,所以要确保这些文件调用路径正确

1、首先用python编译器打开easy.py,找到如下几行代码:

if not is_win32:
    svmscale_exe = "../svm-scale"
    svmtrain_exe = "../svm-train"
    svmpredict_exe = "../svm-predict"
    grid_py = "./grid.py"
    gnuplot_exe = "/usr/bin/gnuplot"
else:
        # example for windows
    svmscale_exe = r"..\windows\svm-scale.exe"
    svmtrain_exe = r"..\windows\svm-train.exe"
    svmpredict_exe = r"..\windows\svm-predict.exe"
    gnuplot_exe = r"C:\gnuplot\bin\gnuplot.exe"
    grid_py = r".\grid.py"

检查else下面代码中的文件路径并将下面这行代码中的路径修改为你安装gnuplot的可执行程序路径:

gnuplot_exe = r"C:\gnuplot\bin\gnuplot.exe"

2、将示例数据文件heart_scale复制并重命名为 heart_scale_test 到easy.py 的文件目录下用做测试数据

3、运行cmd进入dos环境,然后进入到工程文件夹下放置easy.py的目录下,执行以下命令,示例:

python easy.py heart_scale heart_scale_test

运行成功或会看到gnuplot的输出窗口以及如下输出结果:
out
窗口输出了最优的c值g值以及交叉验证精度和最终的分类测试准确率,你还可以在easy.py 和 grid.py 的文件目录下查看自动生成的中间数据文件包括最终的输出结果等。

4、将示例数据文件替换为你的训练数据以及测试数据并按照以上流程得到最终结果

到此,这篇入门流程就算结束了,我将我的工程代码打包放在了下面的链接中(包括了我的训练数据、测试数据以及相关的数据格式转换代码),如果你感兴趣的话可以前往下载,不过代码里相关的路径需要你按情况修改后才能运行。

libsvm数据分类代码

猜你喜欢

转载自blog.csdn.net/tron_future/article/details/80422529
今日推荐