- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
cv::ml::ParamGrid 类是 OpenCV 机器学习模块中的一个辅助类,用于定义模型训练过程中参数的搜索范围。它通常被用作某些机器学习算法(如支持向量机 SVM)的超参数调优工具,允许用户指定参数的最小值、最大值以及变化步长。通过使用 ParamGrid,你可以更方便地进行网格搜索(grid search),从而找到最优的模型参数配置。
主要用途
- 超参数调优:为特定的模型参数定义一个可能值的范围,以便在训练时自动探索最佳参数。
- 参数范围定义:通过设置参数的最小值、最大值和步长,生成一系列可能的参数值,供训练过程选择最优值。
构造函数与成员函数
- 构造函数
-
ParamGrid():默认构造函数,创建一个默认的参数网格,其最小值为 1.0, 最大值为 10.0, 步长为 1.0。
-
ParamGrid(double minVal, double maxVal, double logStep):初始化参数网格,指定最小值、最大值和步长。注意这里的步长是以对数尺度给出的。
成员变量
minVal:参数的最小值。
maxVal:参数的最大值。
logStep:参数增长的步长,以对数尺度表示。
-
代码示例
cpp
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/ml.hpp>
#include <iostream>
using namespace cv;
using namespace cv::ml;
using namespace std;
int main() {
// 创建SVM实例
Ptr<SVM> svm = SVM::create();
// 定义C参数的搜索范围
ParamGrid C_grid(0.1, 100, 2); // 从0.1到100,以2的幂次递增
// 定义gamma参数的搜索范围
ParamGrid gamma_grid(0.01, 1, 2); // 从0.01到1,以2的幂次递增
// 准备训练数据
Mat samples = (Mat_<float>(4, 2) <<
0.5, 1.0,
1.0, 1.5,
2.0, 0.5,
1.5, 0.0);
Mat responses = (Mat_<int>(4, 1) << 0, 0, 1, 1);
// 使用TrainData创建训练数据对象
Ptr<TrainData> trainData = TrainData::create(samples, ROW_SAMPLE, responses);
// 自动训练模型,使用定义的参数网格
svm->trainAuto(trainData, 10, C_grid, gamma_grid);
// 保存模型
svm->save("svm_model.yml");
// 对新样本进行预测
Mat sample = (Mat_<float>(1, 2) << 1.6, 0.7);
float response = svm->predict(sample);
cout << "The predicted response for the sample is: " << response << endl;
return 0;
}
运行结果
cpp
The predicted response for the sample is: 1