LogisticRegressionCV#
- class sklearn.linear_model.LogisticRegressionCV(*, Cs=10, fit_intercept=True, cv=None, dual=False, penalty='l2', scoring=None, solver='lbfgs', tol=0.0001, max_iter=100, class_weight=None, n_jobs=None, verbose=0, refit=True, intercept_scaling=1.0, multi_class='deprecated', random_state=None, l1_ratios=None)[source]#
逻辑回归CV(又称logit,MaxEnt)分类器。
请参阅交叉验证估计器的词汇表条目。
此类别使用 liblinear、newton-cg、sag 或 lbfgs 优化器实现逻辑回归。newton-cg、sag 和 lbfgs 求解器仅支持采用原始公式的 L2 正则化。liblinear 求解器支持 L1 和 L2 正则化,其中 L2 惩罚仅支持对偶公式。Elastic-Net 惩罚仅由 saga 求解器支持。
对于 `Cs` 值和 `l1_ratios` 值的网格,最佳超参数由交叉验证器
StratifiedKFold
选择,但可以使用 cv 参数进行更改。‘newton-cg’、‘sag’、‘saga’ 和 ‘lbfgs’ 求解器可以热启动系数(参见词汇表)。在用户指南中阅读更多内容。
- 参数:
- Cs整数或浮点数列表,默认值=10
Cs 中的每个值都描述了正则化强度的倒数。如果 Cs 是一个整数,则在 1e-4 到 1e4 之间的对数刻度上选择 Cs 值的网格。与支持向量机类似,较小的值表示更强的正则化。
- fit_intercept布尔值,默认值=True
指定是否应将常数(又称偏差或截距)添加到决策函数中。
- cv整数或交叉验证生成器,默认值=None
使用的默认交叉验证生成器是分层 K 折。如果提供整数,则为使用的折叠数。有关可能的交叉验证对象列表,请参阅模块
sklearn.model_selection
。0.22 版本中的变更: `cv` 的默认值从无(3折)更改为5折。
- dual布尔值,默认值=False
对偶(受约束)或原始(正则化,另请参阅此方程)公式。对偶公式仅针对使用 liblinear 求解器的 L2 惩罚实现。当 `n_samples` > `n_features` 时,首选 `dual=False`。
- penalty{‘l1’, ‘l2’, ‘elasticnet’},默认值=’l2’
指定惩罚的范数
'l2'
:添加 L2 惩罚项(默认使用);'l1'
:添加 L1 惩罚项;'elasticnet'
:同时添加 L1 和 L2 惩罚项。
警告
某些惩罚可能不适用于某些求解器。请参阅下面的 `solver` 参数,了解惩罚和求解器之间的兼容性。
- scoring字符串或可调用对象,默认值=None
用于交叉验证的评分方法。选项:
- solver{‘lbfgs’, ‘liblinear’, ‘newton-cg’, ‘newton-cholesky’, ‘sag’, ‘saga’},默认值=’lbfgs’
优化问题中使用的算法。默认值为 ‘lbfgs’。要选择求解器,您可能需要考虑以下方面:
对于小型数据集,‘liblinear’ 是一个不错的选择,而 ‘sag’ 和 ‘saga’ 对于大型数据集更快;
对于多类别问题,除 ‘liblinear’ 外的所有求解器都最小化完整的多项式损失;
‘liblinear’ 在
LogisticRegressionCV
中可能较慢,因为它不支持热启动。‘liblinear’ 默认只能处理二分类。要在多类别设置中应用一对多方案,可以使用
OneVsRestClassifier
对其进行封装。‘newton-cholesky’ 是 `n_samples` >> `n_features * n_classes` 的一个不错选择,特别是对于具有稀有类别的一热编码分类特征。请注意,此求解器的内存使用量与 `n_features * n_classes` 呈二次依赖关系,因为它明确计算完整的 Hessian 矩阵。
警告
算法的选择取决于所选的惩罚以及(多项式)多类别支持:
求解器
惩罚
多项式多类别
‘lbfgs’
‘l2’
是
‘liblinear’
‘l1’,‘l2’
否
‘newton-cg’
‘l2’
是
‘newton-cholesky’
‘l2’,
是
‘sag’
‘l2’,
是
‘saga’
‘elasticnet’,‘l1’,‘l2’
是
注意
‘sag’ 和 ‘saga’ 的快速收敛仅在特征具有大致相同尺度时才得到保证。您可以使用
sklearn.preprocessing
中的缩放器对数据进行预处理。0.17 版本新增: 随机平均梯度 (SAG) 下降求解器。0.18 版本支持多项式。
0.19 版本新增: SAGA 求解器。
1.2 版本新增: newton-cholesky 求解器。1.6 版本支持多项式。
- tol浮点数,默认值=1e-4
停止标准的容差。
- max_iter整数,默认值=100
优化算法的最大迭代次数。
- class_weight字典或 ‘balanced’,默认值=None
与类别关联的权重,形式为 `{class_label: weight}`。如果未给出,则所有类别都被假定为权重为一。
“balanced”模式使用 y 的值自动调整权重,使其与输入数据中类别频率成反比,计算公式为 `n_samples / (n_classes * np.bincount(y))`。
请注意,如果指定了 `sample_weight`,这些权重将与 `sample_weight`(通过 fit 方法传递)相乘。
0.17 版本新增: `class_weight == 'balanced'`
- n_jobs整数,默认值=None
交叉验证循环期间使用的 CPU 核心数。`None` 表示 1,除非在
joblib.parallel_backend
上下文中。`-1` 表示使用所有处理器。有关更多详细信息,请参阅词汇表。- verbose整数,默认值=0
对于 ‘liblinear’、‘sag’ 和 ‘lbfgs’ 求解器,将 verbose 设置为任意正数以启用详细模式。
- refit布尔值,默认值=True
如果设置为 True,则将所有折叠的得分进行平均,并取对应于最佳得分的系数和 C,然后使用这些参数进行最终重新拟合。否则,将对对应于所有折叠中最佳得分的系数、截距和 C 进行平均。
- intercept_scaling浮点数,默认值=1
仅当使用 ‘liblinear’ 求解器且 `self.fit_intercept` 设置为 True 时有用。在这种情况下,x 变为 `[x, self.intercept_scaling]`,即一个具有等于 `intercept_scaling` 的常数值的“合成”特征被附加到实例向量。截距变为 `intercept_scaling * synthetic_feature_weight`。
注意!合成特征权重与所有其他特征一样受到 l1/l2 正则化的影响。为了减小正则化对合成特征权重(以及因此对截距)的影响,`intercept_scaling` 必须增加。
- multi_class{‘auto’, ‘ovr’, ‘multinomial’},默认值=’auto’
如果选择的选项是 ‘ovr’,则为每个标签拟合一个二元问题。对于 ‘multinomial’,最小化的损失是拟合整个概率分布的多项式损失,即使数据是二元的。当 `solver='liblinear'` 时,‘multinomial’ 不可用。如果数据是二元的,或者 `solver='liblinear'`,则 ‘auto’ 选择 ‘ovr’,否则选择 ‘multinomial’。
0.18 版本新增: 随机平均梯度下降求解器用于 ‘multinomial’ 情况。
0.22 版本中的变更: 默认值在 0.22 中从 ‘ovr’ 更改为 ‘auto’。
自 1.5 版本起已弃用: `multi_class` 在 1.5 版本中已弃用,并将在 1.7 版本中移除。从那时起,对于 `n_classes >= 3`,将始终使用推荐的 ‘multinomial’。不支持 ‘multinomial’ 的求解器将引发错误。如果您仍想使用 OvR,请使用
sklearn.multiclass.OneVsRestClassifier(LogisticRegressionCV())
。- random_state整数,RandomState 实例,默认值=None
当 `solver='sag'`、‘saga’ 或 ‘liblinear’ 时用于打乱数据。请注意,这仅适用于求解器,而不适用于交叉验证生成器。有关详细信息,请参阅词汇表。
- l1_ratios浮点数列表,默认值=None
Elastic-Net 混合参数的列表,其中 `0 <= l1_ratio <= 1`。仅当 `penalty='elasticnet'` 时使用。值为 0 等同于使用 `penalty='l2'`,而值为 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)。
- intercept_形状为 (1,) 或 (n_classes,) 的 ndarray
添加到决策函数的截距(又称偏差)。
如果 `fit_intercept` 设置为 False,截距将设置为零。当问题为二元时,`intercept_` 的形状为 (1,)。
- Cs_形状为 (n_cs) 的 ndarray
用于交叉验证的 C 数组,即正则化参数值的倒数。
- l1_ratios_形状为 (n_l1_ratios) 的 ndarray
用于交叉验证的 l1_ratios 数组。如果没有使用 l1_ratio(即惩罚不是 ‘elasticnet’),则将其设置为 `[None]`
- coefs_paths_形状为 (n_folds, n_cs, n_features) 或 (n_folds, n_cs, n_features + 1) 的 ndarray
字典,以类别为键,值为在每个折叠上交叉验证以及为相应类别执行 OvR 后在每个 Cs 上获得的系数路径。如果 ‘multi_class’ 选项设置为 ‘multinomial’,则 `coefs_paths` 是与每个类别对应的系数。每个字典值的形状为 `(n_folds, n_cs, n_features)` 或 `(n_folds, n_cs, n_features + 1)`,具体取决于截距是否拟合。如果 `penalty='elasticnet'`,则形状为 `(n_folds, n_cs, n_l1_ratios_, n_features)` 或 `(n_folds, n_cs, n_l1_ratios_, n_features + 1)`。
- scores_字典
字典,以类别为键,值为在为相应类别执行 OvR 后,交叉验证每个折叠期间获得的得分网格。如果给定的 ‘multi_class’ 选项是 ‘multinomial’,则所有类别都重复相同的得分,因为这是多项式类别。如果 `penalty='elasticnet'`,则每个字典值的形状为 `(n_folds, n_cs)` 或 `(n_folds, n_cs, n_l1_ratios)`。
- C_形状为 (n_classes,) 或 (n_classes - 1,) 的 ndarray
映射到每个类别最佳得分的 C 数组。如果 `refit` 设置为 False,则对于每个类别,最佳 C 是与每个折叠的最佳得分对应的 C 的平均值。当问题为二元时,`C_` 的形状为 (n_classes,)。
- l1_ratio_形状为 (n_classes,) 或 (n_classes - 1,) 的 ndarray
映射到每个类别最佳得分的 l1_ratio 数组。如果 `refit` 设置为 False,则对于每个类别,最佳 l1_ratio 是与每个折叠的最佳得分对应的 l1_ratio 的平均值。当问题为二元时,`l1_ratio_` 的形状为 (n_classes,)。
- n_iter_形状为 (n_classes, n_folds, n_cs) 或 (1, n_folds, n_cs) 的 ndarray
所有类别、折叠和 Cs 的实际迭代次数。在二元或多项式情况下,第一个维度等于 1。如果 `penalty='elasticnet'`,形状为 `(n_classes, n_folds, n_cs, n_l1_ratios)` 或 `(1, n_folds, n_cs, n_l1_ratios)`。
- n_features_in_整数
在拟合期间看到的特征数量。
0.24 版本新增。
- feature_names_in_形状为 (
n_features_in_
,) 的 ndarray 在拟合期间看到的特征名称。仅当 `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).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]#
预测样本的置信度分数。
样本的置信度分数与该样本到超平面的有符号距离成比例。
- 参数:
- 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, **params)[source]#
根据给定的训练数据拟合模型。
- 参数:
- X{类数组,稀疏矩阵},形状为 (n_samples, n_features)
训练向量,其中 `n_samples` 是样本数,`n_features` 是特征数。
- y形状为 (n_samples,) 的类数组
相对于 X 的目标向量。
- sample_weight形状为 (n_samples,) 的类数组,默认值=None
分配给单个样本的权重数组。如果未提供,则每个样本都被赋予单位权重。
- **params字典
要传递给底层拆分器和评分器的参数。
1.4 版本新增。
- 返回:
- self对象
已拟合的 LogisticRegressionCV 估计器。
- get_metadata_routing()[source]#
获取此对象的元数据路由。
请查阅用户指南了解路由机制的工作原理。
1.4 版本新增。
- 返回:
- routingMetadataRouter
一个封装路由信息的
MetadataRouter
。
- get_params(deep=True)[source]#
获取此估计器的参数。
- 参数:
- deep布尔值,默认值=True
如果为 True,将返回此估计器以及所包含的作为估计器的子对象的参数。
- 返回:
- params字典
参数名称映射到其值。
- 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, **score_params)[source]#
使用给定测试数据和标签上的 `scoring` 选项进行评分。
- 参数:
- X形状为 (n_samples, n_features) 的类数组
测试样本。
- y形状为 (n_samples,) 的类数组
X 的真实标签。
- sample_weight形状为 (n_samples,) 的类数组,默认值=None
样本权重。
- **score_params字典
要传递给底层评分器 `score` 方法的参数。
1.4 版本新增。
- 返回:
- score浮点数
`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 版本新增。
注意
此方法仅在估计器用作元估计器的子估计器时相关,例如在
Pipeline
内部使用时。否则无效。- 参数:
- sample_weight字符串、True、False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED
`fit` 方法中 `sample_weight` 参数的元数据路由。
- 返回:
- self对象
更新后的对象。
- set_params(**params)[source]#
设置此估计器的参数。
此方法适用于简单估计器以及嵌套对象(如
Pipeline
)。后者具有 `__ ` 形式的参数,因此可以更新嵌套对象的每个组件。 - 参数:
- **params字典
估计器参数。
- 返回:
- self估计器实例
估计器实例。
- 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 版本新增。
注意
此方法仅在估计器用作元估计器的子估计器时相关,例如在
Pipeline
内部使用时。否则无效。- 参数:
- sample_weight字符串、True、False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED
sample_weight字符串、True、False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED
- 返回:
- self对象
更新后的对象。
- `score` 方法中 `sample_weight` 参数的元数据路由。
-
将系数矩阵转换为稀疏格式。
将 `coef_` 成员转换为 scipy.sparse 矩阵,这对于 L1 正则化模型来说,比通常的 numpy.ndarray 表示法在内存和存储方面更有效。
- 返回:
- self
已拟合的估计器。
`intercept_` 成员未转换。
备注
对于非稀疏模型,即当 `coef_` 中零不多时,这实际上可能会 增加 内存使用量,因此请谨慎使用此方法。经验法则是,零元素的数量(可以使用 `(coef_ == 0).sum()` 计算)必须超过 50% 才能提供显著的优势。