当前位置: 首页 > article >正文

OpenCV机器学习(5)逻辑回归算法cv::ml::LogisticRegression

  • 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


http://www.kler.cn/a/550778.html

相关文章:

  • 如何使用Docker本地安装部署Anything LLM
  • Elixir语言的数据可视化
  • STC 51单片机63——关于STC8H的ADC通道切换问题
  • C++ list:链表的“乐高积木”与“灵活小火车”
  • flutter 专题四十八 Google发布Flutter 2.0正式版,支持全平台程序构建
  • unity学习46:反向动力学IK
  • PyTorch `.pth` 转 ONNX:从模型训练到跨平台部署
  • spring启动加载顺序及原理
  • C 指针和整数的加减法运算
  • mysql 学习15 SQL优化,插入数据优化,主键优化,order by优化,group by 优化,limit 优化,count 优化,update 优化
  • 开源工具推荐--思维导图、流程图等绘制
  • 深度学习05 ResNet残差网络
  • sql not in 优化
  • QT笔记——QPlainTextEdit
  • 使用docker部署NextChat,使用阿里云、硅机流动、deepseek的apikey
  • 深度学习算法​:ocr营业执照识别可提取字段、接口识别
  • 《Nuxt.js 实战:从放弃到入门》二、Element Plus 集成
  • Oracle 12c中在同一组列上创建多个索引
  • 利用亚马逊AI代码助手生成、构建和编译一个游戏应用(下)
  • 基于springboot社会志愿者服务管理平台(源码+lw+部署文档+讲解),源码可白嫖!