机器学习sklearn(学习笔记7)——Logistic regression(逻辑回归)
逻辑回归,尽管它的名字,是一个线性模型分类,而不是回归。Logistic回归在文献中也称为logit回归、最大熵分类(MaxEnt)或对数线性分类器。在该模型中,描述单个试验可能结果的概率使用逻辑函数建模。
在scikit-learn中,逻辑回归的实现可以通过类逻辑回归来实现。此实现可以使用可选的L2、L1或Elastic-Net正则化来匹配二进制、One-vs- Rest或多项逻辑回归。注意,默认情况下应用正则化。
作为一个优化问题,二元L2类惩罚logistic回归使成本函数最小化:
同样,L1正则化logistic回归解决了如下优化问题:
Elastic-Net的正则化是L1和L2的结合,使成本函数最小化:
ρ控制强度的L1正规化和L2正规化(对应于l1_ratio参数)。
注意,在这个符号,它是假定观测yi需要设置中的值为−1,1在i处。我们也可以看到,Elastic-Net相当于L1当ρ= 1,相当于L2当ρ= 0。
在类逻辑回归中可以使用不同的求解器“liblinear”、“newton-cg”、“lbfgs”、“sag”和“saga”:
求解器“liblinear”使用坐标下降(CD)算法,并依赖于优秀的c++ liblinear库,该库随scikit-learn一起提供。然而,在liblinear中实现的CD算法不能学习真正的多项式(多类)模型;相反,优化问题以“one-vs-rest”方式分解,因此为所有类训练独立的二进制分类器。这是在底层发生的,所以使用这个求解器的逻辑回归实例表现为多类分类器。对于L1惩罚sklearn.svm。l1_min_c允许计算C的下界,以得到一个非“null”(所有特性权重都为零)模型。
“lbfgs”、“sag”和“newton-cg”求解器只支持L2惩罚或不正则化,对于某些高维数据收敛速度更快。使用这些求解器将multi_class设置为“多项”,可以学习一个真正的多项逻辑回归模型,这意味着它的概率估计应该比默认的“一对多”设置校准得更好。
“saga”求解器使用随机平均梯度下降。当样本数量和特性数量都很大时,它比其他大型数据集的求解器更快。
“saga”求解器是“sag”的一个变体,它也支持非光滑(penalty=“l1”)。因此,这是稀疏多项式逻辑回归选择的求解器。它也是唯一支持penalty="elasticnet"的解算器。
“lbfgs”是一种近似于布洛登-弗莱彻-戈德法布-尚诺算法的优化算法,属于准牛顿法。“lbfgs”求解器推荐用于较小的数据集,但对于较大的数据集,它的性能会受到影响。
下表总结了每个求解者所支持的惩罚:
默认情况下,“lbfgs”求解器用于鲁棒性。对于大型数据集,“saga”求解器通常更快。对于大型数据集,您还可以考虑使用带有“log”丢失的SGDClassifier,这可能更快,但需要更多的调优。
参考资料:【https://scikit-learn.org/dev/modules/linear_model.html#logistic-regression】