首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SvmPerf或LibLinear训练的模型

使用SvmPerf或LibLinear训练的模型
EN

Stack Overflow用户
提问于 2013-09-08 07:05:23
回答 2查看 546关注 0票数 3

我正在用Node.js编写一个机器学习程序,我想使用LibLinear和SvmPerf这样的库,这些库在Node.js中是不可用的。因此,为了进行培训,我只需创建一个带有培训示例的文件,并在该文件上执行SvmPerf二进制文件。我也可以对分类做同样的事情,但是,由于分类比训练更多,这可能太慢了。

因此,我想出了一种不同的方法:由于支持向量机的分类(带线性核)只是模型权值与输入的特征值的内积,所以我只需读取SvmPerf模型文件,解析它并将权重保存在内存中,然后在Node.js中自己进行分类。

这个方法正确吗?我真的可以通过计算SvmPerf/LibLinear创建的模型和输入样本之间的内积来进行分类吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-08 07:12:52

简单的回答是。在二进制的线性情况下,只需检索w超平面的坐标和b参数,计算新点x<w,x>-b,并返回结果的符号。在多标签分类的情况下,您将不得不根据使用的库方法(1 willl或1vs1)实现某种投票方案。

大多数库不存储w参数,而是存储支持向量sv_i的列表,其中包含相应的“权重”slpha_i y_i (通常为每个向量一个数字)。要检索w参数,必须计算w = sum_i alpha_i y_i sv_ib变量有时被称为intercept

票数 3
EN

Stack Overflow用户

发布于 2013-09-08 17:22:41

让我在lejlot的最佳答案中加上几点:

  • 如果使用的是LIBSVM或任何其他带有线性核的SVM库,那么lejlot的说法是完全正确的:您需要将SVM模型(支持向量和拉格朗日乘数)转换为w。
  • 在OP感兴趣的情况下,他使用的是LIBLINEAR (不是SVM库)。LIBLINEAR自动生成w。他只需从模型中提取它并将其添加到Javascript程序中即可。
  • 只有在LIBLINEAR中使用-b 1训练分类器时,才需要使用关于b的部分。他将在w中获得一个额外的维度,并且在分类之前,他需要在他的数据中附加一个1。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18681337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档