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)#

逻辑回归(也称为logit,MaxEnt)分类器。

在多类情况下,如果将 ‘multi_class’ 选项设置为 ‘ovr’,训练算法将使用一对多(OvR)方案;如果将 ‘multi_class’ 选项设置为 ‘multinomial’,则使用交叉熵损失。 (目前 ‘multinomial’ 选项仅由 ‘lbfgs’、’sag’、’saga’ 和 ‘newton-cg’ 求解器支持。)

该类利用 ‘liblinear’ 库、’newton-cg’、’sag’、’saga’ 和 ‘lbfgs’ 求解器实现了带正则化的逻辑回归。请注意,默认情况下会应用正则化 。它可以处理密集输入和稀疏输入。为了获得最佳性能,请使用C顺序数组或包含64位浮点数的CSR矩阵;任何其他输入格式都将被转换(并复制)。

‘newton-cg’、’sag’ 和 ‘lbfgs’ 求解器仅支持带有原始形式的L2正则化,或者无正则化。 ‘liblinear’ 求解器支持L1和L2正则化,仅对L2惩罚项使用对偶形式。Elastic-Net正则化仅由 ‘saga’ 求解器支持。

更多信息请参阅 用户指南

Parameters:
penalty{‘l1’, ‘l2’, ‘elasticnet’, None}, default=’l2’

指定惩罚的范数:

  • None :不添加惩罚;

  • 'l2' :添加 L2 惩罚项,这是默认选择;

  • 'l1' :添加 L1 惩罚项;

  • 'elasticnet' :添加 L1 和 L2 惩罚项。

Warning

某些惩罚可能不适用于某些求解器。请参阅下面的 solver 参数,了解惩罚和求解器之间的兼容性。

Added in version 0.19: l1 惩罚与 SAGA 求解器(允许 ‘multinomial’ + L1)

dualbool, default=False

对偶(约束)或原始(正则化,另请参阅 此方程 )公式。对偶公式仅针对 liblinear 求解器的 l2 惩罚实现。当 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} 。如果未给出,则所有类都被认为具有相同的权重。

“balanced” 模式使用 y 的值自动调整权重,与输入数据中的类频率成反比,如 n_samples / (n_classes * np.bincount(y))

注意,如果指定了 sample_weight(通过 fit 方法传递),这些权重将与 sample_weight 相乘。

Added in version 0.17: class_weight=’balanced’

random_stateint, RandomState 实例, default=None

solver == ‘sag’、’saga’ 或 ‘liblinear’ 时用于打乱数据。详见 Glossary

solver{‘lbfgs’, ‘liblinear’, ‘newton-cg’, ‘newton-cholesky’, ‘sag’, ‘saga’}, default=’lbfgs’

优化问题中使用的算法。默认是 ‘lbfgs’。选择求解器时,您可能需要考虑以下方面:

  • 对于小数据集,’liblinear’ 是一个不错的选择,而对于大数据集,’sag’ 和 ‘saga’ 更快;

  • 对于多类问题,只有 ‘newton-cg’、’sag’、’saga’ 和 ‘lbfgs’ 处理多项损失;

  • ‘liblinear’ 和 ‘newton-cholesky’ 默认只能处理二分类。要在多类设置中应用一对多方案,可以使用 OneVsRestClassifier 包装它。

  • ‘newton-cholesky’ 是 n_samples >> n_features 的一个好选择,特别是对于具有罕见类别的一键编码分类特征。请注意,此求解器的内存使用量与 n_features 有二次依赖关系,因为它显式计算 Hessian 矩阵。

Warning

算法的选择取决于所选的惩罚和(多项)多类支持:

solver

penalty

multinomial multiclass

‘lbfgs’

‘l2’, None

yes

‘liblinear’

‘l1’, ‘l2’

no

‘newton-cg’

‘l2’, None

yes

‘newton-cholesky’

‘l2’, None

no

‘sag’

‘l2’, None

yes

‘saga’

‘elasticnet’, ‘l1’, ‘l2’, None

yes

Note

‘sag’ 和 ‘saga’ 的快速收敛仅在特征具有大致相同的尺度时得到保证。您可以使用 sklearn.preprocessing 中的缩放器预处理数据。

See also

有关 LogisticRegression 的更多信息,请参阅用户指南中的 Table 总结求解器/惩罚支持。

Added in version 0.17: 随机平均梯度下降求解器。

Added in version 0.19: SAGA 求解器。

Changed in version 0.22: 默认求解器从 ‘liblinear’ 更改为 ‘lbfgs’ 在 0.22 版本中。

Added in version 1.2: newton-cholesky 求解器。

max_iterint, default=100

求解器收敛的最大迭代次数。

multi_class{‘auto’, ‘ovr’, ‘multinomial’}, default=’auto’

如果选择的选项是 ‘ovr’,则为每个标签拟合一个二分类问题。对于 ‘multinomial’,最小化的损失是跨整个概率分布拟合的多项损失,即使数据是二进制的。’multinomial’ 在 solver=’liblinear’ 时不可用。’auto’ 在数据为二进制或 solver=’liblinear’ 时选择 ‘ovr’,否则选择 ‘multinomial’。

Added in version 0.18: 随机平均梯度下降求解器用于 ‘multinomial’ 情况。

Changed in version 0.22: 默认值从 ‘ovr’ 更改为 ‘auto’ 在 0.22 版本中。

Deprecated since version 1.5: multi_class 在 1.5 版本中被弃用,并将在 1.7 版本中移除。从那时起,推荐使用 ‘multinomial’ 将始终用于 n_classes >= 3 。不支持 ‘multinomial’ 的求解器将引发错误。如果您仍想使用 OvR,请使用 sklearn.multiclass.OneVsRestClassifier(LogisticRegression())

verboseint, default=0

对于 liblinear 和 lbfgs 求解器,设置 verbose 为任何正数以启用详细输出。

warm_startbool, default=False

设置为 True 时,重用上一次调用 fit 的解决方案作为初始化,否则,清除之前的解决方案。对 liblinear 求解器无用。详见 the Glossary

Added in version 0.17: warm_start 支持 lbfgsnewton-cgsagsaga 求解器。

n_jobsint, default=None

当 multi_class=’ovr’ 时并行使用的 CPU 核心数。当 solver 设置为 ‘liblinear’ 时,此参数将被忽略,无论是否指定了 ‘multi_class’。 None 表示 1,除非在 joblib.parallel_backend 上下文中。 -1 表示使用所有处理器。详见 Glossary

l1_ratiofloat, default=None

弹性网络混合参数,范围为 0 <= l1_ratio <= 1 。仅在 penalty='elasticnet' 时使用。设置 l1_ratio=0 等同于使用 penalty='l2' ,而设置 l1_ratio=1 等同于使用 penalty='l1' 。对于 0 < l1_ratio <1 ,惩罚是 L1 和 L2 的组合。

Attributes:
classes_ndarray of shape (n_classes, )

分类器已知的类标签列表。

coef_ndarray of shape (1, n_features) or (n_classes, n_features)

决策函数中特征的系数。

coef_ 在给定问题为二分类时形状为 (1, n_features)。特别是当 multi_class='multinomial' 时, coef_ 对应于结果 1 (True),而 -coef_ 对应于结果 0 (False)。

intercept_ndarray of shape (1,) or (n_classes,)

添加到决策函数中的截距(又名偏差)。

如果 fit_intercept 设置为 False,则截距设置为零。 intercept_ 在给定问题为二分类时形状为 (1,)。特别是当 multi_class='multinomial' 时, intercept_ 对应于结果 1 (True),而 -intercept_ 对应于结果 0 (False)。

n_features_in_int

fit 期间看到的特征数。

Added in version 0.24.

feature_names_in_ndarray of shape ( n_features_in_ ,)

fit 期间看到的特征名称。仅当 X 的特征名称均为字符串时定义。

Added in version 1.0.

n_iter_ndarray of shape (n_classes,) or (1, )

所有类的实际迭代次数。如果是二分类或多分类,则仅返回 1 个元素。对于 liblinear 求解器,仅给出所有类中最大的迭代次数。

Changed in version 0.20: 在 SciPy <= 1.0.0 中,lbfgs 迭代次数可能超过 max_itern_iter_ 现在最多报告 max_iter

See also

SGDClassifier

增量训练的逻辑回归(当给定参数 loss="log_loss" 时)。

LogisticRegressionCV

内置交叉验证的逻辑回归。

Notes

底层 C 实现使用随机数生成器在拟合模型时选择特征。因此,对于相同输入数据,结果略有不同并不罕见。如果发生这种情况,请尝试使用较小的 tol 参数。

预测输出在某些情况下可能与独立的 liblinear 不匹配。详见 与 liblinear 的差异 在叙述文档中。

References

L-BFGS-B – 用于大规模边界约束优化的软件

Ciyou Zhu, Richard Byrd, Jorge Nocedal 和 Jose Luis Morales. http://users.iems.northwestern.edu/~nocedal/lbfgsb.html

LIBLINEAR – 用于大型线性分类的库

https://www.csie.ntu.edu.tw/~cjlin/liblinear/

SAG – Mark Schmidt, Nicolas Le Roux, 和 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). 对偶坐标下降法用于逻辑回归和最大熵模型。

机器学习 85(1-2):41-75. https://www.csie.ntu.edu.tw/~cjlin/papers/maxent_dual.pdf

Examples

>>> 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.8...e-01, 1.8...e-02, 1.4...e-08],
       [9.7...e-01, 2.8...e-02, ...e-08]])
>>> clf.score(X, y)
0.97...
decision_function(X)#

预测样本的置信度分数。

样本的置信度分数与其到超平面的有符号距离成正比。

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

我们想要获取置信度分数的数据矩阵。

Returns:
scoresndarray,形状为 (n_samples,) 或 (n_samples, n_classes)

每个 (n_samples, n_classes) 组合的置信度分数。在二分类情况下, self.classes_[1] 的置信度分数,其中 >0 表示会预测这个类别。

densify()#

将系数矩阵转换为密集数组格式。

coef_ 成员(回)转换为 numpy.ndarray。这是 coef_ 的默认格式,并且是拟合所必需的,因此只有在之前已经稀疏化的模型上才需要调用此方法;否则,它是一个空操作。

Returns:
self

拟合的估计器。

fit(X, y, sample_weight=None)#

拟合模型根据给定的训练数据。

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

训练向量,其中 n_samples 是样本数量, n_features 是特征数量。

yarray-like,形状为 (n_samples,)

相对于 X 的目标向量。

sample_weightarray-like,形状为 (n_samples,),默认=None

分配给单个样本的权重数组。 如果未提供,则每个样本的权重为单位权重。

Added in version 0.17: sample_weight 支持 LogisticRegression。

Returns:
self

拟合的估计器。

Notes

SAGA 求解器支持 float64 和 float32 位数组。

get_metadata_routing()#

获取此对象的元数据路由。

请查看 用户指南 以了解路由机制的工作原理。

Returns:
routingMetadataRequest

MetadataRequest 封装的 路由信息。

get_params(deep=True)#

获取此估计器的参数。

Parameters:
deepbool, 默认=True

如果为True,将返回此估计器和包含的子对象(也是估计器)的参数。

Returns:
paramsdict

参数名称映射到它们的值。

predict(X)#

预测X中的样本类别标签。

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

我们希望获取预测的数据矩阵。

Returns:
y_predndarray,形状为 (n_samples,)

包含每个样本类别标签的向量。

predict_log_proba(X)#

预测概率估计的对数。

返回的所有类的估计值按类的标签排序。

Parameters:
X形状为 (n_samples, n_features) 的类数组

要评分的向量,其中 n_samples 是样本数量, n_features 是特征数量。

Returns:
T形状为 (n_samples, n_classes) 的类数组

返回样本在模型中每个类的对数概率, 其中类按 self.classes_ 中的顺序排列。

predict_proba(X)#

概率估计。

返回的所有类别的估计值按类别标签排序。

对于一个多类问题,如果multi_class设置为”multinomial”,则使用softmax函数来找到每个类别的预测概率。 否则,使用一对多的方法,即计算每个类别的概率,假设其为正类,使用逻辑函数,并在所有类别中归一化这些值。

Parameters:
X形状为(n_samples, n_features)的类数组

要评分的向量,其中 n_samples 是样本数量, n_features 是特征数量。

Returns:
T形状为(n_samples, n_classes)的类数组

返回模型中每个类别的样本概率,类别按 self.classes_ 中的顺序排列。

score(X, y, sample_weight=None)#

返回给定测试数据和标签的平均准确率。

在多标签分类中,这是子集准确率,这是一个严格的指标,因为你要求每个样本的每个标签集都被正确预测。

Parameters:
X形状为 (n_samples, n_features) 的类数组

测试样本。

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组

` X`的真实标签。

sample_weight形状为 (n_samples,) 的类数组,默认=None

样本权重。

Returns:
scorefloat

self.predict(X) 相对于 y 的平均准确率。

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') LogisticRegression#

Request metadata passed to the fit method.

Note that this method is only relevant if enable_metadata_routing=True (see sklearn.set_config ). Please see User Guide on how the routing mechanism works.

The options for each parameter are:

  • True : metadata is requested, and passed to fit if provided. The request is ignored if metadata is not provided.

  • False : metadata is not requested and the meta-estimator will not pass it to fit .

  • None : metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str : metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default ( sklearn.utils.metadata_routing.UNCHANGED ) retains the existing request. This allows you to change the request for some parameters and not others.

Added in version 1.3.

Note

This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a Pipeline . Otherwise it has no effect.

Parameters:
sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

Metadata routing for sample_weight parameter in fit .

Returns:
selfobject

The updated object.

set_params(**params)#

设置此估计器的参数。

该方法适用于简单估计器以及嵌套对象(例如 Pipeline )。后者具有形式为 <component>__<parameter> 的参数,以便可以更新嵌套对象的每个组件。

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') LogisticRegression#

Request metadata passed to the score method.

Note that this method is only relevant if enable_metadata_routing=True (see sklearn.set_config ). Please see User Guide on how the routing mechanism works.

The options for each parameter are:

  • True : metadata is requested, and passed to score if provided. The request is ignored if metadata is not provided.

  • False : metadata is not requested and the meta-estimator will not pass it to score .

  • None : metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str : metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default ( sklearn.utils.metadata_routing.UNCHANGED ) retains the existing request. This allows you to change the request for some parameters and not others.

Added in version 1.3.

Note

This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a Pipeline . Otherwise it has no effect.

Parameters:
sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

Metadata routing for sample_weight parameter in score .

Returns:
selfobject

The updated object.

sparsify()#

将系数矩阵转换为稀疏格式。

coef_ 成员转换为 scipy.sparse 矩阵,对于 L1 正则化模型来说,这种格式在内存和存储方面比通常的 numpy.ndarray 表示更高效。

intercept_ 成员不会被转换。

Returns:
self

拟合的估计器。

Notes

对于非稀疏模型,即当 coef_ 中没有很多零时,这实际上可能会增加内存使用量,因此请谨慎使用此方法。一个经验法则是,零元素的数量,可以通过 (coef_ == 0).sum() 计算,必须超过 50% 才能提供显著的效益。

调用此方法后,进一步使用 partial_fit 方法(如果有)进行拟合将不起作用,直到您调用 densify。