内容提要
本文介绍如何用OpenCV的逻辑回归进行多类图像分类。标准逻辑回归仅适用于二分类,OpenCV通过“一对一”策略为每对类别训练二分类器,预测时以投票决定类别。作者使用OpenCV手写数字数据集,以像素值为特征,采用小批量梯度下降训练,取得88.8%的准确率,并通过混淆矩阵发现数字5和2最易被误判为8。
延伸解读
多分类的实现机制:一对一投票
OpenCV的逻辑回归本身只支持二分类,处理多分类时采用“一对一”策略:为每对类别训练一个二分类器。预测时,每个分类器对两个类别投票,得票最多的类别作为最终预测。这种机制意味着类别数为K时需训练K(K-1)/2个分类器,当类别较多时训练和预测开销会显著增加,但每个分类器只需处理两类样本,训练相对简单。
特征与模型复杂度:像素值直接输入
文章使用20×20像素的手写数字图像,直接将400个像素值作为特征,因此模型学习到401个系数(400个特征权重加1个偏置)。这种原始像素特征无需复杂预处理,但特征维度较高,且像素值对光照、平移等变化敏感。作者在结尾提出可尝试HOG描述符,暗示原始像素特征可能不是最优选择,但文章未给出对比结果。
训练参数选择:小批量梯度下降的实践
OpenCV逻辑回归默认使用批量梯度下降,作者改为小批量梯度下降并设置批大小为400,迭代10次。批大小是通过尝试几个值后选定的,并非系统调优。文章提醒读者应更系统地选择批大小,以在计算成本和预测准确率之间取得更好平衡。这说明示例中的参数设置具有启发性,实际应用需根据数据规模调整。
结果解读:准确率与混淆矩阵的启示
模型在测试集上达到88.8%的准确率,但仅看总体准确率可能掩盖类别间的差异。混淆矩阵显示数字5和2最容易被误判为8,表明某些类别在像素特征空间中重叠较多。这提示读者在评估多分类模型时,应结合混淆矩阵分析具体错分模式,而非仅依赖单一准确率指标,以便针对性改进特征或分类策略。
Q&A
OpenCV的逻辑回归如何实现多类图像分类?
OpenCV采用“一对一”策略,为每对类别训练一个二分类器。预测时,每个二分类器投票,得票最多的类别作为最终预测结果。
用OpenCV逻辑回归做手写数字识别,准确率能达到多少?
在OpenCV手写数字数据集上,使用像素值作为特征,采用小批量梯度下降训练,取得了88.8%的准确率。
在OpenCV中训练逻辑回归模型时,如何设置小批量梯度下降?
首先创建逻辑回归模型,然后调用setTrainMethod(ml.LogisticRegression_MINI_BATCH)设置训练方法为小批量梯度下降,再通过setMiniBatchSize(400)指定小批量大小。
逻辑回归模型训练后有多少个系数?与输入特征数有什么关系?
模型系数个数等于输入特征数加1(偏置项)。例如,20x20像素图像有400个特征,则学习到401个系数。
哪些手写数字最容易被逻辑回归模型混淆?
通过混淆矩阵发现,数字5和2最容易被误判为8,这两个类别的分类性能最低。
标准逻辑回归为什么不能直接用于多类分类?
标准逻辑回归通过sigmoid函数将输出映射到[0,1]概率,并以0.5为阈值分为两类,因此本质上仅适用于二分类问题。