使用 OpenCV 进行图像分类的逻辑回归

之前的教程中,我们探索了逻辑回归,这是一个简单但流行的机器学习算法,用于 OpenCV 库中实现的二元分类。

到目前为止,我们已经看到了逻辑回归如何应用于我们自己生成的一个自定义二分类数据集。 

在本教程中,您将学习如何通过将其应用于图像分类任务来修改标准逻辑回归算法(其本身专为二元分类而设计)以适应多类分类问题。 

完成本教程后,您将了解:

  • 逻辑回归算法的一些最重要的特征。
  • 逻辑回归算法如何为多类分类问题进行修改。 
  • 如何将逻辑回归应用于图像分类问题。 

通过我的书《OpenCV 机器学习启动您的项目。它提供了带有可用代码自学教程


让我们开始吧。 

使用 OpenCV 进行图像分类的逻辑回归
图片来自 David Marcu,部分权利保留。

教程概述

本教程分为三个部分;它们是:

  • 逻辑回归的 Recap
  • 修改逻辑回归以适应多类分类问题
  • 将逻辑回归应用于多类分类问题

逻辑回归的 Recap

之前的教程中,我们开始探索 OpenCV 对逻辑回归算法的实现。到目前为止,我们已将其应用于我们自己生成的自定义二分类数据集,该数据集包含聚集在两个簇中的二维点。 

遵循 Jason Brownlee 关于逻辑回归的教程,我们还回顾了逻辑回归的重要知识点。我们已经看到,逻辑回归与线性回归密切相关,因为它们都在生成实值输出时涉及特征的线性组合。然而,逻辑回归通过应用逻辑(或 sigmoid)函数来扩展此过程。因此得名。它将实值输出映射到 [0, 1] 范围内的概率值。然后,如果该概率值超过 0.5 的阈值,则将其分类为属于默认类别;否则,将其分类为属于非默认类别。这使得逻辑回归本质上成为一种用于*二元*分类的方法。 

逻辑回归模型由与输入数据中特征数量相同的系数以及一个额外的偏置值表示。这些系数和偏置值在训练过程中使用梯度下降或最大似然估计(MLE)技术进行学习。

修改逻辑回归以适应多类分类问题

如前一节所述,标准的逻辑回归方法由于逻辑函数以及随后的阈值处理过程将特征的线性组合的实值输出映射到类别 0 或类别 1,因此仅用于二类问题。 

因此,要使用逻辑回归处理多类分类问题(或涉及两个以上类别的分类问题),需要修改标准算法。 

一种实现此目的的技术涉及将多类分类问题分解为多个二元(或二类)分类子问题。然后可以将标准逻辑回归方法应用于每个子问题。这就是 OpenCV 实现多类逻辑回归的方式。

… 逻辑回归同时支持二元和多类分类(对于多类,它会创建多个二类分类器)。

逻辑回归,OpenCV

一种此类技术被称为*一对一*方法,它涉及为数据集中的每个唯一类别对训练一个单独的二元分类器。在预测期间,这些二元分类器中的每一个都会对其训练的两个类别中的一个进行投票,并且获得最多投票的类别被认为是预测类别。 

还有其他技术可以使用逻辑回归实现多类分类,例如通过*一对余*方法。您可以在这些教程中找到更多信息 [1, 2]。

将逻辑回归应用于多类分类问题

为此,我们将使用OpenCV 中的数字数据集,尽管我们开发的代码也可以应用于其他多类数据集。 

我们的第一步是加载 OpenCV 数字图像,将其划分为许多显示 0 到 9 手写数字的子图像,并创建相应的真实标签,这些标签将使我们能够稍后量化训练好的逻辑回归模型的准确性。对于这个特定的例子,我们将把 80% 的数据集图像分配给训练集,将剩余的 20% 的图像分配给测试集。

接下来,我们将遵循与上一个教程类似的过程,在该教程中我们在二分类数据集上训练和测试了逻辑回归算法,修改了一些参数以适应更大的多类数据集。 

第一个步骤是再次创建逻辑回归模型本身

我们可以再次确认 OpenCV 将批量梯度下降作为其默认训练方法(由值 0 表示),然后继续将其更改为小批量梯度下降方法,并指定小批量大小。

不同的小批量大小肯定会影响模型的训练和预测准确性。 

在这个例子中,我们选择小批量大小是基于一种实用的启发式方法,即尝试了几个小批量大小,并确定了一个能够获得足够高预测准确性的值(正如我们稍后将看到的)。然而,您应该遵循一种更系统的方法,这可以为您提供关于提供计算成本和预测准确性之间更好折衷的小批量大小的更明智的决定。

接下来,我们将定义我们希望运行所选训练算法的迭代次数,然后才能终止它。

现在我们可以使用训练数据训练逻辑回归模型了。

在我们之前的教程中,我们打印了学习到的系数,以发现模型是如何定义的,该模型最好地分离了我们处理的二类样本。 

这次我们不打印学习到的系数,主要是因为它们太多了,因为我们现在处理的是更高维度的输入数据。 

我们将改为打印学习到的系数的数量(而不是系数本身)以及输入特征的数量,以便能够比较两者。

果然,我们发现系数的数量与输入特征的数量相同,再加上一个额外的偏置值,正如我们所预期的那样(我们处理的是 20x20 像素的图像,并将像素值本身作为输入特征,因此每张图像有 400 个特征)。 

我们可以通过在测试数据集上尝试来测试此模型预测目标类别标签的效果。

作为最后一步,让我们生成并绘制一个混淆矩阵,以更深入地了解哪些数字被错误地识别为其他数字。

混淆矩阵

这样,我们可以看到表现最差的类别是 5 和 2,它们最常被误认为 8。

完整的代码列表如下

在本教程中,我们将逻辑回归方法(其本身专为二元分类而设计)应用于多类分类问题。我们使用像素值作为表示每个图像的输入特征,在选定的参数值下获得了 88.8% 的分类准确率。 

那么,尝试在从图像提取的 HOG 特征上训练逻辑回归算法能否提高此准确率?

想开始学习 OpenCV 机器学习吗?

立即参加我的免费电子邮件速成课程(附示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

进一步阅读

如果您想深入了解此主题,本节提供了更多资源。

书籍

网站

总结

在本教程中,您学习了如何通过将其应用于图像分类任务来修改标准逻辑回归算法(其本身专为二元分类而设计)以适应多类分类问题。

具体来说,你学到了:

  • 逻辑回归算法的一些最重要的特征。
  • 逻辑回归算法如何为多类分类问题进行修改。 
  • 如何将逻辑回归应用于图像分类问题。

你有什么问题吗?

在下面的评论中提出您的问题,我将尽力回答。

开始使用 OpenCV 进行机器学习!

Machine Learning in OpenCV

学习如何在图像处理项目中使用机器学习技术

...以高级方式使用 OpenCV,超越像素处理

在我的新电子书中探索如何实现
OpenCV 机器学习

它提供带有所有可用 Python 代码自学教程,让您从新手成长为专家。它为您提供了
逻辑回归随机森林支持向量机k 均值聚类神经网络等等……所有这些都使用 OpenCV 中的机器学习模块

通过动手练习开启你的深度学习之旅


查看内容

, , ,

暂无评论。

留下回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。