概述
支持向量机结构是一种用于预测多变量的支持向量机(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。目前,我们已经完成了以下学习任务:
- 支持向量机结构蟒蛇:指向支持向量机结构美国石油学会实现您自己的结构化预测方法。蟒蛇界面使原型制作比在C语言中更容易、更快。
更多信息和源代码。
- 支持向量机结构Matlab公司:与支持向量机结构美国石油学会实现您自己的结构化预测方法。同样,原型制作应该比使用C语言更容易、更快。
更多信息和源代码。
- 潜在支持向量机结构:当训练标签没有被完全观察到时,结构SVM预测规则的训练(例如,NP核心中未观察到的依赖结构、基序发现、弱排序排序)。
更多信息和源代码。
- 支持向量机多类别:多类分类。学会预测k个互斥类。这可能是最简单的支持向量机结构并作为如何使用编程接口的教程示例。
更多信息和源代码。
- 支持向量机cfg(立方英尺/加仑):从示例中学习加权上下文无关语法。训练示例(例如自然语言解析)指定了句子以及正确的解析树。目标是预测新句子的解析树。
更多信息和源代码。
- 支持向量机排列:学习排列序列。鉴于序列对如何对齐的示例,目的是学习一个复杂的替换和插入/删除模型,以便可以预测新序列的比对。
更多信息和源代码。
- 支持向量机隐马尔可夫模型:从示例中学习隐藏的马尔可夫模型。培训示例(例如,部分语言标记)指定了单词的顺序以及标记的正确分配(即状态)。目的是预测新句子的标记序列。
更多信息和源代码。
- 支持向量机地图:学习优化平均值的排名精度(MAP)作为性能指标。
更多信息和源代码。
- 支持向量机div公司:学会预测多样化的排名和用于信息检索的集合。
更多信息和源代码。
- 支持向量机性能:学习二进制分类规则直接优化ROC-Area、F1-Score或Precision/Recall Break-Even Point。它也是传统线性二进制分类的训练算法对于大型数据集,SVM的速度可能比SVM-light快几个数量级。
更多信息和源代码。
- 支持向量机等级:学习预测排名的规则通常用于搜索引擎和其他检索系统。它是等效的对于“-z p”模式下的SVM光,但对于培训排名支持向量机。
更多信息和源代码。
- 倾向性SVM等级:通过反事实经验风险模拟,从有偏见和不完整的数据,特别是来自点击的数据中学习排名函数。
更多信息和源代码。
- 支持向量机配对射频:三维点云数据的语义场景标记。基本上学习一个具有成对势的一般马尔可夫随机场模型,并且可以在特定应用之外使用。
更多信息和源代码。
- 支持向量机系统性红斑狼疮:预测文档级情感极性的学习算法,并提供潜在解释。
更多信息和源代码。
- 支持向量机结构用于活动识别:用于训练视频活动识别器的学习算法。
更多信息和源代码。
- 支持向量机结构用于网页分割:基于有向非循环图结构的网页分割学习算法。
更多信息和源代码。
如果您想让我将您的实现添加到此列表中,请告诉我。实现自己的实例化的源代码
而不是使用现有的支持向量机结构上面列出的,您可以实现自己的。支持向量机结构包含一个API,让您专门针对特定应用程序设计通用稀疏近似训练算法。参考[1]中的算法,您只需提供以下代码:
- 用于计算特征向量Psi的函数。
- 用于计算(核化)线性判别函数上的argmax的函数。
- 用于计算损失增强(核化)线性鉴别函数上的argmax的函数。
- 损失函数。
您可以从以下位置下载算法和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清空分类. "空的“是一个占位符,您可以在其中用有意义的名称替换您的特定实例支持向量机结构。要实现您自己的实例化,您需要编辑以下文件:
- svm_struct_api类型。小时
- svm_struct_api。c(c)
两个文件都已包含空模板。第一个文件包含需要更改的类型定义。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
- 重新实现-w3和-w4算法以改进内存管理和速度。
- 通过-b选项添加了“minibatch”更新。
- 添加了在中实现其他算法的选项svm_struct_learn_custom。c(c)并通过-w9选择它们。
- 修复了RBF内核中的错误。
- 修复了64位AMD和Intel的精度问题机器。
- 已清理API以改进向分类模块。
- 的源代码 支持向量机结构V3.00版。
V2.00-3.00版
- 该版本实现了一种新的结构SVM训练算法(选项-w 2,-w 3,-w 4)。该算法基于解决方案与传统SVM相同的结构SVM训练问题配方。这种新的单松弛公式允许采用裁剪算法这在训练示例的数量上具有线性的时间复杂性。对于大型数据集显示,它比旧的切割方案快几个数量级算法。
- 新建IO读取大型数据和模型文件的速度更快的例程。
- 的源代码 支持向量机结构V2.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公司]