RBF SVM 用例(与逻辑回归和随机森林相比)
我将尝试结合已发表的证据、个人经验和推测来回答这个问题。
A) 公布的证据。
我知道的唯一有助于回答这个问题的论文是Delgado 等人 2014 - 我们需要数百个分类器来解决现实世界的分类问题吗?- JMLR在来自 UCI 的 121 个数据集上运行数百种不同的算法和实现。他们发现,虽然 RBF SVM 不是“最好”的算法(如果我没记错的话,它是随机森林),但它是前 3 (或前 5)的算法之一。
如果您认为他们选择的数据集是现实世界问题的“好样本”,那么 SVM 绝对是一种应该尝试解决新问题的算法,但应该首先尝试随机森林!
推广该结果的局限性在于,数据集几乎都是又高又瘦(n>>p),不是很稀疏——我推测这对 RF 来说应该是一个更大的问题,而且不是很大(n 和 p)。
最后,仍然根据已发表的证据,我推荐两个比较随机森林不同实现的站点:
B) 个人经历。
我相信 Delgado 等论文对机器学习社区都非常重要,所以我尝试在一些不同的条件下复制他们的结果。我在 100 多个二进制数据集(来自 Delgado 的数据集)上运行了大约 15 种不同的算法。我也认为我在选择超参数时比他们更小心。
我的结果是 SVM 是“最佳算法”(平均排名 4.9)。我的看法是 SVM 通过了 RF,因为原始数据集包含许多多类问题——我将在推测部分讨论——应该是 SVM 的问题。
编辑(6 月/16 日):
但 RF 的速度要快得多,它是第二好的算法(平均排名 5.6),其次是 gbm(5.8)、nnets(7.2)等等)。在这些问题中我没有尝试标准逻辑回归,但我尝试了一个弹性网络(L1 和 L2 正则化 LR)但它表现不佳(平均排名 8.3)~
我还没有完成分析结果或撰写论文,所以我什至无法指出包含结果的技术报告。希望在几周后,我可以重新编辑此答案并指向包含结果的技术报告。
该论文可在http://arxiv.org/abs/1606.00930获得。经过全面分析,RF 和 SVM 在预期错误率方面几乎相等,而 SVM最快(令我惊讶!!)。我不再那么强调推荐 RF(基于速度)。
所以我个人的经验是,尽管 SVM 可能会为您提供一些额外的准确性,但使用 RF 几乎总是更好的选择。
同样对于较大的问题,可能无法使用批量 SVM 求解器(我从未使用过在线 SVM 求解器,例如LASVM或其他)。
最后,我只在一种情况下使用了逻辑回归。我正在对图像分类问题进行一些“密集”的特征工程(例如 - 组合或不组合图像的两个不同描述,以及描述的维度)。我使用逻辑回归在众多备选方案中进行选择(因为 LR 中没有超参数搜索)。一旦我们确定了最佳特征(根据 LR),我们使用 RF(选择最佳超参数)来获得最终分类器。
C) 投机
我从来没有认真研究过多类问题,但我的感觉是 SVM 在它们上并不是那么好。问题不在于一对一或一对多解决方案之间的问题,而是我所知道的所有实现将对所有(OVO 或 OVA)分类器使用相同的超参数。为 SVM 选择正确的超参数非常昂贵,以至于我所知道的现成实现都不会搜索每个分类器。我推测这是 SVM 的问题(但不是 RF 的问题!!)。
再说一次,对于多类问题,我会直接去 RF。
我没有足够的权限来写评论,所以我只会在这里提供我的输入/观察作为答案。
根据我的经验,当二元类平衡时,支持向量分类器 (SVC) 往往与其他方法相当或优于其他方法。对于不平衡的类,SVC 往往表现不佳。
我不经常处理多类问题,但我也看到了使用 SVC 处理多类问题的一些好的结果。
我注意到的另一件事是维度诅咒似乎对 SVC 的影响不如其他建模技术。换句话说,随着我在模型中添加更多术语,与训练集相比,其他技术在测试(或保持)集上的表现开始不佳。但当我使用 SVC 时就没有那么多了。由于这个原因,如果模型简约不是您的优先事项,那么 SVC 可能是更好的选择,因为您可以输入很多术语,而不会像其他方法那样过度拟合。
我对 SVC 的一个问题是它没有隐含地提供一个度量(如预测概率)来对观察结果进行排序。您可以使用 Platt Scaling(在 Python 中的 sklearn.svm 包中实现),但我看到了一些不一致的地方。(如果有人感兴趣,我可以分享细节。)
不确定这是否真的回答了你的问题,但这些是我的观察。希望有帮助。
RF 和 (RBF) SVM 背后有不同的理论,但假设您有足够的数据,它们的性能相似。他们都可以学习复杂的函数并很好地处理嘈杂和无信息的变量和异常值。
如果你想为 kaggle 之类的东西获得最佳结果,那么无论如何你都会集成多个模型,包括 RF 和 SVM。
在非 kaggle 设置中,您可能会考虑实现模型、将其投入生产、进行预测、解释、向经理解释等有多难。
如果您有少量数据或者您正在处理一个维度过程,那么 SVM(线性或高度正则化的 RBF)绝对是首选。有几个原因,一个是最好寻找最大边距超平面,而不是对你的特征进行一系列最佳分割,而且通常不需要复杂的边界,因为在高维空间中会有一些超平面无论如何都可以分离数据。另一个问题是 RF 更难调整(需要调整的参数更多),因此您需要更多数据。
另一个人认为,交叉验证对于 SVM,尤其是 LOOCV,可以非常便宜和快速。由于只有少数样本是支持向量(并非总是如此),因此您不必在每次折叠时都重新训练分类器,但前提是现在测试集中的数据以前是支持向量。这也可以使在线学习更容易。
此外,存储支持向量可能比存储完整树更便宜。
制作概率模型通常比分类器更好。所以,先做模型,再做决定。在这种情况下,逻辑回归将是首选。而且你仍然可以使用内核和正则化来让它表现得像你想要的那样。此外,您不会使用 RF 来回答以下问题:校正年龄、生活方式、性别和教育,饮酒会增加心脏病发作的几率吗?
我发现一些额外的资源很有趣: https : //www.quora.com/What-are-the-advantages-of-different-classification-algorithms http://videolectures.net/solomon_caruana_wslmw/