我目前正在研究大规模的多类图像分类问题。我目前正在使用在线学习策略,在scikit学习中使用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
由于
答案 0 :(得分:4)
Passive Aggressive分类器不像您习惯的大多数算法那样“收敛”。实际上,如果您阅读论文,PA的重点是使更新完全纠正损失但导致权重向量范数的最小变化。请注意,PA中的正则化参数使其无法在每个示例的基础上进行完全校正。
通过这种方式,PA专门用于在线而非批量训练,因此 - 在小批量运行PA直到它稳定可能不会帮助(并且可能伤害)您的泛化准确性。
MAP是正确的衡量标准
完全取决于您的数据和需求。
任何其他线性算法,而不是可能更适合问题的Passive Aggressive和SGD
完全取决于您的数据和需求
一个快速解决方法是在学习过程中使用class_weight ='auto',但这仅支持“SGD”实现,而不支持被动积极实现。 ?任何理由都认为两者都使用相同的底层sgd实现。
是的,请参阅我对PA的描述。 PA的学习方法不允许添加。虽然你可以通过改变每个阶段的正则化来实现它,但我认为它没有任何意义。如果您需要了解更多信息,请参阅原始论文。
您可以搜索“类不平衡”以找到尝试处理该问题的更多方法,但这一切都取决于您的数据。
如果您愿意使用Java,JSAT具有PA的直接多类实现,称为SPA。它可能会或可能不会更准确地解决您的问题。