假设我需要用 scikit-learn 对地址进行分类,所以如果我希望我的分类器能够按街道名称和邮政编码对地址进行分类,我应该做一个 OneVsRest 分类器,还是将它们分成两个不同的分类器(对于相同的训练集)?
我都尝试过,似乎拥有多个分类器可能是更好的选择,因为训练多个较小的分类器感觉更快。这是应该怎么做的吗?
假设我需要用 scikit-learn 对地址进行分类,所以如果我希望我的分类器能够按街道名称和邮政编码对地址进行分类,我应该做一个 OneVsRest 分类器,还是将它们分成两个不同的分类器(对于相同的训练集)?
我都尝试过,似乎拥有多个分类器可能是更好的选择,因为训练多个较小的分类器感觉更快。这是应该怎么做的吗?
这两种方式都是有效的,并且都是常用的。有时,声称是多标签的分类器可能只是在底层将标签分成多个 OneVsRest 分类器,并在最后方便地将结果连接在一起。
但是,在某些情况下,方法根本不同。例如,在训练具有多个目标(标签)的神经网络时,您可以设置网络结构,使其具有共享结构。共享节点最终将学习对所有目标有用的特征,这可能非常有用。
例如,如果您的类(标签)是“cat-pet”、“cat-big”和“dog”,您可能需要一种算法,该算法首先学会区分任何猫和任何狗,然后在后面的步骤学习将宠物猫与大猫(如狮子!)分开。这称为层次结构,如果您的分类器可以利用层次结构,您可能会获得更好的准确性。但是,如果您的课程完全独立,则可能没有任何区别。
我建议您从最简单的方法(即 OneVsRest)开始,看看性能是否适合您的需求,然后仅在需要更好的性能时才使用更复杂的方法(多标签、分层方法等)。