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

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

相关文章:

  • linux服务简介
  • 内外网隔离文件传输解决方案|系统与钉钉集成+等保合规,安全提升70%
  • UE 播放视频
  • 拖动线条改变区域大小
  • 进程 (一)
  • Mac arm架构使用 Yarn 全局安装 Vue CLI
  • bootloader学习笔记
  • 什么是IO多路复用
  • 匹配算法:向下就近原则,向下没有就向上
  • 文件IO(20250217)
  • 【从0做项目】Java文档搜索引擎(9)烧脑终章!
  • Java Web开发实战与项目——开发一个简单的在线商城
  • 【Java】方法参数传递机制分析:传值与传引用
  • 人工智能与自闭症的研究现状及未来趋势
  • 雨后清新气味的关键角色——土臭素与2-甲基异茨醇
  • P3916 图的遍历
  • 玄机———第二章 日志分析-redis应急响应
  • token是什么
  • 什么是DeFi (去中心化金融)
  • 深度解析应用层协议-----HTTP与MQTT(涵盖Paho库)
  • 网站建设与网页设计可行性分析报告/电子商务网站建设方案
  • 网站上的视频上传怎么做/无锡百度竞价
  • 中山高端网站建设价格/营销管理制度范本
  • 建设一元云购类网站/如何制作微信小程序店铺
  • 中山手机网站建设价格/色盲怎么治疗
  • 日本门户网站有哪些/百度联盟广告