逻辑回归#
- 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)[source]#
- 逻辑回归(又称logit,MaxEnt)分类器。 - 此类使用“liblinear”库、“newton-cg”、“sag”、“saga”和“lbfgs”求解器实现正则化逻辑回归。**请注意,默认情况下会应用正则化**。它可以处理密集和稀疏输入。使用 C 顺序数组或包含 64 位浮点数的 CSR 矩阵以获得最佳性能;任何其他输入格式都将被转换(并复制)。 - “newton-cg”、“sag”和“lbfgs”求解器仅支持具有原始公式的 L2 正则化或无正则化。“liblinear”求解器支持 L1 和 L2 正则化,仅对 L2 惩罚使用对偶公式。“saga”求解器仅支持弹性网正则化。 - 对于多类别问题,“newton-cg”、“sag”、“saga”和“lbfgs”仅处理多项式损失。“liblinear”和“newton-cholesky”仅处理二元分类,但可以通过使用 - OneVsRestClassifier扩展到处理多类别。- 在用户指南中阅读更多信息。 - 参数:
- penalty {‘l1’, ‘l2’, ‘elasticnet’, None}, 默认值为 ‘l2’
- 指定惩罚的范数 - None:不添加惩罚;
- 'l2':添加 L2 惩罚项,这是默认选择;
- 'l1':添加 L1 惩罚项;
- 'elasticnet':添加 L1 和 L2 惩罚项。
 - 警告 - 某些惩罚可能不适用于某些求解器。请参见下面的参数 - solver,以了解惩罚和求解器之间的兼容性。- 版本 0.19 中新增: 使用 SAGA 求解器的 l1 惩罚(允许“multinomial”+ L1) 
- dual布尔值,默认值为 False
- 对偶(约束)或原始(正则化,另见此等式)公式。对偶公式仅针对使用 liblinear 求解器的 l2 惩罚实现。当 n_samples > n_features 时,最好使用 dual=False。 
- tol浮点数,默认值为 1e-4
- 停止标准的容差。 
- C浮点数,默认值为 1.0
- 正则化强度的倒数;必须是正浮点数。与支持向量机一样,较小的值指定更强的正则化。 
- fit_intercept布尔值,默认值为 True
- 指定是否应将常数(又称偏差或截距)添加到决策函数中。 
- intercept_scaling浮点数,默认值为 1
- 仅当使用求解器“liblinear”并将 self.fit_intercept 设置为 True 时才有用。在这种情况下,x 变成 [x, self.intercept_scaling],即一个常数值等于 intercept_scaling 的“合成”特征附加到实例向量中。截距变为 - intercept_scaling * synthetic_feature_weight。- 注意!合成特征权重与所有其他特征一样,受 l1/l2 正则化的影响。为了减少正则化对合成特征权重(因此对截距)的影响,必须增加 intercept_scaling。 
- class_weight字典或 ‘balanced’,默认值为 None
- 与类关联的权重,形式为 - {class_label: weight}。如果没有给出,则所有类的权重都假定为 1。- “balanced”模式使用 y 的值来自动调整与输入数据中类频率成反比的权重,如 - n_samples / (n_classes * np.bincount(y))。- 请注意,如果指定了 sample_weight,则这些权重将与 sample_weight(通过拟合方法传递)相乘。 - 版本 0.17 中新增: class_weight=’balanced’ 
- random_state整数、RandomState 实例,默认值为 None
- 当 - solver== ‘sag’,‘saga’ 或 ‘liblinear’ 时用于打乱数据。详情请参见词汇表。
- solver {‘lbfgs’, ‘liblinear’, ‘newton-cg’, ‘newton-cholesky’, ‘sag’, ‘saga’}, 默认值为 ‘lbfgs’
- 在优化问题中使用的算法。默认为“lbfgs”。要选择求解器,您可能需要考虑以下几个方面: - 对于小型数据集,“liblinear”是一个不错的选择,而“sag”和“saga”对于大型数据集速度更快; 
- 对于多类别问题,“liblinear”以外的所有求解器都最小化完整的 multinomial 损失; 
- “liblinear”默认情况下只能处理二元分类。为了对多类别设置应用一对多方案,可以使用 - OneVsRestClassifier对其进行包装。
- 当 - n_samples>>- n_features * n_classes时,“newton-cholesky” 是一个不错的选择,尤其是在使用独热编码的类别特征且存在稀有类别的情况下。需要注意的是,此求解器的内存使用量与- n_features * n_classes的平方成正比,因为它显式地计算完整的Hessian矩阵。
 - 警告 - 算法的选择取决于选择的惩罚项以及(多项式)多类别支持。 - 求解器 - 惩罚项 - 多项式多类别 - ‘lbfgs’ - ‘l2’,None - 是 - ‘liblinear’ - ‘l1’,‘l2’ - 否 - ‘newton-cg’ - ‘l2’,None - 是 - ‘newton-cholesky’ - ‘l2’,None - 否 - ‘sag’ - ‘l2’,None - 是 - ‘saga’ - ‘elasticnet’,‘l1’,‘l2’,None - 是 - 注意 - ‘sag’ 和 ‘saga’ 的快速收敛仅在特征具有大致相同尺度的情况下才能保证。可以使用 - sklearn.preprocessing中的缩放器预处理数据。- 另请参阅 - 有关用户指南中提供了更多关于 - LogisticRegression的信息,特别是总结了求解器/惩罚项支持的表格。- 0.17版本新增: 随机平均梯度下降求解器。 - 0.19版本新增: SAGA 求解器。 - 0.22版本变更: 默认求解器从 ‘liblinear’ 变为 ‘lbfgs’。 - 1.2版本新增: newton-cholesky 求解器。 
- max_iterint,默认值=100
- 求解器收敛所需的最大迭代次数。 
- multi_class{'auto', 'ovr', 'multinomial'},默认值='auto'
- 如果选择 'ovr',则为每个标签拟合一个二元问题。对于 'multinomial',即使数据是二元的,最小化的损失也是在整个概率分布上拟合的多项式损失。当 solver='liblinear' 时,'multinomial'不可用。'auto' 在数据为二元或 solver='liblinear' 时选择 'ovr',否则选择 'multinomial'。 - 0.18版本新增: 用于 'multinomial' 情况的随机平均梯度下降求解器。 - 0.22版本变更: 默认值从 'ovr' 变为 'auto'。 - 自1.5版本起弃用: - multi_class已在 1.5 版本中弃用,并将在 1.7 版本中移除。从那时起,对于- n_classes >= 3,推荐的 'multinomial' 将始终被使用。不支持 'multinomial' 的求解器将引发错误。如果您仍然想使用 OvR,请使用- sklearn.multiclass.OneVsRestClassifier(LogisticRegression())。
- verboseint,默认值=0
- 对于 liblinear 和 lbfgs 求解器,将 verbose 设置为任何正数以启用详细输出。 
- warm_startbool,默认值=False
- 设置为 True 时,复用之前调用 fit 的解作为初始化,否则,擦除之前的解。对 liblinear 求解器无效。参见词汇表。 - 0.17版本新增: warm_start 支持 lbfgs、newton-cg、sag、saga 求解器。 
- n_jobsint,默认值=None
- 如果 multi_class='ovr',则在对类别进行并行化时使用的 CPU 内核数。当 - solver设置为 'liblinear' 时,无论是否指定 'multi_class',此参数都将被忽略。- None表示 1,除非在- joblib.parallel_backend上下文中。- -1表示使用所有处理器。有关更多详细信息,请参见词汇表。
- l1_ratiofloat,默认值=None
- 弹性网络混合参数,其中 - 0 <= l1_ratio <= 1。仅在- penalty='elasticnet'时使用。设置- l1_ratio=0等效于使用- penalty='l2',而设置- l1_ratio=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)。特别是,当- multi_class='multinomial'时,- coef_对应于结果 1 (True),而- -coef_对应于结果 0 (False)。
- intercept_形状为 (1,) 或 (n_classes,) 的 ndarray
- 添加到决策函数中的截距(又称偏差)。 - 如果 - fit_intercept设置为 False,则截距设置为零。- intercept_的形状为 (1,),当给定问题为二元问题时。特别是,当- multi_class='multinomial'时,- intercept_对应于结果 1 (True),而- -intercept_对应于结果 0 (False)。
- n_features_in_int
- 在拟合期间看到的特征数量。 - 0.24版本新增。 
- feature_names_in_形状为 (n_features_in_,) 的 ndarray
- 在拟合过程中观察到的特征名称。仅当 - X的特征名称全部为字符串时才定义。- 版本 1.0 中添加。 
- n_iter_形状为 (n_classes,) 或 (1, ) 的ndarray
- 所有类的实际迭代次数。如果是二元或多项式,则只返回 1 个元素。对于 liblinear 求解器,只给出所有类中迭代次数的最大值。 - 版本 0.20 中更改: 在 SciPy <= 1.0.0 中,lbfgs 迭代次数可能会超过 - max_iter。- n_iter_现在最多报告- max_iter。
 
 - 另请参阅 - SGDClassifier
- 增量训练的逻辑回归(当给出参数 - loss="log_loss"时)。
- LogisticRegressionCV
- 具有内置交叉验证的逻辑回归。 
 - 备注 - 底层的 C 实现使用随机数生成器在拟合模型时选择特征。因此,对于相同输入数据,结果略有不同的情况并不少见。如果发生这种情况,请尝试使用较小的 tol 参数。 - 在某些情况下,预测输出可能与独立的 liblinear 不匹配。请参阅叙述性文档中的liblinear 的差异。 - 参考文献 - L-BFGS-B – 大规模有界约束优化软件
- Ciyou Zhu、Richard Byrd、Jorge Nocedal 和 Jose Luis Morales。http://users.iems.northwestern.edu/~nocedal/lbfgsb.html 
- 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)。
- 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 
 - 示例 - >>> 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... - 有关 LogisticRegression 与其他分类器的比较,请参见:分类概率图。 - 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)[source]#
- 根据给定的训练数据拟合模型。 - 参数:
- X形状为 (n_samples, n_features) 的{类数组、稀疏矩阵}
- 训练向量,其中 - n_samples是样本数,- n_features是特征数。
- y形状为 (n_samples,) 的类数组
- 相对于 X 的目标向量。 
- sample_weight形状为 (n_samples,) 的类数组,默认值为 None
- 分配给单个样本的权重数组。如果未提供,则每个样本都赋予单位权重。 - 版本 0.17 中添加: LogisticRegression 的sample_weight 支持。 
 
- 返回:
- self
- 拟合的估计器。 
 
 - 备注 - SAGA 求解器支持 float64 和 float32 位数组。 
 - get_metadata_routing()[source]#
- 获取此对象的元数据路由。 - 请查看用户指南,了解路由机制的工作原理。 - 返回:
- routingMetadataRequest
- 一个 - MetadataRequest,封装了路由信息。
 
 
 - 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)[source]#
- 返回给定测试数据和标签的平均准确率。 - 在多标签分类中,这是子集准确率,这是一个严格的指标,因为您要求对每个样本正确预测每个标签集。 - 参数:
- X形状为 (n_samples, n_features) 的类数组
- 测试样本。 
- y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组
- X的真实标签。
- sample_weight形状为 (n_samples,) 的类数组,默认为 None
- 样本权重。 
 
- 返回:
- score浮点数
- self.predict(X)关于- y的平均准确率。
 
 
 - set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') LogisticRegression[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>形式的参数,因此可以更新嵌套对象的每个组件。- 参数:
- **params**dict
- 估计器参数。 
 
- 返回:
- selfestimator instance
- 估计器实例。 
 
 
 - set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') LogisticRegression[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%,才能提供显著的优势。- 调用此方法后,直到调用 densify 之前,使用 partial_fit 方法(如果有)的进一步拟合将不起作用。 
 
 
     
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
