我正在用Node.js编写一个机器学习程序,我想使用LibLinear和SvmPerf这样的库,这些库在Node.js中是不可用的。因此,为了进行培训,我只需创建一个带有培训示例的文件,并在该文件上执行SvmPerf二进制文件。我也可以对分类做同样的事情,但是,由于分类比训练更多,这可能太慢了。
因此,我想出了一种不同的方法:由于支持向量机的分类(带线性核)只是模型权值与输入的特征值的内积,所以我只需读取SvmPerf模型文件,解析它并将权重保存在内存中,然后在Node.js中自己进行分类。
这个方法正确吗?我真的可以通过计算SvmPerf/LibLinear创建的模型和输入样本之间的内积来进行分类吗?
发布于 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_i。b变量有时被称为intercept
发布于 2013-09-08 17:22:41
让我在lejlot的最佳答案中加上几点:
https://stackoverflow.com/questions/18681337
复制相似问题