我有多类不平衡数据(4 类,每个类有 15% 25% 45% 15% 的数据)。哪种方法适合对此类数据进行分类——SVM 或 ANN?
更新-让我把这个问题说得更笼统一些。@Dikran Marsupial 在一个回答中说“分类器的选择取决于特定数据集的性质”,但是在选择分类器之前应该考虑哪些因素。我知道第一个选择可能不会一直给出最佳答案,但它可能是一个很好的起点。那么在选择分类器之前我应该考虑哪些数据属性?
我有多类不平衡数据(4 类,每个类有 15% 25% 45% 15% 的数据)。哪种方法适合对此类数据进行分类——SVM 或 ANN?
更新-让我把这个问题说得更笼统一些。@Dikran Marsupial 在一个回答中说“分类器的选择取决于特定数据集的性质”,但是在选择分类器之前应该考虑哪些因素。我知道第一个选择可能不会一直给出最佳答案,但它可能是一个很好的起点。那么在选择分类器之前我应该考虑哪些数据属性?
无免费午餐定理表明没有先验的分类器优于任何其他分类器,分类器的选择取决于特定数据集的性质。我不会选择分类器,而是会评估几种方法。
这些类只是轻度不平衡,所以我怀疑这不应该是决定使用哪个分类器的关键因素。
一个更重要的问题是您是否想要一个简单的离散分类,或者您是否想要估计类别成员的概率,例如因为您有未知或可变的错误分类成本,或相对类别频率,或者它是否有益有一个“拒绝”选项。在这种情况下,SVM 不是一个好的选择,因为它是为离散分类而设计的,与其对输出进行后处理以获得概率,不如使用一种旨在提供概率输出的方法,例如作为核逻辑回归。
为了下文的特殊性,我将假设这里的 ANN 是指前馈多层神经网络/感知器,如 Bishop 1996 中所讨论的。而 SVM 是来自 Hastie 和 Tibshirani 的普通版本。
@Dikran Marsupial 关于域结构的观点很重要。事实上,您可能想阅读DM关于 SVM 的其他答案。如果您希望应用损失函数或以其他方式对您的分类确定性水平以及实际分类采取行动,那么具有后验分类的可能性很重要。如果不是:好吧,不是。
此外,我可以看到另外四种选择方式。
损失函数
区分两者的一种方法是确定您更喜欢谁的损失函数。经典地,人工神经网络具有平滑的损失函数,例如多类分类的交叉熵。SVM 往往有某种“铰链损失”:从 0 到某个点然后增加。其中之一可能更适合您的问题。
数据大小
另一个考虑因素是数据大小和存储。您提到了您的类别余额,但没有提到数据的总大小。根据定义,SVM 仅保留并使用“支持向量”,即锚定分离超平面的观察子集。这可以构成一个小的最终分类器。此外,传统的 ANN 训练可能很慢 - 函数空间与您的 ANN 用其有限数量的隐藏节点近似的隐式高斯过程一样平滑......
多个班级
如果您有多类别数据,SVM 有多种方法可以从单独的两个类别 SVM 模型中构建必要的多类别分类器。正如@fabee 指出的那样,至少有三种方法可用,它们可能不会给出相同的答案。他的参考资料看起来很有用。在您的 ANN 所属的普通平滑统计分类模型领域中,这些选项更加清晰。
可解释性
如果您关心辨别不同协变量的重要性,那么 ANN 会为您提供超参数来执行此操作,尽管更传统的方法在这方面可能同样有效或更直接,例如线性回归模型的 Lasso(L1 正则化)。如果预测成功是您唯一的目标,那么这方面当然是无关紧要的。
这个问题不能笼统地回答。它甚至取决于您使用的多类分类策略(即一对一、一对一、...)。就个人而言,我会使用 SVM 并选择适合我的问题和计算资源的多类策略。一篇不错的论文如何做到这一点是:
将多类减少为二进制:边距分类器的统一方法 Erin L Allwein、Robert E Schapire、Yoram Singer 在机器学习研究杂志 (2001)
如果您希望数据集的每个类都同样重要,您可以使用快速而肮脏的 hack 克隆较小类中的数据点,直到每个类具有相同数量的数据点,或者您可以使用允许您设置不同的 SVM 实现每个类的惩罚常数 C。