LogisticRegression#
- class sklearn.linear_model.LogisticRegression(penalty='deprecated', *, C=1.0, l1_ratio=0.0, dual=False, tol=0.0001, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100, verbose=0, warm_start=False, n_jobs=None)[source]#
Logistic 回归(又名 logit,MaxEnt)分类器。
此类别使用一组可用的求解器实现正则化逻辑回归。 请注意,默认情况下会应用正则化。它可以处理密集和稀疏输入
X。使用 C 顺序数组或包含 64 位浮点数的 CSR 矩阵以获得最佳性能;任何其他输入格式都将被转换(并复制)。求解器 'lbfgs'、'newton-cg'、'newton-cholesky' 和 'sag' 仅支持具有原始公式的 L2 正则化,或者无正则化。'liblinear' 求解器支持 L1 和 L2 正则化(但不能同时支持,即弹性网络),其中双重公式仅适用于 L2 惩罚。弹性网络(L1 和 L2 的组合)正则化仅由 'saga' 求解器支持。
对于 多类 问题(只要
n_classes >= 3),除 '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)
版本 1.8 中已弃用:
penalty在版本 1.8 中已弃用,并将在 1.10 中删除。请改用l1_ratio。l1_ratio=0用于penalty='l2',l1_ratio=1用于penalty='l1',l1_ratio设置为 0 到 1 之间的任何浮点数用于'penalty='elasticnet'。- Cfloat, default=1.0
正则化强度的倒数;必须是正浮点数。与支持向量机类似,较小的值指定更强的正则化。
C=np.inf会导致非惩罚逻辑回归。有关使用 L1 惩罚调整C参数效果的视觉示例,请参见:L1-逻辑回归的正则化路径。- l1_ratiofloat, default=0.0
弹性网络混合参数,其中
0 <= l1_ratio <= 1。设置l1_ratio=1会得到纯 L1 惩罚,设置l1_ratio=0会得到纯 L2 惩罚。0 到 1 之间的任何值都会得到形式为l1_ratio * L1 + (1 - l1_ratio) * L2的弹性网络惩罚。警告
某些
l1_ratio值(即某些惩罚)可能不适用于某些求解器。请参阅下面的参数solver,以了解惩罚和求解器之间的兼容性。版本 1.8 中更改: 默认值从 None 更改为 0.0。
版本 1.8 中已弃用:
None已弃用,并将在版本 1.10 中删除。始终使用l1_ratio来指定惩罚类型。- dualbool, default=False
双重(受约束)或原始(正则化,另请参阅 此等式)公式。双重公式仅针对使用 liblinear 求解器的 l2 惩罚实现。当 n_samples > n_features 时,首选
dual=False。- tolfloat, default=1e-4
停止标准的容忍度。
- 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 or ‘balanced’, default=None
以
{class_label: weight}形式与类关联的权重。如果未给出,则所有类都被假定权重为一。“balanced” 模式使用 y 的值根据输入数据中与类频率成反比的权重自动调整权重,计算公式为
n_samples / (n_classes * np.bincount(y))。请注意,如果指定了 sample_weight(通过 fit 方法传递),这些权重将与 sample_weight 相乘。
版本 0.17 中新增: class_weight=’balanced’
- random_stateint, RandomState instance, default=None
当
solver== ‘sag’、‘saga’ 或 ‘liblinear’ 时用于打乱数据。有关详细信息,请参阅 词汇表。- solver{‘lbfgs’, ‘liblinear’, ‘newton-cg’, ‘newton-cholesky’, ‘sag’, ‘saga’}, default=’lbfgs’
用于优化问题的算法。默认值为 'lbfgs'。选择求解器时,您可能需要考虑以下方面
‘lbfgs’ 是一个很好的默认求解器,因为它对于各种问题都运行良好。
对于 多类 问题(
n_classes >= 3),除 'liblinear' 外的所有求解器都最小化完整的多项式损失,'liblinear' 将引发错误。‘newton-cholesky’ 是
n_samples>>n_features * n_classes的一个很好的选择,特别是对于具有稀有类别的独热编码分类特征。请注意,此求解器的内存使用量与n_features * n_classes呈二次关系,因为它明确计算完整的 Hessian 矩阵。对于小型数据集,'liblinear' 是一个不错的选择,而 'sag' 和 'saga' 对于大型数据集更快;
默认情况下,'liblinear' 只能处理二元分类。要在多类设置中应用一对多方案,可以使用
OneVsRestClassifier将其包装起来。
警告
算法的选择取决于所选的惩罚(
l1_ratio=0用于 L2 惩罚,l1_ratio=1用于 L1 惩罚,0 < l1_ratio < 1用于弹性网络)以及对(多项式)多类的支持求解器
l1_ratio
多项式多类
‘lbfgs’
l1_ratio=0
是
‘liblinear’
l1_ratio=1 或 l1_ratio=0
否
‘newton-cg’
l1_ratio=0
是
‘newton-cholesky’
l1_ratio=0
是
‘sag’
l1_ratio=0
是
‘saga’
0<=l1_ratio<=1
是
注意
‘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
求解器收敛所需的最大迭代次数。
- 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
没有任何效果。
版本 1.8 中已弃用:
n_jobs在版本 1.8 中已弃用,并将在 1.10 中删除。
- 属性:
- classes_ndarray of shape (n_classes, )
分类器已知的类别标签列表。
- coef_ndarray of shape (1, n_features) or (n_classes, n_features)
决策函数中的特征系数。
当给定的问题是二元问题时,
coef_的形状为 (1, n_features)。- intercept_ndarray of shape (1,) or (n_classes,)
添加到决策函数的截距(也称为偏差)。
如果
fit_intercept设置为 False,则截距设置为零。intercept_在给定问题是二元时形状为 (1,)。- n_features_in_int
在 拟合 期间看到的特征数。
0.24 版本新增。
- feature_names_in_shape 为 (
n_features_in_,) 的 ndarray 在 fit 期间看到的特征名称。仅当
X具有全部为字符串的特征名称时才定义。1.0 版本新增。
- n_iter_ndarray of shape (1, )
所有类别的实际迭代次数。
版本 0.20 中更改: 在 SciPy <= 1.0.0 中,lbfgs 迭代次数可能超过
max_iter。n_iter_现在将最多报告max_iter。
另请参阅
SGDClassifier增量训练的逻辑回归(当给定参数
loss="log_loss"时)。LogisticRegressionCV具有内置交叉验证的逻辑回归。
注意事项
底层的 C 实现使用随机数生成器在拟合模型时选择特征。因此,对于相同的输入数据,结果略有不同并不罕见。如果发生这种情况,请尝试使用较小的 tol 参数。
在某些情况下,预测输出可能与独立 liblinear 的输出不匹配。请参阅叙述文档中 与 liblinear 的差异。
References
- 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).
“SAGA: A Fast Incremental Gradient Method With Support for Non-Strongly Convex Composite Objectives”
- Hsiang-Fu Yu, Fang-Lan Huang, Chih-Jen Lin (2011). Dual coordinate descent
methods for logistic regression and maximum entropy models. Machine Learning 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]#
预测样本的置信度得分。
样本的置信度得分与该样本到超平面的有符号距离成比例。
- 参数:
- Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}
我们想要获取置信度得分的数据矩阵。
- 返回:
- scoresndarray of shape (n_samples,) or (n_samples, n_classes)
每个
(n_samples, n_classes)组合的置信度得分。在二元情况下,self.classes_[1]的置信度得分大于 0 意味着将预测此类。
- densify()[source]#
Convert coefficient matrix to dense array format.
Converts the
coef_member (back) to a numpy.ndarray. This is the default format ofcoef_and is required for fitting, so calling this method is only required on models that have previously been sparsified; otherwise, it is a no-op.- 返回:
- self
拟合的估计器。
- fit(X, y, sample_weight=None)[source]#
根据给定的训练数据拟合模型。
- 参数:
- Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}
训练向量,其中
n_samples是样本数,n_features是特征数。- yarray-like of shape (n_samples,)
相对于 X 的目标向量。
- sample_weightarray-like of shape (n_samples,) default=None
分配给单个样本的权重数组。如果未提供,则每个样本都被赋予单位权重。
版本 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 中样本的类标签。
- 参数:
- Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}
我们要获取预测值的数据矩阵。
- 返回:
- y_pred形状为 (n_samples,) 的 ndarray
包含每个样本的类标签的向量。
- predict_log_proba(X)[source]#
预测概率估计的对数。
返回的所有类别的估计值按类别标签排序。
- 参数:
- Xshape 为 (n_samples, n_features) 的 array-like
要评分的向量,其中
n_samples是样本数,n_features是特征数。
- 返回:
- Tarray-like of shape (n_samples, n_classes)
返回模型中每个类的样本对数概率,其中类的顺序与
self.classes_中的顺序相同。
- predict_proba(X)[source]#
概率估计。
返回的所有类别的估计值按类别标签排序。
对于多类/多项式问题,使用 softmax 函数来查找每个类别的预测概率。
- 参数:
- Xshape 为 (n_samples, n_features) 的 array-like
要评分的向量,其中
n_samples是样本数,n_features是特征数。
- 返回:
- Tarray-like of shape (n_samples, n_classes)
返回模型中每个类的样本概率,其中类的顺序与
self.classes_中的顺序相同。
- score(X, y, sample_weight=None)[source]#
返回在提供的数据和标签上的 准确率 (accuracy)。
在多标签分类中,这是子集准确率 (subset accuracy),这是一个严格的指标,因为它要求每个样本的每个标签集都被正确预测。
- 参数:
- Xshape 为 (n_samples, n_features) 的 array-like
测试样本。
- yshape 为 (n_samples,) 或 (n_samples, n_outputs) 的 array-like
X的真实标签。- sample_weightshape 为 (n_samples,) 的 array-like, 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 中新增。
- 参数:
- sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
fit方法中sample_weight参数的元数据路由。
- 返回:
- selfobject
更新后的对象。
- set_params(**params)[source]#
设置此估计器的参数。
此方法适用于简单的估计器以及嵌套对象(如
Pipeline)。后者具有<component>__<parameter>形式的参数,以便可以更新嵌套对象的每个组件。- 参数:
- **paramsdict
估计器参数。
- 返回:
- selfestimator instance
估计器实例。
- 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 中新增。
- 参数:
- sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
score方法中sample_weight参数的元数据路由。
- 返回:
- selfobject
更新后的对象。
- sparsify()[source]#
Convert coefficient matrix to sparse format.
Converts the
coef_member to a scipy.sparse matrix, which for L1-regularized models can be much more memory- and storage-efficient than the usual numpy.ndarray representation.The
intercept_member is not converted.- 返回:
- self
拟合的估计器。
注意事项
For non-sparse models, i.e. when there are not many zeros in
coef_, this may actually increase memory usage, so use this method with care. A rule of thumb is that the number of zero elements, which can be computed with(coef_ == 0).sum(), must be more than 50% for this to provide significant benefits.After calling this method, further fitting with the partial_fit method (if any) will not work until you call densify.