- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
cv::ml::SVM 是 OpenCV 机器学习模块中的一部分,用于实现支持向量机(Support Vector Machine, SVM)。SVM 是一种强大的监督学习算法,主要用于分类和回归分析。它通过找到一个最优的超平面来区分不同类别的数据点,或者在回归任务中预测连续值。
主要特点
- 二分类与多分类:虽然SVM本质上是为二分类问题设计的,但OpenCV中的SVM可以通过一对多策略处理多分类问题。
- 核函数支持:支持线性、多项式、RBF(径向基函数)、Sigmoid等多种核函数,允许非线性分类。
- 参数调节:提供了多种参数调节选项,如惩罚因子C、核函数参数等,以优化模型性能。
常用成员函数
以下是一些常用的 cv::ml::SVM 类成员函数:
- 创建模型实例
- Ptr create():创建一个新的 SVM 模型实例。
- 设置模型参数
- void setType(int val):设置SVM类型(如 C_SVC, NU_SVC, ONE_CLASS, EPS_SVR, NU_SVR)。
- void setKernel(int val):设置使用的核函数类型(如 LINEAR, POLY, RBF, SIGMOID)。
- void setC(double val):设置SVM的惩罚参数C,默认值为1。
- void setGamma(double val):设置核函数的gamma参数(对于RBF、POLY、SIGMOID核)。
- void setDegree(double val):设置多项式核的度数。
- void setCoef0(double val):设置核函数的系数0(对于POLY、SIGMOID核)。
- void setNu(double val):设置ν-SVC、ν-SVR中的ν参数。
- void setP(double val):设置ε-SVR中的ε值。
训练模型
- bool train(const Ptr& trainData, int flags=0):使用提供的训练数据进行训练。
- bool train(InputArray samples, int layout, InputArray responses):另一种形式的训练函数,直接接受样本和响应矩阵作为输入。
预测
- float predict(InputArray samples, OutputArray results=noArray(), int flags=0) const:对新样本进行预测,并返回每个样本的类别标签或预测值(取决于标志)。
加载与保存模型
- void save(const String& filename) const:将模型保存到文件。
- static Ptr load(const String& filename):从文件加载模型。
代码示例
#include <iostream>
#include <opencv2/ml.hpp><