【发布时间】:2014-06-13 05:57:19
【问题描述】:
我目前正在研究一个大规模的多类图像分类问题。我目前正在使用在线学习策略,利用 scikit learn 中的 Passive Aggressive 算法实现。 (因为与 SGD 实现相比,它的收敛速度更快)。我通过构建 N(类数)OVA 分类器来遵循 One Vs All (OVA) 方法。
为了处理大量的训练数据,我基本上将我的数据集分成分层的小批量,并通过在线学习器(每个 OVA)运行它们多次迭代,直到验证批量的性能下降。 (模型初始化和超参数选择在第一批完成) 我的衡量标准主要是 MAP 或平均平均精度。 (每个 OVA 模型的 sklearn.metrics.average_precision_score 得分的平均值)。
有了这个框架,每当我有新的标签可用时,我都可以创建一个新的批次并通过部分拟合操作运行它们,从而进一步提高模型性能。
我担心这种方法能否处理小批量或将来添加更多小批量时出现的类不平衡。我怀疑由于类别不平衡,模型会偏向多数类别,导致少数类别的召回率低。
一种快速解决方法是在学习期间使用 class_weight='auto' 但这仅支持“SGD”实现,而不支持被动积极实现。 ?鉴于两者都使用相同的底层 sgd 实现,这是任何原因。
我能想到的其他选择是制作平衡的小批量,从而确保模型不偏向多数类。
如果能对架构及其可能存在的缺点有所了解,那就太好了。 - MAP 是正确的衡量标准吗? - 如何在不平衡的课堂场景中处理在线学习。 - 任何其他可能更适合该问题的线性算法,而不是 Passive Aggressive 和 SGD
谢谢
【问题讨论】:
标签: python machine-learning scikit-learn