【问题标题】:What is difference between SGD classifier and SGD regressor in python?python中的SGD分类器和SGD回归器有什么区别?
【发布时间】:2019-07-09 06:48:04
【问题描述】:

python sklearn 中的 SGD 分类器和 SGD 回归器有什么区别?我们还可以设置批量大小以提高它们的性能吗?

【问题讨论】:

    标签: python-3.x machine-learning scikit-learn


    【解决方案1】:

    分类器预测某些数据属于哪个类。

    this picture is a cat (not a dog)
    

    回归器通常预测它属于哪个类别的概率

    this picture with 99% of probability is a cat 
    

    【讨论】:

      【解决方案2】:

      SGD{随机梯度下降}是一种优化方法,被机器学习算法或模型用来优化损失函数。

      在 scikit-learn 库中,这些模型 SGDClassifierSGDRegressor,可能会让您误以为 SGD 是分类器和回归器。

      但事实并非如此。

      SGDClassifier - 这是一个由 SGD 优化的classifier SGDRegressor - 它是由 SGD 优化的 regressor

      随机梯度下降{SGD}不支持批处理,它与{batch}不同,一次只接受一个训练样本梯度下降

      使用 sklearn 部分拟合的示例

      from sklearn.linear_model import SGDClassifier
      import random
      clf2 = SGDClassifier(loss='log') # shuffle=True is useless here
      shuffledRange = range(len(X))
      n_iter = 5
      for n in range(n_iter):
          random.shuffle(shuffledRange)
          shuffledX = [X[i] for i in shuffledRange]
          shuffledY = [Y[i] for i in shuffledRange]
          for batch in batches(range(len(shuffledX)), 10000):
              clf2.partial_fit(shuffledX[batch[0]:batch[-1]+1], shuffledY[batch[0]:batch[-1]+1], classes=numpy.unique(Y))
      

      【讨论】:

      • 谢谢它消除了我的疑问:) 但是 Sklearn 中有没有模块可以实现 Minibatch 梯度下降?由于 SGD 很耗时
      • SGD 不支持批处理通常不是真的,尽管它确实适用于 scikit-learn 实现;在实践中,对于大多数框架来说,SGD 隐含的意思是 minibatch SGD...
      • 如果你有一个很大的数据集,内存放不下,那么你应该使用partial_fit,在sk-learn中有一个概念。我已经用示例代码更新了我的答案。
      【解决方案3】:

      嗯,就是名字。 SGD 分类器是在分类问题中使用 SGD(一次取每个样本的损失梯度,并沿途更新模型)优化(训练)的模型。它可以表示使用loss 参数定义的各种分类模型(SVM、逻辑回归...)。默认情况下,它表示线性 SVM。 SGD Regressor 是一个使用 SGD 进行回归任务优化(训练)的模型。它基本上是一个线性模型,随着学习率的下降而不断更新。

      【讨论】:

        猜你喜欢
        • 2018-06-09
        • 2016-10-23
        • 2021-10-27
        • 2013-11-29
        • 2015-06-24
        • 2021-07-31
        • 2022-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多