支持向量机结构

复杂输出的支持向量机

作者:托尔斯滕·约阿希姆斯<thorsten@joachims.org>
康奈尔大学
计算机系科学类

版本:3.10
日期:2008年8月14日

概述

支持向量机结构是一种用于预测多变量的支持向量机(SVM)算法或结构化输出。它通过近似映射来执行监督学习

h: X-->Y

使用标记的训练示例(x)1,年1), ..., (x)n个,年n个)然而,与常规SVM不同,SVM只考虑单变量预测,如分类和回归,支持向量机结构可以预测复杂对象比如树、序列或集合。复杂输出问题的例子包括自然语言解析、蛋白质同源性检测中的序列比对以及部分语言标记的马尔可夫模型。这个支持向量机结构算法也可以用于线性时间线性核下二进制和多类SVM的训练[4]。

在中实现的1-松弛切平面算法支持向量机结构V3.10使用了结构SVM二次型的一种新的等效公式程序,比以前的方法快几个数量级。这个算法在[5]中描述。的n-slack算法支持向量机结构V2.50在[1][2]中进行了描述。这个支持向量机结构实现基于支持向量机二次优化器[3]。

现有实例化

支持向量机结构可以被认为是实现各种复杂预测算法的API。目前,我们已经完成了以下学习任务:

如果您想让我将您的实现添加到此列表中,请告诉我。

实现自己的实例化的源代码

而不是使用现有的支持向量机结构上面列出的,您可以实现自己的。支持向量机结构包含一个API,让您专门针对特定应用程序设计通用稀疏近似训练算法。参考[1]中的算法,您只需提供以下代码:您可以从以下位置下载算法和API的源代码:

      https://osmot.cs.cornell.edu/svm_struct/current/svm_sstruct.tar.gz

如果您不太热衷于C编程,那么您可能想看看Python API通过托马斯·芬利或者Matlab API通过安德烈亚·维达尔迪与使用原始C API相比,它们使在中原型化变得更加容易,但提供了基本相同的功能,并在内部调用原始C代码。此外,Pyton和Matlab API都是相同的将其结构转换为下面描述的C API,因此很容易在他们。

如果您决定使用C版本,则上面下载的文件包含最新版本的支持向量机结构以及的源代码支持向量机二次优化器。使用shell命令打开存档:

gunzip c svm_struct.tar.gz | tar xvf

这会将存档扩展到当前目录中,该目录现在包含所有相关文件。你可以编译支持向量机结构使用空API使用命令

制作

在存档的根目录中。它将输出一些警告,因为API的函数只是模板,不按要求返回值。然而,它应该生成可执行文件svm _清空_学习 svm清空分类. "空的“是一个占位符,您可以在其中用有意义的名称替换您的特定实例支持向量机结构。要实现您自己的实例化,您需要编辑以下文件:两个文件都已包含空模板。第一个文件包含需要更改的类型定义。PATTERN是存储示例(x,y)的x部分的结构,LABEL是y部分。学习的模型将存储在STRUCTMODEL中。最后,STRUCT_LEARN_PARM可用于存储可能要传递给函数的任何参数。文件svm_struct_api。小时包含需要实现的函数。有关详细信息,请参阅文件中的文档。您可能还需要查看的其他实例化支持向量机结构有关如何使用API的示例。

最后,您还可以在中实现自己的结构SVM训练算法支持向量机结构使用文件svm_struct_learn_custom。c(c).通过将你的算法在那里的空函数中,您可以访问API和所有算法已经实现的特定于实例的函数支持向量机结构正在使用。然后通过-第9周选项。这使得测试新产品变得容易算法,并将其与现有算法进行比较。

如何使用

编译会创建可执行文件服务器空闲学习,执行学习,以及可执行文件svm清空分类用于对新示例进行分类。用法很像支持向量机你这样称呼它

svm_empty_learn-c 1.0列车.dat模型.dat

在训练集中训练支持向量机列车.dat并将学习到的规则输出到模型.dat使用正则化参数C类设置为1(注意,这会导致空API崩溃——使用上面的其他实例之一作为一个工作示例)。列车文件和模型文件的格式取决于支持向量机结构。其他选项包括:
常规选项:-?          -> 这个帮助-v[0..3]->详细级别(默认为1)-y[0..3]->svm_light的详细级别(默认为0)学习选项:-c float->c:在训练错误之间进行权衡和边距(默认值0.01)-p[1,2]->L范数用于松弛变量。L1-norm使用1,方形宽松裤使用2。(默认值1)-o[1,2]->用于损失的重定标方法。1:松弛缩放2:边缘缩放(默认为2)-l[0..]->要使用的损失函数。0:零/一损失?: 请参阅以下特定于应用程序的选项(默认为0)优化选项(参见[2][5]):-w[0,..,9]->选择结构学习算法(默认值3):0:n-松弛算法如[1]所述带收缩启发式的1:n-slack算法[5]中描述的2:1-松弛算法(原始)3:1-松弛算法(对偶),如[5]所述4:1-松弛算法(对偶),带约束缓存[5]9:svmstruct_learn_custom.c中的自定义算法-e float->epsilon:允许终止公差标准(默认为0.100000)-k[1..]->之前要累积的新约束数重新计算QP解决方案(默认值100)(仅限-w 0和1)-f[5..]->每个示例要缓存的约束数(默认值5)(与-w 4一起使用)-b[1..100]->要刷新缓存的训练集百分比当不能构造违反epsilon的约束时从当前缓存(默认为100%)(与-w 4一起使用)解决QP子问题的SVM轻量级选项(见[3]):-n[2..q]->进入工作集的新变量数量在每个svm-light迭代中(默认n=q)。设置n<q以防止锯齿形。-m[5..]->内核计算的svm-light缓存大小(MB)(默认值40)(仅用于带内核的-w 1)-h[5..]->变量需要的svm-light迭代次数考虑收缩前的最佳值(默认值100)-#如果否,int->终止svm-light QP子问题优化此迭代次数后的进度。(默认为100000)内核选项:-t int->内核函数的类型:0:线性(默认)1:多项式(s a*b+c)^d2:径向基函数exp(-gamma||a-b||^2)3:乙状结肠tanh(s a*b+c)4:kernel.h中的用户定义内核-多项式核中的d int->参数d-rbf核中的g浮点->参数gamma-sigmoid/poly核中的s浮点->参数s-sigmoid/poly核中的r浮点->参数c-用户定义内核的u字符串->参数输出选项:-一个字符串->在学习后将所有字母写入该文件(与训练集中的顺序相同)特定于应用程序的选项:--*string->可适用于结构的自定义参数学习。*可以替换为任何字符并且可以有多个以--开头的选项。
有关这些选项含义的更多详细信息,请参阅参考文献[1][3][5]和的描述支持向量机。以开头的选项--那些是特定于实例化的吗和通过API指定。

免责声明

此软件仅免费用于非商业用途。未经作者事先许可,不得分发。作者不对使用本软件的影响负责。

已知问题

历史

V3.00至3.10

V2.00-3.00版

参考文献

[1]I.Tsochantaridis、T.Hofmann、T.Joachims和Y.Altun。相互依赖和结构化输出空间的支持向量学习,ICML,2004年。[附言(gz)] [PDF](PDF格式)[BibTeX公司]

[2]T.约阿希姆。《学习对齐序列:最大利润法》,技术报告,2003年8月。[附言(gz)] [PDF](PDF格式)[BibTeX公司]

[3]T.Joachims,《使大规模SVM学习实用化》。《内核方法的进展——支持向量学习》,B.Schölkopf和C.Burges和A.Smola(编辑),麻省理工学院出版社,1999年。[后记(gz)] [PDF](PDF格式)[BibTeX公司]

[4]T.Joachims,在线性时间内训练线性SVM,ACM知识发现和数据挖掘会议论文集,2006年。[后记(gz)] [PDF](PDF格式)[BibTeX公司]

[5]T.Joachims、T.Finley、Chun-Nam Yu、结构SVM,机器学习杂志,77(1):27-592009。 [PDF](PDF格式)[BibTeX公司]