欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python 之 sklearn——logistic回归

程序员文章站 2023-09-18 18:45:40
Python 之 sklearn——logistic回归尽管从名字上看逻辑回归模型属于回归模型,但是实际上它是一个线性分类模型。logistic回归又称logit回归,是最大熵分类或者对数线性分类器。该模型使用逻辑函数对描述单个试验可能结果的概率进行建模。sklearn 里的 LogisticRegression 类,可以处理 2 分类问题 One-vs-Rest 问题。同时可以实施 l1 l2 Elastic-Net 的正则化,使得结构风险最小化。【注】One-vs-Rest 问题:例如我们现在要处...

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回归问题转化为如下的优化问题,代价函数为

Python 之 sklearn——logistic回归
其中L2 体现在 1/2wTw1/2*w^Tw

类似的l1正则化的二分类logistic回归问题转化为如下的优化问题,代价函数为

Python 之 sklearn——logistic回归

其中L1 体现在 w1||w||_1

弹性网正则化结合了 L1 和 L2 正则化,将问题转化为如下的优化问题,代价函数为

Python 之 sklearn——logistic回归

ρ\rho取值位于0~1之间(它与l1_ratio相关)这里 yiy_i取值为-1或者1,当ρ\rho取值为0时,上式就是L2正则化,当ρ\rho取值为1时,上式就是L1正则化。

该优化问题sklearn提供了如下几个求解方法“liblinear”, “newton-cg”, “lbfgs”, “sag” and “saga”。

Python 之 sklearn——logistic回归

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的实数,起到ρ\rho的作用,调节 L1和L2正则化的比例。

参考

sklearn 官方文档

本文地址:https://blog.csdn.net/qq_39594033/article/details/107368150