请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于SVM高斯核函数的问题

bobo老师好,我想请教一个关于SVM高斯核函数的问题。
1.目的:我想实现在python中用svm中跑出参数w,再放到c++中运算去进行预测。
2.问题:
在不用核函数的情况下,分类超平面的函数是 0=wx+b,当新的样本wx+b>0时为一类,<0时为一类。我只用在之前手动生成多项式,fit完然后再导出coef_,和intercept_放入c++即可对新的样本进行分类。
在使用高斯核函数的情况下,是0=Σ ai yi k(x,xi)+b.在这种情况下,拿到新的样本x该怎样分类?我要导出哪些参数?

正在回答

1回答

我不确定你在C++端是用什么框架。但不管怎样,不同语言框架之间的转换,建议使用现成的标准,比如PMML。可以在网上搜索PMML,了解一下这个标准。


有很多开源代码代码可以直接将sklearn的模型转化为PMML,比如这里:https://github.com/jpmml/sklearn2pmml


同理,你是用的C++框架,应该也支持读取PMML,或者有开源工具做这件事情,形成模型。


如果你只想靠底层参数,从零开始,重建出一个SVM,是有难度的。这个课程介绍的知识不够。因为基于高斯核函数的SVM不是一个线性模型。你需要再深入理解SVM的底层机制。老实说,我没有做过这件事情。理论上,SVC类中的所有attribution都是需要的,还包括你训练用的超参数。


你可以通过sklearn的文档,了解一个SVC模型,内部起作用的attribution有多少:https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html 看attrubition一项。


SVM远比逻辑回归或者线性回归复杂。从底层实现一个SVM超出了绝大多数机器学习教程的范畴,其实也超出我的能力范畴了:-(


----------


如果你一定要使用C++部署,也可以考虑直接使用C++的SVM框架做训练。比如libSVM。sklearn实现的SVM,底层也是直接调用了libSVM。官网如下:https://www.csie.ntu.edu.tw/~cjlin/libsvm/ 如何使用的教程可以在互联网上搜索自学一下。有一些项目也会在libSVM的基础上再包装一层,以简化操作。比如这里:https://github.com/jgreitemann/svm


加油!:)

2 回复 有任何疑惑可以回复我~
  • 提问者 慕的地5113627 #1
    非常感谢!谢谢bobo老师,我再去研究下c++sklean的框架
    回复 有任何疑惑可以回复我~ 2019-05-05 14:52:51
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信