比较特定应用的多类分类算法

机器算法验证 分类 matlab 参考 方法比较 监督学习
2022-04-07 08:01:42

我正在为具有多个类的特定应用程序评估一堆分类算法。我正在考虑的分类算法是:

  1. 多项逻辑回归(Matlab 的“mnrfit”)
  2. 多类 SVM(K. Crammer 和 Y. Singer。关于多类 SVM 的算法实现,JMLR,2001)。我将使用作者提供的代码,因为 Matlab 的“svmtrain”只进行二进制分类。
  3. 神经网络(Matlab 的“nprtool”)
  4. 决策树(来自 Matlab 的“classregtree”的 C4.5 和 CART)
  5. k-最近邻(Matlab's 'ClassificationKNN')
  6. 朴素贝叶斯分类器(Matlab 的“naiveBayes”)
  7. 判别分析(Matlab 的“ClassificationDiscriminant”)
  8. 随机森林(Matlab 的“TreeBagger”)

我有以下问题:

  1. 我是否遗漏了任何必须尝试的“明显”多类分类算法?或者,是否有任何二进制分类器可以很容易地用于具有一对多方法的多类。
  2. 其中哪些是线性分类器,哪些是非线性分类器?我知道 3、4 和 5 本质上是非线性的,而 2 在内核技巧中可能是非线性的。
  3. 其中哪些是离散分类器,哪些是概率分类器?例如,逻辑回归给出每个类的概率,而决策树只给出一个类。在相关说明中,如果我想使用 ROC 曲线进行比较,我如何将离散分类器与概率分类器进行比较,因为前者只在 ROC 图上给出一个点?
  4. 其中哪些是确定性分类器,哪些是随机分类器?换句话说,哪些分类器会在多次运行中产生完全相同的结果?这对我来说很重要:例如,在逻辑回归中,我只需运行一次即可完成,而对于神经网络,我将不得不多次训练网络以避免有偏差的结果。

最后,是否有任何好的论文展示了如何比较各种分类算法。我发现这个非常好。

1个回答

我只是Metaoptimize上复制粘贴从Alexandre Passos获得的答案。如果这里有人可以添加更多内容,那将真的很有帮助。

  1. 任何二元分类器都可用于具有 1-vs-all 归约或 all-vs-all 归约的多类。这个列表似乎涵盖了大多数常见的多类算法。
  2. 逻辑回归和 SVM 是线性的(尽管 SVM 在内核空间中是线性的)。神经网络、决策树和 knn 不是线性的。朴素贝叶斯和判别分析是线性的。随机森林不是线性的。
  3. 逻辑回归可以为您提供校准的概率。许多 SVM 实现也可以(尽管它需要稍微不同的训练)。如果使用正确的损失(softmax),神经网络也可以做到这一点。决策树和 KNN 可以是概率性的,尽管没有特别好校准。朴素贝叶斯不会产生经过良好校准的概率,判别分析也不会。我不确定随机森林,取决于我认为的实现。
  4. 除了神经网络和随机森林之外,所有这些都是确定性的。

为什么要比较不同的分类算法?您是想决定哪一个是最好的,还是只适用于一个应用程序?

如果是前者,则不值得这样做,因为大多数说法都比较粗略,没有任何方法可以得出这种结论。如果是后者,那么交叉验证或在固定测试集​​上比较性能可以为您提供无偏见的结果,这是公认的。对于多类分类,使用哪个指标并不总是很明显,但诸如准确性之类的东西;per-classprecision/recall/f1、per-class AUC 和混淆矩阵是常用的。