为什么 svm 在相同数据上不如决策树好?

机器算法验证 机器学习 分类 支持向量机 scikit-学习
2022-03-07 21:47:19

我是机器学习的新手,并尝试使用 scikit-learn(sklearn) 来处理分类问题。DecisionTreeSVM可以针对这个问题训练分类器。

我使用sklearn.ensemble.RandomForestClassifierandsklearn.svm.SVC来拟合相同的训练数据(大约 500,000 个条目,每个条目有 50 个特征)。RandomForestClassifier在大约一分钟就出来了一个分类器。SVC使用超过 24 小时并且仍然保持运行。

为什么SVC的执行效率如此低下?SVC的数据集是否太大SVC不适合此类问题吗

4个回答

决策树和随机森林实际上是非常好的分类器。虽然 SVM(支持向量机)被认为更复杂,但实际上并不意味着它们会表现得更好。

Rich Caruana的论文“监督学习算法的实证比较”比较了 10 种不同的二元分类器、SVM、神经网络、KNN、逻辑回归、朴素贝叶斯、随机森林、决策树、袋装决策树、增强决策树和自举决策在 11 个不同数据集上创建树,并比较了 8 个不同性能指标的结果。

他们发现 Boosted 决策树首先出现,然后是随机森林,然后是 Bagged 决策树,然后是 SVM

结果还取决于您实际分类的类别数量。

可能性包括使用不合适的内核(例如非线性问题的线性内核),内核选择不当和正则化超参数。良好的模型选择(内核和超参数调整的选择是从 SVM 获得良好性能的关键,只有在正确使用时才能预期它们会产生良好的结果)。

支持向量机通常确实需要很长时间来训练,尤其是当内核的选择,尤其是正则化参数意味着几乎所有数据最终都成为支持向量时(支持向量机的稀疏性是一个方便的副产品,仅此而已)。

最后,没有免费的午餐定理说,任何分类器系统都没有先验优势,因此特定任务的最佳分类器本身就是任务相关的。然而,对于 SVM,有更令人信服的理论表明,对于许多问题,它可能是比许多其他方法更好的选择。

“问题是否是线性的” 在二元分类问题中,如果数据集可以被超平面分开,那么它就是线性问题。

如果数据集不是线性可分的,那么当您尝试使用线性分类器来找到这样一个根本不存在的超平面时,该算法可能似乎永远运行。

一个建议:您可以对一小部分数据进行采样,并尝试这些算法以查看它是否适用于小型数据集。然后增加数据集以检查这些问题何时发生。

这是因为他们的决策边界的性质。SVM 的决策边界(有或无内核)始终是线性的(在内核空间中与否),而决策树的决策边界是分段线性的(非线性)。