LogisticRegression#
- 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='deprecated', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)[source]#
逻辑回归(又称logit,最大熵)分类器。
此类别使用“liblinear”库、“newton-cg”、“sag”、“saga”和“lbfgs”求解器实现正则化逻辑回归。请注意,默认应用正则化。它可以处理密集和稀疏输入。使用C序数组或包含64位浮点数的CSR矩阵以获得最佳性能;任何其他输入格式都将被转换(并复制)。
“newton-cg”、“sag”和“lbfgs”求解器仅支持L2正则化(采用原始公式)或无正则化。“liblinear”求解器支持L1和L2正则化,其中L2惩罚仅支持对偶公式。Elastic-Net正则化仅由“saga”求解器支持。
对于多类别问题,除“liblinear”外的所有求解器都优化(惩罚)多项式损失。“liblinear”只处理二元分类,但可以通过使用
OneVsRestClassifier
扩展来处理多类别。更多信息请阅读用户指南。
- 参数:
- penalty{‘l1’, ‘l2’, ‘elasticnet’, None}, default=’l2’
指定惩罚项的范数
None
: 不添加惩罚项;'l2'
: 添加L2惩罚项,这是默认选择;'l1'
: 添加L1惩罚项;'elasticnet'
: 同时添加L1和L2惩罚项。
警告
某些惩罚项可能不适用于某些求解器。请参阅下面的
solver
参数,了解惩罚项和求解器之间的兼容性。0.19 版新增: 带有SAGA求解器的l1惩罚项(允许'multinomial' + L1)
- dualbool, default=False
对偶(受约束)或原始(正则化,另请参阅此方程)公式。对偶公式仅针对l2惩罚与liblinear求解器实现。当n_samples > n_features时,推荐使用dual=False。
- tolfloat, default=1e-4
停止准则的容差。
- Cfloat, default=1.0
正则化强度的倒数;必须是正浮点数。与支持向量机类似,较小的值表示更强的正则化。
- fit_interceptbool, default=True
指定是否应将常量(又称偏差或截距)添加到决策函数中。
- intercept_scalingfloat, default=1
仅当使用“liblinear”求解器且self.fit_intercept设置为True时有用。在这种情况下,x变为[x, self.intercept_scaling],即一个具有等于intercept_scaling常数值的“合成”特征被附加到实例向量中。截距变为
intercept_scaling * synthetic_feature_weight
。请注意!合成特征权重像所有其他特征一样受l1/l2正则化。为了减轻正则化对合成特征权重(以及因此对截距)的影响,intercept_scaling必须增加。
- class_weightdict 或 ‘balanced’, default=None
以
{class_label: weight}
形式关联的类别权重。如果未给出,则所有类别都被认为权重为1。“balanced”模式使用y的值,自动调整权重,使其与输入数据中类别频率成反比,计算方式为
n_samples / (n_classes * np.bincount(y))
。请注意,如果指定了sample_weight(通过fit方法传递),这些权重将与sample_weight相乘。
0.17 版新增: class_weight='balanced'
- random_stateint, RandomState 实例, default=None
当
solver
== 'sag', 'saga' 或 'liblinear' 时,用于打乱数据。详见术语表。- solver{‘lbfgs’, ‘liblinear’, ‘newton-cg’, ‘newton-cholesky’, ‘sag’, ‘saga’}, default=’lbfgs’
优化问题中使用的算法。默认为“lbfgs”。选择求解器时,您可能需要考虑以下方面:
对于小型数据集,“liblinear”是一个不错的选择,而“sag”和“saga”对于大型数据集更快;
对于多类别问题,除“liblinear”外的所有求解器都最小化完整的多项式损失;
“liblinear”默认只能处理二元分类。对于多类别设置,可以通过
OneVsRestClassifier
进行包装以应用一对多方案。“newton-cholesky”是
n_samples
>>n_features * n_classes
的一个好选择,特别是对于具有稀有类别的独热编码(one-hot encoded)分类特征。请注意,此求解器的内存使用量与n_features * n_classes
呈二次依赖关系,因为它显式计算完整的Hessian矩阵。
警告
算法的选择取决于所选的惩罚项和(多项式)多类别支持
求解器
惩罚项
多项式多类别
‘lbfgs’
‘l2’, None
是
‘liblinear’
‘l1’, ‘l2’
否
‘newton-cg’
‘l2’, None
是
‘newton-cholesky’
‘l2’, None
是
‘sag’
‘l2’, None
是
‘saga’
‘elasticnet’, ‘l1’, ‘l2’, None
是
注意
“sag”和“saga”的快速收敛只在特征具有大致相同尺度时才得到保证。您可以使用
sklearn.preprocessing
中的缩放器对数据进行预处理。另请参阅
有关
LogisticRegression
的更多信息,特别是总结求解器/惩罚项支持的表格,请参阅用户指南。0.17 版新增: 随机平均梯度 (SAG) 下降求解器。0.18 版支持多项式。
0.19 版新增: SAGA 求解器。
0.22 版更改: 默认求解器从0.22版的“liblinear”更改为“lbfgs”。
1.2 版新增: newton-cholesky 求解器。1.6 版支持多项式。
- max_iterint, default=100
求解器收敛的最大迭代次数。
- multi_class{‘auto’, ‘ovr’, ‘multinomial’}, default=’auto’
如果选择的选项是“ovr”,则为每个标签拟合一个二元问题。对于“multinomial”,最小化的损失是跨整个概率分布拟合的多项式损失,即使数据是二元的。“multinomial”在solver='liblinear'时不可用。“auto”在数据是二元或solver='liblinear'时选择“ovr”,否则选择“multinomial”。
0.18 版新增: “多项式”情况下的随机平均梯度下降求解器。
0.22 版更改: 默认值从0.22版的“ovr”更改为“auto”。
自 1.5 版起弃用:
multi_class
在 1.5 版中已弃用,并将在 1.7 版中移除。从那时起,对于n_classes >= 3
,将始终使用推荐的“multinomial”。不支持“multinomial”的求解器将引发错误。如果您仍想使用 OvR,请使用sklearn.multiclass.OneVsRestClassifier(LogisticRegression())
。- verboseint, default=0
对于liblinear和lbfgs求解器,将verbose设置为任意正数以启用详细输出。
- warm_startbool, default=False
设置为True时,重用上一次fit调用的解决方案作为初始化,否则,擦除之前的解决方案。对liblinear求解器无用。参阅术语表。
0.17 版新增: warm_start 支持 lbfgs, newton-cg, sag, saga 求解器。
- n_jobsint, default=None
当
multi_class='ovr'
时,用于并行处理类别的CPU核心数量。当solver
设置为“liblinear”时,无论是否指定“multi_class”,此参数都将被忽略。None
表示1,除非在joblib.parallel_backend
上下文中。-1
表示使用所有处理器。有关更多详细信息,请参阅术语表。- l1_ratiofloat, default=None
Elastic-Net 混合参数,取值范围
0 <= l1_ratio <= 1
。仅当penalty='elasticnet'
时使用。设置l1_ratio=0
等同于使用penalty='l2'
,而设置l1_ratio=1
等同于使用penalty='l1'
。对于0 < l1_ratio <1
,惩罚项是 L1 和 L2 的组合。
- 属性:
- classes_形状为 (n_classes, ) 的 ndarray
分类器已知的类别标签列表。
- coef_形状为 (1, n_features) 或 (n_classes, n_features) 的 ndarray
决策函数中特征的系数。
当给定问题是二元的时,
coef_
的形状为 (1, n_features)。特别是,当multi_class='multinomial'
时,coef_
对应于结果 1 (True),而-coef_
对应于结果 0 (False)。- intercept_形状为 (1,) 或 (n_classes,) 的 ndarray
添加到决策函数中的截距(又称偏差)。
如果
fit_intercept
设置为 False,则截距设置为零。intercept_
在给定问题为二元时形状为 (1, )。特别是,当multi_class='multinomial'
时,intercept_
对应于结果 1 (True),而-intercept_
对应于结果 0 (False)。- n_features_in_int
拟合期间看到的特征数量。
0.24 版新增。
- feature_names_in_形状为 (
n_features_in_
,) 的 ndarray 拟合期间看到的特征名称。仅当
X
的所有特征名称均为字符串时才定义。1.0 版新增。
- n_iter_形状为 (n_classes,) 或 (1, ) 的 ndarray
所有类别的实际迭代次数。如果为二元或多项式,则只返回1个元素。对于liblinear求解器,只给出所有类别中的最大迭代次数。
0.20 版更改: 在 SciPy <= 1.0.0 中,lbfgs 迭代次数可能超过
max_iter
。n_iter_
现在最多报告max_iter
。
另请参阅
SGDClassifier
增量训练逻辑回归(当给出参数
loss="log_loss"
时)。LogisticRegressionCV
内置交叉验证的逻辑回归。
备注
底层C实现使用随机数生成器在拟合模型时选择特征。因此,对于相同的输入数据,结果略有不同并非罕见。如果发生这种情况,请尝试使用较小的tol参数。
在某些情况下,预测输出可能与独立liblinear的输出不匹配。请参阅叙述文档中与liblinear的区别。
参考文献
- L-BFGS-B – 大型边界约束优化软件
Ciyou Zhu, Richard Byrd, Jorge Nocedal and Jose Luis Morales. http://users.iems.northwestern.edu/~nocedal/lbfgsb.html
- LIBLINEAR – 大型线性分类库
- SAG – Mark Schmidt, Nicolas Le Roux, and Francis Bach
使用随机平均梯度最小化有限和 https://hal.inria.fr/hal-00860051/document
- SAGA – Defazio, A., Bach F. & Lacoste-Julien S. (2014)。
- Hsiang-Fu Yu, Fang-Lan Huang, Chih-Jen Lin (2011)。逻辑回归和最大熵模型的对偶坐标下降
方法。机器学习 85(1-2):41-75。https://www.csie.ntu.edu.tw/~cjlin/papers/maxent_dual.pdf
示例
>>> from sklearn.datasets import load_iris >>> from sklearn.linear_model import LogisticRegression >>> X, y = load_iris(return_X_y=True) >>> clf = LogisticRegression(random_state=0).fit(X, y) >>> clf.predict(X[:2, :]) array([0, 0]) >>> clf.predict_proba(X[:2, :]) array([[9.82e-01, 1.82e-02, 1.44e-08], [9.72e-01, 2.82e-02, 3.02e-08]]) >>> clf.score(X, y) 0.97
如需比较LogisticRegression与其他分类器,请参阅:绘制分类概率。
- decision_function(X)[source]#
预测样本的置信分数。
样本的置信分数与该样本到超平面的有符号距离成比例。
- 参数:
- X形状为 (n_samples, n_features) 的 {类数组, 稀疏矩阵}
我们想要获取置信分数的数据矩阵。
- 返回:
- scores形状为 (n_samples,) 或 (n_samples, n_classes) 的 ndarray
每个
(n_samples, n_classes)
组合的置信分数。在二元情况下,self.classes_[1]
的置信分数,其中 >0 表示该类别将被预测。
- densify()[source]#
将系数矩阵转换为密集数组格式。
将
coef_
成员(恢复)为 numpy.ndarray 格式。这是coef_
的默认格式,并且是拟合所需的,因此只有在先前已稀疏化的模型上才需要调用此方法;否则,它是一个无操作。- 返回:
- self
已拟合的估计器。
- fit(X, y, sample_weight=None)[source]#
根据给定的训练数据拟合模型。
- 参数:
- X形状为 (n_samples, n_features) 的 {类数组, 稀疏矩阵}
训练向量,其中
n_samples
是样本数,n_features
是特征数。- y形状为 (n_samples,) 的类数组
相对于X的目标向量。
- sample_weight形状为 (n_samples,) 的类数组, default=None
分配给单个样本的权重数组。如果未提供,则每个样本的权重为1。
0.17 版新增: 对LogisticRegression的sample_weight支持。
- 返回:
- self
已拟合的估计器。
备注
SAGA求解器支持float64和float32位数组。
- get_metadata_routing()[source]#
获取此对象的元数据路由。
请查看用户指南,了解路由机制的工作原理。
- 返回:
- routingMetadataRequest
一个封装路由信息的
MetadataRequest
。
- get_params(deep=True)[source]#
获取此估计器的参数。
- 参数:
- deepbool, default=True
如果为 True,将返回此估计器及其包含的子估计器的参数。
- 返回:
- paramsdict
参数名称映射到其值。
- predict(X)[source]#
预测X中样本的类别标签。
- 参数:
- X形状为 (n_samples, n_features) 的 {类数组, 稀疏矩阵}
我们想要获取预测结果的数据矩阵。
- 返回:
- y_pred形状为 (n_samples,) 的 ndarray
包含每个样本类别标签的向量。
- predict_log_proba(X)[source]#
预测概率估计值的对数。
所有类别的返回估计值按类别标签排序。
- 参数:
- X形状为 (n_samples, n_features) 的类数组
待评分向量,其中
n_samples
是样本数,n_features
是特征数。
- 返回:
- T形状为 (n_samples, n_classes) 的类数组
返回模型中每个类别的样本对数概率,类别按
self.classes_
中的顺序排列。
- predict_proba(X)[source]#
概率估计。
所有类别的返回估计值按类别标签排序。
对于多类别问题,如果 multi_class 设置为“multinomial”,则使用 softmax 函数来查找每个类别的预测概率。否则,使用一对多方法,即使用逻辑函数计算每个类别被视为正的概率,并对所有类别中的这些值进行归一化。
- 参数:
- X形状为 (n_samples, n_features) 的类数组
待评分向量,其中
n_samples
是样本数,n_features
是特征数。
- 返回:
- T形状为 (n_samples, n_classes) 的类数组
返回模型中每个类别的样本概率,类别按
self.classes_
中的顺序排列。
- score(X, y, sample_weight=None)[source]#
返回提供数据和标签上的准确率。
在多标签分类中,这是子集准确率,这是一个严格的度量,因为它要求每个样本的每个标签集都必须正确预测。
- 参数:
- X形状为 (n_samples, n_features) 的类数组
测试样本。
- y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组
X的真实标签。
- sample_weight形状为 (n_samples,) 的类数组, default=None
样本权重。
- 返回:
- scorefloat
self.predict(X)
相对于y
的平均准确率。
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') LogisticRegression [source]#
请求传递给
fit
方法的元数据。请注意,此方法仅在
enable_metadata_routing=True
时相关(请参阅sklearn.set_config
)。请参阅用户指南,了解路由机制的工作原理。每个参数的选项有:
True
: 请求元数据,如果提供则传递给fit
。如果未提供元数据,则请求将被忽略。False
: 不请求元数据,元估计器不会将其传递给fit
。None
: 不请求元数据,如果用户提供元数据,元估计器将引发错误。str
: 元数据应使用此给定别名而不是原始名称传递给元估计器。
默认值 (
sklearn.utils.metadata_routing.UNCHANGED
) 保留现有请求。这允许您更改某些参数的请求而不更改其他参数。1.3 版新增。
注意
此方法仅当此估计器用作元估计器的子估计器时才相关,例如在
Pipeline
内部使用。否则,它没有效果。- 参数:
- sample_weightstr, True, False, 或 None, default=sklearn.utils.metadata_routing.UNCHANGED
fit
方法中sample_weight
参数的元数据路由。
- 返回:
- selfobject
更新后的对象。
- set_params(**params)[source]#
设置此估计器的参数。
该方法适用于简单的估计器以及嵌套对象(如
Pipeline
)。后者具有形如<component>__<parameter>
的参数,以便可以更新嵌套对象的每个组件。- 参数:
- **paramsdict
估计器参数。
- 返回:
- self估计器实例
估计器实例。
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') LogisticRegression [source]#
请求传递给
score
方法的元数据。请注意,此方法仅在
enable_metadata_routing=True
时相关(请参阅sklearn.set_config
)。请参阅用户指南,了解路由机制的工作原理。每个参数的选项有:
True
: 请求元数据,如果提供则传递给score
。如果未提供元数据,则请求将被忽略。False
: 不请求元数据,元估计器不会将其传递给score
。None
: 不请求元数据,如果用户提供元数据,元估计器将引发错误。str
: 元数据应使用此给定别名而不是原始名称传递给元估计器。
默认值 (
sklearn.utils.metadata_routing.UNCHANGED
) 保留现有请求。这允许您更改某些参数的请求而不更改其他参数。1.3 版新增。
注意
此方法仅当此估计器用作元估计器的子估计器时才相关,例如在
Pipeline
内部使用。否则,它没有效果。- 参数:
- sample_weightstr, True, False, 或 None, default=sklearn.utils.metadata_routing.UNCHANGED
score
方法中sample_weight
参数的元数据路由。
- 返回:
- selfobject
更新后的对象。
- sparsify()[source]#
将系数矩阵转换为稀疏格式。
将
coef_
成员转换为 scipy.sparse 矩阵,对于 L1-正则化模型,这种表示方式比通常的 numpy.ndarray 形式更节省内存和存储空间。intercept_
成员不进行转换。- 返回:
- self
已拟合的估计器。
备注
对于非稀疏模型,即当
coef_
中零元素不多时,这实际上可能会增加内存使用量,因此请谨慎使用此方法。经验法则是,零元素的数量(可以使用(coef_ == 0).sum()
计算)必须超过 50% 才能提供显著的效益。调用此方法后,除非调用 densify,否则使用 partial_fit 方法(如果有)进行进一步拟合将不起作用。