逻辑回归交叉验证 (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 惩罚使用对偶公式。弹性网络惩罚仅受 saga 求解器支持。 - 对于 - Cs值和- l1_ratios值的网格,最佳超参数由交叉验证器- StratifiedKFold选择,但可以使用 cv 参数进行更改。'newton-cg'、'sag'、'saga' 和 'lbfgs' 求解器可以预热启动系数(参见词汇表)。- 在用户指南中了解更多信息。 - 参数:
- Csint 或 float 列表,默认为 10
- Cs 中的每个值都描述了正则化强度的倒数。如果 Cs 是一个整数,则在 1e-4 和 1e4 之间的对数刻度上选择 Cs 值的网格。与支持向量机一样,较小的值指定更强的正则化。 
- fit_interceptbool,默认为 True
- 指定是否应将常数(又称偏差或截距)添加到决策函数中。 
- cvint 或交叉验证生成器,默认为 None
- 使用的默认交叉验证生成器是分层 K 折。如果提供整数,则它是使用的折叠数。有关可能的交叉验证对象的列表,请参见模块 - sklearn.model_selection。- 0.22 版中的更改: 如果为 None,则 - cv的默认值从 3 折更改为 5 折。
- dualbool,默认为 False
- 对偶(约束)或原始(正则化,另请参见此等式)公式。对偶公式仅针对 liblinear 求解器的 l2 惩罚实现。当 n_samples > n_features 时,最好使用 dual=False。 
- penalty{'l1','l2','elasticnet'},默认为 'l2'
- 指定惩罚的范数 - 'l2':添加 L2 惩罚项(默认使用);
- 'l1':添加 L1 惩罚项;
- 'elasticnet':添加 L1 和 L2 惩罚项。
 - 警告 - 某些惩罚可能不适用于某些求解器。请参见下面的 - solver参数,了解惩罚和求解器之间的兼容性。
- scoringstr 或可调用对象,默认为 None
- 字符串(参见评分参数:定义模型评估规则)或具有签名 - scorer(estimator, X, y)的评分可调用对象/函数。有关可使用的评分函数列表,请查看- sklearn.metrics。使用的默认评分选项是“准确性”。
- solver{'lbfgs','liblinear','newton-cg','newton-cholesky','sag','saga'},默认为 'lbfgs'
- 在优化问题中使用的算法。默认为 'lbfgs'。要选择求解器,您可能需要考虑以下方面: - 对于小型数据集,'liblinear' 是一个不错的选择,而 'sag' 和 'saga' 对于大型数据集则更快; 
- 对于多类问题,除 'liblinear' 之外的所有求解器都最小化完全多项式损失; 
- 在 - LogisticRegressionCV中,'liblinear' 可能会较慢,因为它不处理预热启动。
- 默认情况下,'liblinear' 只能处理二元分类。要将一对多方案应用于多类设置,可以使用 - OneVsRestClassifier将其包装起来。
- 当 - n_samples>>- n_features * n_classes时,‘newton-cholesky’ 是一个不错的选择,尤其是在使用独热编码的类别特征且存在稀有类别的情况下。需要注意的是,此求解器的内存使用量与- 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版本新增: 随机平均梯度下降求解器。 - 0.19版本新增: SAGA 求解器。 - 1.2版本新增: newton-cholesky 求解器。 
- tol浮点数,默认值=1e-4
- 停止标准的容差。 
- max_iter整数,默认值=100
- 优化算法的最大迭代次数。 
- class_weight字典或 ‘balanced’,默认值=None
- 与类别相关的权重,格式为 - {class_label: weight}。如果未给出,则所有类别的权重都假定为1。- “balanced” 模式使用 y 的值自动调整权重,使其与输入数据中类别的频率成反比,计算方式为 - n_samples / (n_classes * np.bincount(y))。- 请注意,如果指定了 sample_weight(通过 fit 方法传递),则这些权重将与 sample_weight 相乘。 - 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',即使数据是二元的,也要对整个概率分布进行多项式损失最小化。“multinomial” 在 solver='liblinear' 时不可用。“auto” 如果数据是二元的,或者如果 solver='liblinear',则选择 '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
- 弹性网络混合参数的列表,其中 - 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
- 字典,键为类别,值为在交叉验证期间获得的系数路径,该路径遍历每个fold,然后在对相应类别进行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后,在交叉验证每个fold期间获得的分数网格。如果给定的'multi_class'选项为'multinomial',则所有类别中的分数都相同,因为这是多项式类别。每个字典值的形状为 - (n_folds, n_cs)或如果- penalty='elasticnet',则为- (n_folds, n_cs, n_l1_ratios)。
- C_形状为 (n_classes,) 或 (n_classes - 1,) 的ndarray
- C数组,映射到每个类别中最佳分数。如果将refit设置为False,则对于每个类别,最佳C是对应于每个fold的最佳分数的C的平均值。 - C_在问题是二元分类时形状为(n_classes,)。
- l1_ratio_形状为 (n_classes,) 或 (n_classes - 1,) 的ndarray
- l1_ratio数组,映射到每个类别中最佳分数。如果将refit设置为False,则对于每个类别,最佳l1_ratio是对应于每个fold的最佳分数的l1_ratio的平均值。 - l1_ratio_在问题是二元分类时形状为(n_classes,)。
- n_iter_形状为 (n_classes, n_folds, n_cs) 或 (1, n_folds, n_cs) 的ndarray
- 所有类别、fold和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
- 分配给各个样本的权重数组。如果未提供,则每个样本的权重为 1。 
- **paramsdict
- 传递给底层分割器和评分器的参数。 - 1.4 版本新增。 
 
- 返回:
- self对象
- 已拟合的 LogisticRegressionCV 估计器。 
 
 
 - get_metadata_routing()[source]#
- 获取此对象的元数据路由。 - 请查看 用户指南,了解路由机制的工作原理。 - 1.4 版本新增。 - 返回:
- routingMetadataRouter
- 一个 - MetadataRouter,封装了路由信息。
 
 
 - get_params(deep=True)[source]#
- 获取此估计器的参数。 - 参数:
- deepbool,默认值=True
- 如果为 True,则将返回此估计器以及其中包含的作为估计器的子对象的的参数。 
 
- 返回:
- paramsdict
- 参数名称与其值的映射。 
 
 
 - 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_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 中新增。 - 注意 - 仅当此估计器用作元估计器的子估计器(例如,在 - Pipeline内部使用)时,此方法才相关。否则,它无效。- 参数:
- sample_weightstr、True、False 或 None,默认为 sklearn.utils.metadata_routing.UNCHANGED
- fit中- sample_weight参数的元数据路由。
 
- 返回:
- self对象
- 更新后的对象。 
 
 
 - set_params(**params)[source]#
- 设置此估计器的参数。 - 此方法适用于简单的估计器以及嵌套对象(例如 - Pipeline)。后者具有- <component>__<parameter>形式的参数,因此可以更新嵌套对象的每个组件。- 参数:
- **paramsdict
- 估计器参数。 
 
- 返回:
- 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_weightstr、True、False 或 None,默认为 sklearn.utils.metadata_routing.UNCHANGED
- score中- sample_weight参数的元数据路由。
 
- 返回:
- self对象
- 更新后的对象。 
 
 
 - sparsify()[source]#
- 将系数矩阵转换为稀疏格式。 - 将 - coef_成员转换为 scipy.sparse 矩阵,对于 L1 正则化模型,这比通常的 numpy.ndarray 表示更节省内存和存储空间。- intercept_成员不会被转换。- 返回:
- self
- 已拟合的估计器。 
 
 - 备注 - 对于非稀疏模型,即当 - coef_中没有很多零时,这实际上可能会增加内存使用量,因此请谨慎使用此方法。一个经验法则是,零元素的数量(可以使用- (coef_ == 0).sum()计算)必须超过 50%,才能提供显著的益处。- 调用此方法后,使用 partial_fit 方法(如果有)进行进一步拟合将无法工作,直到您调用 densify。 
 
 
     
