scikit-learn:SVC 和 SGD 有什么区别?

2024-04-30

SVM: http://scikit-learn.org/stable/modules/svm.html#classification http://scikit-learn.org/stable/modules/svm.html#classification

SGD: http://scikit-learn.org/stable/modules/sgd.html#classification http://scikit-learn.org/stable/modules/sgd.html#classification

在我看来,他们写的“SGD 实现了线性模型”几乎是一样的。有人可以解释它们之间的区别吗?


SVM is a 支持向量机 https://en.wikipedia.org/wiki/Support_vector_machine which 是一个特殊的线性模型。从理论上来说这是一个凸优化问题我们可以在多项式时间内得到全局最优值。有许多不同的优化方法.

过去人们常用二次规划 https://en.wikipedia.org/wiki/Quadratic_programming求解器。如今专门的方法如SMO https://en.wikipedia.org/wiki/Sequential_minimal_optimization和其他被使用。

sklearn 的专门 SVM 优化器基于线性库 https://www.csie.ntu.edu.tw/~cjlin/liblinear/ and libsvm https://www.csie.ntu.edu.tw/~cjlin/libsvm/。如果您对算法感兴趣,有很多文档和研究论文。

请记住,SVC (libsvm) 和 LinearSVC (lib Linear) 对优化问题做出不同的假设,这会导致同一任务上的不同性能(线性内核:LinearSVC 通常比 SVC 高效得多;但有些LinearSVC 无法处理的任务)。

新元是一个随机梯度下降 https://en.wikipedia.org/wiki/Stochastic_gradient_descent基于(这是通用优化方法!)的优化器,可以优化许多不同的凸优化问题(实际上:这或多或少与所有深度学习方法中使用的方法相同;所以人们也在非凸设置中使用它;抛弃理论保证).

sklearn 说:随机梯度下降(SGD)是一种简单但非常有效的凸损失函数下线性分类器判别学习方法。现在它实际上更加通用,但在这里只要注意到它包含(一些)SVM、逻辑回归等就足够了。

现在基于 SGD 的优化与 QP 和其他优化有很大不同。如果以 QP 为例,没有需要调整的超参数。这有点简化,因为可以进行调整,但不需要保证收敛和性能! (QP 求解器的理论,例如内点法 https://en.wikipedia.org/wiki/Interior_point_method更加稳健)

基于 SGD 的优化器(或通用优化器)一阶方法)非常非常难以调整!他们需要调整!一般来说,学习率或学习计划是需要考虑的参数,因为收敛取决于这些(理论和实践)!

这是一个非常复杂的话题,但有些简化规则:

  • 专门的 SVM 方法

    • 随着样本数量的增加,规模变得更糟
    • 不需要超参数调整
  • 基于 SGD 的方法

    • 一般来说,海量数据可以更好地扩展
    • 需要超参数调整
    • 仅解决上述任务的一部分(无内核方法!)

我的观点:只要你的时间预算允许,就使用(更容易使用的)LinearSVC!

只是为了说清楚:我强烈建议获取一些数据集(例如来自 sklearn 内部)并在这些候选数据之间进行一些比较。参数调整的需要不是一个理论问题!您将看到非最佳(目标/损失) 很容易得出 SGD 情况!

并永远记住:随机梯度下降对特征缩放敏感 docs http://scikit-learn.org/stable/modules/sgd.html#tips-on-practical-use。这或多或少是一阶方法的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scikit-learn:SVC 和 SGD 有什么区别? 的相关文章

  • 2d 图像点和 3d 网格之间的交点

    Given 网格 源相机 我有内在和外在参数 图像坐标 2d Output 3D 点 是从相机中心发出的光线穿过图像平面上的 2d 点与网格的交点 我试图找到网格上的 3d 点 This is the process From Multip
  • Tkinter 菜单删除项

    如何删除任何菜单项 例如我想删除 播放 self menubar Menu self root self root config menu self menubar self filemenu2 Menu self menubar self
  • 从字典的元素创建 Pandas 数据框

    我正在尝试从字典创建一个 pandas 数据框 字典设置为 nvalues y1 1 2 3 4 y2 5 6 7 8 y3 a b c d 我希望数据框仅包含 y1 and y2 到目前为止我可以使用 df pd DataFrame fr
  • 定义Python源代码编码的正确方法

    PEP 263 http www python org dev peps pep 0263 定义如何声明Python源代码编码 通常 Python 文件的前两行应以以下内容开头 usr bin python coding
  • 如何在python中附加两个字节?

    说你有b x04 and b x00 你如何将它们组合起来b x0400 使用Python 3 gt gt gt a b x04 gt gt gt b b x00 gt gt gt a b b x04 x00
  • 如何调整 matplotlib 单选按钮的大小和纵横比?

    我已经尝试了几个小时来使简单的单选按钮列表的大小和纵横比正确 但没有成功 首先 导入模块 import matplotlib pyplot as plt from matplotlib widgets import RadioButtons
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • 在 Mac OSX 上从 Python 3.6 运行 wine 命令

    我正在尝试用 Python 编写一个打开的脚本wine然后发送代码到wine终端打开一个 exe程序 这 exe程序也是命令驱动的 我可以打开wine 但我无法进一步 import shlex subprocess line usr bin
  • 更改QLineEdit的ClearButton图标

    我想在Windows 10 1909 64位 上的Python 3 8和PyQt5 5 15 0 上更改我的QLineEdit的ClearButton图标 稍后我想在Linux上运行代码 我尝试应用此处找到的代码 如何在 QLineEdit
  • 如何在 Django Rest 框架中编写“删除”操作的测试

    我正在为 Django Rest Framework API 编写测试 我一直在测试 删除 我对 创建 的测试工作正常 这是我的测试代码 import json from django urls import reverse from re
  • 时间序列数据预处理 - numpy strides 技巧以节省内存

    我正在预处理一个时间序列数据集 将其形状从二维 数据点 特征 更改为三维 数据点 时间窗口 特征 在这样的视角中 时间窗口 有时也称为回顾 指示作为输入变量来预测下一个时间段的先前时间步长 数据点的数量 换句话说 时间窗口是机器学习算法在对
  • Flask 应用程序路由中的多个参数

    烧瓶怎么写app route如果我在 URL 调用中有多个参数 这是我从 AJax 调用的 URL http 0 0 0 0 8888 createcm summary VVV change Feauure 我试图写我的烧瓶app rout
  • 检索 geodjango 多边形对象的边界框

    如何在 geodjango 中获取 MultiPolygon 对象的边界框 在 API 中找不到任何内容http geodjango org docs geos html http geodjango org docs geos html
  • 如何从列表类别中对 pandas 数据框进行排序?

    所以我在下面有这个数据集 我想根据我的列表从 名称 列进行排序 以及按 A 升序和按 B 降序排序 import pandas as pd import numpy as np df1 pd DataFrame from items A 1
  • 基于值而不是类型的单次调度

    我在 Django 上构建 SPA 并且有一个庞大的功能 其中包含许多功能if用于检查我的对象字段的状态名称的语句 像这样 if self state new do some logic if self state archive do s
  • 在 numpy 中连接维度

    我有x 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 2 3 I want 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 6 也就是说 我想连接中间维度的所有项目 在这种特殊情况下我可以得到这
  • django jet 中的自定义徽标

    我目前正在尝试对 django 管理面板的皮肤进行一些定制 以使其更符合我们的品牌 目前我们使用 django jet 来美化管理面板 django jet 可以自定义 css html 吗 所有评论都说我应该更改一些 html 文件 但我
  • Jupyter Notebook:带有小部件的交互式绘图

    我正在尝试生成一个依赖于小部件的交互式绘图 我遇到的问题是 当我使用滑块更改参数时 会在前一个绘图之后完成一个新绘图 而我预计只有一个绘图会根据参数发生变化 Example from ipywidgets import interact i
  • 如何使用xlwt设置文本颜色

    我无法找到有关如何设置文本颜色的文档 在 xlwt 中如何完成以下操作 style xlwt XFStyle bold font xlwt Font font bold True style font font background col
  • 描述符“join”需要“unicode”对象,但收到“str”

    代码改编自here http wiki geany org howtos convert camelcase from foo bar to Foo Bar def lower case underscore to camel case s

随机推荐