我正在Node.js中编写一个机器学习程序,我想使用Node.js中没有的库,如LibLinear和SvmPerf。因此,对于培训,我只是创建一个包含训练样本的文件,并在该文件上执行SvmPerf二进制文件。我也可以对分类做同样的事情,但是,由于分类比训练发生得多,这可能太慢了。
所以我想到了一种不同的方法:因为SVM中的分类(带有线性内核)只是模型权重与输入特征值的内积,我只需读取SvmPerf模型文件,解析它和将权重保存在内存中,然后在Node.js中自己进行分类。
这种做法是否正确?我是否可以通过计算SvmPerf / LibLinear创建的模型与输入样本之间的内积来确实进行分类?
答案 0 :(得分:3)
简短的回答是是。在二进制线性情况下,您只需要检索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
答案 1 :(得分:3)
让我为lejlot的优秀答案添加一些内容: