Python 之 sklearn——logistic回归
Python 之 sklearn——logistic回归
尽管从名字上看逻辑回归模型属于回归模型,但是实际上它是一个线性分类模型。logistic回归又称logit回归,是最大熵分类或者对数线性分类器。该模型使用逻辑函数对描述单个试验可能结果的概率进行建模。
sklearn 里的 LogisticRegression 类,可以处理 2 分类问题 One-vs-Rest 问题。同时可以实施 l1 l2 Elastic-Net 的正则化,使得结构风险最小化。
【注】One-vs-Rest 问题:例如我们现在要处理一个3分类问题,类别分别为A,B,C。1、把A看成一类,B,C合成一类建立logistic回归进行分类,确定A类样本。
2、把B看成一类,A,C合成一类建立logistic回归进行分类,确定B类样本。
3、剩下的归到C类
应用正则化,在机器学习中很常见,但在统计中却不常见。 正则化的一个优点是可以提高数值稳定性。 没有正则化就相当于将C设置为很高的值。
将采用l2正则化的二分类logistic回归问题转化为如下的优化问题,代价函数为
其中L2 体现在 。
类似的l1正则化的二分类logistic回归问题转化为如下的优化问题,代价函数为
其中L1 体现在 。
弹性网正则化结合了 L1 和 L2 正则化,将问题转化为如下的优化问题,代价函数为
取值位于0~1之间(它与l1_ratio相关)这里 取值为-1或者1,当取值为0时,上式就是L2正则化,当取值为1时,上式就是L1正则化。
该优化问题sklearn提供了如下几个求解方法“liblinear”, “newton-cg”, “lbfgs”, “sag” and “saga”。
liblinear
求解器“ liblinear”使用坐标下降(CD)算法,并依赖于scikit-learn附带的出色的C ++ LIBLINEAR库。 但是,以liblinear实施的CD算法无法学习真正的多类模型。 相反,优化问题以“一对多”(One-vs-Rest )的方式分解。liblinear不支持多分类L1或L2正则化,但是支持一对多L1或L2正则化。liblinear不支持弹性网正则化。liblinear能够对截距项施加惩罚(一般不建议对截距项进行惩罚),不适用与较大的数据集,对未标准化的数据具有稳健性。
lbfgs
lbfgs仅支持L2正则化,不能够对截距项施加惩罚,不适用与较大的数据集,对未标准化的数据具有稳健性。
newton-cg
newton-cg仅支持L2正则化,,不能够对截距项施加惩罚,不适用与较大的数据集,对未标准化的数据具有稳健性。
sag
sag 仅支持L2正则化,不能够对截距项施加惩罚,适用与较大的数据集,不适用与未标准化的数据。
saga
saga支持所有类型正则化,不能够对截距项施加惩罚,适用与较大的数据集,不适用与未标准化的数据。
class sklearn.linear_model.LogisticRegression(penalty='l2', *, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100, multi_class='auto', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)
参数介绍
penalty:{‘l1’, ‘l2’, ‘elasticnet’, ‘none’}, default=’l2’
默认l2正则化,可选择‘l1’, ‘l2’, ‘elasticnet’, ‘none’
C:float, default=1.0
C要是一个正数,C越小就越不能容忍分类错误,容易过拟合
max_iter:int, default=100
整数,可以设置最大迭代次数
l1_ratio:float, default=None
0~1的实数,起到的作用,调节 L1和L2正则化的比例。
参考
sklearn 官方文档
本文地址:https://blog.csdn.net/qq_39594033/article/details/107368150
上一篇: 流行穿皮裤子