Scikit-learn 支持向量机算法库总结与简单实践

本文总结了scikit-learn中的SVM分类库,包括SVC、LinearSVC和它们的主要参数。介绍了LinearSVC的常用参数如C、loss、penalty和dual,以及SVC的核函数、C、gamma和degree等。强调了SVM对数据标准化的需求,以及在大型数据集上使用线性核的优势。并提供了超参数调优的实践建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        前两篇我们简单的探讨了SVM的原理,趁热我们来进行一些简单实践操作。磨刀不误砍柴工,先来认识下scikit-learn中集成的SVM算法库。scikit-learn中SVM的算法库分为两类,一类是分类的算法库,包括SVC, NuSVC,和LinearSVC 3个类。另一类是回归算法库,包括SVR, NuSVR,和LinearSVR 3个类。本篇我们先探讨下SVM分类算法库的使用。

1)scikit-learn SVM分类库概述
        SVM分类算法库,包括SVC, NuSVC,和LinearSVC 3个类。SVC是基于libsvm实现,支持各种核函数,训练时间复杂度为 O ( m 2 × n ) − O ( m 3 × n ) O(m^2\times n)-O(m^3\times n) O(m2×n)O(m3×n),当样本量特别大时训练比较费时间;LinearSVC是基于liblinear实现,支持损失函数和正则的选择,只能处理线性可分问题,训练时间复杂度为 O ( m × n ) O(m\times n) O(m×n),训练速度比SVC要快很多,特别在样本量特别大的时候;NuSVC和SVC非常相似,只是NuSVC可以通过超参数Nu控制支持向量的百分比,使用的场景非常少,我们就不做讨论了。

2)LinearSVC常用参数
        LinearSVC类官方API:class sklearn.svm.LinearSVC(penalty=’l2’, loss=’squared_hinge’, dual=True, tol=0.0001, C=1.0, multi_class=’ovr’, fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0, random_state=None, max_iter=1000)[source]。下面介绍LinearSVC中我们经常会调整的一些参数:

  • C,惩罚系数,默认为1
            该参数就是我们在第一篇SVM中讲到的软间隔分类,用来权衡目标函数和松弛因子的超参数 λ \lambda λ。C值越大,支持向量的间隔越小,对错误的样本容忍度越小,泛化能力越小,因此当模型出现过拟合时,可以适当的降低C值。C值一般使用交叉验证方式进行选择。

  • loss,损失函数参数,默认为‘squared_hinge’
            LinearSVC独有,可以选择‘squared_hinge’或者 ‘hinge’。‘hinge’损失,即为第一篇SVM中讲到的hinge损失,‘squared_hinge’为hinge损失的平方。通常我们会使用‘hinge’。

  • penalty,正则参数,默认 l 2 l2 l2正则
            LinearSVC独有,可以选择 ‘ l 1 ’ ‘l1’ l1或者 ‘ l 2 ’ ‘l2’ l2。如果我们需要产生稀疏化的系数,可以选 L 1 L1 L1正则化。通常,保持默认设置。

  • dual,是否对偶优化参数,默认为True
            LinearSVC独有,优化目标函数是以原始形式还是采用拉格朗日对偶形式。当样本量比特征数多,此时采用对偶形式计算量较大,推荐dual设置为False。通常,将dual设置成False。

  • class_weight, 样本权重参数,默认为None
            当样本存在不平衡的情况下,需要设置该参数。 这里可以自己指定各个样本的权重,或者用‘balanced’,如果使用‘balanced’ ,则算法会自己计算权重,样本量少的类别所对应的样本权重会高。

  • multi_class,多分类决策参数,默认’ovr’
            LinearSVC独有,可以选择 ‘ovr’ 或者 ‘crammer_singer’ 。'ovr’的分类原则是将待分类中的某一类当作正类,其他全部归为负类,分别求得到每个类别作为正类时的概率,取概率最高的那个类别为最后的分类结果;‘crammer_singer’ 是优化所有类别的联合目标,准确性提升不明显,但计算量提升较高。通常,保持默认设置。

3)SVC常用参数
        SVC类官方API:class sklearn.svm.SVC(C=1.0, kernel=’rbf’, degree=3, gamma=’auto_deprecated’, coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=’ovr’, random_state=None)[source]

  • kernel,核函数参数,默认值为‘rbf’
    该参数是为算法指定核函数的类型,SVC独有参数。可选的核函数有:
                   linear核函数 K ( x i , x j ) = x i ⋅ x j ′ K(x_i,x_j)=x_i\cdot x_j' K(xi,xj)=xi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值