我正在用 Node.js 编写机器学习程序,我想使用 Node.js 中没有的库,例如 LibLinear 和 SvmPerf。因此,对于训练,我只需创建一个包含训练样本的文件,然后在该文件上执行 SvmPerf 二进制文件。我也可以对分类做同样的事情,但是,由于分类发生的次数远多于训练,这可能太慢了。
所以我想到了一个不同的方法:由于 SVM(带有线性核)中的分类只是模型权重与输入特征值的内积,我可以读取 SvmPerf 模型文件,解析它并保留权重在内存中,然后自己在 Node.js 中进行分类。
这种方法是否正确?我确实可以通过计算 SvmPerf/LibLinear 创建的模型和输入样本之间的内积来进行分类吗?
最佳答案
简短的回答是 是 。在二进制线性情况下,您所要做的就是检索 w
超平面的坐标和 b
参数,计算新点 <w,x>-b
的 x
并返回结果的符号。在多标签分类的情况下,您将不得不根据使用的库方法(1 对全部或 1 对 1)实现某种投票方案。
大多数库不存储 w
参数,而是存储支持向量列表 sv_i
和相应的“权重” slpha_i y_i
(通常每个向量一个数字)。要检索 w
参数,您必须计算 w = sum_i alpha_i y_i sv_i
。 b
变量有时称为 intercept
关于machine-learning - 使用由 SvmPerf 或 LibLinear 训练的模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18681337/