返回介绍

数学基础

统计学习

深度学习

工具

Scala

二、支持向量机

发布于 2023-07-17 23:38:23 字数 12852 浏览 0 评论 0 收藏 0

  1. SVM 的通用参数:

    • tol:浮点数,指定终止迭代的阈值。

    • fit_intercept:一个布尔值,指定是否需要计算截距项。如果为False,那么不会计算截距项。

      当 $ MathJax-Element-47 $ , $ MathJax-Element-48 $ 时, 可以设置 fit_intercept=False

    • intercept_scaling:一个浮点数,用于缩放截距项的正则化项的影响。

      当采用fit_intercept 时,相当于人造一个特征出来,该特征恒为 1 ,其权重为 $ MathJax-Element-49 $ 。

      在计算正则化项的时候,该人造特征也被考虑了。为了降低这个人造特征的影响,需要提供intercept_scaling

    • class_weight:一个字典或者字符串'balanced' ,指定每个类别的权重。

      • 如果为字典:则字典给出了每个分类的权重。如{class_label: weight}
      • 如果为字符串'balanced':则每个分类的权重与该分类在样本集中出现的频率成反比。
      • 如果未指定,则每个分类的权重都为 1

2.1 LinearSVC

  1. LinearSVC是根据liblinear实现的,它可以用于二类分类,也可以用于多类分类问题(此时是根据one-vs-rest原则来分类)。

  2. 线性支持向量机 LinearSVC

    
    
    xxxxxxxxxx
    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)
    • penalty:字符串,指定 'l1'或者'l2',罚项的范数。默认为 'l2'(它是标准SVC采用的)。

    • loss:一个字符串,表示损失函数。可以为:

      • 'hinge':此时为合页损失函数(它是标准 SVM 的损失函数)。
      • 'squared_hinge':合页损失函数的平方。
    • dual:一个布尔值。如果为True,则解决对偶问题;如果是False,则解决原始问题。当n_samples > n_features时,倾向于采用False

    • tol :一个浮点数,指定终止迭代的阈值。

    • C:一个浮点数,罚项系数。

    • multi_class :一个字符串,指定多类分类问题的策略。

      • 'ovr':采用one-vs-rest分类策略。
      • 'crammer_singer':多类联合分类,很少用。因为它计算量大,而且精度不会更佳。此时忽略loss,penalty,dual项。
    • fit_intercept :一个布尔值,指定是否需要计算截距项。

    • intercept_scaling:一个浮点数,用于缩放截距项的正则化项的影响。

    • class_weight: 一个字典或者字符串'balanced' ,指定每个类别的权重。

    • verbose:一个正数。用于开启/关闭迭代中间输出日志功能。

    • random_state: 指定随机数种子。

    • max_iter: 一个整数,指定最大迭代次数。

  3. 模型属性:

    • coef_:权重向量。
    • intercept_:截距值。
  4. 模型方法:

    • fit(X, y):训练模型。
    • predict(X):用模型进行预测,返回预测值。
    • score(X,y[,sample_weight]):返回模型的预测性能得分。
  5. 下面的示例给出了不同的 C 值对模型预测能力的影响。

    C衡量了误分类点的重要性,C越大则误分类点越重要。

    为了便于观察将x轴以对数表示。可以看到当C较小时,误分类点重要性较低,此时误分类点较多,分类器性能较差。

LinearSVC_C

2.2 SVC

  1. SVC是根据libsvm实现的,其训练的时间复杂度是采样点数量的平方。

    它可以用于二类分类,也可以用于多类分类问题(此时默认是根据one-vs-rest原则来分类)。

  2. 支持向量机 SVC

    
    
    xxxxxxxxxx
    sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=None, random_state=None)
    • C:一个浮点数,罚项系数。

    • kernel:一个字符串,指定核函数。

      • 'linear':线性核: $ MathJax-Element-50 $ 。

      • 'poly':多项式核: $ MathJax-Element-51 $ 。其中:

        • $ MathJax-Element-52 $ 由 degree参数决定。
        • $ MathJax-Element-58 $ 由 gamma参数决定。
        • $ MathJax-Element-54 $ 由 coef0参数决定。
      • 'rbf'(默认值):高斯核函数: $ MathJax-Element-55 $ 。

        其中 $ MathJax-Element-58 $ 由 gamma参数决定。

      • 'sigmoid': $ MathJax-Element-57 $ 。其中:

        • $ MathJax-Element-58 $ 由 gamma参数决定。
        • rcoef0参数指定。
      • 'precomputed':表示提供了kernel matrix

      • 或者提供一个可调用对象,该对象用于计算kernel matrix

    • degree:一个整数。指定当核函数是多项式核函数时,多项式的系数。对于其他核函数,该参数无效。

    • gamma:一个浮点数。当核函数是'rbf''poly''sigmoid'时,核函数的系数。如果'auto',则表示系数为1/n_features

    • coef0:浮点数,用于指定核函数中的自由项。只有当核函数是'poly''sigmoid'是有效。

    • probability:布尔值。如果为True则会进行概率估计。它必须在训练之前设置好,且概率估计会拖慢训练速度。

    • shrinking:布尔值。如果为True,则使用启发式(shrinking heuristic) 。

    • tol:浮点数,指定终止迭代的阈值。

    • cache_size:浮点值,指定了kernel cache的大小,单位为 MB 。

    • class_weight:指定各类别的权重。

    • decision_function_shape:为字符串或者None,指定决策函数的形状。

      • 'ovr':则使用one-vs-rest准则。那么决策函数形状是(n_samples,n_classes)

        此时对每个分类定义了一个二类SVM,一共 n_classes个二类 SVM

      • 'ovo':则使用one-vs-one准测。那么决策函数形状是(n_samples, n_classes * (n_classes - 1) / 2)

        此时对每一对分类直接定义了一个二类SVM,一共 n_classes * (n_classes - 1) / 2)个二类SVM

      • None:默认值。采用该值时,目前会使用'ovo',但是在 scikit v0.18之后切换成'ovr'

    • 其它参数参考LinearSVC

  3. 模型属性:

    • support_ :一个数组, 形状为 [n_SV],给出了支持向量的下标。

    • support_vectors_ : 一个数组, 形状为 [n_SV, n_features],给出了支持向量。

    • n_support_ : 一个数组, 形状为 [n_class],给出了每一个分类的支持向量的个数。

    • dual_coef_ : 一个数组,形状为[n_class-1, n_SV]。给出了对偶问题中,每个支持向量的系数。

    • coef_ : 一个数组,形状为[n_class-1, n_features]。给出了原始问题中,每个特征的系数。

      • 它只有在linear kernel中有效。
      • 它是个只读的属性。它是从dual_coef_support_vectors_计算而来。
    • intercept_ : 一个数组,形状为[n_class * (n_class-1) / 2],给出了决策函数中的常数项。

  4. 模型方法:

    • fit(X, y[, sample_weight]):训练模型。
    • predict(X):用模型进行预测,返回预测值。
    • score(X,y[,sample_weight]):返回模型的预测性能得分。
    • predict_log_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率的对数值。
    • predict_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率值 。

2.3 NuSVC

  1. NuSVC: Nu-Support Vector ClassificatioSVC相似,但是用一个参数来控制了支持向量的个数。它是基于libsvm来实现的。

  2. NuSVC 支持向量机:

    
    
    xxxxxxxxxx
    sklearn.svm.NuSVC(nu=0.5, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True,probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False,max_iter=-1, decision_function_shape=None, random_state=None)
    • nu : 一个浮点数,取值范围为 (0,1], 默认为0.5。它控制训练误差与支持向量的比值,间接控制了支持向量的个数。
    • 其它参数参考SVC
  3. 模型属性:参考SVC

  4. 模型方法:参考SVC

2.4 LinearSVR

  1. LinearSVR是根据liblinear实现的。

  2. 线性支持向量回归 LinearSVR

    
    
    xxxxxxxxxx
    class sklearn.svm.LinearSVR(epsilon=0.0, tol=0.0001, C=1.0, loss='epsilon_insensitive', fit_intercept=True, intercept_scaling=1.0, dual=True, verbose=0, random_state=None, max_iter=1000)
    • epsilon:一个浮点数,表示 $ MathJax-Element-63 $ 值。

    • loss:字符串。表示损失函数。可以为:

      • 'epsilon_insensitive':此时损失函数为 $ MathJax-Element-60 $ (标准的SVR
      • 'squared_epsilon_insensitive':此时损失函数为 $ MathJax-Element-61 $
    • 其它参数参考LinearSVC

  3. 模型属性:参考LinearSVC

  4. 模型方法:参考LinearSVC

  5. 下面的示例给出了不同的 $ MathJax-Element-63 $ 值对模型预测能力的影响。

    为了方便观看将x轴转换成对数坐标。可以看到预测准确率随着 $ MathJax-Element-63 $ 下降。

    LinearSVR_epsilon

  6. 下面的示例给出了不同的 C 值对模型预测能力的影响。

    为了方便观看将x轴转换成对数坐标。可以看到预测准确率随着 $ MathJax-Element-64 $ 增大而上升。说明越看重误分类点,则预测的越准确。

    LinearSVR_C

2.5 SVR

  1. SVR是根据libsvm实现的。

  2. 支持向量回归 SVR

    
    
    xxxxxxxxxx
    class sklearn.svm.SVR(kernel='rbf', degree=3, gamma='auto', coef0=0.0, tol=0.001, C=1.0, epsilon=0.1, shrinking=True, cache_size=200, verbose=False, max_iter=-1)

    参数:参考SVC

  3. 模型属性:参考SVC

  4. 模型方法:参考SVC

2.6 NuSVR

  1. NuSVR是根据libsvm实现的。

  2. 支持向量回归 NuSVR

    
    
    xxxxxxxxxx
    class sklearn.svm.NuSVR(nu=0.5, C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, tol=0.001, cache_size=200, verbose=False, max_iter=-1)
    • C:一个浮点数,罚项系数。
    • 其它参数参考NuSVC
  3. 模型属性:参考NuSVC

  4. 模型方法:参考NuSVC

2.7 OneClassSVM

  1. OneClassSVM是根据libsvm实现的。

  2. 支持向量描述 OneClassSVM

    
    
    xxxxxxxxxx
    class sklearn.svm.OneClassSVM(kernel='rbf', degree=3, gamma='auto', coef0=0.0, tol=0.001, nu=0.5, shrinking=True, cache_size=200, verbose=False, max_iter=-1, random_state=None)

    参数:参考NuSVC

  3. 模型属性:参考NuSVC

  4. 模型方法:

    • fit(X[, y, sample_weight]):训练模型。
    • predict(X):用模型进行预测,返回预测值。每个预测值要么是 +1 要么是 -1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文