声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3803|回复: 9

[人工智能] SMO算法程序的使用

[复制链接]
发表于 2010-1-29 11:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
最近在网上搜了很久SMO算法程序,程序贴在下面了。但不知道怎么使用。特别是怎样运用到支持向量回归机的预测中。请问哪位能指点一下我。另外,网上有很多C++的程序,不知哪能找到相关的matlab程序。万分感谢!!!

SMO程序:
target = desired output vector
point = training point matrix

procedure takeStep(i1,i2)
   if(i1==i2) return 0
   alph1 = Lagrange multiplier for i1
   y1 = target[i1]
   E1 = SVM output on point[i1] - y1(check in error cache)
   s=y1*y2
   Compute L ,H
   if(L==H)
       return 0
   k11 = kernel(point[i1],point[i1])
   k12 = kernel(point[i1],point[i2])
   k22 = kernel(point[i2],point[i2])
   eta = 2*k12-k11-k22
   if(eta<0)
     { a2=alph2 - y2*(E1-E2)/eta
        if(a2<L) a2=L
        else if(a2>H) a2=H
      }
            else
       {Lobj=objective function at a2=L
        Hobj=objective function at a2=H
        if(Lobj>Hobj+eps)
            a2=L
        else if(Lobj<Hobj-eps)
             a2=H
            else
               a2=alph2
        }
        if(|a2-alpha2|<eps*(a2+alpha2+eps))
            return 0
          a1=alpha1+s*(alpha2-a2)
       Update threshold to reflect change in Lagrange multipliers
       Update weight vector to reflect change in a1&a2,if linear SVM
       Update error cache using new Lagrange multipliers
       Store a1 in the alpha array
       Store a2 in the alpha array
       return 1
       endprocedure
      
       procedure examineExample(i2)
         y2=target[i2]
         alpha2=Lagrange multiplier for i2
         E2=SVM output on point[i2]-y2(check in error cache)
         r2=E2*y2
         if((r2<-tol&&alph2<C)||(r2>tol&&alph2>0))
          {if(number of non-zero&non-C alpha>1)
              {i1=result of second choice heuristic
                 if takeStep(i1,i2)
                   return 1
              }
            loop over all possible i1,starting at random point
            {i1=identity of current alpha
             if takeStep(i1,i2)
              return 1
             }
            }
            return 0
            endprocedure
            
            main routine:
               initialize alpha array to all zero
               initialize threshold to zero
               numChange=0
               examineAll=1
               while(numChange>0|examineAll)
                   {numChanged =0
                     if(examineAll)
                       loop I over all training examples
                         numChanged+=examineExample(I)
                      if(examineAll==1)
                          examineAll=0
                      else if(numChanged==0)
                         examineAll=1
                      }
回复
分享到:

使用道具 举报

 楼主| 发表于 2010-1-30 15:38 | 显示全部楼层
听说还有其他变型一些算法,比如:chunking算法、osuna算法、decomposing算法以及聚类算法、伪距离QC算法。希望能得到程序上和理论上的帮助。
万分感谢!
发表于 2010-1-31 20:21 | 显示全部楼层
呵呵,这个好象是Delphi的程序啊。好多子函数没有代码,仅是调用的语句。
发表于 2010-1-31 21:34 | 显示全部楼层
一个SVM的工具箱,供参考。
由于网站不支持rar格式的附件,所以下载后把扩张名改成.rar,解压后把 optimiser 子目录下的 qp.dll 拷贝到 主目录下即可。
运行uiregress.m 进行图形化界面演示。
Matlab+R2009a+支持向量机工具箱.fig (51.29 KB, 下载次数: 25)
 楼主| 发表于 2010-2-2 10:52 | 显示全部楼层
多谢楼上的朋友!
但由于本人不才,在按你的方法运行时出来的界面,我只找到了通过变换核函数来改变SVR模型的方法,如linear、polynomial、Guassian RBF、Multi-Layer Perceptron、Linear Spine、Linear Bspine、Trigonometric Polyomial和Exponential RBF等等。不知在哪可以找到求解大规模问题的变形算法。
发表于 2010-2-2 17:15 | 显示全部楼层
不用客气,大规模问题的求解方案你去到Mathworks网站下载 BioInformatics 工具箱,或者新浪爱问共享找找看,这个工具箱提供了SVM完整的解决方案,并且具有说明书和例子。
 楼主| 发表于 2010-2-6 17:12 | 显示全部楼层
谢谢指教!
 楼主| 发表于 2010-2-6 17:12 | 显示全部楼层
工具箱已下载,学习中!
发表于 2013-7-19 08:45 | 显示全部楼层
谢谢
发表于 2013-11-4 15:22 | 显示全部楼层
新手学习中,感谢分享
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-21 18:03 , Processed in 0.068251 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表