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--大型线性分类库
- 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。