SGDClassifier vs LogisticRegression with sgd solver in scikit-learn library

时间:2017-05-14 06:59:00

标签: python machine-learning scikit-learn

scikit-learn library has following classifiers which look similar:

  • Logistic regression classifier has different solvers and one of them is 'sgd'

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression

中读取值
  • 它还有一个不同的分类器' SGDClassifier'和损失 参数可以称为' log'用于逻辑回归。

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier

它们基本相同还是不同?如果它们不同,两者之间的实施有何不同?鉴于逻辑回归问题,您如何决定使用哪一个?

3 个答案:

答案 0 :(得分:6)

Sklearn中的Logistic回归没有'sgd'求解器。它实现了日志正则化逻辑回归:它最小化了对数概率。

SGDClassifier是一个广义线性分类器,它将使用Stochastic Gradient Descent作为求解器。正如这里提到的那样http://scikit-learn.org/stable/modules/sgd.html:“尽管SGD已经在机器学习社区中存在了很长时间,但最近在大规模学习的背景下它已经受到了相当多的关注。” 它易于实施且高效。例如,这是用于神经网络的解算器之一。

使用SGDClassifier,您可以使用许多不同的损失函数(最小化或最大化以找到最佳解决方案的功能),允许您“调整”模型并为数据找到最佳的基于sgd的线性模型。实际上,某些数据结构或某些问题需要不同的损失函数。

在您的示例中,SGD分类器将具有与Logistic回归相同的损失函数,但具有不同的求解器。根据您的数据,您可以获得不同的结果。您可以尝试使用交叉验证找到最佳的,或者尝试使用网格搜索交叉验证来查找最佳超参数。

希望能回答你的问题。

答案 1 :(得分:1)

基本上,SGD 就像一把伞,能够面对不同的线性函数。 SGD 是一种近似算法,类似于取单个点,随着点数的增加,它更多地与最优解进行转换。因此,它主要用于数据集较大的时候。 Logistic 回归默认使用梯度下降,因此速度较慢(如果在大型数据集上进行比较) 为了使 SGD 对任何特定的线性函数都表现良好,让我们在这里说逻辑回归,我们调整称为超参数调整的参数

答案 2 :(得分:0)

所有线性分类器(SVM,逻辑回归,a.o。)都可以使用sgd:Stochastic Gradient Descent