精华内容
下载资源
问答
  • Python多项式输出

    2020-12-17 22:10:10
    情况比较多,大家可以看我代码后面的注释,我是用举例说明的,非常详细。 直接上代码: def print_polynomial(poly):#输出多项式 i = 0 # 这个i用来记录这一项是第一项 i=0表示第一项 str1 = '

    Python实现多项式输出

    兄弟们!!这个多项式输出考虑的情况有点多,说一下我的思路:

    对于多项式的输出,简化来说就是两项的输出:即第一项和第二项的输出
    这里我假设:第一项+第二项 = 2x^3 + 4x^5
    这里考虑 2 3 4 5 取不同的值的时候的情况:
    情况比较多,大家可以看我代码后面的注释,我是用举例来说明的,非常详细。
    直接上代码:

    def print_polynomial(poly):#输出多项式
        i = 0 # 这个i用来记录这一项是第一项 i=0表示第一项
        str1 = '' #这个使用来拼接输出的多项式
        for x,y in poly: # x表示系数  y表示指数
            if x !=0: #系数!= 0 的时候才输出
                if i == 0: #这个是第一项
                    i=i+1 #之后在输出的就不是第一项了
                    # x == 1 x==-1  , x<0 和 x>1 是一种情况   6x^4 + 5x^5
                    if x == 1: #如果系数 = 1    1x^6 + 5x^5 = x^6 + 5x^5
                        if y == 1: #如果指数 =1 则不必输出指数  x^1 + 5x^5 = x + 5x^5
                            str1 += "x"
                        elif y == 0 : #如果指数=0, x^0 + 5x^5 = 1 + 5x^5
                            str1 += "1"
                        else:  #其余情况 1x^6 + 5x^5 = x^6 + 5x^5
                            str1 += "x^"+str(y)
                    elif x == -1 : #如果系数等于 -1 , -x^1 + 5x^5 = -x + 5x^5
                        if y == 1: #如果指数 =1    -x^1 + 5x^5 = -x + 5x^5
                            str1 += "-x"
                        elif y == 0 : #如果指数=0, -1x^0 + 5x^5 = -1 + 5x^5
                            str1 += "-1"
                        else:  #其余情况  -x^4 + 5x^5 = -x^4 + 5x^5
                            str1 += "-x^"+str(y)
                    elif x < 0 or x>0 : # 6x^4 + 5x^5=6x^4+5x^5 或 -6x^4 + 5x^5 = -6x^4 + 5x^5
                        if y == 1: # 6x^1 + 5x^5=6x + 5x^5  或 -6x^1 + 5x^5 = -6x + 5x^5
                            str1 += str(x)+"x"
                        elif y == 0 : # 6x^0 + 5x^5=6 + 5x^5  或 -6x^0 + 5x^5 = -6 + 5x^5
                            str1 += str(x)
                        else:  #其余情况 6x^4 + 5x^5=6x^4 + 5x^5  或 -6x^4 + 5x^5 = -6x^4 + 5x^5
                            str1 += str(x)+"x^"+str(y)
                elif i!= 0: #不是第一项输出的时候
                    # x > 0 的时候需要输出 + 号  6x^4 + 5x^5 = 6x^4 + 5x^5 这个需要输出+号
                    #x < 0 的时候需要输出 - 号   6x^4 - 5x^5 = 6x^4 - 5x^5 这个需要输出-号
                    if x == 1: #如果系数 = 1  6x^4 + 1x^5 = 6x^4 + x^5
                        if y == 1: #如果指数 =1 则不必输出指数  6x^4 + 1x^1 = 6x^4 + x
                            str1 += "+x"
                        elif y == 0 : #如果指数=0,则不必输出 6x^4 + 1x^0 = 6x^4 + 1
                            str1 += "+1"
                        else:  #  6x^4 + 1x^5 = 6x^4 + x^5
                            str1 += "+x^"+str(y)
                    elif x == -1 : #x=-1 , 6x^4 -1x^5 = 6x^4 - x^5
                        if y == 1: # y=1 , 6x^4 -1x^1 = 6x^4 - x
                            str1 += "-x"
                        elif y == 0 : #如果指数=0,6x^4 -1x^0  = 6x^4 - 1
                            str1 += "-1"  # 1*x^0 =1
                        else:  #其余情况  6x^4 -1x^5 = 6x^4 - x^5
                            str1 += "-x^"+str(y)
                    elif x < 0  : # 6x^4 - 5x^5 = 6x^4 - 5x^5 或 6x^4 + 5x^5 = 6x^4 + 5x^5
                        if y == 1: # 6x^4 - 5x^1 = 6x^4 - 5x 或 6x^4 + 5x^1 = 6x^4 + 5x
                            str1 += str(x)+"x"
                        elif y == 0 : # 6x^4 - 5x^0 = 6x^4 - 5 或 6x^4 + 5x^0 = 6x^4 + 5
                            str1 += str(x)
                        else:  # 6x^4 - 5x^4= 6x^4 - 5x^4 或 6x^4 + 5x^4 = 6x^4 + 5x^4
                            str1 += str(x)+"x^"+str(y)
                    elif x > 0:
                        if y == 1: # 6x^4 - 5x^1 = 6x^4 - 5x 或 6x^4 + 5x^1 = 6x^4 + 5x
                            str1 += "+"+str(x)+"x"
                        elif y == 0 : # 6x^4 - 5x^0 = 6x^4 - 5 或 6x^4 + 5x^0 = 6x^4 + 5
                            str1 += "+"+str(x)
                        else:  # 6x^4 - 5x^4= 6x^4 - 5x^4 或 6x^4 + 5x^4 = 6x^4 + 5x^4
                            str1 += "+"+str(x)+"x^"+str(y)
        return str1
    if __name__=="__main__":
        poly = [(0,6),(0,4),(5,3),(-1,3),(1,0)]
        str1 = print_polynomial(poly)
        print(str1)
    

    说明:poly列表中的元素时元组类型,(0,6)表示 0x^6 ,前一项是系数,后一项是指数

    poly = [(0,6),(0,4),(5,3),(-1,3),(1,0)]
        str1 = print_polynomial(poly)
    

    总结

    写这个多项式的输出,确实很麻烦,需要大家耐心一点看!!!我这个代码应该是考虑到了所有的情况,如果大家在测试的时候发现不对的情况,欢迎在下方留言,我看到之后会改进代码!!!欢迎大家批评指正!!!!

    展开全文
  • 原文:... 举例说明  svmtrain -s 0 -?c 1000 -t 1 -g 1 -r 1 -d 3 data_file 训练一个由多项式核(u'v+1)^3和C=1000组成的分类器。  svmtrain -s 1 -n 0.1 -t 2 -g 0.5 -e 0.000...

    原文:http://blog.sina.com.cn/s/blog_57a1cae80101bit5.html

     

    举例说明

      svmtrain -s 0 -?c 1000 -t 1 -g 1 -r 1 -d 3 data_file   训练一个由多项式核(u'v+1)^3和C=1000组成的分类器。

      svmtrain -s 1 -n 0.1 -t 2 -g 0.5 -e 0.00001 data_file   在RBF核函数exp(-0.5|u-v|^2)和终止允许限0.00001的条件下,训练一个?-SVM (? = 0.1)分类器。  

         svmtrain -s 3 -p 0.1 -t 0 -c 10 data_file   以线性核函数u'v和C=10及损失函数?= 0.1求解SVM回归。  

     输出如下:   optimization finished,#iter   迭代次数   epsilon =  二次规划的终止条件   obj =, obj,就是那个二次规划的最小值吧   rho = 判决函数的常数向

      nSV =, 支持向量的个数

     

     

     

    其中value为归一化后的值,其他参数与前面介绍的相同。

    建议将训练数据集与测试数据集放在同一个文本文件中一起归一化,然后再将归一化结果分成训练集和测试集。

     

     

    首先下载Libsvm、Python和Gnuplot:

    l         libsvm的主页http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 上下载libsvm (我自己用2.86版本)

    l         python的主页http://www.python.org 下载 python (我自己用2.5版本)

    l         gnuplot的主页http://www.gnuplot.info/ 下载gnuplot  (我用4.0版本)

    LIBSVM 使用的一般步骤是:

    1)按照LIBSVM软件包所要求的格式准备数据集;                                    

    2)对数据进行简单的缩放操作;                                   

    3)首要考虑选用RBF 核函数;

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

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

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

    1)LIBSVM使用的数据格式

        该软件使用的训练数据和检验数据文件格式如下:

    [label] [index1]:[value1] [index2]:[value2] ...

    [label] [index1]:[value1] [index2]:[value2] ...

    一行一条记录数据,如:

    +1 1:0.708 2:1 3:1 4:-0.320 5:-0.105 6:-1

    这里(x,y)à((0.708,1,1, -0.320, -0.105, -1), +1)

    label 或说是class, 就是你要分类的种类,通常是一些整数。

    index 是有順序的索引,通常是连续的整数。

    value 就是用来 train 的数据,通常是一堆实数。

     

    2)对数据进行简单的缩放操作

        扫描数据. 因为原始数据可能范围过大或过小, svmscale可以先将数据重新scale (縮放) 到适当范围使训练与预测速度更快。

        svmscale.exe的用法:svmscale.exe feature.txt feature.scaled

    默认的归一化范围是[-1,1],可以用参数-l和-u分别调整上界和下届,feature.txt是输入特征文件名输出的归一化特征名为feature.scaled

     

    3) 考虑选用RBF 核函数

    训练数据形成模型(model),实质是算出了wx+b=0中的w,b.

     Svmtrain的用法:svmtrain [options] training_set_file [model_file]

     

    其中options涵义如下:

    -s svm类型:设置SVM 类型,默认值为0,可选类型有:

    0 -- C- SVC(分类)

    1 -- nu - SVC(分类)

    2 -- one-class-SVM

    3 -- e - SVR(回归)

    4 -- nu-SVR(回归)

    -t 核函数类型:设置核函数类型,默认值为2,可选类型有:

    0 -- 线性核:u'*v

    1 -- 多项式核:(g*u'*v+ coef0)degree

    2 -- RBF 核:exp(-||u-v||*||u-v||/g*g)

    3 -- sigmoid 核:tanh(g*u'*v+ coef 0)

    -d degree:核函数中的degree设置,默认值为3;

    -g r(gama):核函数中的函数设置(默认1/ k);

    -r coef 0:设置核函数中的coef0,默认值为0;

    -c cost:设置C- SVC、e - SVR、n - SVR中从惩罚系数C,默认值为1;

    -n nu :设置nu - SVC、one-class-SVM 与nu - SVR 中参数nu ,默认值0.5;

    -p e :核宽,设置e - SVR的损失函数中的e ,默认值为0.1;

    -m cachesize:设置cache内存大小,以MB为单位(默认40):

    -e e :设置终止准则中的可容忍偏差,默认值为0.001;

    -h shrinking:是否使用启发式,可选值为0 或1,默认值为1;

    -b 概率估计:是否计算SVC或SVR的概率估计,可选值0 或1,默认0;

    -wi weight:对各类样本的惩罚系数C加权,默认值为1;

    -v n:n折交叉验证模式。

     

    其中-g选项中的k是指输入数据中的属性数。操作参数 -v 随机地将数据剖分为n 部分并计算交叉检验准确度和均方根误差。以上这些参数设置可以按照SVM 的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM 类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。training_set_file是要进行训练的数据集;model_file是训练结束后产生的模型文件,该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。举个例子如下:

    C:\libsvm-2.85\windows>svmtrain heart_scale

    *

    optimization finished, #iter = 162

    nu = 0.431029

    obj = -100.877288, rho = 0.424462

    nSV = 132, nBSV = 107

    Total nSV = 132

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

    #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曲线绘制。

     

     

    1.首先从主页上下载libsvm、Python2.5.2和gnuplot 三个软件。

    http://www.csie.ntu.edu.tw/~cjlin/

    2.准备好数据,首先要把数据转换成Libsvm软件包要求的数据格式为:

    label index1:value1 index2:value2 ...

    其中对于分类来说label为类标识,指定数据的种类 ;对于回归来说label为目标值。(我主要要用到回归)

    Index是从1开始的自然数,value是每一维的特征值。

    该过程可以自己使用excel或者编写程序来完成,也可以使用网络上的FormatDataLibsvm.xls来完成。

    FormatDataLibsvm.xls使用说明:

    先将数据按照下列格式存放(注意label放最后面):

    value1 value2 ?? label

    value1 value2 ?? label

    ??

    然后将以上数据粘贴到FormatDataLibsvm.xls中的最左上角单元格,接着工具->宏执行行FormatDataToLibsvm宏。就可以得到libsvm要求的数据格式。将该数据存放到文本文件中进行下一步的处理。

    3.对数据进行归一化。

    该过程要用到libsvm软件包中的svm-scale.exe

    Svm-scale用法:

    用法:svmscale [-l lower] [-u upper] [-y y_lower y_upper] [-s save_filename] [-r restore_filename] filename (缺省值: lower = -1,upper = 1,没有对y进行缩放) 其中, -l:数据下限标记;lower:缩放后数据下限; -u:数据上限标记;upper:缩放后数据上限; -y:是否对目标值同时进行缩放;y_lower为下限值,y_upper为上限值;(回归需要对目标进行缩放,因此该参数可以设定为 –y -1 1 ) -s save_filename:表示将缩放的规则保存为文件save_filename; -r restore_filename:表示将缩放规则文件restore_filename载入后按此缩放; filename:待缩放的数据文件(要求满足前面所述的格式)。

    缩放规则文件可以用文本浏览器打开,看到其格式为:

    y

    lower upper min max x

    lower upper

    index1 min1 max1

    index2 min2 max2

    ?? 其中的lower 与upper 与使用时所设置的lower 与upper 含义相同;index 表 示特征序号;min 转换前该特征的最小值;max 转换前该特征的最大值。数据集的缩放结果在此情况下通过DOS窗口输出,当然也可以通过DOS的文件重定向符号“>”将结果另存为指定的文件。该文件中的参数可用于最后面对目标值的反归一化。反归一化的公式为:

    (Value-lower)*(max-min)/(upper - lower)+lower

    以上内容是网上找到的,反归一化公式是错误的,应该是:

    (Value-lower)*(max-min)/(upper - lower)+min

    其中value为归一化后的值,其他参数与前面介绍的相同。

    建议将训练数据集与测试数据集放在同一个文本文件中一起归一化,然后再将归一化结果分成训练集和测试集。

    4.训练数据,生成模型。

    用法: svmtrain [options] training_set_file [model_file]

    其中, options(操作参数):可用的选项即表示的涵义如下所示 -s svm类型:设置SVM 类型,默认值为0,可选类型有(对于回归只能选3或4):

    0 -- C- SVC 1 -- n - SVC 2 -- one-class-SVM 3 -- e - SVR 4 -- n - SVR -t 核函数类型:设置核函数类型,默认值为2,可选类型有: 0 -- 线性核:u'*v 1 -- 多项式核: (g*u'*v+ coef 0)deg ree 2 -- RBF 核:e( u v 2) g - 3 -- sigmoid 核:tanh(g*u'*v+ coef 0) -d degree:核函数中的degree设置,默认值为3;

    -g g :设置核函数中的g ,默认值为1/ k ; -r coef 0:设置核函数中的coef 0,默认值为0; -c cost:设置C- SVC、e - SVR、n - SVR中从惩罚系数C,默认值为1; -n n :设置n - SVC、one-class-SVM 与n - SVR 中参数n ,默认值0.5; -p e :设置n - SVR的损失函数中的e ,默认值为0.1; -m cachesize:设置cache内存大小,以MB为单位,默认值为40; -e e :设置终止准则中的可容忍偏差,默认值为0.001; -h shrinking:是否使用启发式,可选值为0 或1,默认值为1; -b 概率估计:是否计算SVC或SVR的概率估计,可选值0 或1,默认0; -wi weight:对各类样本的惩罚系数C加权,默认值为1; -v n:n折交叉验证模式。

    其中-g选项中的k是指输入数据中的属性数。操作参数 -v 随机地将数据剖分为n 部分并计算交叉检验准确度和均方根误差。以上这些参数设置可以按照SVM 的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM 类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。training_set_file是要进行训练的数据集;model_file是训练结束后产生的模型文件,该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。

    本实验中的参数-s取3,-t取2(默认)还需确定的参数是-c,-g,-p

    另, 实验中所需调整的重要参数是-c 和 –g,-c和-g的调整除了自己根据经验试之外,还可以使用gridregression.py对这两个参数进行优化。(需要补充)

    该优化过程需要用到Python(2.5),Gnuplot(4.2),gridregression.py(该文件需要修改路径)。

    然后在命令行下面运行:

    python.exe gridregression.py -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -s 3 –t 2 -v 5 -svmtrain E:\libsvm\libsvm-2.86\windows\svm-train.exe -gnuplot E:\libsvm\libsvm-2.86\gnuplot\bin\pgnuplot.exe E:\libsvm\libsvm-2.86\windows\train.txt > gridregression_feature.parameter

    以上三个路径根据实际安装情况进行修改。

    -log2c是给出参数c的范围和步长 -log2g是给出参数g的范围和步长 -log2p是给出参数p的范围和步长上面三个参数可以用默认范围和步长 -s选择SVM类型,也是只能选3或者4 -t是选择核函数 -v 10 将训练数据分成10份做交叉验证。默认为5

    为了方便将gridregression.py是存放在python.exe安装目录下

    trian.txt为训练数据,参数存放在gridregression_feature.parameter中,可以自己命名。

    搜索结束后可以在gridregression_feature.parameter中最后一行看到最优参数。

    其中,最后一行的第一个参数即为-c,第二个为-g,第三个为-p,最后一个参数为均方误差。前三个参数可以直接用于模型的训练。

    然后,根据搜索得到的参数,重新训练,得到模型。

    5.测试

    用法:svmpredict [options] test_file model_file output_file options(操作参数): -b probability_estimates:是否需要进行概率估计预测,可选值为0 或者1,默认值为0。 model_file 是由svmtrain 产生的模型文件;

    test_file 是要进行预测的数据文件;

    output_file 是svmpredict 的输出文件,表示预测的结果值。

    输出结果包括均方误差(Mean squared error)和相关系数(Squared correlation coefficient)。

    用LIBSVM做回归和预测的步骤(请指点)

    用LIBSVM做回归和预测的步骤(请指点)

    首先说明,我学习SVM才几天,对基本理论还不了解,只是想利用这一工具做自己想做的事情。摸索着做了几个实验,试着把过程写下来,请大家指点。

    <1> 下载Libsvm、Python和Gnuplot。我用的版本分别是:Libsvm(2.8.1),Python(2.4),Gnuplot(3.7.3)。注意:Gnuplot一定要用3.7.3版,3.7.1版的有bug.

    <2> 修改训练和测试数据的格式(可以自己用perl编个小程序):

    目标值 第一维特征编号:第一维特征值 第二维特征编号:第二维特征值 …

    例如:

    2.3 1:5.6 2:3.2

    表示训练用的特征有两维,第一维是5.6,第二维是3.2,目标值是2.3

    注意:训练和测试数据的格式必须相同,都如上所示。测试数据中的目标值是为了计算误差用

    <3> 分别使用Libsvm中的Windows版本的工具svmscale.exe进行训练和测试数据的归一化,svmtrain.exe进行模型训练,svmpredict.exe进行预测

    (1)svmscale.exe的用法:svmscale.exe feature.txt feature.scaled

    默认的归一化范围是[-1,1],可以用参数-l和-u分别调整上界和下届,feature.txt是输入特征文件名

    输出的归一化特征名为feature.scaled

    (2)svmtrtrain.exe训练模型

    我习惯写个批处理小程序,处理起来比较方便。例如svm_train.bat中训练语句为:

    svmtrain.exe -s 3 -p 0.0001 -t 2 -g 32 -c 0.53125 -n 0.99 feature.scaled

    训练得到的模型为feature.scaled.model

    具体的参数含义可以参考帮助文档。这里-s是选择SVM的类型。对于回归来说,只能选3或者 4,3表示epsilon-support vector regression, 4表示nu-support vector regression。-t是选择核函数,通常选用RBF核函数,原因在“A Practical Guide support vector classification”中已经简单介绍过了。-p尽量选个比较小的数字。需要仔细调整的重要参数是-c和-g。除非用 gridregression.py来搜索最优参数,否则只能自己慢慢试了。

    用gridregression.py搜索最优参数的方法如下:

    python.exe gridregression.py -svmtrain H:\SVM\libsvm-2.81\windows\svmtrain.exe -gnuplot C:\gp373w32\pgnuplot.exe -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -v 10 -s 3 -t 2 H:\SVM\libsvm-2.81\windows\feature.scaled > gridregression_feature.parameter

    注意:-svmtrain是给出svmtrain.exe所在路径,一定要是完整的全路径

    -gnuplot是给出pgnuplot.exe所在路径。这里要用pgnuplot.exe这种命令行形式的,不要用wgnupl32.exe,这个是图形界面的。

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

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

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

    上面三个参数可以用默认范围和步长

    -s选择SVM类型,也是只能选3或者4

    -t是选择核函数

    -v 10 将训练数据分成10份做交叉验证。默认为5

    最后给出归一化后训练数据的全路径

    搜索最优参数的过程写入文件gridregression_feature.parameter(注意别少了这个>符号啊)

    根据搜索到的最优参数修改feature.scaled.model中的参数

    (3)用svmpredict.exe进行预测

    svmpredict.exe feature_test.scaled feature.scaled.model feature_test.predicted

    其中feature_test.scaled是归一化后的测试特征文件名,feature.scaled.model是训练好的模型,SVM预测的值在feature_test.predicted中

    核函数方法简介

    (1)核函数发展历史

    早在1964年Aizermann等在势函数方法的研究中就将该技术引入到机器学习领域,但是直到1992年Vapnik等利用该技术成功地将线性 SVMs推广到非线性SVMs时其潜力才得以充分挖掘。而核函数的理论则更为古老,Mercer定理可以追溯到1909年,再生核希尔伯特空间 (ReproducingKernel Hilbert Space, RKHS)研究是在20世纪40年代开始的。

    (2)核函数方法原理

    根据模式识别理论,低维空间线性不可分的模式通过非线性映射到高维特征空间则可能实现线性可分,但是如果直接采用这种技术在高维空间进行分类或回归,则存在确定非线性映射函数的形式和参数、特征空间维数等问题,而最大的障碍则是在高维特征空间运算时存在的“维数灾难”。采用核函数技术可以有效地解决这样问题。

    设x,z∈X,X属于R(n)空间,非线性函数Φ实现输入间X到特征空间F的映射,其中F属于R(m),n<<m。根据核函数技术有:

    K(x,z) =<Φ(x),Φ(z) >  (1)

    其中:<, >为内积,K(x,z)为核函数。从式(1)可以看出,核函数将m维高维空间的内积运算转化为n维低维输入空间的核函数计算,从而巧妙地解决了在高维特征空间中计算的“维数灾难”等问题,从而为在高维特征空间解决复杂的分类或回归问题奠定了理论基础。

    (3)核函数特点

    核函数方法的广泛应用,与其特点是分不开的:

    1)核函数的引入避免了“维数灾难”,大大减小了计算量。而输入空间的维数n对核函数矩阵无影响,因此,核函数方法可以有效处理高维输入。

    2)无需知道非线性变换函数Φ的形式和参数.

    3)核函数的形式和参数的变化会隐式地改变从输入空间到特征空间的映射,进而对特征空间的性质产生影响,最终改变各种核函数方法的性能。

    4)核函数方法可以和不同的算法相结合,形成多种不同的基于核函数技术的方法,且这两部分的设计可以单独进行,并可以为不同的应用选择不同的核函数和算法。

    (4)常见核函数

    核函数的确定并不困难,满足Mercer定理的函数都可以作为核函数。常用的核函数可分为两类,即内积核函数和平移不变核函数,如:

     1)高斯核函数K(x,xi) =exp(-||x-xi||2/2σ2;

    2)多项式核函数K(x,xi)=(x·xi+1)^d, d=1,2,…,N; 

    3)感知器核函数K(x,xi) =tanh(βxi+b);

    4)样条核函数K(x,xi) = B2n+1(x-xi)。

    (5)核函数方法实施步骤

    核函数方法是一种模块化(Modularity)方法,它可分为核函数设计和算法设计两个部分,具体为:

    1)收集和整理样本,并进行标准化;

    2)选择或构造核函数;

    3)用核函数将样本变换成为核函数矩阵,这一步相当于将输入数据通过非线性函数映射到高维

    特征空间;

    4)在特征空间对核函数矩阵实施各种线性算法;

    5)得到输入空间中的非线性模型。

    显然,将样本数据核化成核函数矩阵是核函数方法中的关键。注意到核函数矩阵是l×l的对称矩阵,其中l为样本数。

    (6)核函数在模式识别中的应用

    1)新方法。主要用在基于结构风险最小化(Structural Risk Minimization,SRM)的SVM中。

    2)传统方法改造。如核主元分析(kernel PCA)、核主元回归(kernel PCR)、核部分最小二乘法(kernel PLS)、核Fisher判别分析(Kernel Fisher Discriminator, KFD)、核独立主元分析(Kernel Independent Component Analysis,KICA)等,这些方法在模式识别等不同领域的应用中都表现了很好的性能。

     

    许多想用lib-svm解决分类或者回归的初学者可能像我一样一开始摸不着头绪。面对长篇的english,头都大了。有好心人把自己的经验总结了,我们就一起共享吧!

    1. LIBSVM 软件包简介

    LIBSVM 是台湾大学林智仁(Chih-Jen Lin)博士等开发设计的一个操作简单、易于使用、快速有效的通用SVM 软件包,可以解决分类问题(包括C- SVC、n - SVC )、回归问题(包括e - SVR、n - SVR )以及分布估计(one-class-SVM )等问题,提供了线性、多项式、径向基和S形函数四种常用的核函数供选择,可以有效地解决多类问题、交叉验证选择参数、对不平衡样本加权、多类问题的概率估计等。LIBSVM 是一个开源的软件包,需要者都可以免费的从作者的个人主页http://www.csie.ntu.edu.tw/~cjlin/ 处获得。他不仅提供了LIBSVM的C++语言的算法源代码,还提供了Python、Java、R、MATLAB、Perl、Ruby、LabVIEW以及C#.net 等各种语言的接口,可以方便的在Windows 或UNIX 平台下使用,也便于科研工作者根据自己的需要进行改进(譬如设计使用符合自己特定问题需要的核函数等)。另外还提供了WINDOWS 平台下的可视化操作工具SVM-toy,并且在进行模型参数选择时可以绘制出交叉验证精度的等高线图。

    2. LIBSVM 使用方法简介

    LIBSVM 在给出源代码的同时还提供了Windows操作系统下的可执行文件,包括:进行支持向量机训练的svmtrain.exe;根据已获得的支持向量机模型对数据集进行预测的svmpredict.exe;以及对训练数据与测试数据进行简单缩操作的svmscale.exe。它们都可以直接在DOS 环境中使用。如果下载的包中只有C++的源代码,则也可以自己在VC等软件上编译生成可执行文件。

    LIBSVM 使用的一般步骤是:

    1) 按照LIBSVM软件包所要求的格式准备数据集;

    2) 对数据进行简单的缩放操作;

    3) 考虑选用RBF 核函数2 K(x,y) e x y = -g - ;

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

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

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

    一. LIBSVM 使用的数据格式

    LIBSVM使用的训练数据和测试数据文件格式如下:

    : :< 2> …

    其中 是训练数据集的目标值,对于分类,它是标识某类的整数(支持

    多个类);对于回归,是任意实数。

    是以1 开始的整数,表示特征的序号;
    为实数,也就是我们常说的特征值或自变量。当特征值为0 时,特征序号与特征值都可以同时省略,即index可以是不连续的自然数。
    与第一个特征序号、前一个特征值与后一个特征序号之间用空格隔开。测试数据文件中的label 只用于计算准确度或误差,如果它是未知的,只需用任意一个数填写这一栏,也可以空着不填。例如:

    +1 1:0.708 2:1 3:1 4:-0.320 5:-0.105 6:-1 8:1.21

    二. svmscale 的用法

    对数据集进行缩放的目的在于:

    1)避免一些特征值范围过大而另一些特征值范围过小;

    2)避免在训练时为了计算核函数而计算内积的时候引起数值计算的困难。因此,通常将数据缩放到[ -1,1]或者是[0,1]之间。

    用法:svmscale [-l lower] [-u upper] [-y y_lower y_upper][-s save_filename] [-r restore_filename] filename

    (缺省值: lower = -1,upper = 1,没有对y进行缩放)

    其中,

    -l:数据下限标记;lower:缩放后数据下限;

    -u:数据上限标记;upper:缩放后数据上限;

    -y:是否对目标值同时进行缩放;y_lower为下限值,y_upper为上限值;

    -s save_filename:表示将缩放的规则保存为文件save_filename;

    -r restore_filename:表示将缩放规则文件restore_filename载入后按此缩放;

    filename:待缩放的数据文件(要求满足前面所述的格式)。

    缩放规则文件可以用文本浏览器打开,看到其格式为:

    lower upper

    lval1 uval1

    lval2 uval2

    其中的lower 与upper 与使用时所设置的lower 与upper 含义相同;index 表示特征序号;lval 为该特征对应转换后下限lower 的特征值;uval 为对应于转换后上限upper 的特征值。数据集的缩放结果在此情况下通过DOS窗口输出,当然也可以通过DOS的文件重定向符号“>”将结果另存为指定的文件。

    使用实例:

    1) svmscale –s train3.range train3>train3.scale

    表示采用缺省值(即对属性值缩放到[ -1,1]的范围,对目标值不进行缩放)对数据集train3 进行缩放操作,其结果缩放规则文件保存为train3.range,缩放集的缩放结果保存为train3.scale。

    2) svmscale –r train3.range test3>test3.scale

    表示载入缩放规则train3.range 后按照其上下限对应的特征值和上下限值线性的地对数据集test3 进行缩放,结果保存为test3.scale。

    三. svmtrain 的用法

    svmtrain实现对训练数据集的训练,获得SVM模型。

    用法: svmtrain [options] training_set_file [model_file]

    其中,

    options(操作参数):可用的选项即表示的涵义如下所示

    -s svm类型:设置SVM 类型,默认值为0,可选类型有:

    0 -- C- SVC

    1 -- n - SVC

    2 -- one-class-SVM

    3 -- e - SVR

    4 -- n - SVR

    -t 核函数类型:设置核函数类型,默认值为2,可选类型有:

    0 -- 线性核:u'*v

    1 -- 多项式核: (g*u'*v+ coef 0)deg ree

    2 -- RBF 核:e( u v 2) g -

    3 -- sigmoid 核:tanh(g*u'*v+ coef 0)

    -d degree:核函数中的degree设置,默认值为3; -g g :设置核函数中的g ,默认值为1/ k ;

    -r coef 0:设置核函数中的coef 0,默认值为0;

    -c cost:设置C- SVC、e - SVR、n - SVR中从惩罚系数C,默认值为1;

    -n n :设置n - SVC、one-class-SVM 与n - SVR 中参数n ,默认值0.5;

    -p e :设置n - SVR的损失函数中的e ,默认值为0.1;

    -m cachesize:设置cache内存大小,以MB为单位,默认值为40;

    -e e :设置终止准则中的可容忍偏差,默认值为0.001;

    -h shrinking:是否使用启发式,可选值为0 或1,默认值为1;

    -b 概率估计:是否计算SVC或SVR的概率估计,可选值0 或1,默认0;

    -wi weight:对各类样本的惩罚系数C加权,默认值为1;

    -v n:n折交叉验证模式。

    其中-g选项中的k是指输入数据中的属性数。操作参数 -v 随机地将数据剖分为n 部分并计算交叉检验准确度和均方根误差。以上这些参数设置可以按照SVM 的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM 类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。training_set_file是要进行训练的数据集;model_file是训练结束后产生的模型文件,该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。

    四. svmpredict 的用法

    svmpredict 是根据训练获得的模型,对数据集合进行预测。

    用法:svmpredict [options] test_file model_file output_file

    options(操作参数):

    -b probability_estimates:是否需要进行概率估计预测,可选值为0 或者1,

    默认值为0。

    model_file 是由svmtrain 产生的模型文件;test_file 是要进行预测的数据文

    件;output_file 是svmpredict 的输出文件,表示预测的结果值。svmpredict 没有其它的选项。

    因为要用svm做regression,所以看了一些关于libsvm,总结以备用

    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的类型和核函

    数所支持的参数进行任意组合,如果设置的参数在函数或SVM类型中没有也不会产生影

    响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。

    展开全文
  • 举例说明  svmtrain -s 0 -?c 1000 -t 1 -g 1 -r 1 -d 3 data_file 训练一个由多项式核(u'v+1)^3和C=1000组成的分类器。 svmtrain -s 1 -n 0.1 -t 2 -g 0.5 -e 0.00001 data_file 在RBF核函数exp(-0.5|u-v|^2)...

    举例说明

      svmtrain -s 0 -?c 1000 -t 1 -g 1 -r 1 -d 3 data_file   训练一个由多项式核(u'v+1)^3和C=1000组成的分类器。   svmtrain -s 1 -n 0.1 -t 2 -g 0.5 -e 0.00001 data_file   在RBF核函数exp(-0.5|u-v|^2)和终止允许限0.00001的条件下,训练一个?-SVM (? = 0.1)分类器。  svmtrain -s 3 -p 0.1 -t 0 -c 10 data_file   以线性核函数u'v和C=10及损失函数?= 0.1求解SVM回归。   输出如下:   optimization finished,#iter   迭代次数   epsilon =  二次规划的终止条件   obj =, obj,就是那个二次规划的最小值吧   rho = 判决函数的常数向

      nSV =, 支持向量的个数

    其中value为归一化后的值,其他参数与前面介绍的相同。

    建议将训练数据集与测试数据集放在同一个文本文件中一起归一化,然后再将归一化结果分成训练集和测试集。

    首先下载Libsvm、Python和Gnuplot:

    l libsvm的主页http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 上下载libsvm (我自己用2.86版本)

    l python的主页http://www.python.org 下载 python (我自己用2.5版本)

    l gnuplot的主页http://www.gnuplot.info/ 下载gnuplot (我用4.0版本)

    LIBSVM 使用的一般步骤是:

    1)按照LIBSVM软件包所要求的格式准备数据集;

    2)对数据进行简单的缩放操作;

    3)首要考虑选用RBF 核函数;

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

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

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

    1)LIBSVM使用的数据格式

    该软件使用的训练数据和检验数据文件格式如下:

    [label] [index1]:[value1] [index2]:[value2] ...

    [label] [index1]:[value1] [index2]:[value2] ...

    一行一条记录数据,如:

    +1 1:0.708 2:1 3:1 4:-0.320 5:-0.105 6:-1

    这里(x,y)à((0.708,1,1, -0.320, -0.105, -1), +1)

    label 或说是class, 就是你要分类的种类,通常是一些整数。

    index 是有順序的索引,通常是连续的整数。

    value 就是用来 train 的数据,通常是一堆实数。

    2)对数据进行简单的缩放操作

    扫描数据. 因为原始数据可能范围过大或过小, svmscale可以先将数据重新scale (縮放) 到适当范围使训练与预测速度更快。

    svmscale.exe的用法:svmscale.exe feature.txt feature.scaled

    默认的归一化范围是[-1,1],可以用参数-l和-u分别调整上界和下届,feature.txt是输入特征文件名输出的归一化特征名为feature.scaled

    3) 考虑选用RBF 核函数

    训练数据形成模型(model),实质是算出了wx+b=0中的w,b.

    Svmtrain的用法:svmtrain [options] training_set_file [model_file]

    其中options涵义如下:

    -s svm类型:设置SVM 类型,默认值为0,可选类型有:

    0 -- C- SVC

    1 -- nu - SVC

    2 -- one-class-SVM

    3 -- e - SVR

    4 -- nu-SVR

    -t 核函数类型:设置核函数类型,默认值为2,可选类型有:

    0 -- 线性核:u'*v

    1 -- 多项式核:(g*u'*v+ coef0)degree

    2 -- RBF 核:exp(-||u-v||*||u-v||/g*g)

    3 -- sigmoid 核:tanh(g*u'*v+ coef 0)

    -d degree:核函数中的degree设置,默认值为3;

    -g r(gama):核函数中的函数设置(默认1/ k);

    -r coef 0:设置核函数中的coef0,默认值为0;

    -c cost:设置C- SVC、e - SVR、n - SVR中从惩罚系数C,默认值为1;

    -n nu :设置nu - SVC、one-class-SVM 与nu - SVR 中参数nu ,默认值0.5;

    -p e :核宽,设置e - SVR的损失函数中的e ,默认值为0.1;

    -m cachesize:设置cache内存大小,以MB为单位(默认40):

    -e e :设置终止准则中的可容忍偏差,默认值为0.001;

    -h shrinking:是否使用启发式,可选值为0 或1,默认值为1;

    -b 概率估计:是否计算SVC或SVR的概率估计,可选值0 或1,默认0;

    -wi weight:对各类样本的惩罚系数C加权,默认值为1;

    -v n:n折交叉验证模式。

    其中-g选项中的k是指输入数据中的属性数。操作参数 -v 随机地将数据剖分为n 部分并计算交叉检验准确度和均方根误差。以上这些参数设置可以按照SVM 的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM 类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。training_set_file是要进行训练的数据集;model_file是训练结束后产生的模型文件,该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。举个例子如下:

    C:\libsvm-2.85\windows>svmtrain heart_scale

    *

    optimization finished, #iter = 162

    nu = 0.431029

    obj = -100.877288, rho = 0.424462

    nSV = 132, nBSV = 107

    Total nSV = 132

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

    #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曲线绘制。

    1.首先从主页上下载libsvm、Python2.5.2和gnuplot 三个软件。

    http://www.csie.ntu.edu.tw/~cjlin/

    2.准备好数据,首先要把数据转换成Libsvm软件包要求的数据格式为:

    label index1:value1 index2:value2 ...

    其中对于分类来说label为类标识,指定数据的种类 ;对于回归来说label为目标值。(我主要要用到回归)

    Index是从1开始的自然数,value是每一维的特征值。

    该过程可以自己使用excel或者编写程序来完成,也可以使用网络上的FormatDataLibsvm.xls来完成。

    FormatDataLibsvm.xls使用说明:

    先将数据按照下列格式存放(注意label放最后面):

    value1 value2 ?? label

    value1 value2 ?? label

    ??

    然后将以上数据粘贴到FormatDataLibsvm.xls中的最左上角单元格,接着工具->宏执行行FormatDataToLibsvm宏。就可以得到libsvm要求的数据格式。将该数据存放到文本文件中进行下一步的处理。

    3.对数据进行归一化。

    该过程要用到libsvm软件包中的svm-scale.exe

    Svm-scale用法:

    用法:svmscale [-l lower] [-u upper] [-y y_lower y_upper] [-s save_filename] [-r restore_filename] filename (缺省值: lower = -1,upper = 1,没有对y进行缩放) 其中, -l:数据下限标记;lower:缩放后数据下限; -u:数据上限标记;upper:缩放后数据上限; -y:是否对目标值同时进行缩放;y_lower为下限值,y_upper为上限值;(回归需要对目标进行缩放,因此该参数可以设定为 –y -1 1 ) -s save_filename:表示将缩放的规则保存为文件save_filename; -r restore_filename:表示将缩放规则文件restore_filename载入后按此缩放; filename:待缩放的数据文件(要求满足前面所述的格式)。

    缩放规则文件可以用文本浏览器打开,看到其格式为:

    y

    lower upper min max x

    lower upper

    index1 min1 max1

    index2 min2 max2

    ?? 其中的lower 与upper 与使用时所设置的lower 与upper 含义相同;index 表 示特征序号;min 转换前该特征的最小值;max 转换前该特征的最大值。数据集的缩放结果在此情况下通过DOS窗口输出,当然也可以通过DOS的文件重定向符号“>”将结果另存为指定的文件。该文件中的参数可用于最后面对目标值的反归一化。反归一化的公式为:

    (Value-lower)*(max-min)/(upper - lower)+lower

    以上内容是网上找到的,反归一化公式是错误的,应该是:

    (Value-lower)*(max-min)/(upper - lower)+min

    其中value为归一化后的值,其他参数与前面介绍的相同。

    建议将训练数据集与测试数据集放在同一个文本文件中一起归一化,然后再将归一化结果分成训练集和测试集。

    4.训练数据,生成模型。

    用法: svmtrain [options] training_set_file [model_file]

    其中, options(操作参数):可用的选项即表示的涵义如下所示 -s svm类型:设置SVM 类型,默认值为0,可选类型有(对于回归只能选3或4):

    0 -- C- SVC 1 -- n - SVC 2 -- one-class-SVM 3 -- e - SVR 4 -- n - SVR -t 核函数类型:设置核函数类型,默认值为2,可选类型有: 0 -- 线性核:u'*v 1 -- 多项式核: (g*u'*v+ coef 0)deg ree 2 -- RBF 核:e( u v 2) g - 3 -- sigmoid 核:tanh(g*u'*v+ coef 0) -d degree:核函数中的degree设置,默认值为3;

    -g g :设置核函数中的g ,默认值为1/ k ; -r coef 0:设置核函数中的coef 0,默认值为0; -c cost:设置C- SVC、e - SVR、n - SVR中从惩罚系数C,默认值为1; -n n :设置n - SVC、one-class-SVM 与n - SVR 中参数n ,默认值0.5; -p e :设置n - SVR的损失函数中的e ,默认值为0.1; -m cachesize:设置cache内存大小,以MB为单位,默认值为40; -e e :设置终止准则中的可容忍偏差,默认值为0.001; -h shrinking:是否使用启发式,可选值为0 或1,默认值为1; -b 概率估计:是否计算SVC或SVR的概率估计,可选值0 或1,默认0; -wi weight:对各类样本的惩罚系数C加权,默认值为1; -v n:n折交叉验证模式。

    其中-g选项中的k是指输入数据中的属性数。操作参数 -v 随机地将数据剖分为n 部分并计算交叉检验准确度和均方根误差。以上这些参数设置可以按照SVM 的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM 类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。training_set_file是要进行训练的数据集;model_file是训练结束后产生的模型文件,该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。

    本实验中的参数-s取3,-t取2(默认)还需确定的参数是-c,-g,-p

    另, 实验中所需调整的重要参数是-c 和 –g,-c和-g的调整除了自己根据经验试之外,还可以使用gridregression.py对这两个参数进行优化。(需要补充)

    该优化过程需要用到Python(2.5),Gnuplot(4.2),gridregression.py(该文件需要修改路径)。

    然后在命令行下面运行:

    python.exe gridregression.py -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -s 3 –t 2 -v 5 -svmtrain E:\libsvm\libsvm-2.86\windows\svm-train.exe -gnuplot E:\libsvm\libsvm-2.86\gnuplot\bin\pgnuplot.exe E:\libsvm\libsvm-2.86\windows\train.txt > gridregression_feature.parameter

    以上三个路径根据实际安装情况进行修改。

    -log2c是给出参数c的范围和步长 -log2g是给出参数g的范围和步长 -log2p是给出参数p的范围和步长上面三个参数可以用默认范围和步长 -s选择SVM类型,也是只能选3或者4 -t是选择核函数 -v 10 将训练数据分成10份做交叉验证。默认为5

    为了方便将gridregression.py是存放在python.exe安装目录下

    trian.txt为训练数据,参数存放在gridregression_feature.parameter中,可以自己命名。

    搜索结束后可以在gridregression_feature.parameter中最后一行看到最优参数。

    其中,最后一行的第一个参数即为-c,第二个为-g,第三个为-p,最后一个参数为均方误差。前三个参数可以直接用于模型的训练。

    然后,根据搜索得到的参数,重新训练,得到模型。

    5.测试

    用法:svmpredict [options] test_file model_file output_file options(操作参数): -b probability_estimates:是否需要进行概率估计预测,可选值为0 或者1,默认值为0。 model_file 是由svmtrain 产生的模型文件;

    test_file 是要进行预测的数据文件;

    output_file 是svmpredict 的输出文件,表示预测的结果值。

    输出结果包括均方误差(Mean squared error)和相关系数(Squared correlation coefficient)。

    用LIBSVM做回归和预测的步骤(请指点)

    用LIBSVM做回归和预测的步骤(请指点)

    首先说明,我学习SVM才几天,对基本理论还不了解,只是想利用这一工具做自己想做的事情。摸索着做了几个实验,试着把过程写下来,请大家指点。

    <1> 下载Libsvm、Python和Gnuplot。我用的版本分别是:Libsvm(2.8.1),Python(2.4),Gnuplot(3.7.3)。注意:Gnuplot一定要用3.7.3版,3.7.1版的有bug.

    <2> 修改训练和测试数据的格式(可以自己用perl编个小程序):

    目标值 第一维特征编号:第一维特征值 第二维特征编号:第二维特征值 …

    例如:

    2.3 1:5.6 2:3.2

    表示训练用的特征有两维,第一维是5.6,第二维是3.2,目标值是2.3

    注意:训练和测试数据的格式必须相同,都如上所示。测试数据中的目标值是为了计算误差用

    <3> 分别使用Libsvm中的Windows版本的工具svmscale.exe进行训练和测试数据的归一化,svmtrain.exe进行模型训练,svmpredict.exe进行预测

    (1)svmscale.exe的用法:svmscale.exe feature.txt feature.scaled

    默认的归一化范围是[-1,1],可以用参数-l和-u分别调整上界和下届,feature.txt是输入特征文件名

    输出的归一化特征名为feature.scaled

    (2)svmtrtrain.exe训练模型

    我习惯写个批处理小程序,处理起来比较方便。例如svm_train.bat中训练语句为:

    svmtrain.exe -s 3 -p 0.0001 -t 2 -g 32 -c 0.53125 -n 0.99 feature.scaled

    训练得到的模型为feature.scaled.model

    具体的参数含义可以参考帮助文档。这里-s是选择SVM的类型。对于回归来说,只能选3或者 4,3表示epsilon-support vector regression, 4表示nu-support vector regression。-t是选择核函数,通常选用RBF核函数,原因在“A Practical Guide support vector classification”中已经简单介绍过了。-p尽量选个比较小的数字。需要仔细调整的重要参数是-c和-g。除非用 gridregression.py来搜索最优参数,否则只能自己慢慢试了。

    用gridregression.py搜索最优参数的方法如下:

    python.exe gridregression.py -svmtrain H:\SVM\libsvm-2.81\windows\svmtrain.exe -gnuplot C:\gp373w32\pgnuplot.exe -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -v 10 -s 3 -t 2 H:\SVM\libsvm-2.81\windows\feature.scaled > gridregression_feature.parameter

    注意:-svmtrain是给出svmtrain.exe所在路径,一定要是完整的全路径

    -gnuplot是给出pgnuplot.exe所在路径。这里要用pgnuplot.exe这种命令行形式的,不要用wgnupl32.exe,这个是图形界面的。

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

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

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

    上面三个参数可以用默认范围和步长

    -s选择SVM类型,也是只能选3或者4

    -t是选择核函数

    -v 10 将训练数据分成10份做交叉验证。默认为5

    最后给出归一化后训练数据的全路径

    搜索最优参数的过程写入文件gridregression_feature.parameter(注意别少了这个>符号啊)

    根据搜索到的最优参数修改feature.scaled.model中的参数

    (3)用svmpredict.exe进行预测

    svmpredict.exe feature_test.scaled feature.scaled.model feature_test.predicted

    其中feature_test.scaled是归一化后的测试特征文件名,feature.scaled.model是训练好的模型,SVM预测的值在feature_test.predicted中

    核函数方法简介

    (1)核函数发展历史

    早在1964年Aizermann等在势函数方法的研究中就将该技术引入到机器学习领域,但是直到1992年Vapnik等利用该技术成功地将线性 SVMs推广到非线性SVMs时其潜力才得以充分挖掘。而核函数的理论则更为古老,Mercer定理可以追溯到1909年,再生核希尔伯特空间 (ReproducingKernel Hilbert Space, RKHS)研究是在20世纪40年代开始的。

    (2)核函数方法原理

    根据模式识别理论,低维空间线性不可分的模式通过非线性映射到高维特征空间则可能实现线性可分,但是如果直接采用这种技术在高维空间进行分类或回归,则存在确定非线性映射函数的形式和参数、特征空间维数等问题,而最大的障碍则是在高维特征空间运算时存在的“维数灾难”。采用核函数技术可以有效地解决这样问题。

    设x,z∈X,X属于R(n)空间,非线性函数Φ实现输入间X到特征空间F的映射,其中F属于R(m),n<<m。根据核函数技术有:

    K(x,z) =<Φ(x),Φ(z) > (1)

    其中:<, >为内积,K(x,z)为核函数。从式(1)可以看出,核函数将m维高维空间的内积运算转化为n维低维输入空间的核函数计算,从而巧妙地解决了在高维特征空间中计算的“维数灾难”等问题,从而为在高维特征空间解决复杂的分类或回归问题奠定了理论基础。

    (3)核函数特点

    核函数方法的广泛应用,与其特点是分不开的:

    1)核函数的引入避免了“维数灾难”,大大减小了计算量。而输入空间的维数n对核函数矩阵无影响,因此,核函数方法可以有效处理高维输入。

    2)无需知道非线性变换函数Φ的形式和参数.

    3)核函数的形式和参数的变化会隐式地改变从输入空间到特征空间的映射,进而对特征空间的性质产生影响,最终改变各种核函数方法的性能。

    4)核函数方法可以和不同的算法相结合,形成多种不同的基于核函数技术的方法,且这两部分的设计可以单独进行,并可以为不同的应用选择不同的核函数和算法。

    (4)常见核函数

    核函数的确定并不困难,满足Mercer定理的函数都可以作为核函数。常用的核函数可分为两类,即内积核函数和平移不变核函数,如:

     1)高斯核函数K(x,xi) =exp(-||x-xi||2/2σ2;

    2)多项式核函数K(x,xi)=(x·xi+1)^d, d=1,2,…,N;

    3)感知器核函数K(x,xi) =tanh(βxi+b);

    4)样条核函数K(x,xi) = B2n+1(x-xi)。

    (5)核函数方法实施步骤

    核函数方法是一种模块化(Modularity)方法,它可分为核函数设计和算法设计两个部分,具体为:

    1)收集和整理样本,并进行标准化;

    2)选择或构造核函数;

    3)用核函数将样本变换成为核函数矩阵,这一步相当于将输入数据通过非线性函数映射到高维

    特征空间;

    4)在特征空间对核函数矩阵实施各种线性算法;

    5)得到输入空间中的非线性模型。

    显然,将样本数据核化成核函数矩阵是核函数方法中的关键。注意到核函数矩阵是l×l的对称矩阵,其中l为样本数。

    (6)核函数在模式识别中的应用

    1)新方法。主要用在基于结构风险最小化(Structural Risk Minimization,SRM)的SVM中。

    2)传统方法改造。如核主元分析(kernel PCA)、核主元回归(kernel PCR)、核部分最小二乘法(kernel PLS)、核Fisher判别分析(Kernel Fisher Discriminator, KFD)、核独立主元分析(Kernel Independent Component Analysis,KICA)等,这些方法在模式识别等不同领域的应用中都表现了很好的性能。

    许多想用lib-svm解决分类或者回归的初学者可能像我一样一开始摸不着头绪。面对长篇的english,头都大了。有好心人把自己的经验总结了,我们就一起共享吧!

    1. LIBSVM 软件包简介

    LIBSVM 是台湾大学林智仁(Chih-Jen Lin)博士等开发设计的一个操作简单、易于使用、快速有效的通用SVM 软件包,可以解决分类问题(包括C- SVC、n - SVC )、回归问题(包括e - SVR、n - SVR )以及分布估计(one-class-SVM )等问题,提供了线性、多项式、径向基和S形函数四种常用的核函数供选择,可以有效地解决多类问题、交叉验证选择参数、对不平衡样本加权、多类问题的概率估计等。LIBSVM 是一个开源的软件包,需要者都可以免费的从作者的个人主页http://www.csie.ntu.edu.tw/~cjlin/ 处获得。他不仅提供了LIBSVM的C++语言的算法源代码,还提供了Python、Java、R、MATLAB、Perl、Ruby、LabVIEW以及C#.net 等各种语言的接口,可以方便的在Windows 或UNIX 平台下使用,也便于科研工作者根据自己的需要进行改进(譬如设计使用符合自己特定问题需要的核函数等)。另外还提供了WINDOWS 平台下的可视化操作工具SVM-toy,并且在进行模型参数选择时可以绘制出交叉验证精度的等高线图。

    2. LIBSVM 使用方法简介

    LIBSVM 在给出源代码的同时还提供了Windows操作系统下的可执行文件,包括:进行支持向量机训练的svmtrain.exe;根据已获得的支持向量机模型对数据集进行预测的svmpredict.exe;以及对训练数据与测试数据进行简单缩操作的svmscale.exe。它们都可以直接在DOS 环境中使用。如果下载的包中只有C++的源代码,则也可以自己在VC等软件上编译生成可执行文件。

    LIBSVM 使用的一般步骤是:

    1) 按照LIBSVM软件包所要求的格式准备数据集;

    2) 对数据进行简单的缩放操作;

    3) 考虑选用RBF 核函数2 K(x,y) e x y = -g - ;

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

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

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

    一. LIBSVM 使用的数据格式

    LIBSVM使用的训练数据和测试数据文件格式如下:

    : :< 2> …

    其中 是训练数据集的目标值,对于分类,它是标识某类的整数(支持

    多个类);对于回归,是任意实数。

    是以1 开始的整数,表示特征的序号;
    为实数,也就是我们常说的特征值或自变量。当特征值为0 时,特征序号与特征值都可以同时省略,即index可以是不连续的自然数。
    与第一个特征序号、前一个特征值与后一个特征序号之间用空格隔开。测试数据文件中的label 只用于计算准确度或误差,如果它是未知的,只需用任意一个数填写这一栏,也可以空着不填。例如:

    +1 1:0.708 2:1 3:1 4:-0.320 5:-0.105 6:-1 8:1.21

    二. svmscale 的用法

    对数据集进行缩放的目的在于:

    1)避免一些特征值范围过大而另一些特征值范围过小;

    2)避免在训练时为了计算核函数而计算内积的时候引起数值计算的困难。因此,通常将数据缩放到[ -1,1]或者是[0,1]之间。

    用法:svmscale [-l lower] [-u upper] [-y y_lower y_upper][-s save_filename] [-r restore_filename] filename

    (缺省值: lower = -1,upper = 1,没有对y进行缩放)

    其中,

    -l:数据下限标记;lower:缩放后数据下限;

    -u:数据上限标记;upper:缩放后数据上限;

    -y:是否对目标值同时进行缩放;y_lower为下限值,y_upper为上限值;

    -s save_filename:表示将缩放的规则保存为文件save_filename;

    -r restore_filename:表示将缩放规则文件restore_filename载入后按此缩放;

    filename:待缩放的数据文件(要求满足前面所述的格式)。

    缩放规则文件可以用文本浏览器打开,看到其格式为:

    lower upper

    lval1 uval1

    lval2 uval2

    其中的lower 与upper 与使用时所设置的lower 与upper 含义相同;index 表示特征序号;lval 为该特征对应转换后下限lower 的特征值;uval 为对应于转换后上限upper 的特征值。数据集的缩放结果在此情况下通过DOS窗口输出,当然也可以通过DOS的文件重定向符号“>”将结果另存为指定的文件。

    使用实例:

    1) svmscale –s train3.range train3>train3.scale

    表示采用缺省值(即对属性值缩放到[ -1,1]的范围,对目标值不进行缩放)对数据集train3 进行缩放操作,其结果缩放规则文件保存为train3.range,缩放集的缩放结果保存为train3.scale。

    2) svmscale –r train3.range test3>test3.scale

    表示载入缩放规则train3.range 后按照其上下限对应的特征值和上下限值线性的地对数据集test3 进行缩放,结果保存为test3.scale。

    三. svmtrain 的用法

    svmtrain实现对训练数据集的训练,获得SVM模型。

    用法: svmtrain [options] training_set_file [model_file]

    其中,

    options(操作参数):可用的选项即表示的涵义如下所示

    -s svm类型:设置SVM 类型,默认值为0,可选类型有:

    0 -- C- SVC

    1 -- n - SVC

    2 -- one-class-SVM

    3 -- e - SVR

    4 -- n - SVR

    -t 核函数类型:设置核函数类型,默认值为2,可选类型有:

    0 -- 线性核:u'*v

    1 -- 多项式核: (g*u'*v+ coef 0)deg ree

    2 -- RBF 核:e( u v 2) g -

    3 -- sigmoid 核:tanh(g*u'*v+ coef 0)

    -d degree:核函数中的degree设置,默认值为3; -g g :设置核函数中的g ,默认值为1/ k ;

    -r coef 0:设置核函数中的coef 0,默认值为0;

    -c cost:设置C- SVC、e - SVR、n - SVR中从惩罚系数C,默认值为1;

    -n n :设置n - SVC、one-class-SVM 与n - SVR 中参数n ,默认值0.5;

    -p e :设置n - SVR的损失函数中的e ,默认值为0.1;

    -m cachesize:设置cache内存大小,以MB为单位,默认值为40;

    -e e :设置终止准则中的可容忍偏差,默认值为0.001;

    -h shrinking:是否使用启发式,可选值为0 或1,默认值为1;

    -b 概率估计:是否计算SVC或SVR的概率估计,可选值0 或1,默认0;

    -wi weight:对各类样本的惩罚系数C加权,默认值为1;

    -v n:n折交叉验证模式。

    其中-g选项中的k是指输入数据中的属性数。操作参数 -v 随机地将数据剖分为n 部分并计算交叉检验准确度和均方根误差。以上这些参数设置可以按照SVM 的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM 类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。training_set_file是要进行训练的数据集;model_file是训练结束后产生的模型文件,该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。

    四. svmpredict 的用法

    svmpredict 是根据训练获得的模型,对数据集合进行预测。

    用法:svmpredict [options] test_file model_file output_file

    options(操作参数):

    -b probability_estimates:是否需要进行概率估计预测,可选值为0 或者1,

    默认值为0。

    model_file 是由svmtrain 产生的模型文件;test_file 是要进行预测的数据文

    件;output_file 是svmpredict 的输出文件,表示预测的结果值。svmpredict 没有其它的选项。

    因为要用svm做regression,所以看了一些关于libsvm,总结以备用

    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-validationgrid-search 得到最优的cg

    4. 用得到的最优cg训练训练数据

    5. 测试


    转载自:http://blog.sina.com.cn/s/blog_57a1cae80101bit5.html

    展开全文
  • 原文:... 举例说明  svmtrain -s 0 -?c 1000 -t 1 -g 1 -r 1 -d 3 data_file 训练一个由多项式核(u'v+1)^3和C=1000组成的分类器。 svmtrain -s 1 -n 0.1 -t 2 -g 0.5 -e 0.0000...

    原文:http://blog.sina.com.cn/s/blog_57a1cae80101bit5.html

     

    举例说明

      svmtrain -s 0 -?c 1000 -t 1 -g 1 -r 1 -d 3 data_file   训练一个由多项式核(u'v+1)^3和C=1000组成的分类器。   svmtrain -s 1 -n 0.1 -t 2 -g 0.5 -e 0.00001 data_file   在RBF核函数exp(-0.5|u-v|^2)和终止允许限0.00001的条件下,训练一个?-SVM (? = 0.1)分类器。  svmtrain -s 3 -p 0.1 -t 0 -c 10 data_file   以线性核函数u'v和C=10及损失函数?= 0.1求解SVM回归。   输出如下:   optimization finished,#iter   迭代次数   epsilon =  二次规划的终止条件   obj =, obj,就是那个二次规划的最小值吧   rho = 判决函数的常数向

      nSV =, 支持向量的个数

     

     

     

    其中value为归一化后的值,其他参数与前面介绍的相同。

    建议将训练数据集与测试数据集放在同一个文本文件中一起归一化,然后再将归一化结果分成训练集和测试集。

     

     

    首先下载Libsvm、Python和Gnuplot:

    l         libsvm的主页http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 上下载libsvm (我自己用2.86版本)

    l         python的主页http://www.python.org 下载 python (我自己用2.5版本)

    l         gnuplot的主页http://www.gnuplot.info/ 下载gnuplot  (我用4.0版本)

    LIBSVM 使用的一般步骤是:

    1)按照LIBSVM软件包所要求的格式准备数据集;                                    

    2)对数据进行简单的缩放操作;                                   

    3)首要考虑选用RBF 核函数;

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

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

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

    1)LIBSVM使用的数据格式

        该软件使用的训练数据和检验数据文件格式如下:

    [label] [index1]:[value1] [index2]:[value2] ...

    [label] [index1]:[value1] [index2]:[value2] ...

    一行一条记录数据,如:

    +1 1:0.708 2:1 3:1 4:-0.320 5:-0.105 6:-1

    这里(x,y)à((0.708,1,1, -0.320, -0.105, -1), +1)

    label 或说是class, 就是你要分类的种类,通常是一些整数。

    index 是有順序的索引,通常是连续的整数。

    value 就是用来 train 的数据,通常是一堆实数。

     

    2)对数据进行简单的缩放操作

        扫描数据. 因为原始数据可能范围过大或过小, svmscale可以先将数据重新scale (縮放) 到适当范围使训练与预测速度更快。

        svmscale.exe的用法:svmscale.exe feature.txt feature.scaled

    默认的归一化范围是[-1,1],可以用参数-l和-u分别调整上界和下届,feature.txt是输入特征文件名输出的归一化特征名为feature.scaled

     

    3) 考虑选用RBF 核函数

    训练数据形成模型(model),实质是算出了wx+b=0中的w,b.

     Svmtrain的用法:svmtrain [options] training_set_file [model_file]

     

    其中options涵义如下:

    -s svm类型:设置SVM 类型,默认值为0,可选类型有:

    0 -- C- SVC

    1 -- nu - SVC

    2 -- one-class-SVM

    3 -- e - SVR

    4 -- nu-SVR

    -t 核函数类型:设置核函数类型,默认值为2,可选类型有:

    0 -- 线性核:u'*v

    1 -- 多项式核:(g*u'*v+ coef0)degree

    2 -- RBF 核:exp(-||u-v||*||u-v||/g*g)

    3 -- sigmoid 核:tanh(g*u'*v+ coef 0)

    -d degree:核函数中的degree设置,默认值为3;

    -g r(gama):核函数中的函数设置(默认1/ k);

    -r coef 0:设置核函数中的coef0,默认值为0;

    -c cost:设置C- SVC、e - SVR、n - SVR中从惩罚系数C,默认值为1;

    -n nu :设置nu - SVC、one-class-SVM 与nu - SVR 中参数nu ,默认值0.5;

    -p e :核宽,设置e - SVR的损失函数中的e ,默认值为0.1;

    -m cachesize:设置cache内存大小,以MB为单位(默认40):

    -e e :设置终止准则中的可容忍偏差,默认值为0.001;

    -h shrinking:是否使用启发式,可选值为0 或1,默认值为1;

    -b 概率估计:是否计算SVC或SVR的概率估计,可选值0 或1,默认0;

    -wi weight:对各类样本的惩罚系数C加权,默认值为1;

    -v n:n折交叉验证模式。

     

    其中-g选项中的k是指输入数据中的属性数。操作参数 -v 随机地将数据剖分为n 部分并计算交叉检验准确度和均方根误差。以上这些参数设置可以按照SVM 的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM 类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。training_set_file是要进行训练的数据集;model_file是训练结束后产生的模型文件,该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。举个例子如下:

    C:\libsvm-2.85\windows>svmtrain heart_scale

    *

    optimization finished, #iter = 162

    nu = 0.431029

    obj = -100.877288, rho = 0.424462

    nSV = 132, nBSV = 107

    Total nSV = 132

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

    #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曲线绘制。

     

     

    1.首先从主页上下载libsvm、Python2.5.2和gnuplot 三个软件。

    http://www.csie.ntu.edu.tw/~cjlin/

    2.准备好数据,首先要把数据转换成Libsvm软件包要求的数据格式为:

    label index1:value1 index2:value2 ...

    其中对于分类来说label为类标识,指定数据的种类 ;对于回归来说label为目标值。(我主要要用到回归)

    Index是从1开始的自然数,value是每一维的特征值。

    该过程可以自己使用excel或者编写程序来完成,也可以使用网络上的FormatDataLibsvm.xls来完成。

    FormatDataLibsvm.xls使用说明:

    先将数据按照下列格式存放(注意label放最后面):

    value1 value2 ?? label

    value1 value2 ?? label

    ??

    然后将以上数据粘贴到FormatDataLibsvm.xls中的最左上角单元格,接着工具->宏执行行FormatDataToLibsvm宏。就可以得到libsvm要求的数据格式。将该数据存放到文本文件中进行下一步的处理。

    3.对数据进行归一化。

    该过程要用到libsvm软件包中的svm-scale.exe

    Svm-scale用法:

    用法:svmscale [-l lower] [-u upper] [-y y_lower y_upper] [-s save_filename] [-r restore_filename] filename (缺省值: lower = -1,upper = 1,没有对y进行缩放) 其中, -l:数据下限标记;lower:缩放后数据下限; -u:数据上限标记;upper:缩放后数据上限; -y:是否对目标值同时进行缩放;y_lower为下限值,y_upper为上限值;(回归需要对目标进行缩放,因此该参数可以设定为 –y -1 1 ) -s save_filename:表示将缩放的规则保存为文件save_filename; -r restore_filename:表示将缩放规则文件restore_filename载入后按此缩放; filename:待缩放的数据文件(要求满足前面所述的格式)。

    缩放规则文件可以用文本浏览器打开,看到其格式为:

    y

    lower upper min max x

    lower upper

    index1 min1 max1

    index2 min2 max2

    ?? 其中的lower 与upper 与使用时所设置的lower 与upper 含义相同;index 表 示特征序号;min 转换前该特征的最小值;max 转换前该特征的最大值。数据集的缩放结果在此情况下通过DOS窗口输出,当然也可以通过DOS的文件重定向符号“>”将结果另存为指定的文件。该文件中的参数可用于最后面对目标值的反归一化。反归一化的公式为:

    (Value-lower)*(max-min)/(upper - lower)+lower

    以上内容是网上找到的,反归一化公式是错误的,应该是:

    (Value-lower)*(max-min)/(upper - lower)+min

    其中value为归一化后的值,其他参数与前面介绍的相同。

    建议将训练数据集与测试数据集放在同一个文本文件中一起归一化,然后再将归一化结果分成训练集和测试集。

    4.训练数据,生成模型。

    用法: svmtrain [options] training_set_file [model_file]

    其中, options(操作参数):可用的选项即表示的涵义如下所示 -s svm类型:设置SVM 类型,默认值为0,可选类型有(对于回归只能选3或4):

    0 -- C- SVC 1 -- n - SVC 2 -- one-class-SVM 3 -- e - SVR 4 -- n - SVR -t 核函数类型:设置核函数类型,默认值为2,可选类型有: 0 -- 线性核:u'*v 1 -- 多项式核: (g*u'*v+ coef 0)deg ree 2 -- RBF 核:e( u v 2) g - 3 -- sigmoid 核:tanh(g*u'*v+ coef 0) -d degree:核函数中的degree设置,默认值为3;

    -g g :设置核函数中的g ,默认值为1/ k ; -r coef 0:设置核函数中的coef 0,默认值为0; -c cost:设置C- SVC、e - SVR、n - SVR中从惩罚系数C,默认值为1; -n n :设置n - SVC、one-class-SVM 与n - SVR 中参数n ,默认值0.5; -p e :设置n - SVR的损失函数中的e ,默认值为0.1; -m cachesize:设置cache内存大小,以MB为单位,默认值为40; -e e :设置终止准则中的可容忍偏差,默认值为0.001; -h shrinking:是否使用启发式,可选值为0 或1,默认值为1; -b 概率估计:是否计算SVC或SVR的概率估计,可选值0 或1,默认0; -wi weight:对各类样本的惩罚系数C加权,默认值为1; -v n:n折交叉验证模式。

    其中-g选项中的k是指输入数据中的属性数。操作参数 -v 随机地将数据剖分为n 部分并计算交叉检验准确度和均方根误差。以上这些参数设置可以按照SVM 的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM 类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。training_set_file是要进行训练的数据集;model_file是训练结束后产生的模型文件,该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。

    本实验中的参数-s取3,-t取2(默认)还需确定的参数是-c,-g,-p

    另, 实验中所需调整的重要参数是-c 和 –g,-c和-g的调整除了自己根据经验试之外,还可以使用gridregression.py对这两个参数进行优化。(需要补充)

    该优化过程需要用到Python(2.5),Gnuplot(4.2),gridregression.py(该文件需要修改路径)。

    然后在命令行下面运行:

    python.exe gridregression.py -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -s 3 –t 2 -v 5 -svmtrain E:\libsvm\libsvm-2.86\windows\svm-train.exe -gnuplot E:\libsvm\libsvm-2.86\gnuplot\bin\pgnuplot.exe E:\libsvm\libsvm-2.86\windows\train.txt > gridregression_feature.parameter

    以上三个路径根据实际安装情况进行修改。

    -log2c是给出参数c的范围和步长 -log2g是给出参数g的范围和步长 -log2p是给出参数p的范围和步长上面三个参数可以用默认范围和步长 -s选择SVM类型,也是只能选3或者4 -t是选择核函数 -v 10 将训练数据分成10份做交叉验证。默认为5

    为了方便将gridregression.py是存放在python.exe安装目录下

    trian.txt为训练数据,参数存放在gridregression_feature.parameter中,可以自己命名。

    搜索结束后可以在gridregression_feature.parameter中最后一行看到最优参数。

    其中,最后一行的第一个参数即为-c,第二个为-g,第三个为-p,最后一个参数为均方误差。前三个参数可以直接用于模型的训练。

    然后,根据搜索得到的参数,重新训练,得到模型。

    5.测试

    用法:svmpredict [options] test_file model_file output_file options(操作参数): -b probability_estimates:是否需要进行概率估计预测,可选值为0 或者1,默认值为0。 model_file 是由svmtrain 产生的模型文件;

    test_file 是要进行预测的数据文件;

    output_file 是svmpredict 的输出文件,表示预测的结果值。

    输出结果包括均方误差(Mean squared error)和相关系数(Squared correlation coefficient)。

    用LIBSVM做回归和预测的步骤(请指点)

    用LIBSVM做回归和预测的步骤(请指点)

    首先说明,我学习SVM才几天,对基本理论还不了解,只是想利用这一工具做自己想做的事情。摸索着做了几个实验,试着把过程写下来,请大家指点。

    <1> 下载Libsvm、Python和Gnuplot。我用的版本分别是:Libsvm(2.8.1),Python(2.4),Gnuplot(3.7.3)。注意:Gnuplot一定要用3.7.3版,3.7.1版的有bug.

    <2> 修改训练和测试数据的格式(可以自己用perl编个小程序):

    目标值 第一维特征编号:第一维特征值 第二维特征编号:第二维特征值 …

    例如:

    2.3 1:5.6 2:3.2

    表示训练用的特征有两维,第一维是5.6,第二维是3.2,目标值是2.3

    注意:训练和测试数据的格式必须相同,都如上所示。测试数据中的目标值是为了计算误差用

    <3> 分别使用Libsvm中的Windows版本的工具svmscale.exe进行训练和测试数据的归一化,svmtrain.exe进行模型训练,svmpredict.exe进行预测

    (1)svmscale.exe的用法:svmscale.exe feature.txt feature.scaled

    默认的归一化范围是[-1,1],可以用参数-l和-u分别调整上界和下届,feature.txt是输入特征文件名

    输出的归一化特征名为feature.scaled

    (2)svmtrtrain.exe训练模型

    我习惯写个批处理小程序,处理起来比较方便。例如svm_train.bat中训练语句为:

    svmtrain.exe -s 3 -p 0.0001 -t 2 -g 32 -c 0.53125 -n 0.99 feature.scaled

    训练得到的模型为feature.scaled.model

    具体的参数含义可以参考帮助文档。这里-s是选择SVM的类型。对于回归来说,只能选3或者 4,3表示epsilon-support vector regression, 4表示nu-support vector regression。-t是选择核函数,通常选用RBF核函数,原因在“A Practical Guide support vector classification”中已经简单介绍过了。-p尽量选个比较小的数字。需要仔细调整的重要参数是-c和-g。除非用 gridregression.py来搜索最优参数,否则只能自己慢慢试了。

    用gridregression.py搜索最优参数的方法如下:

    python.exe gridregression.py -svmtrain H:\SVM\libsvm-2.81\windows\svmtrain.exe -gnuplot C:\gp373w32\pgnuplot.exe -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -v 10 -s 3 -t 2 H:\SVM\libsvm-2.81\windows\feature.scaled > gridregression_feature.parameter

    注意:-svmtrain是给出svmtrain.exe所在路径,一定要是完整的全路径

    -gnuplot是给出pgnuplot.exe所在路径。这里要用pgnuplot.exe这种命令行形式的,不要用wgnupl32.exe,这个是图形界面的。

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

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

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

    上面三个参数可以用默认范围和步长

    -s选择SVM类型,也是只能选3或者4

    -t是选择核函数

    -v 10 将训练数据分成10份做交叉验证。默认为5

    最后给出归一化后训练数据的全路径

    搜索最优参数的过程写入文件gridregression_feature.parameter(注意别少了这个>符号啊)

    根据搜索到的最优参数修改feature.scaled.model中的参数

    (3)用svmpredict.exe进行预测

    svmpredict.exe feature_test.scaled feature.scaled.model feature_test.predicted

    其中feature_test.scaled是归一化后的测试特征文件名,feature.scaled.model是训练好的模型,SVM预测的值在feature_test.predicted中

    核函数方法简介

    (1)核函数发展历史

    早在1964年Aizermann等在势函数方法的研究中就将该技术引入到机器学习领域,但是直到1992年Vapnik等利用该技术成功地将线性 SVMs推广到非线性SVMs时其潜力才得以充分挖掘。而核函数的理论则更为古老,Mercer定理可以追溯到1909年,再生核希尔伯特空间 (ReproducingKernel Hilbert Space, RKHS)研究是在20世纪40年代开始的。

    (2)核函数方法原理

    根据模式识别理论,低维空间线性不可分的模式通过非线性映射到高维特征空间则可能实现线性可分,但是如果直接采用这种技术在高维空间进行分类或回归,则存在确定非线性映射函数的形式和参数、特征空间维数等问题,而最大的障碍则是在高维特征空间运算时存在的“维数灾难”。采用核函数技术可以有效地解决这样问题。

    设x,z∈X,X属于R(n)空间,非线性函数Φ实现输入间X到特征空间F的映射,其中F属于R(m),n<<m。根据核函数技术有:

    K(x,z) =<Φ(x),Φ(z) >  (1)

    其中:<, >为内积,K(x,z)为核函数。从式(1)可以看出,核函数将m维高维空间的内积运算转化为n维低维输入空间的核函数计算,从而巧妙地解决了在高维特征空间中计算的“维数灾难”等问题,从而为在高维特征空间解决复杂的分类或回归问题奠定了理论基础。

    (3)核函数特点

    核函数方法的广泛应用,与其特点是分不开的:

    1)核函数的引入避免了“维数灾难”,大大减小了计算量。而输入空间的维数n对核函数矩阵无影响,因此,核函数方法可以有效处理高维输入。

    2)无需知道非线性变换函数Φ的形式和参数.

    3)核函数的形式和参数的变化会隐式地改变从输入空间到特征空间的映射,进而对特征空间的性质产生影响,最终改变各种核函数方法的性能。

    4)核函数方法可以和不同的算法相结合,形成多种不同的基于核函数技术的方法,且这两部分的设计可以单独进行,并可以为不同的应用选择不同的核函数和算法。

    (4)常见核函数

    核函数的确定并不困难,满足Mercer定理的函数都可以作为核函数。常用的核函数可分为两类,即内积核函数和平移不变核函数,如:

     1)高斯核函数K(x,xi) =exp(-||x-xi||2/2σ2;

    2)多项式核函数K(x,xi)=(x·xi+1)^d, d=1,2,…,N; 

    3)感知器核函数K(x,xi) =tanh(βxi+b);

    4)样条核函数K(x,xi) = B2n+1(x-xi)。

    (5)核函数方法实施步骤

    核函数方法是一种模块化(Modularity)方法,它可分为核函数设计和算法设计两个部分,具体为:

    1)收集和整理样本,并进行标准化;

    2)选择或构造核函数;

    3)用核函数将样本变换成为核函数矩阵,这一步相当于将输入数据通过非线性函数映射到高维

    特征空间;

    4)在特征空间对核函数矩阵实施各种线性算法;

    5)得到输入空间中的非线性模型。

    显然,将样本数据核化成核函数矩阵是核函数方法中的关键。注意到核函数矩阵是l×l的对称矩阵,其中l为样本数。

    (6)核函数在模式识别中的应用

    1)新方法。主要用在基于结构风险最小化(Structural Risk Minimization,SRM)的SVM中。

    2)传统方法改造。如核主元分析(kernel PCA)、核主元回归(kernel PCR)、核部分最小二乘法(kernel PLS)、核Fisher判别分析(Kernel Fisher Discriminator, KFD)、核独立主元分析(Kernel Independent Component Analysis,KICA)等,这些方法在模式识别等不同领域的应用中都表现了很好的性能。

     

    许多想用lib-svm解决分类或者回归的初学者可能像我一样一开始摸不着头绪。面对长篇的english,头都大了。有好心人把自己的经验总结了,我们就一起共享吧!

    1. LIBSVM 软件包简介

    LIBSVM 是台湾大学林智仁(Chih-Jen Lin)博士等开发设计的一个操作简单、易于使用、快速有效的通用SVM 软件包,可以解决分类问题(包括C- SVC、n - SVC )、回归问题(包括e - SVR、n - SVR )以及分布估计(one-class-SVM )等问题,提供了线性、多项式、径向基和S形函数四种常用的核函数供选择,可以有效地解决多类问题、交叉验证选择参数、对不平衡样本加权、多类问题的概率估计等。LIBSVM 是一个开源的软件包,需要者都可以免费的从作者的个人主页http://www.csie.ntu.edu.tw/~cjlin/ 处获得。他不仅提供了LIBSVM的C++语言的算法源代码,还提供了Python、Java、R、MATLAB、Perl、Ruby、LabVIEW以及C#.net 等各种语言的接口,可以方便的在Windows 或UNIX 平台下使用,也便于科研工作者根据自己的需要进行改进(譬如设计使用符合自己特定问题需要的核函数等)。另外还提供了WINDOWS 平台下的可视化操作工具SVM-toy,并且在进行模型参数选择时可以绘制出交叉验证精度的等高线图。

    2. LIBSVM 使用方法简介

    LIBSVM 在给出源代码的同时还提供了Windows操作系统下的可执行文件,包括:进行支持向量机训练的svmtrain.exe;根据已获得的支持向量机模型对数据集进行预测的svmpredict.exe;以及对训练数据与测试数据进行简单缩操作的svmscale.exe。它们都可以直接在DOS 环境中使用。如果下载的包中只有C++的源代码,则也可以自己在VC等软件上编译生成可执行文件。

    LIBSVM 使用的一般步骤是:

    1) 按照LIBSVM软件包所要求的格式准备数据集;

    2) 对数据进行简单的缩放操作;

    3) 考虑选用RBF 核函数2 K(x,y) e x y = -g - ;

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

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

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

    一. LIBSVM 使用的数据格式

    LIBSVM使用的训练数据和测试数据文件格式如下:

    : :< 2> …

    其中 是训练数据集的目标值,对于分类,它是标识某类的整数(支持

    多个类);对于回归,是任意实数。

    是以1 开始的整数,表示特征的序号;
    为实数,也就是我们常说的特征值或自变量。当特征值为0 时,特征序号与特征值都可以同时省略,即index可以是不连续的自然数。
    与第一个特征序号、前一个特征值与后一个特征序号之间用空格隔开。测试数据文件中的label 只用于计算准确度或误差,如果它是未知的,只需用任意一个数填写这一栏,也可以空着不填。例如:

    +1 1:0.708 2:1 3:1 4:-0.320 5:-0.105 6:-1 8:1.21

    二. svmscale 的用法

    对数据集进行缩放的目的在于:

    1)避免一些特征值范围过大而另一些特征值范围过小;

    2)避免在训练时为了计算核函数而计算内积的时候引起数值计算的困难。因此,通常将数据缩放到[ -1,1]或者是[0,1]之间。

    用法:svmscale [-l lower] [-u upper] [-y y_lower y_upper][-s save_filename] [-r restore_filename] filename

    (缺省值: lower = -1,upper = 1,没有对y进行缩放)

    其中,

    -l:数据下限标记;lower:缩放后数据下限;

    -u:数据上限标记;upper:缩放后数据上限;

    -y:是否对目标值同时进行缩放;y_lower为下限值,y_upper为上限值;

    -s save_filename:表示将缩放的规则保存为文件save_filename;

    -r restore_filename:表示将缩放规则文件restore_filename载入后按此缩放;

    filename:待缩放的数据文件(要求满足前面所述的格式)。

    缩放规则文件可以用文本浏览器打开,看到其格式为:

    lower upper

    lval1 uval1

    lval2 uval2

    其中的lower 与upper 与使用时所设置的lower 与upper 含义相同;index 表示特征序号;lval 为该特征对应转换后下限lower 的特征值;uval 为对应于转换后上限upper 的特征值。数据集的缩放结果在此情况下通过DOS窗口输出,当然也可以通过DOS的文件重定向符号“>”将结果另存为指定的文件。

    使用实例:

    1) svmscale –s train3.range train3>train3.scale

    表示采用缺省值(即对属性值缩放到[ -1,1]的范围,对目标值不进行缩放)对数据集train3 进行缩放操作,其结果缩放规则文件保存为train3.range,缩放集的缩放结果保存为train3.scale。

    2) svmscale –r train3.range test3>test3.scale

    表示载入缩放规则train3.range 后按照其上下限对应的特征值和上下限值线性的地对数据集test3 进行缩放,结果保存为test3.scale。

    三. svmtrain 的用法

    svmtrain实现对训练数据集的训练,获得SVM模型。

    用法: svmtrain [options] training_set_file [model_file]

    其中,

    options(操作参数):可用的选项即表示的涵义如下所示

    -s svm类型:设置SVM 类型,默认值为0,可选类型有:

    0 -- C- SVC

    1 -- n - SVC

    2 -- one-class-SVM

    3 -- e - SVR

    4 -- n - SVR

    -t 核函数类型:设置核函数类型,默认值为2,可选类型有:

    0 -- 线性核:u'*v

    1 -- 多项式核: (g*u'*v+ coef 0)deg ree

    2 -- RBF 核:e( u v 2) g -

    3 -- sigmoid 核:tanh(g*u'*v+ coef 0)

    -d degree:核函数中的degree设置,默认值为3; -g g :设置核函数中的g ,默认值为1/ k ;

    -r coef 0:设置核函数中的coef 0,默认值为0;

    -c cost:设置C- SVC、e - SVR、n - SVR中从惩罚系数C,默认值为1;

    -n n :设置n - SVC、one-class-SVM 与n - SVR 中参数n ,默认值0.5;

    -p e :设置n - SVR的损失函数中的e ,默认值为0.1;

    -m cachesize:设置cache内存大小,以MB为单位,默认值为40;

    -e e :设置终止准则中的可容忍偏差,默认值为0.001;

    -h shrinking:是否使用启发式,可选值为0 或1,默认值为1;

    -b 概率估计:是否计算SVC或SVR的概率估计,可选值0 或1,默认0;

    -wi weight:对各类样本的惩罚系数C加权,默认值为1;

    -v n:n折交叉验证模式。

    其中-g选项中的k是指输入数据中的属性数。操作参数 -v 随机地将数据剖分为n 部分并计算交叉检验准确度和均方根误差。以上这些参数设置可以按照SVM 的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM 类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。training_set_file是要进行训练的数据集;model_file是训练结束后产生的模型文件,该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。

    四. svmpredict 的用法

    svmpredict 是根据训练获得的模型,对数据集合进行预测。

    用法:svmpredict [options] test_file model_file output_file

    options(操作参数):

    -b probability_estimates:是否需要进行概率估计预测,可选值为0 或者1,

    默认值为0。

    model_file 是由svmtrain 产生的模型文件;test_file 是要进行预测的数据文

    件;output_file 是svmpredict 的输出文件,表示预测的结果值。svmpredict 没有其它的选项。

    因为要用svm做regression,所以看了一些关于libsvm,总结以备用

    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的类型和核函

    数所支持的参数进行任意组合,如果设置的参数在函数或SVM类型中没有也不会产生影

    响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。

    转载于:https://www.cnblogs.com/zhizhan/p/4376137.html

    展开全文
  • 傅里叶变换 - 3

    2021-02-18 10:51:03
    多项式的表达方式 系数表示 数值表式 对于维度是N-1的多项式,对x取N个不同的值,计算对应的N个p值,得到N组对应的值 ... 对于多项式的数值表式,x... 这个简单举例说明一下:以为例 离散傅里叶公式 ...
  • 802.11a OFDM通信系统之扰码模块

    千次阅读 2018-05-23 21:21:36
    为了方便下文理解,先说明m序列的生成原理线性反馈移位寄存器实现如下图举例说明说明如下:shift_reg 是初始状态(按照规定不能全为零),POLY是由本原多项式得到,若一个特征多项式是本原多项式,则寄存器产生的...
  • 我们通过详细处理SU(2)2×2融合模型并明确显示BMW结构来举例说明此结果。 我们使用可解晶格模型的构建与共形场理论之间的联系。 这一结果对于IRF晶格模型的求解和新模型的开发以及结理论都具有重要意义。
  • 我们通过举例说明,假设有一个递推公式是f[i]=2*f[i-1]+f[i-2]; 我们考虑把的过程与把递推公式往下化的过程 可以发现取模的每一步对应的是把递推公式往下化一层 那么再思考一下普遍情况下应该安排对什么取模 ...
  • ”函数柯里化”是指将多变量函数...下面给出了两个示例,说明如何使用 Currying 用一行代码计算任意指数的多项式的和; 以及使用 Currying 实现一个简单的文件处理框架。 举例一: 计算任意指数的多项式的和 s...
  • CRC点滴

    2018-10-06 23:44:00
    举例说明CRC校验码的求法:(此例子摘自百度百科:CRC校验码) 信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1 假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001 x4m(x)=x10+x8+x7+x4对应的代码记为...
  • 递归式求解

    2019-06-19 10:55:00
    1. 主定理 1.1 主定理介绍 1.2 不能使用主定理的情况 (1)T(n)不是单调函数,(e.g....(2)f(n)不是多项式函数 (e.g....(3)b不能表示为一个常量(e.g....1.3 举例说明 (1) T(n) = T(n/2) + 1/2 * n2 + n 解: ...
  • MATLAB编程与数据类型

    2019-10-20 19:42:07
    MATLAB编程与数据类型 1、函数M文件 MATLAB有1000多条内装函数,如三角函数...下面举例说明。 2、函数M文件的组成 M文件的填写在M文件编译器中进行。函数M文件是由下列5部分组成的: (1)函数定义行。 (2)帮助文...
  • matlab的poly()函数

    2019-07-08 10:20:00
    MATLAB中的poly()函数是用于求以向量为解的方程或方阵的特征多项式,可以直接传递多项式方程的系数矩阵。 1、poly([1 2 3])使用的举例。 P=poly([1 2 3]) 可以解出P=[1 -6 11 -6],即求得方程为:x^3-6*x^2+11*x-6...
  •  利用母函数的思想可以解决很多组合问题,下面举例说明:  1.口袋中有白球2个,红球3个,黄球1个,从袋中摸出3个球有几种取法?  和上面描述的例子类似,我们可以用次数代表球的个数,多项式的每一项前面的系数...
  • 单链表逆置

    2015-11-23 18:36:00
    举例说明:集合的交集、并集问题,使用循环链表可以解决约瑟夫环问题、使用链表可以解决多项式的加法乘法。 也许在以后的学习中很少自己再完整写过链表,但是在数据结构这门课的学习中,将一些基础的链表操作写一遍...
  • Python: 傅里叶级数

    2020-09-03 12:25:49
    举例说明,如何将上图的方波分解为为多个sin(t)与cos(t)的组合呢? 先看如下函数的图像: 如果在f(t)中增加一项,则图像变为: 再加一项试试: 所以,当分解的多项式越来越多,到正无穷时,图像就变成方波了...
  • 举例说明了拟二次Bézier三角曲面片不仅边界可以精确表示圆弧和椭圆弧, 而且可以通过多引入的一个控制顶点实现在边界保持不变的情况下对曲面形状进行调节, 同时, 该曲面片可作为过渡曲面在三通管造型接口处实现光滑...
  • Task01matlab

    2019-10-20 18:35:31
    Task01:matlab.m文件 (一)语法知识 3.1 函数M文件 如三角函数,幂函数,指数函数,多项式函数,矩阵运算函数等用后缀为M...③帮助文本的内容,详细说明变量的类型,使用时的语法规则,使用举例和相关的函数名作为...
  • 第一天打卡

    2019-10-20 21:36:20
    Task 01 语法知识 3.1 函数M文件 如三角函数,幂函数,指数函数,多项式函数,矩阵运算函数等用...③帮助文本的内容,详细说明变量的类型,使用时的语法规则,使用举例和相关的函数名作为查找时的参考。 ④函数体。...
  • 4.4矩阵运算举例 4.5矩阵与映射 4.6矩阵的广义逆 4.7最小二乘法 习题4 第5章线性(向量)空间 5.1线性(向量)空间 5.2线性映射与同构 5.3基变换与坐标变换 5.4子空间的和与直和 5.5商空间 习题5 第6章线性变换 6.1...
  • 4.4.3 举例说明.. 4.5 polya定理 4.6 举例 4.7 母函数形式的polya定理 4.8 图的计数 4.9 polya定理的若干推广 习题 第5章 区组设计 5.1 问题的提出 5.2 拉丁方与正交的拉丁方 5.2.1 问题的引入 5.2.2 ...
  • 4.3 当n时操作臂子空间的描述 4.4 代数解法与几何解法 4.5 通过化简为多项式的代数解法 4.6 三轴相交的PIEPER解法 4.7 操作臂逆运动学实例 4.8 标准坐标系 4.9 操作臂求解 4.10 重复精度和定位精度 4.11 计算问题 ...
  • 他善于用容易理解的方法和语言说明复杂的概念。许多人认为他开创了计算机书籍贴近大众的新风,为我国的计算机普及事业做出了重要的贡献。 谭浩强教授曾获全国高校教学成果国家级奖、国家科技进步奖,以及北京市政府...

空空如也

空空如也

1 2
收藏数 36
精华内容 14
关键字:

多项式举例说明