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)#
逻辑回归交叉验证(即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’ 求解器可以热启动系数(参见 术语表 )。在 用户指南 中阅读更多内容。
- Parameters:
- Csint 或 float 列表,默认=10
Cs 中的每个值描述正则化强度的倒数。 如果 Cs 是一个整数,则在 1e-4 和 1e4 之间以对数比例选择 Cs 值的网格。 与支持向量机类似,较小的值指定更强的正则化。
- fit_interceptbool,默认=True
指定是否应将常数(即偏差或截距)添加到决策函数中。
- cvint 或交叉验证生成器,默认=None
默认的交叉验证生成器是分层 K 折。 如果提供一个整数,则它是使用的折数。 请参阅
sklearn.model_selection
模块获取可能的交叉验证对象列表。Changed in version 0.22:
cv
默认值如果为 None 从 3 折改为 5 折。- dualbool,默认=False
对偶(约束)或原始(正则化,另请参见 此方程 )公式。 对偶公式仅对带有 liblinear 求解器的 L2 惩罚实施。 当 n_samples > n_features 时优先使用 dual=False。
- penalty{‘l1’, ‘l2’, ‘elasticnet’},默认=’l2’
指定惩罚的范数:
'l2'
:添加 L2 惩罚项(默认使用);'l1'
:添加 L1 惩罚项;'elasticnet'
:添加 L1 和 L2 惩罚项。
Warning
某些惩罚可能与某些求解器不兼容。请参阅下面的
solver
参数, 以了解惩罚与求解器之间的兼容性。- scoringstr 或可调用对象,默认=None
一个字符串(参见 scoring_parameter )或 一个评分可调用对象/函数,签名为
scorer(estimator, X, y)
。有关可以使用的评分函数列表, 请参见sklearn.metrics
。默认使用的评分选项是 ‘accuracy’。- solver{‘lbfgs’, ‘liblinear’, ‘newton-cg’, ‘newton-cholesky’, ‘sag’, ‘saga’}, default=’lbfgs’
优化问题中要使用的算法。默认为’lbfgs’。 选择算法时,可能需要考虑以下几个方面:
对于小数据集,’liblinear’ 是一个不错的选择,而对于大数据集,’sag’ 和 ‘saga’ 更快;
对于多类问题,只有 ‘newton-cg’, ‘sag’, ‘saga’ 和 ‘lbfgs’ 能处理多项式损失;
‘liblinear’ 在:class:
LogisticRegressionCV
中可能运行较慢,因为它不能处理热启动。‘liblinear’ 和 ‘newton-cholesky’ 默认只能处理二元分类。要对多类设置应用一对多方案,可以使用
OneVsRestClassifier
进行包装。‘newton-cholesky’ 对于
n_samples
>>n_features
是一个不错的选择,尤其是对于具有罕见类别的独热编码分类特征。请注意,这个 solver 的内存使用量与n_features
有二次依赖关系,因为它显式计算Hessian矩阵。
Warning
算法的选择取决于所选的惩罚策略以及(多项式)多类支持:
solver
penalty
multinomial multiclass
‘lbfgs’
‘l2’
yes
‘liblinear’
‘l1’, ‘l2’
no
‘newton-cg’
‘l2’
yes
‘newton-cholesky’
‘l2’,
no
‘sag’
‘l2’,
yes
‘saga’
‘elasticnet’, ‘l1’, ‘l2’
yes
Note
‘sag’ 和 ‘saga’ 快速收敛仅在特征具有近似相同的尺度时才能保证。您可以使用
sklearn.preprocessing
中的缩放器对数据进行预处理。Added in version 0.17: 随机平均梯度下降求解器。
Added in version 0.19: SAGA求解器。
Added in version 1.2: newton-cholesky求解器。
- tolfloat, default=1e-4
停止标准的容差。
- max_iterint, default=100
优化算法的最大迭代次数。
- class_weightdict or ‘balanced’, default=None
类别关联的权重,格式为
{class_label: weight}
。 如果不提供,则假定所有类别的权重都为1。“balanced” 模式使用y的值自动调整权重,与输入数据中类别频率成反比,如
n_samples / (n_classes * np.bincount(y))
。请注意,如果指定了 sample_weight(通过 fit 方法传递),则这些权重将与 sample_weight 相乘。
Added in version 0.17: class_weight == ‘balanced’
- n_jobsint, default=None
交叉验证循环期间使用的CPU核心数。
None
表示1,除非在joblib.parallel_backend
上下文中。-1
表示使用所有处理器。有关更多详细信息,请参阅 Glossary 。- verboseint, default=0
对于 ‘liblinear’, ‘sag’ 和 ‘lbfgs’ 求解器,将 verbose 设置为任何正数以显示详细信息。
- refitbool, default=True
如果设置为True,则得分将在所有折叠中进行平均,对应于最佳得分的系数和C值将被取出,并使用这些参数进行最终重新拟合。 否则,折叠间得分最好的系数、截距和C值将被平均。
- 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。
- multi_class{‘auto, ‘ovr’, ‘multinomial’}, default=’auto’
如果选择的选项是 ‘ovr’,则为每个标签拟合一个二元问题。 对于 ‘multinomial’,所最小化的损失是适用于整个概率分布的多项式损失,即使数据是二元的。 当 solver=’liblinear’ 时,’multinomial’ 不可用。 ‘auto’ 如果数据是二元的或者 solver=’liblinear’,则选择 ‘ovr’,否则选择 ‘multinomial’。
Added in version 0.18: ‘multinomial’ 情况下的随机平均梯度下降求解器。
Changed in version 0.22: 默认值从 0.22 中的 ‘ovr’ 更改为 ‘auto’。
Deprecated since version 1.5:
multi_class
在版本 1.5 中已弃用,并将在 1.7 中删除。 从那时起,推荐的 ‘multinomial’ 将始终用于n_classes >= 3
。 不支持 ‘multinomial’ 的求解器将引发错误。 如果仍想使用 OvR,请使用sklearn.multiclass.OneVsRestClassifier(LogisticRegressionCV())
。- random_stateint, 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 的组合。
- Attributes:
- 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(即 penalty 不是 ‘elasticnet’),则设置为
[None]
。- coefs_paths_形状为 (n_folds, n_cs, n_features) 或 (n_folds, n_cs, n_features + 1) 的 ndarray 或 dict
以类为键,系数路径作为值的字典,这些系数路径在每个折叠中进行交叉验证后,再进行每个 Cs 的 OvR 后获得。 如果 ‘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_dict
字典,其中类作为键,值为在交叉验证每个折叠期间获得的得分网格, 这是针对相应类进行一对其余(OvR)后的结果。如果给定的’multi_class’选项为’multinomial’, 则所有类的得分将相同,因为这是多项类。每个字典值的形状为
(n_folds, n_cs)
或(n_folds, n_cs, n_l1_ratios)
,如果penalty='elasticnet'
。- C_ndarray,形状为(n_classes,)或(n_classes - 1,)
映射到每个类最佳得分的C数组。如果refit设置为False, 则对于每个类,最佳的C是对应于每个折叠最佳得分的C值的平均值。 当问题为二元时,
C_
的形状为(n_classes,)。- l1_ratio_ndarray,形状为(n_classes,)或(n_classes - 1,)
映射到每个类最佳得分的l1_ratio数组。如果refit设置为False, 则对于每个类,最佳的l1_ratio是对应于每个折叠最佳得分的l1_ratio值的平均值。 当问题为二元时,
l1_ratio_
的形状为(n_classes,)。- n_iter_ndarray,形状为(n_classes, n_folds, n_cs)或(1, n_folds, n_cs)
所有类、折叠和Cs的实际迭代次数。 在二元或多项式情况下,第一维等于1。 如果
penalty='elasticnet'
,则形状为(n_classes, n_folds, n_cs, n_l1_ratios)
或(1, n_folds, n_cs, n_l1_ratios)
。- n_features_in_int
在:term:
fit
期间看到的特征数。Added in version 0.24.
- feature_names_in_ndarray,形状为(
n_features_in_
,) 在:term:
fit
期间看到的特征名称。仅在X
具有所有字符串类型的特征名称时定义。Added in version 1.0.
See also
LogisticRegression
未调优超参数
C
的逻辑回归。
Examples
>>> 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)#
预测样本的置信度分数。
样本的置信度分数与其到超平面的有符号距离成正比。
- 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, **params)#
拟合模型根据给定的训练数据。
- Parameters:
- X{array-like, sparse matrix} 形状为 (n_samples, n_features)
训练向量,其中
n_samples
是样本的数量,n_features
是特征的数量。- y形状为 (n_samples,) 的 array-like
相对于 X 的目标向量。
- sample_weight形状为 (n_samples,) 的 array-like,默认=None
分配给单个样本的权重数组。 如果未提供,则每个样本的权重为单位权重。
- **paramsdict
传递给底层分割器和评分器的参数。
Added in version 1.4.
- Returns:
- selfobject
拟合的 LogisticRegressionCV 估计器。
- get_metadata_routing()#
获取此对象的元数据路由。
请查看 用户指南 以了解路由机制的工作原理。
Added in version 1.4.
- Returns:
- routingMetadataRouter
MetadataRouter
封装的 路由信息。
- 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, **score_params)#
使用给定的测试数据和标签上的
scoring
选项进行评分。- Parameters:
- X形状为 (n_samples, n_features) 的类数组
测试样本。
- y形状为 (n_samples,) 的类数组
X 的真实标签。
- sample_weight形状为 (n_samples,) 的类数组, 默认=None
样本权重。
- **score_paramsdict
传递给底层评分器
score
方法的参数。Added in version 1.4.
- Returns:
- scorefloat
self.predict(X) 相对于 y 的得分。
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') LogisticRegressionCV #
Request metadata passed to the
fit
method.Note that this method is only relevant if
enable_metadata_routing=True
(seesklearn.set_config
). Please see User Guide on how the routing mechanism works.The options for each parameter are:
True
: metadata is requested, and passed tofit
if provided. The request is ignored if metadata is not provided.False
: metadata is not requested and the meta-estimator will not pass it tofit
.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 infit
.
- 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$') LogisticRegressionCV #
Request metadata passed to the
score
method.Note that this method is only relevant if
enable_metadata_routing=True
(seesklearn.set_config
). Please see User Guide on how the routing mechanism works.The options for each parameter are:
True
: metadata is requested, and passed toscore
if provided. The request is ignored if metadata is not provided.False
: metadata is not requested and the meta-estimator will not pass it toscore
.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 inscore
.
- Returns:
- selfobject
The updated object.
- sparsify()#
将系数矩阵转换为稀疏格式。
将
coef_
成员转换为 scipy.sparse 矩阵,对于 L1 正则化模型来说,这种格式在内存和存储方面比通常的 numpy.ndarray 表示更高效。intercept_
成员不会被转换。- Returns:
- self
拟合的估计器。
Notes
对于非稀疏模型,即当
coef_
中没有很多零时,这实际上可能会增加内存使用量,因此请谨慎使用此方法。一个经验法则是,零元素的数量,可以通过(coef_ == 0).sum()
计算,必须超过 50% 才能提供显著的效益。调用此方法后,进一步使用 partial_fit 方法(如果有)进行拟合将不起作用,直到您调用 densify。