LogisticRegressionCV#

class sklearn.linear_model.LogisticRegressionCV(*, Cs=10, l1_ratios='warn', fit_intercept=True, cv=None, dual=False, penalty='deprecated', scoring=None, solver='lbfgs', tol=0.0001, max_iter=100, class_weight=None, n_jobs=None, verbose=0, refit=True, intercept_scaling=1.0, random_state=None, use_legacy_attributes='warn')[source]#

Logistic 回归 CV(又名 logit,MaxEnt)分类器。

参见词汇表条目 交叉验证估计器

该类实现了正则化逻辑回归,并对惩罚参数 Cl1_ratio 进行隐式交叉验证,详情请参阅 LogisticRegression,使用一组可用的求解器。

求解器 'lbfgs'、'newton-cg'、'newton-cholesky' 和 'sag' 仅支持使用原始公式的 L2 正则化。'liblinear' 求解器支持 L1 和 L2 正则化(但不能同时使用,即 elastic-net),其中 L2 惩罚仅支持对偶公式。Elastic-Net(L1 和 L2 的组合)正则化仅由 'saga' 求解器支持。

对于 Cs 值和 l1_ratios 值的网格,最佳超参数由交叉验证器 StratifiedKFold 选择,但可以使用 cv 参数进行更改。除 'liblinear' 外的所有求解器都可以热启动系数(参见词汇表)。

用户指南 中阅读更多内容。

参数:
Csint or list of floats, default=10

Cs 中的每个值描述了正则化强度的倒数。如果 Cs 是一个整数,则在 1e-4 和 1e4 之间的对数尺度上选择 Cs 值网格。与支持向量机类似,较小的值指定更强的正则化。

l1_ratiosarray-like of shape (n_l1_ratios), default=None

作为 Elastic-Net 混合参数(L1 和 L2 惩罚之间的缩放)传入的 0 到 1 之间的浮点数。对于 l1_ratio = 0,惩罚为 L2 惩罚。对于 l1_ratio = 1,惩罚为 L1 惩罚。对于 0 < l1_ratio < 1,惩罚是 L1 和 L2 的组合。给定类数组中的所有值都通过交叉验证进行测试,并使用给出最佳预测分数的值。

警告

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

版本 1.8 中已弃用: l1_ratios=None 在 1.8 版本中已弃用,并将在 1.10 版本中引发错误。默认值将从 None 更改为 (0.0,) in version 1.10。

fit_interceptbool, default=True

指定是否应将常量(也称为偏差或截距)添加到决策函数中。

cvint or cross-validation generator, default=None

使用的默认交叉验证生成器是 Stratified K-Folds。如果提供了整数,它指定使用的折叠数 n_folds。请参阅模块 sklearn.model_selection 以获取可能的交叉验证对象列表。

版本 0.22 中已更改:如果为 None,cv 默认值从 3 折更改为 5 折。

dualbool, default=False

对偶(受限)或原始(正则化,另请参阅 此等式)公式。对偶公式仅针对具有 liblinear 求解器的 l2 惩罚实现。当 n_samples > n_features 时,首选 dual=False。

penalty{‘l1’, ‘l2’, ‘elasticnet’}, default=’l2’

指定惩罚的范数

  • 'l2': 添加 L2 惩罚项(默认使用);

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

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

警告

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

版本 1.8 中已弃用: penalty 在版本 1.8 中已弃用,并将在 1.10 中删除。请改用 l1_ratiol1_ratio=0 用于 penalty='l2'l1_ratio=1 用于 penalty='l1'l1_ratio 设置为 0 到 1 之间的任意浮点数用于 'penalty='elasticnet'

scoringstr 或可调用对象,默认=None

用于交叉验证的评分方法。选项

  • str: 有关选项,请参阅 String name scorers

  • callable: 带有签名 scorer(estimator, X, y) 的可调用评分器对象(例如函数)。有关详细信息,请参阅 Callable scorers

  • None: 使用 准确率

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' 在 LogisticRegressionCV 中可能较慢,因为它不处理热启动。

  • 'liblinear' 默认只能处理二元分类。要为多类设置应用一对多方案,可以使用 OneVsRestClassifier 将其包装起来。

警告

算法的选择取决于所选的惩罚(L2 惩罚为 l1_ratio=0,L1 惩罚为 l1_ratio=1,Elastic-Net 为 0 < l1_ratio < 1)以及对(多项式)多类的支持情况

求解器

l1_ratio

多项式多类

‘lbfgs’

l1_ratio=0

‘liblinear’

l1_ratio=1 or 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 的缩放器对数据进行预处理。

版本 0.17 中新增: 随机平均梯度 (SAG) 下降求解器。版本 0.18 中的多项式支持。

版本0.19中新增:SAGA求解器。

版本 1.2 中新增: newton-cholesky 求解器。版本 1.6 中的多项式支持。

tolfloat, default=1e-4

停止标准的容忍度。

max_iterint, default=100

优化算法的最大迭代次数。

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’

n_jobsint, default=None

交叉验证循环期间使用的 CPU 核心数。None 表示 1,除非在 joblib.parallel_backend 上下文中。-1 表示使用所有处理器。有关详细信息,请参阅 词汇表

verboseint, default=0

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

refitbool, default=True

如果设置为 True,则对所有折叠的得分进行平均,并选取与最佳得分相对应的系数和 C,然后使用这些参数进行最终拟合。否则,将对与所有折叠中的最佳得分相对应的系数、截距和 C 进行平均。

intercept_scalingfloat, default=1

仅当使用求解器 liblinearself.fit_intercept 设置为 True 时才有用。在这种情况下,x 变为 [x, self.intercept_scaling],即一个常量值等于 intercept_scaling 的“合成”特征被附加到实例向量。截距变为 intercept_scaling * synthetic_feature_weight

注意

合成特征权重像所有其他特征一样受到 L1 或 L2 正则化。为了减轻正则化对合成特征权重(以及对截距)的影响,必须增加 intercept_scaling

random_stateint, RandomState instance, default=None

solver='sag'、'saga' 或 'liblinear' 时,用于打乱数据。请注意,这仅适用于求解器,而不适用于交叉验证生成器。有关详细信息,请参阅 词汇表

use_legacy_attributesbool, default=True

如果为 True,则使用属性的旧值

  • C_ 是形状为 (n_classes,) 的 ndarray,重复相同的值

  • l1_ratio_ 是形状为 (n_classes,) 的 ndarray,重复相同的值

  • coefs_paths_ 是一个字典,其中类标签作为键,ndarray 作为值

  • scores_ 是一个字典,其中类标签作为键,ndarray 作为值

  • n_iter_ 是形状为 (1, n_folds, n_cs) 或类似的 ndarray

如果为 False,则使用属性的新值

  • C_ 是一个浮点数

  • l1_ratio_ 是一个浮点数

  • coefs_paths_ 是形状为 (n_folds, n_l1_ratios, n_cs, n_classes, n_features) 的 ndarray。对于二元问题 (n_classes=2),倒数第二维为 1。

  • scores_ 是形状为 (n_folds, n_l1_ratios, n_cs) 的 ndarray

  • n_iter_ 是形状为 (n_folds, n_l1_ratios, n_cs) 的 ndarray

版本 1.10 中已更改: 默认值将在版本 1.10 中从 True 更改为 False。

版本 1.10 中已弃用: use_legacy_attributes 将在版本 1.10 中弃用,并在 1.12 中删除。

属性:
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,)。

Cs_ndarray of shape (n_cs)

用于交叉验证的 C 值数组,即正则化参数值的倒数。

l1_ratios_ndarray of shape (n_l1_ratios)

用于交叉验证的 l1_ratios 数组。如果使用 l1_ratios=None(即 penalty 不是 'elasticnet'),则将其设置为 [None]

coefs_paths_dict of ndarray of shape (n_folds, n_cs, n_dof) or (n_folds, n_cs, n_l1_ratios, n_dof)

一个字典,其中类作为键,在交叉验证每个折叠 (n_folds) 以及每个 Cs (n_cs) 期间获得的系数路径作为值。系数的大小是自由度数 (n_dof),即没有截距时 n_dof=n_features,有截距时 n_dof=n_features+1。如果 penalty='elasticnet',则有一个额外的维度用于 l1_ratio 值的数量 (n_l1_ratios),形状为 (n_folds, n_cs, n_l1_ratios_, n_dof)。另请参阅参数 use_legacy_attributes

scores_dict

一个字典,其中类作为键,交叉验证每个折叠期间获得的分数网格作为值。所有类都重复相同的分数。每个字典值的形状为 (n_folds, n_cs),如果 penalty='elasticnet',则为 (n_folds, n_cs, n_l1_ratios)。另请参阅参数 use_legacy_attributes

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

映射到最佳分数​​的 C 值,重复 n_classes 次。如果 refit 设置为 False,则最佳 C 是与每个折叠的最佳分数相对应的 C 的平均值。C_ 在问题为二元时形状为 (1,)。另请参阅参数 use_legacy_attributes

l1_ratio_ndarray of shape (n_classes,) or (n_classes - 1,)

映射到最佳分数​​的 l1_ratio 值,重复 n_classes 次。如果 refit 设置为 False,则最佳 l1_ratio 是与每个折叠的最佳分数相对应的 l1_ratio 的平均值。l1_ratio_ 在问题为二元时形状为 (1,)。另请参阅参数 use_legacy_attributes

n_iter_ndarray of shape (1, n_folds, n_cs) or (1, n_folds, n_cs, n_l1_ratios)

所有类、折叠和 Cs 的实际迭代次数。如果 penalty='elasticnet',则形状为 (1, n_folds, n_cs, n_l1_ratios)。另请参阅参数 use_legacy_attributes

n_features_in_int

拟合 期间看到的特征数。

0.24 版本新增。

feature_names_in_shape 为 (n_features_in_,) 的 ndarray

fit 期间看到的特征名称。仅当 X 具有全部为字符串的特征名称时才定义。

1.0 版本新增。

另请参阅

LogisticRegression

没有调整超参数 C 的逻辑回归。

示例

>>> from sklearn.datasets import load_iris
>>> from sklearn.linear_model import LogisticRegressionCV
>>> X, y = load_iris(return_X_y=True)
>>> clf = LogisticRegressionCV(
...     cv=5, random_state=0, use_legacy_attributes=False, l1_ratios=(0,)
... ).fit(X, y)
>>> clf.predict(X[:2, :])
array([0, 0])
>>> clf.predict_proba(X[:2, :]).shape
(2, 3)
>>> clf.score(X, y)
0.98...
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 of coef_ 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, **params)[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

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

**paramsdict

要传递给底层拆分器和评分器的参数。

1.4 版本新增。

返回:
selfobject

拟合的 LogisticRegressionCV 估计器。

get_metadata_routing()[source]#

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

请查阅 用户指南,了解路由机制如何工作。

1.4 版本新增。

返回:
routingMetadataRouter

封装路由信息的 MetadataRouter

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, **score_params)[source]#

使用给定测试数据和标签上的 scoring 选项进行评分。

参数:
Xshape 为 (n_samples, n_features) 的 array-like

测试样本。

yarray-like of shape (n_samples,)

X 的真实标签。

sample_weightshape 为 (n_samples,) 的 array-like, default=None

样本权重。

**score_paramsdict

要传递给底层评分器的 score 方法的参数。

1.4 版本新增。

返回:
scorefloat

self.predict(X) 相对于 y 的得分。

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') LogisticRegressionCV[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$') LogisticRegressionCV[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.