我最近几周在学习支持 vector 机。我了解如何将数据分为两类的理论概念。但我不清楚如何选择支持 vector 并生成分隔线以使用 C++ 对新数据进行分类。
假设,我有两个类的两个训练数据集
绘制数据后,我得到了以下带 vector 的特征空间,这里,分隔线也很清楚。
如何在没有库函数的情况下在 C++ 中实现它。这将帮助我理清关于 SVM 的实现概念。我需要清楚实现,因为我将在我的母语的意见挖掘中应用 SVM。
最佳答案
我会加入大多数人的建议,并说你真的应该考虑使用图书馆。 SVM 算法非常棘手,如果由于您的实现中的错误而无法正常工作,则会增加噪音。更不用说在内存大小和时间上实现可扩展的实现有多难了。
也就是说,如果您只是想将其作为一种学习体验来探索,那么 SMO 可能是您的最佳选择。以下是您可以使用的一些资源:
The Simplified SMO Algorithm - Stanford material PDF
Fast Training of Support Vector Machines - PDF
我找到的最实用的解释可能是 Peter Harrington 所著的机器学习实战一书第 6 章中的解释。代码本身在 Python 上,但您应该能够将其移植到 C++。我不认为这是最好的实现,但它可能足以让我们了解正在发生的事情。
代码是免费的:
https://github.com/pbharrin/machinelearninginaction/tree/master/Ch06
遗憾的是,该章没有样本,但许多本 map 书馆往往都有这本书。
关于c++ - C++中无库分类SVM的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27501444/