原文链接:https://scikitlearn.org/stable/modules/linear_model.html#logistic-regression
–做个记录,以备自己之后回顾–
1.1.11 Logistic regression
逻辑回归,尽管它名字叫回归,但它是一个线性分类模型,而不是回归模型。逻辑回归在一些文献中也被称为logit回归,最大熵分类(MaxEnt)或者对数线性分类器。这个模型中,对单个输入样本,其可能的分类结果的概率是通过逻辑函数建模得到的。
在scikit-learn中逻辑回归可以通过调用LogisticRegression类实现。此类可用于实现带L2或L1正则化的二元、一对其余或多元逻辑回归问题。
作为一个优化问题,带L2惩罚项(正则项)的逻辑回归是最小化如下的成本函数(cost function):
min w , c 1 2 w T w + C ∑ i = 1 n log ( exp ( − y i ( X i T w + c ) ) + 1 ) . \min_{w, c} \frac{1}{2}w^T w + C \sum_{i=1}^n \log(\exp(- y_i (X_i^T w + c)) + 1) . minw,c21wTw+C∑i=1nlog(exp(−yi(XiTw+c))+1).
类似,带L1正则项的逻辑回归是求解如下最小化问题:
min w , c ∥ w ∥ 1 + C ∑ i = 1 n log ( exp ( − y i ( X i T w + c ) ) + 1 ) . \min_{w, c} \|w\|_1 + C \sum_{i=1}^n \log(\exp(- y_i (X_i^T w + c)) + 1). minw,c∥w∥1+C∑i=1nlog(exp(−yi(XiTw+c))+1).
其中,对于每个样本 x i x_{i} xi,相应的 y i y_{i} yi取值为-1或1。
LogisticRegression类中的求解方法有“liblinear”,“newton-cg”,“lbfgs”,“sag”和“saga”:
求解器liblinear使用坐标下降算法(CD),并依赖于scikit-learn附带的优秀的c++ LIBLINEAR library库。然而,在liblinear中的CD算法不能学习一个真正的多元(多分类)模型;相反,优化问题以one-vs-rest的方式分解,以便为所有类训练单独的二分类模型。由于这是在底层发生的,因此使用这种解法的LogisticRegression类就表现为多分类模型。对于L1正则项, sklearn.svm.l1_min_c允许计算C的下界从而获得一个非“空”(所有的特征权重为零)模型。
lbfgs、sag和newton-cg求解器只适用于L2正则项,而且对于某些高维数据收敛速度更快。使用这些求解器将多类设置为多项式可以学习一个真正的多项式逻辑回归模型[5],这意味着它的概率估计应该比默认的one-vs-rest得到的更好。
sag求解器使用随机平均梯度下降[6]。当样本数量和特征数量都很大时,它比大型数据集的其他求解器更快。
saga求解器是sag的一个变体[7],它也支持非平滑L1正则项。因此,它是稀疏多项式逻辑回归可选择的求解器解。
lbfgs是一种近似于Broyden Fletcher Goldfarb Shanno算法[8]的优化算法,属于拟牛顿法。lbfgs解决方案适用于小数据集,但对于大数据集,其性能会受到影响。[9]
lbfgs求解器由于其鲁棒性而被默认使用。对于大型数据集,saga求解器通常更快。对于大型数据集,还可以考虑使用有对数损失的SGDClassifier,这可能更快,但需要更多的调优。
例子:
另附链接:
sklearn.linear_model.LogisticRegression参数说明