【问题标题】:What is the difference between SVC and SVM in scikit-learn?scikit-learn 中的 SVC 和 SVM 有什么区别?
【发布时间】:2025-12-10 17:20:02
【问题描述】:

来自documentation scikit-learn 实现了 SVC、NuSVC 和 LinearSVC,它们是能够对数据集执行多类分类的类。另一方面,我也读到了 scikit learn 也使用 libsvm 来支持向量机算法。我对 SVC 和 libsvm 版本之间的区别有点困惑,现在我想区别在于 SVC 是针对多类问题的支持向量机算法,而 libsvm 是针对二进制类问题的。谁能帮我理解这之间的区别?

【问题讨论】:

标签: machine-learning scikit-learn libsvm


【解决方案1】:

这是本书的快照 - 动手机器学习

希望对你有用。

【讨论】:

    【解决方案2】:

    它们只是同一算法的不同实现。 SVM 模块(SVC、NuSVC 等)是libsvm 库的包装器,支持不同的内核,而LinearSVC 基于liblinear,仅支持线性内核。所以:

    SVC(kernel = 'linear')
    

    理论上“等价于”:

    LinearSVC()
    

    因为在实践中实现不同,你会得到不同的结果,最重要的是 LinearSVC 只支持线性内核,速度更快并且可以更好地扩展。

    【讨论】:

    • 它们实际上并不等效,因为 SVC 使用一对一策略,而 LinearSVC 使用一对一策略进行多类。此外,LinearSVC 默认为 L2 损失,即平方铰链损失。
    • 安德烈亚斯是正确地指出他们不一样。当我说“等效”时,我的意思是“相似”或“对应”,对不起我的英语不好。不同的实现意味着不同的默认值和许多其他细节。
    • 对于多类分类,你们推荐我什么方法(一对一或一对一),你认为我可以用 SVC 很好地解决这个问题吗?
    • 其实LinearSVC根本不是SVM,见*.com/questions/33843981/…