- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
cv::ml::LogisticRegression 是 OpenCV 机器学习模块中的一个类,用于实现逻辑回归算法。逻辑回归是一种广泛应用于分类问题的统计方法,特别适合二分类任务。尽管名字中有“回归”二字,但它主要用于预测数据点属于某个类别的概率。
主要特性
- 二分类:主要设计用于解决二分类问题。
- 参数设置:允许用户配置学习率、迭代次数、正则化类型等参数以优化模型性能。
- 正则化支持:支持 L2 正则化来防止过拟合,提高模型的泛化能力。
常用成员函数
以下是 cv::ml::LogisticRegression 类中一些常用的成员函数:
- 创建 LogisticRegression 模型实例
- Ptr create():创建一个新的 LogisticRegression 模型实例。
- 设置模型参数
- setLearningRate(double learning_rate):设置学习率,默认值为 0.001。
- setIterations(int iterations):设置最大迭代次数,默认值为 1000。
- setRegularization(int regularization):设置正则化类型(如 LogisticRegression::REG_L2)。
- setMiniBatchSize(int size):设置小批量梯度下降的批量大小。
- 训练模型
- train(const Ptr& trainData, int flags=0):使用提供的训练数据进行训练。
- train(InputArray samples, int layout, InputArray responses):另一种形式的训练函数,直接接受样本和响应矩阵作为输入。
- 预测
- predict(InputArray samples, OutputArray results=noArray(), int flags=0) const:对新样本进行预测,并返回每个样本的类别标签或概率值(取决于标志)。
- 保存与加载模型
- save(const String& filename):将模型保存到文件。
- load(const String& filename):从文件加载模型。
代码示例
#include <opencv2/opencv.hpp>
#include <opencv2/ml.hpp>
#include <iostream>
using namespace cv;
using namespace cv::ml;
using namespace std;
int main() {
// 准备训练数据
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_<float>(4, 1) << 0.0, 0.0, 1.0, 1.0); // 确保是浮点数
// 创建并配置 LogisticRegression 模型
Ptr<LogisticRegression> lr_model = LogisticRegression::create();
lr_model->setLearningRate(0.01); // 设置学习率
lr_model->setIterations(1000); // 设置最大迭代次数
lr_model->setRegularization(LogisticRegression::REG_L2); // 使用L2正则化
// 训练模型
bool ok = lr_model->train(samples, ROW_SAMPLE, responses);
if (ok) {
// 保存模型
lr_model->save("lr_model.yml");
// 对新样本进行预测
Mat sample = (Mat_<float>(1, 2) << 1.6, 0.7);
float response = lr_model->predict(sample);
cout << "The predicted response for the sample is: " << response << endl;
} else {
cerr << "Training failed!" << endl;
}
return 0;
}
运行结果
The predicted response for the sample is: 1