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)分类器。
在多类情况下,如果将 ‘multi_class’ 选项设置为 ‘ovr’,训练算法将使用一对多(OvR)方案;如果将 ‘multi_class’ 选项设置为 ‘multinomial’,则使用交叉熵损失。 (目前 ‘multinomial’ 选项仅由 ‘lbfgs’、’sag’、’saga’ 和 ‘newton-cg’ 求解器支持。)
该类利用 ‘liblinear’ 库、’newton-cg’、’sag’、’saga’ 和 ‘lbfgs’ 求解器实现了带正则化的逻辑回归。请注意,默认情况下会应用正则化 。它可以处理密集输入和稀疏输入。为了获得最佳性能,请使用C顺序数组或包含64位浮点数的CSR矩阵;任何其他输入格式都将被转换(并复制)。
‘newton-cg’、’sag’ 和 ‘lbfgs’ 求解器仅支持带有原始形式的L2正则化,或者无正则化。 ‘liblinear’ 求解器支持L1和L2正则化,仅对L2惩罚项使用对偶形式。Elastic-Net正则化仅由 ‘saga’ 求解器支持。
更多信息请参阅 用户指南 。
- Parameters:
- penalty{‘l1’, ‘l2’, ‘elasticnet’, None}, default=’l2’
指定惩罚的范数:
None
:不添加惩罚;'l2'
:添加 L2 惩罚项,这是默认选择;'l1'
:添加 L1 惩罚项;'elasticnet'
:添加 L1 和 L2 惩罚项。
Warning
某些惩罚可能不适用于某些求解器。请参阅下面的
solver
参数,了解惩罚和求解器之间的兼容性。Added in version 0.19: l1 惩罚与 SAGA 求解器(允许 ‘multinomial’ + L1)
- dualbool, default=False
对偶(约束)或原始(正则化,另请参阅 此方程 )公式。对偶公式仅针对 liblinear 求解器的 l2 惩罚实现。当 n_samples > n_features 时,首选 dual=False。
- tolfloat, default=1e-4
停止准则的容差。
- Cfloat, default=1.0
正则化强度的倒数;必须是正浮点数。类似于支持向量机,较小的值指定更强的正则化。
- fit_interceptbool, default=True
指定是否应将常数(又名偏差或截距)添加到决策函数中。
- 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。
- class_weightdict 或 ‘balanced’, default=None
与类关联的权重,形式为
{class_label: weight}
。如果未给出,则所有类都被认为具有相同的权重。“balanced” 模式使用 y 的值自动调整权重,与输入数据中的类频率成反比,如
n_samples / (n_classes * np.bincount(y))
。注意,如果指定了 sample_weight(通过 fit 方法传递),这些权重将与 sample_weight 相乘。
Added in version 0.17: class_weight=’balanced’
- random_stateint, RandomState 实例, default=None
当
solver
== ‘sag’、’saga’ 或 ‘liblinear’ 时用于打乱数据。详见 Glossary 。- solver{‘lbfgs’, ‘liblinear’, ‘newton-cg’, ‘newton-cholesky’, ‘sag’, ‘saga’}, default=’lbfgs’
优化问题中使用的算法。默认是 ‘lbfgs’。选择求解器时,您可能需要考虑以下方面:
对于小数据集,’liblinear’ 是一个不错的选择,而对于大数据集,’sag’ 和 ‘saga’ 更快;
对于多类问题,只有 ‘newton-cg’、’sag’、’saga’ 和 ‘lbfgs’ 处理多项损失;
‘liblinear’ 和 ‘newton-cholesky’ 默认只能处理二分类。要在多类设置中应用一对多方案,可以使用
OneVsRestClassifier
包装它。‘newton-cholesky’ 是
n_samples
>>n_features
的一个好选择,特别是对于具有罕见类别的一键编码分类特征。请注意,此求解器的内存使用量与n_features
有二次依赖关系,因为它显式计算 Hessian 矩阵。
Warning
算法的选择取决于所选的惩罚和(多项)多类支持:
solver
penalty
multinomial multiclass
‘lbfgs’
‘l2’, None
yes
‘liblinear’
‘l1’, ‘l2’
no
‘newton-cg’
‘l2’, None
yes
‘newton-cholesky’
‘l2’, None
no
‘sag’
‘l2’, None
yes
‘saga’
‘elasticnet’, ‘l1’, ‘l2’, None
yes
Note
‘sag’ 和 ‘saga’ 的快速收敛仅在特征具有大致相同的尺度时得到保证。您可以使用
sklearn.preprocessing
中的缩放器预处理数据。See also
有关
LogisticRegression
的更多信息,请参阅用户指南中的 Table 总结求解器/惩罚支持。Added in version 0.17: 随机平均梯度下降求解器。
Added in version 0.19: SAGA 求解器。
Changed in version 0.22: 默认求解器从 ‘liblinear’ 更改为 ‘lbfgs’ 在 0.22 版本中。
Added in version 1.2: newton-cholesky 求解器。
- max_iterint, default=100
求解器收敛的最大迭代次数。
- multi_class{‘auto’, ‘ovr’, ‘multinomial’}, default=’auto’
如果选择的选项是 ‘ovr’,则为每个标签拟合一个二分类问题。对于 ‘multinomial’,最小化的损失是跨整个概率分布拟合的多项损失,即使数据是二进制的。’multinomial’ 在 solver=’liblinear’ 时不可用。’auto’ 在数据为二进制或 solver=’liblinear’ 时选择 ‘ovr’,否则选择 ‘multinomial’。
Added in version 0.18: 随机平均梯度下降求解器用于 ‘multinomial’ 情况。
Changed in version 0.22: 默认值从 ‘ovr’ 更改为 ‘auto’ 在 0.22 版本中。
Deprecated since version 1.5:
multi_class
在 1.5 版本中被弃用,并将在 1.7 版本中移除。从那时起,推荐使用 ‘multinomial’ 将始终用于n_classes >= 3
。不支持 ‘multinomial’ 的求解器将引发错误。如果您仍想使用 OvR,请使用sklearn.multiclass.OneVsRestClassifier(LogisticRegression())
。- verboseint, default=0
对于 liblinear 和 lbfgs 求解器,设置 verbose 为任何正数以启用详细输出。
- warm_startbool, default=False
设置为 True 时,重用上一次调用 fit 的解决方案作为初始化,否则,清除之前的解决方案。对 liblinear 求解器无用。详见 the Glossary 。
Added in version 0.17: warm_start 支持 lbfgs、newton-cg、sag、saga 求解器。
- n_jobsint, default=None
当 multi_class=’ovr’ 时并行使用的 CPU 核心数。当
solver
设置为 ‘liblinear’ 时,此参数将被忽略,无论是否指定了 ‘multi_class’。None
表示 1,除非在joblib.parallel_backend
上下文中。-1
表示使用所有处理器。详见 Glossary 。- l1_ratiofloat, default=None
弹性网络混合参数,范围为
0 <= l1_ratio <= 1
。仅在penalty='elasticnet'
时使用。设置l1_ratio=0
等同于使用penalty='l2'
,而设置l1_ratio=1
等同于使用penalty='l1'
。对于0 < l1_ratio <1
,惩罚是 L1 和 L2 的组合。
- Attributes:
- classes_ndarray of shape (n_classes, )
分类器已知的类标签列表。
- coef_ndarray of shape (1, n_features) or (n_classes, n_features)
决策函数中特征的系数。
coef_
在给定问题为二分类时形状为 (1, n_features)。特别是当multi_class='multinomial'
时,coef_
对应于结果 1 (True),而-coef_
对应于结果 0 (False)。- intercept_ndarray of shape (1,) or (n_classes,)
添加到决策函数中的截距(又名偏差)。
如果
fit_intercept
设置为 False,则截距设置为零。intercept_
在给定问题为二分类时形状为 (1,)。特别是当multi_class='multinomial'
时,intercept_
对应于结果 1 (True),而-intercept_
对应于结果 0 (False)。- n_features_in_int
fit 期间看到的特征数。
Added in version 0.24.
- feature_names_in_ndarray of shape (
n_features_in_
,) fit 期间看到的特征名称。仅当
X
的特征名称均为字符串时定义。Added in version 1.0.
- n_iter_ndarray of shape (n_classes,) or (1, )
所有类的实际迭代次数。如果是二分类或多分类,则仅返回 1 个元素。对于 liblinear 求解器,仅给出所有类中最大的迭代次数。
Changed in version 0.20: 在 SciPy <= 1.0.0 中,lbfgs 迭代次数可能超过
max_iter
。n_iter_
现在最多报告max_iter
。
See also
SGDClassifier
增量训练的逻辑回归(当给定参数
loss="log_loss"
时)。LogisticRegressionCV
内置交叉验证的逻辑回归。
Notes
底层 C 实现使用随机数生成器在拟合模型时选择特征。因此,对于相同输入数据,结果略有不同并不罕见。如果发生这种情况,请尝试使用较小的 tol 参数。
预测输出在某些情况下可能与独立的 liblinear 不匹配。详见 与 liblinear 的差异 在叙述文档中。
References
- 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).
“SAGA: A Fast Incremental Gradient Method With Support for Non-Strongly Convex Composite Objectives”
- 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
Examples
>>> 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...
- 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)#
拟合模型根据给定的训练数据。
- Parameters:
- X{array-like, sparse matrix},形状为 (n_samples, n_features)
训练向量,其中
n_samples
是样本数量,n_features
是特征数量。- yarray-like,形状为 (n_samples,)
相对于 X 的目标向量。
- sample_weightarray-like,形状为 (n_samples,),默认=None
分配给单个样本的权重数组。 如果未提供,则每个样本的权重为单位权重。
Added in version 0.17: sample_weight 支持 LogisticRegression。
- Returns:
- self
拟合的估计器。
Notes
SAGA 求解器支持 float64 和 float32 位数组。
- get_metadata_routing()#
获取此对象的元数据路由。
请查看 用户指南 以了解路由机制的工作原理。
- Returns:
- routingMetadataRequest
MetadataRequest
封装的 路由信息。
- 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)#
返回给定测试数据和标签的平均准确率。
在多标签分类中,这是子集准确率,这是一个严格的指标,因为你要求每个样本的每个标签集都被正确预测。
- Parameters:
- X形状为 (n_samples, n_features) 的类数组
测试样本。
- y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组
` X`的真实标签。
- sample_weight形状为 (n_samples,) 的类数组,默认=None
样本权重。
- Returns:
- scorefloat
self.predict(X)
相对于y
的平均准确率。
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') LogisticRegression #
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$') LogisticRegression #
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。