关于SVM高斯核函数的问题
来源:12-7 决策树的局限性
慕的地5113627
2019-05-05
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
加油!:)
212019-05-05
相似问题