我正在用 Node.js 编写机器学习程序,我想使用 Node.js 中没有的库,例如 LibLinear 和 SvmPerf。因此,对于训练,我只需创建一个包含训练样本的文件,然后在该文件上执行 SvmPerf 二进制文件。我也可以对分类做同样的事情,但是,由于分类发生的次数远多于训练,这可能太慢了。

所以我想到了一个不同的方法:由于 SVM(带有线性核)中的分类只是模型权重与输入特征值的内积,我可以读取 SvmPerf 模型文件,解析它并保留权重在内存中,然后自己在 Node.js 中进行分类。

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

最佳答案

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

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

关于machine-learning - 使用由 SvmPerf 或 LibLinear 训练的模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18681337/

10-12 16:35