LogisticRegression#

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)[源代码]#

逻辑回归(又名logit、MaxEnt)分类器。

这个类使用“liblinear”库、“newton-cg”、“sag”、“saga”和“lbfgs”求解器实现正规化逻辑回归。 Note that regularization is applied by default .它可以处理密集和稀疏输入。使用包含64位浮点数的C排序数组或CSR矩阵以获得最佳性能;任何其他输入格式都将被转换(和复制)。

“newton-cg”、“sag”和“lbfgs”求解器仅支持带原始公式的L2正规化,或者不支持正规化。“liblinear”求解器支持L1和L2正规化,仅针对L2罚分采用二元公式。Elastic-Net正规化仅受“传奇”解算器支持。

multiclass 问题,只有“newton-cg”、“sag”、“saga”和“lbfgs”处理多项损失。“liblinear”和“newton-spoky”仅处理二进制分类,但可以通过使用扩展以处理多类 OneVsRestClassifier .

阅读更多的 User Guide .

参数:
penalty' l1 ',' elasticnet ',无},默认=' l2 '

明确处罚规范:

  • None :不增加处罚;

  • 'l2' :添加L2处罚条款,默认选择;

  • 'l1' :添加L1处罚条款;

  • 'elasticnet' :增加L1和L2处罚条款。

警告

Some penalties may not work with some solvers. See the parameter solver below, to know the compatibility between the penalty and solver.

Added in version 0.19: 使用SAGA求解器的l1罚分(允许“多项”+ L1)

dual布尔,默认=假

双重(约束)或原始(正规化,另请参阅 this equation )配方。双公式仅针对具有Liblinear解算器的l2罚分实施。当n_samples > n_features时,首选dual=False。

tolfloat,默认= 1 e-4

停止标准的容忍度。

Cfloat,默认=1.0

规则化强度的倒数;必须是正浮动。与支持向量机一样,较小的值意味着更强的正规化。

fit_intercept布尔,默认=True

指定是否为常数(又名偏差或拦截)应添加到决策功能中。

intercept_scalingfloat,默认=1

仅当使用求解器“liblinear”并且self.fit_intercept设置为True时才有用。在这种情况下,x变成 [x, self.intercept_scaling] ,即具有等于intercept_scaling的常数值的“合成”特征被附加到实例载体。拦截变成 intercept_scaling * synthetic_feature_weight .

注意!合成特征权重与所有其他特征一样经历l1/l2正规化。为了减轻规则化对合成特征权重(从而对拦截)的影响,必须增加intersection_scaling。

class_weightdict或“balanced”,默认=无

与形式中的类关联的权重 {class_label: weight} .如果没有给出,所有类别的权重都应该为一。

“平衡”模式使用y值自动调整与输入数据中的类别频率成反比例的权重, n_samples / (n_classes * np.bincount(y)) .

请注意,如果指定了sample_weight,这些权重将与sample_weight相乘(通过fit方法传递)。

Added in version 0.17: class_weight='balanced'

random_stateint,RandomState实例,默认=无

时使用 solver ==“sag”、“saga”或“liblinear”来洗牌数据。看到 Glossary 有关详细信息

solver' lbfgs '、'、' newton-cg '、'、' sag '、'、'、' 默认=' lbfgs '

用于优化问题的算法。默认为“lbfsgs”。要选择求解器,您可能需要考虑以下方面:

  • 对于小型数据集,“liblinear”是一个不错的选择,而“sag”和“saga”对于大型数据集来说速度更快;

  • multiclass 问题时,除“Liblinear”外的所有求解器都将完全的多项损失最小化;

  • “liblinear”默认情况下只能处理二进制分类。要对多类设置应用one-versus-rest方案,可以使用 OneVsRestClassifier .

  • “newton-spoky”是一个不错的选择 n_samples >> n_features * n_classes ,尤其是具有罕见类别的一热编码类别特征。请注意,此求解器的内存使用具有二次依赖性 n_features * n_classes 因为它显式计算完整的海森矩阵。

警告

算法的选择取决于所选择的惩罚和(多项)多类支持:

求解器

处罚

多项多类

“lbfgs”

“l2”,无

是的

“自由线性”

“l1”、“l2”

没有

“newton-cg”

“l2”,无

是的

“牛顿-托基”

“l2”,无

没有

“sag”

“l2”,无

是的

“传奇”

“elasticnet”、“l1”、“l2”、无

是的

备注

“sag”和“saga”的快速收敛仅在规模大致相同的功能上才能保证。您可以使用来自的缩放器预处理数据 sklearn.preprocessing .

参见

参阅 User Guide 更多地了解 LogisticRegression 且更具体来说 Table 总结解决方案/处罚支持。

Added in version 0.17: 随机平均梯度下降解算器。

Added in version 0.19: SAGA求解器。

在 0.22 版本发生变更: 0.22中,默认解算器从“liblinear”更改为“lbfgs”。

Added in version 1.2: 牛顿-不稳定的求解器。

max_iterint,默认=100

求解器收敛所需的最大迭代次数。

multi_class' Auto ',' ovr ',','跨国公司'},默认='自动'

如果选择的选项是“ovr”,那么二进制问题适合每个标签。对于“多项”,最小化的损失是整个概率分布的多项损失, even when the data is binary .当求解器=“liblinear”时,“多项”不可用。如果数据是二进制的,或者如果solver =' liblinear ',则“Auto”选择“ovr”,否则选择“multomial”。

Added in version 0.18: “多项”情况的随机平均梯度下降求解器。

在 0.22 版本发生变更: 0.22中,默认值从“ovr”更改为“Auto”。

自 1.5 版本弃用: multi_class 在1.5版中已被弃用,并将在1.7版中删除。从那时起,推荐的“多项”将始终用于 n_classes >= 3 .不支持“多项”的求解器将引发错误。使用 sklearn.multiclass.OneVsRestClassifier(LogisticRegression()) 如果你还想使用OVR。

verboseint,默认=0

对于liblinear和lbfgs求解器将verbose设置为任何正值,以表示详细。

warm_start布尔,默认=假

当设置为True时,重新使用上一个调用的解决方案以适应初始化,否则,只需擦除上一个解决方案。对于自由线性求解器来说无用。看到 the Glossary .

Added in version 0.17: warm_start 支持 lbfgs , newton-cg , sag , saga 解决者。

n_jobsint,默认=无

如果multi_class =' ovr '”,则在类上并行时使用的中央处理器核数。当 solver 无论是否指定“multi_Class”,都设置为“liblinear”。 None 意思是1,除非在a中 joblib.parallel_backend 上下文 -1 意味着使用所有处理器。看到 Glossary 了解更多详细信息。

l1_ratiofloat,默认=无

Elastic-Net混合参数,带有 0 <= l1_ratio <= 1 .仅在以下情况下使用 penalty='elasticnet' .设置 l1_ratio=0 相当于用 penalty='l2' ,设置时 l1_ratio=1 相当于用 penalty='l1' .为 0 < l1_ratio <1 ,点球是L1和L2的组合。

属性:
classes_形状的nd数组(n_classes,)

分类器已知的类标签列表。

coef_形状的nd数组(1,n_features)或(n_classes,n_features)

决策函数中特征的系数。

coef_ 当给定问题是二元问题时,形状为(1,n_features)。特别是当 multi_class='multinomial' , coef_ 对应于结果1(真)并且 -coef_ 对应于结果0(假)。

intercept_形状为(1,)或(n_classes,)的nd数组

拦截(又名偏差)添加到决策功能中。

如果 fit_intercept 设置为False,则截取设置为零。 intercept_ 当给定问题是二元问题时,其形状为(1,)。特别是当 multi_class='multinomial' , intercept_ 对应于结果1(真)并且 -intercept_ 对应于结果0(假)。

n_features_in_int

期间看到的功能数量 fit .

Added in version 0.24.

feature_names_in_ :nd形状数组 (n_features_in_ ,)nd数组形状(

Names of features seen during fit. Defined only when X has feature names that are all strings.

Added in version 1.0.

n_iter_形状的nd数组(n_classes,)或(1,)

所有类的实际迭代次数。如果是二进制或多项式,则只返回1个元素。对于liblinear solver,只给出所有类的最大迭代次数。

在 0.20 版本发生变更: 在SciPy <= 1.0.0中,lbfgs迭代次数可能超过 max_iter . n_iter_ 现在最多会报告 max_iter .

参见

SGDClassifier

增量训练逻辑回归(当给定参数时 loss="log_loss" ).

LogisticRegressionCV

具有内置交叉验证的逻辑回归。

注意到

底层C实现在匹配模型时使用随机数生成器来选择特征。因此,相同输入数据的结果略有不同的情况并不罕见。如果发生这种情况,请尝试使用较小的tol参数。

在某些情况下,预测输出可能与独立Liblinear的输出不匹配。看到 differences from liblinear 在叙述性文件中。

引用

L-BFSG-B --大规模边界约束优化软件

Ciyou Zhu,Richard Byrd,Jorge Nocedal和Jose Luis Morales。http://users.iems.northwestern.edu/~nocedal/lbfgsb.html

LIBLININE--大型线性分类库

https://www.csie.ntu.edu.tw/~cjlin/liblinear/

SAG --马克·施密特、尼古拉斯·勒鲁和弗朗西斯·巴赫

随机平均梯度极小化有限和https://hal.inria.fr/hal-00860051/document

萨加--德法齐奥,A.,巴赫·F '拉科斯特-朱利安S.(2014)。

"SAGA: A Fast Incremental Gradient Method With Support for Non-Strongly Convex Composite Objectives"

余祥福、黄芳兰、林志仁(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...

有关LogisticRegulation与其他分类器的比较,请参阅: sphx_glr_auto_examples_classification_plot_classification_probability.py .

decision_function(X)[源代码]#

预测样本的置信度分数。

样本的置信度分数与该样本到超平面的带符号距离成正比。

参数:
X形状(n_samples,n_features)的{类数组,稀疏矩阵}

我们想要获取其置信度分数的数据矩阵。

返回:
scores形状的ndarray(n_samples,)或(n_samples,n_classes)

信心分数 (n_samples, n_classes) 组合.在二元情况下,置信度得分 self.classes_[1] 其中>0意味着这个类将被预测。

densify()[源代码]#

将系数矩阵转换为密集数组格式。

转换 coef_ member(back)to a numpy.ndarray.这是 coef_ 并且是装配所需的,因此仅需要对之前已精简的模型调用此方法;否则,这是不操作的。

返回:
自我

拟合估计量。

fit(X, y, sample_weight=None)[源代码]#

根据给定的训练数据对模型进行匹配。

参数:
X形状(n_samples,n_features)的{类数组,稀疏矩阵}

训练载体,在哪里 n_samples 是样本数量和 n_features 是功能的数量。

y形状类似阵列(n_samples,)

相对于X的目标载体。

sample_weightarray-like of shape(n_samples,)default=None

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

Added in version 0.17: sample_weight 支持LogisticRegistry。

返回:
自我

拟合估计量。

注意到

SAGA求解器支持float 64和float 32位阵列。

get_metadata_routing()[源代码]#

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

请检查 User Guide 关于路由机制如何工作。

返回:
routingMetadataRequest

A MetadataRequest 封装路由信息。

get_params(deep=True)[源代码]#

获取此估计器的参数。

参数:
deep布尔,默认=True

如果为True,将返回此估计量和包含的作为估计量的子对象的参数。

返回:
paramsdict

参数名称映射到其值。

predict(X)[源代码]#

预测X中样本的类别标签。

参数:
X形状(n_samples,n_features)的{类数组,稀疏矩阵}

我们想要获取预测的数据矩阵。

返回:
y_pred形状的nd数组(n_samples,)

包含每个样本的类标签的载体。

predict_log_proba(X)[源代码]#

预测概率估计的对数。

所有类别的返回估计都按类别标签排序。

参数:
X形状类似阵列(n_samples,n_features)

要评分的向量,其中 n_samples 是样本数量和 n_features 是功能的数量。

返回:
T形状类似阵列(n_samples,n_classes)

返回模型中每个类的样本的log概率,其中类按其所在位置排序 self.classes_ .

predict_proba(X)[源代码]#

概率估计。

所有类别的返回估计都按类别标签排序。

对于多_类问题,如果multi_类设置为“多项”,则使用softmax函数来查找每个类的预测概率。否则使用一对休息的方法,即使用逻辑函数计算每个类别的概率,假设它为正,并在所有类别中对这些值进行标准化。

参数:
X形状类似阵列(n_samples,n_features)

要评分的向量,其中 n_samples 是样本数量和 n_features 是功能的数量。

返回:
T形状类似阵列(n_samples,n_classes)

返回模型中每个类的样本概率,其中类按其所在位置排序 self.classes_ .

score(X, y, sample_weight=None)[源代码]#

返回给定测试数据和标签的平均准确度。

在多标签分类中,这是子集准确度,这是一个苛刻的指标,因为您需要为每个样本正确预测每个标签集。

参数:
X形状类似阵列(n_samples,n_features)

测试样本。

y形状的类似阵列(n_samples,)或(n_samples,n_outputs)

真正的标签 X .

sample_weight形状类似数组(n_samples,),默认=无

样本重量。

返回:
score浮子

平均准确度 self.predict(X) w.r.t. y .

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') LogisticRegression[源代码]#

请求元数据传递给 fit

请注意,此方法仅适用于以下情况 enable_metadata_routing=True (见 sklearn.set_config ).请参阅 User Guide 关于路由机制如何工作。

The options for each parameter are:

  • True :元数据被请求并传递给 fit 如果提供的话。如果未提供元数据,则会忽略请求。

  • False :未请求元数据,元估计器不会将其传递给 fit .

  • None :不请求元数据,如果用户提供元估计器,则元估计器将引发错误。

  • str :元数据应通过此给定别名而不是原始名称传递给元估计器。

默认 (sklearn.utils.metadata_routing.UNCHANGED )保留现有请求。这允许您更改某些参数的请求,而不是其他参数。

Added in version 1.3.

备注

只有当该估计器用作元估计器的子估计器时,该方法才相关,例如在 Pipeline .否则就没有效果了。

参数:
sample_weight字符串、真、假或无, 默认=sklearn.utils. metalics_Routing.UNChanged

元数据路由 sample_weight 参数 fit .

返回:
self对象

更新的对象。

set_params(**params)[源代码]#

设置此估计器的参数。

该方法适用于简单估计器以及嵌套对象(例如 Pipeline ).后者具有以下形式的参数 <component>__<parameter> 以便可以更新嵌套对象的每个组件。

参数:
**paramsdict

估计参数。

返回:
self估计器实例

估计实例。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') LogisticRegression[源代码]#

请求元数据传递给 score

请注意,此方法仅适用于以下情况 enable_metadata_routing=True (见 sklearn.set_config ).请参阅 User Guide 关于路由机制如何工作。

The options for each parameter are:

  • True :元数据被请求并传递给 score 如果提供的话。如果未提供元数据,则会忽略请求。

  • False :未请求元数据,元估计器不会将其传递给 score .

  • None :不请求元数据,如果用户提供元估计器,则元估计器将引发错误。

  • str :元数据应通过此给定别名而不是原始名称传递给元估计器。

默认 (sklearn.utils.metadata_routing.UNCHANGED )保留现有请求。这允许您更改某些参数的请求,而不是其他参数。

Added in version 1.3.

备注

只有当该估计器用作元估计器的子估计器时,该方法才相关,例如在 Pipeline .否则就没有效果了。

参数:
sample_weight字符串、真、假或无, 默认=sklearn.utils. metalics_Routing.UNChanged

元数据路由 sample_weight 参数 score .

返回:
self对象

更新的对象。

sparsify()[源代码]#

将系数矩阵转换为稀疏格式。

转换 coef_ scipy.sparse矩阵的成员,对于L1正规化模型,该矩阵比通常的numpy. ndray表示具有更高的内存和存储效率。

intercept_ 成员未转换。

返回:
自我

拟合估计量。

注意到

对于非稀疏模型,即当零不多时 coef_ ,这实际上可能 increase 内存使用情况,因此请谨慎使用此方法。经验法则是零元素的数量,可以用 (coef_ == 0).sum() ,必须超过50%才能提供显着的好处。

调用此方法后,使用partial_fit方法(如果有的话)的进一步匹配将无法工作,直到调用denssify。