djurikom/预算支持向量机
文件夹和文件
存储库文件导航
--------------------------------------------------------------- --BudgetedSVM:大尺度SVM近似的工具箱-- --------------------------------------------------------------- BudgetedSVM是一款简单易用且高效的大型软件, 通过SVM模型的近似进行非线性、预算分类。 本文档解释了BudgetedSVM的使用。 用于Matlab/Octave接口 帮助请参阅“./matlab/readme.txt” 在使用BudgetedSVM之前,请阅读“./LICENSE.txt”许可证文件。 此外,工具箱还包括两个源文件(“./src/libsvmwrite.c”和 “./src/libsvmread.c”)并使用LibSVM包中的一些代码,请 在使用BudgetedSVM获取条款和条件之前,请阅读“./COPYRIGHT.txt” 与工具箱的这些部分相关。 目录 ================= -目录 -版本历史记录 -实现的算法 -安装和数据格式 -“budgetedsvm-train”用法 -“budgetedsvm-predict”用法 -示例 -图书馆使用 -Matlab/Octave接口 -其他信息 -致谢 版本历史记录 =============== 该软件的当前版本是v1.2。 与之前的v1.1版本相比, 我们添加了以下更改: -增加了Growing AMM(GAMM)算法的实现。 -GAMM算法是AMM方法的扩展,由加法控制 另外两个参数:克隆概率和克隆概率衰减。 该软件的当前版本是v1.1。 与以前的v1.0版本相比, 我们添加了以下更改: -(过时)该软件不再以GPL v3许可证发布,而是我们 在限制较少的LGPL v3许可证下发布BudgetedSVM。 -该软件不再根据LGPL v3许可证发布,而是我们 在限制较少的Modified BSD许可证下发布BudgetedSVM。 -我们更改了选项字符串中某些参数的设置方式,请 在使用早期脚本运行BudgetedSVM时要非常小心。 参考 到的“预算svm-train”用法和“预算svM-predict”用法部分 此自述文件,或转至命令提示符帮助以获取更多详细信息。 例如, 内核宽度不再使用“-G”指定,而是使用“-G”等。 -增加了“-r”选项,用于打开/关闭训练数据的随机化。 -添加了许多用于基于内核的算法的内核函数,例如 作为指数、sigmoid、多项式核。 内核的参数 使用“-g”、“-d”和“-i”选项控制。 请参阅 此自述文件的“'budgetedsvm-train'用法”部分,或命令 提示帮助以获取更多详细信息。 -不再需要指定数据的维度。 然而,请注意 可以通过“-D”选项直接指定维度 加载速度更快。 -在BSGD中,我们检查支持向量集中是否有两个相同的向量,以及 或者在合并策略的情况下合并这两者,或者删除较新的 一种是在随机删除策略的情况下,导致更好的性能。 -修复了之前关闭随机化时LLSVM的随机化 您仍然可以在运行之间获得不同的结果。 -将课堂分数添加到输出中; 请参阅的“budgetedsvm-predict”用法 关于不同算法的输出分数的更多详细信息。 -许多较小的代码更改有望产生更好、更可读的代码。 -错误修复(感谢所有报告错误并提供反馈的用户!)。 实现的算法 ========================== BudgetedSVM工具箱实现Pegasos、自适应多超平面机器(AMM)和 增长AMM、低秩线性化SVM(LLSVM)和预算随机梯度下降(BSGD) 算法。 算法属性概述如下表所示: -------------------------------------------------------------------------------------------------------------- |算法|分类器类型|多类?| 可用内核| ============================================================================================================== |Pegasos|线性|多类|线性| |(G)AMM |非线性|多类|线性| |LLSVM |非线性|二进制|任意| |BSGD |非线性|多类|任意用于随机删除,合并支持向量时为高斯| -------------------------------------------------------------------------------------------------------------- 有关更多详细信息,请参阅他们各自发表的论文。 特别地, 出版物可在以下位置找到: ***“Pegasos:SVM的原始估计亚梯度求解器”,ICML 2007(Pegasos,见 http://link.springer.com/article/10.1007/s10107-010-0420-4 ) ***“可扩展性的交易代表性:自适应多超平面机器 非线性分类”,KDD 2011(AMM,见“./doc/pdfs_of_algorithm_papers/AMM_paper.pdf”) ***“成长型自适应多超平面机器”,ICML 2020(GAMM,见“./doc/pdfs_of_algorithm_papers/GAMM_paper.pdf”) ***“在有限资源上扩展核支持向量机:低库线性化方法”,AISTATS 2012 (LLSVM,位于“./doc/pdfs_of_algorithm_papers/LLSVM_paper.pdf”) ***“打破内核化的诅咒:预算随机梯度下降 大型SVM培训”,JMLR 2012(BSGD,见“./doc/pdfs_of_algorithm_papers/BSGD_paper.pdf”) 我们的BudgetedSVM论文(JMLR 2013)概述了工具箱并总结了其 主要功能,请参阅PDF文件“./doc/pdfs_of_algorithm_papers/BudgetedSVM_paper.PDF”。 安装和数据格式 ============================ 在Unix系统上,键入“make”以构建“budgetedsvm-train”和“budgetedsvm-prective” 程序。 键入“make clean”删除生成的文件。 在没有 用于描述如何使用它们的参数。 我们注意到,作者已在以下平台上成功测试了工具箱: >>gcc-v gcc版本4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu5) 数据格式 ----------- 培训和测试数据文件的格式如下: <标签><索引1>:<值1><索引2>:<价值2>。。。 . . . 每行包含一个实例,并以“\n”字符结尾。 对于 classification,<label>是一个整数,表示类标签 (支持多类)。 请参阅“”/ 例如,a9a_train.txt。 有关LIBSVM格式的更多详细信息,请参阅以下网页 网址:http://www.csie.ntu.edu.tw/ ~cjlin/libsvm `budgetedsvm-train的使用 ========================= 为了获得详细的使用说明,请运行budgetedsvm-train函数 无需提供任何参数即可获得以下指令: 用法: 预算svm-train[选项]train_file[模型文件] 输入: 选项-模型参数 train_file—LIBSVM格式的训练文件的url model_file-保存学习模型的文件 -------------------------------------------- 选项按以下格式指定: '-选项1值1-选项2值2…' 以下选项可用:; 受影响的算法和默认值 括号中的值(如果选项影响全部,则不指定算法): A-算法,其中使用大规模SVM近似(2): 0-佩加索斯 1-AMM批次 2-AMM在线 3-LLSVM 4-BSGD D-维度(如果设置,则加载速度更快,如果从数据中推断省略) B-AMM中每类重量的数量限制,或 BSGD中的SV集合总预算,或LLSVM中的里程碑点数(50) L-lambda正则化参数; 高值->不太复杂的模型(0.00010) b-偏差项,如果0没有添加偏差(1.0) e-培训期数(AMM、BSGD;5) s-子时段数(AMM批次;1) k-修剪频率,在修剪了多少个观察到的例子之后(AMM;10000) c——修剪阈值; 高值->不太复杂的模型(AMM;10.00) K-核函数(0-RBF;1-指数,2-多项式;3-线性, 4-乙状结肠; 5-用户定义)(LLSVM,BSGD;0) g-RBF或指数核宽γ(LLSVM、BSGD;1/DIMENSIONALITY) d-多项式核度或sigmoid核斜率(LLSVM,BSGD;2.00) i-多项式或sigmoid核截距(LLSVM,BSGD;1.00) m-BSGD中的预算维护(0-删除;1-合并,使用高斯核),或 LLSVM中的地标采样策略(0-随机;1-k-均值;2-k-中值)(1) C-AMM中发生错误分类时的克隆概率(0) AMM中发生错误分类时的y克隆概率衰减(0.99) z训练和测试文件以块的形式加载,以便算法可以 在较弱的计算机上处理预算文件; z指定示例数 加载到单个数据块中(50000) w模型权重被分为块,因此算法可以处理 弱计算机上的高维数据; w指定数量 存储在一个块中的维度(1000) S-如果设置为1,则假设数据稀疏,如果0数据假设不解析; 用于 加速内核计算(当百分比非零时,默认值为1 特征小于5%,百分比大于5%时为0) r-将算法随机化; 1表示随机化,0表示不随机化(1) v——详细输出; 1表示算法步骤,0表示安静模式(0) -------------------------------------------- 模型保存在包含以下行的文本文件中: [算法、尺寸、类别数、标签、重量数、偏差项、核宽、模型] 为了压缩内存并有效使用内存,我们按照以下方式对模型进行编码: 对于AMM批处理、AMM在线、PEGASOS:存储模型,以便文本文件的每一行都对应 一个重量。 每个权重的第一个元素是权重的类别,然后是降级 重量的百分比。 该行的其余部分对应于权重的非零元素,如下所示 feature_index:feature_值,采用标准LIBSVM格式。 对于BSGD:存储模型,以便每行对应一个支持向量(或权重)。 这个 每个权重的第一个元素对应于每个类的alpha参数,按以下顺序给出 Matlab结构的“标签”成员。 然而,由于alpha可以等于0,我们使用LIBSVM格式 为了将字母表存储为-classindex:class-specificalpha,我们在前面添加了“-”(减号) 用于区分类索引和随后的特征索引的类索引。 在 alphas,在同一行中给出了每个特征的权重元素(或支持向量) LIBSVM格式。 对于LLSVM:存储模型,以便每行对应一个地标点。 的第一个元素 每一行对应于该特定地标点的线性SVM超平面元素。 这是 然后是LIBSVM格式数据集原始特征空间中的地标点特征。 `budgetedsvm-predict'使用 =========================== 为了获得详细的用法描述,请运行budgetedsvm-predict函数 无需提供任何参数即可获得以下指令: 用法: 预算svm-predict[选项]测试文件模型文件输出文件 输入: 选项-模型参数 test_file—LIBSVM格式的测试文件的url model_file-保存学习模型的文件 output_file—将写入输出的文件的url -------------------------------------------- 选项按以下格式指定: “-选项1值1-选项2值2…” 以下选项可用(括号中的默认值): z-训练和测试文件分块加载,以便算法可以 在较弱的计算机上处理预算文件; z指定示例数 加载到单个数据块中(50000) w-模型权重被分为多个部分,因此算法可以处理 弱计算机上的高维数据; w指定数量 存储在一个块中的维度(1000) S-如果设置为1,则假定数据稀疏,如果0数据假定为非解析,则用于 加速内核计算(当百分比非零时,默认值为1 特征小于5%,百分比大于5%时为0) o-如果设置为1,输出文件将不仅包含类预测, 而且获胜班级的分数以tab分隔(0) v-详细输出; 1显示算法步骤,0表示安静模式(0) -------------------------------------------- 设置“-o”选项时,分数应解释如下。 对于 LLSVM分数表示测试样本与分离样本之间的距离 超平面; 对于AMM和BSGD,此分数表示 优等成绩和得分第二好的班级的成绩。 示例 ======== 下面是一个关于如何在提供的成人9a数据集上训练和测试分类器的简单示例, 在budgetedsvm-train和budgetedsvm-predict函数编译完成后,运行make。 请注意,训练和预测程序将在“./bin”文件夹中创建,即 为什么我们需要在函数的调用中附加“bin/”。 如果程序在Windows中运行, 用户在指定路径时应使用“\”(反斜杠)而不是“/”(正向斜杠) 到命令提示符中的程序。 在下面的所有示例中,算法应返回准确性 大约15%左右。 如何训练和测试AMM或GAMM: ---------------------------------- >>垃圾箱/预算svm-train-A 1-e 5-L 0.001-B 20-D 123-v 1-k 10000-c 10 a9a_train.txt a9a_model.txt >>bin/budgetedsvm-predict-v 1 a9a_test.txt a9a_model.txt a9a _preds.txt文件 第一个命令使用AMM批处理(“-A 1”)算法训练多超平面机器5个世纪(“-e 5”), 使用0.001的正则化参数lambda(“-L 0.001”,较大的值导致不太复杂的模型,或者, 换句话说,更规范化)并将每个类的最大权重数设置为20(“-B 20”)。 由于adult9a数据集的维数为123,我们还编写“-D 123”,并选择详细输出(“-v 1”) 它打印了算法的详细步骤。 最后,我们指定将执行重量修剪 每10000次迭代(“-k 10000”,较小的值会导致更积极的修剪),以及修剪 参数设置为10(“-c10”,值越大,修剪越积极)。 如果您没有指定 模型文件的名称,它将被创建为后缀“.model”附加到 培训文件(注意,我们在上面的示例中包含了模型文件名,即“a9amodel.txt”)。 第二个命令在测试数据集上测试模型,并在测试集上打印精度 将预测保存到“a9apreds.txt”。 我们还通过写入“-v1”来设置详细输出。 如果您想训练GAMM模型,可以通过附加参数“-C”来完成。 例如,“-C 0.2”将克隆概率设置为0.2,而克隆概率衰减默认为0.99。 如何训练和测试LLSVM: ---------------------------- >>箱子/预算svm-列车-A 3-L 0.1-K 0-g 0.01-B 100-m 1-D 123-v 1 a9a_train.txt a9a_model.txt >>bin/budgetedsvm-predict-v 1 a9a_test.txt a9a_model.txt a9a预测.txt 第一个命令使用LLSVM(“-A 3”)算法来训练分类模型,设置 正则化参数为0.1(“-L 0.1”,值越大,模型越不复杂,或, 换句话说,更多的正则化),这导致比 上述AMM案例。 我们使用核宽度为0.01(“-g 0.01”)的高斯核(“-K 0”)。 使用“-B 100”选项,我们设置预算,指定模型将包含100个地标 通过对加载的训练数据(“-m 1”)运行k-means选择的点。 成年9a 数据集的维数为123,我们还写“-D123”,并选择详细输出(“-v1”) 它打印了算法的详细步骤。 如果未指定模型文件的名称, 它将被创建为在训练文件的文件名后附加后缀“.model” (注意,我们在上面的示例中包含了模型文件名,即“a9a_model.txt”)。 第二个命令根据测试数据集评估模型,并在 测试集,同时将预测保存到“a9apredications.txt”。 如何训练和测试BSGD: --------------------------- >>箱子/预算svm-列车-A 4-g 0.01-e 5-L 0.0001-B 200-m 1-D 123-v 1 a9a_train.txt a9a_model.txt >>bin/budgetedsvm-predict-v 1 a9a_test.txt a9a_model.txt a9a预测.txt 第一个命令使用BSGD(“-A4”)算法训练5个时期的分类模型 (“-e 5”),使用学习率λ0.0001(“-L 0.0001”),较大的值导致模型不太复杂, 或者,换句话说,更多的正则化)和0.01的高斯核的核宽度(“-g 0.01”)。 使用“-B 200”选项,我们指定模型将包含200个支持向量, 在预算溢出的情况下,将合并两个支持向量(“-m 1”)以保持 预算。 由于adult9a数据集的维数为123,我们也写“-D123”,并选择 详细输出(“-v1”),打印算法的详细步骤。 如果您没有指定名称 对于模型文件,它将被创建为后缀“.model”被附加到 培训文件(注意,我们在上面的示例中包含了模型文件名,即“a9amodel.txt”)。 第二个命令根据测试数据集评估模型,并打印准确性 同时将预测保存到“a9apredications.txt”。 图书馆使用 ============= 查看浏览器中的“./doc/BudgetedSVM_reference_manual.pdf”或打开“./doc/html/index.html” 有关实现的详细信息。 Matlab/Octave接口 ======================= 有关详细信息,请查看“./matlab”目录中的README.txt文件。 其他信息 ====================== 工具箱由Nemanja Djuric、Liang Lan和Slobodan Vucetic编写 坦普尔大学计算机与信息科学系, 以及来自IBM全球商业服务公司的王壮。 BudgetedSVM网页位于 http://www.dabi.temple.edu/budgetedsvm/ . 如果您认为我们的工作有用,请引用我们: Djuric,N.、Lan,L.、Vucetic,S.和Wang,Z.(2014)。 BudgetedSVM:可扩展的工具箱 SVM近似。 机器学习研究杂志,14,3813-3817。 如有任何问题或意见,请联系Nemanja Djuric< nemanja@temple.edu >. 上次更新日期:2020年6月21日 致谢 =============== 这项工作得到了国家科学基金会IIS-0546155和IIS-1117433的资助。