SGDRegressor#

class sklearn.linear_model.SGDRegressor(loss='squared_error', *, penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, tol=0.001, shuffle=True, verbose=0, epsilon=0.1, random_state=None, learning_rate='invscaling', eta0=0.01, power_t=0.25, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, warm_start=False, average=False)[source]#

通过最小化正则化经验损失与 SGD 拟合的线性模型。

SGD 代表随机梯度下降:损失的梯度每次对一个样本进行估计,模型随之以递减的强度计划(即学习率)进行更新。

正则化器是添加到损失函数中的惩罚项,它使用平方欧几里得范数 L2、绝对范数 L1 或两者的组合(弹性网络)将模型参数收缩到零向量。如果参数更新由于正则化器而超过 0.0 值,则更新将被截断为 0.0,以允许学习稀疏模型并实现在线特征选择。

此实现适用于表示为特征的浮点值的密集 NumPy 数组数据。

用户指南中阅读更多内容。

参数:
lossstr, 默认='squared_error'

要使用的损失函数。可能的值是 'squared_error'、'huber'、'epsilon_insensitive' 或 'squared_epsilon_insensitive'

'squared_error' 指的是普通的最小二乘拟合。'huber' 修改 'squared_error',通过将平方损失转换为线性损失(超过 epsilon 距离)来减少对离群点正确性的关注。'epsilon_insensitive' 忽略小于 epsilon 的误差,并在此之外是线性的;这是 SVR 中使用的损失函数。'squared_epsilon_insensitive' 也是如此,但超过 epsilon 容差后变为平方损失。

有关损失公式的更多详细信息,请参见用户指南

penalty{'l2', 'l1', 'elasticnet', None}, 默认='l2'

要使用的惩罚项(又称正则化项)。默认为 'l2',这是线性 SVM 模型的标准正则化器。'l1' 和 'elasticnet' 可能会给模型带来 'l2' 无法实现的稀疏性(特征选择)。设置为 None 时不添加惩罚项。

您可以在SGD: 惩罚项中查看惩罚项的视觉效果。

alphafloat, 默认=0.0001

正则化项的乘数常数。值越高,正则化越强。当 learning_rate 设置为 'optimal' 时,也用于计算学习率。值必须在 [0.0, inf) 范围内。

l1_ratiofloat, 默认=0.15

弹性网络混合参数,0 <= l1_ratio <= 1。l1_ratio=0 对应 L2 惩罚,l1_ratio=1 对应 L1。仅当 penalty 为 'elasticnet' 时使用。值必须在 [0.0, 1.0] 范围内,如果 penalty 不是 elasticnet,则可以为 None

1.7 版本新增:penalty 不是 "elasticnet" 时,l1_ratio 可以为 None

fit_interceptbool, 默认=True

是否估计截距。如果为 False,则假定数据已居中。

max_iterint, 默认=1000

对训练数据进行的最大遍数(又称 epoch)。它仅影响 fit 方法的行为,而不影响 partial_fit 方法。值必须在 [1, inf) 范围内。

0.19 版本新增。

tolfloat 或 None, 默认=1e-3

停止准则。如果不是 None,当(损失 > best_loss - tol)持续 n_iter_no_change 个连续 epoch 时,训练将停止。根据 early_stopping 参数,收敛性针对训练损失或验证损失进行检查。值必须在 [0.0, inf) 范围内。

0.19 版本新增。

shufflebool, 默认=True

每个 epoch 后是否打乱训练数据。

verboseint, 默认=0

冗长级别。值必须在 [0, inf) 范围内。

epsilonfloat, 默认=0.1

epsilon 不敏感损失函数中的 epsilon;仅当 loss 为 'huber'、'epsilon_insensitive' 或 'squared_epsilon_insensitive' 时。对于 'huber',它决定了预测不再需要完全正确的阈值。对于 epsilon 不敏感,当前预测与正确标签之间的任何差异如果小于此阈值,则会被忽略。值必须在 [0.0, inf) 范围内。

random_stateint, RandomState 实例, 默认=None

shuffle 设置为 True 时,用于打乱数据。传入一个整数以在多次函数调用中获得可重现的输出。参见术语表

learning_ratestr, 默认='invscaling'

学习率调度

  • 'constant': eta = eta0

  • 'optimal': eta = 1.0 / (alpha * (t + t0)),其中 t0 由 Leon Bottou 提出的启发式方法选择。

  • 'invscaling': eta = eta0 / pow(t, power_t)

  • 'adaptive':eta = eta0,只要训练损失持续下降。每次连续 n_iter_no_change 个 epoch 未能将训练损失降低 tol 或未能将验证分数提高 tol(如果 early_stopping 为 True),则当前学习率除以 5。

0.20 版本新增:添加了 'adaptive' 选项。

eta0float, 默认=0.01

'constant'、'invscaling' 或 'adaptive' 调度器的初始学习率。默认值为 0.01。值必须在 [0.0, inf) 范围内。

power_tfloat, 默认=0.25

反向缩放学习率的指数。值必须在 (-inf, inf) 范围内。

early_stoppingbool, 默认=False

当验证分数没有改善时,是否使用提前停止来终止训练。如果设置为 True,它将自动将一部分训练数据作为验证集,并在 score 方法返回的验证分数在连续 n_iter_no_change 个 epoch 内没有至少改进 tol 时终止训练。

参见随机梯度下降的提前停止,了解提前停止效果的示例。

0.20 版本新增:添加了 'early_stopping' 选项

validation_fractionfloat, 默认=0.1

作为验证集用于提前停止的训练数据比例。必须在 0 到 1 之间。仅当 early_stopping 为 True 时使用。值必须在 (0.0, 1.0) 范围内。

0.20 版本新增:添加了 'validation_fraction' 选项

n_iter_no_changeint, 默认=5

在停止拟合之前,没有改进的迭代次数。根据 early_stopping 参数,收敛性针对训练损失或验证损失进行检查。整数值必须在 [1, max_iter) 范围内。

0.20 版本新增:添加了 'n_iter_no_change' 选项

warm_startbool, 默认=False

当设置为 True 时,重用上次调用 fit 的解决方案作为初始化,否则,擦除之前的解决方案。参见术语表

warm_start 为 True 时,重复调用 fit 或 partial_fit 可能会导致与仅调用 fit 一次不同的解决方案,这是由于数据打乱方式造成的。如果使用动态学习率,学习率会根据已看到的样本数量进行调整。调用 fit 会重置此计数器,而 partial_fit 会增加现有计数器。

averagebool 或 int, 默认=False

当设置为 True 时,计算所有更新的平均 SGD 权重,并将结果存储在 coef_ 属性中。如果设置为大于 1 的整数,则在看到的总样本数达到 average 后开始平均。因此,average=10 将在看到 10 个样本后开始平均。

属性:
coef_形状为 (n_features,) 的 ndarray

分配给特征的权重。

intercept_形状为 (1,) 的 ndarray

截距项。

n_iter_int

达到停止准则前的实际迭代次数。

t_int

训练期间执行的权重更新次数。与 (n_iter_ * n_samples + 1) 相同。

n_features_in_int

拟合期间看到的特征数量。

0.24 版本新增。

feature_names_in_形状为 (n_features_in_,) 的 ndarray

拟合期间看到的特征名称。仅当 X 具有都是字符串的特征名称时才定义。

1.0 版本新增。

另请参见

HuberRegressor

对离群点具有鲁棒性的线性回归模型。

Lars

最小角回归模型。

Lasso

用 L1 先验作为正则化器训练的线性模型。

RANSACRegressor

RANSAC (RANdom SAmple Consensus) 算法。

Ridge

带 L2 正则化的线性最小二乘。

sklearn.svm.SVR

epsilon-支持向量回归。

TheilSenRegressor

Theil-Sen 估计器鲁棒多变量回归模型。

示例

>>> import numpy as np
>>> from sklearn.linear_model import SGDRegressor
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler
>>> n_samples, n_features = 10, 5
>>> rng = np.random.RandomState(0)
>>> y = rng.randn(n_samples)
>>> X = rng.randn(n_samples, n_features)
>>> # Always scale the input. The most convenient way is to use a pipeline.
>>> reg = make_pipeline(StandardScaler(),
...                     SGDRegressor(max_iter=1000, tol=1e-3))
>>> reg.fit(X, y)
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('sgdregressor', SGDRegressor())])
densify()[source]#

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

coef_ 成员(回)转换为 numpy.ndarray。这是 coef_ 的默认格式,并且是拟合所必需的,因此仅在先前已稀疏化的模型上才需要调用此方法;否则,它是一个空操作。

返回:
self

已拟合的估计器。

fit(X, y, coef_init=None, intercept_init=None, sample_weight=None)[source]#

使用随机梯度下降拟合线性模型。

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

训练数据。

y形状为 (n_samples,) 的 ndarray

目标值。

coef_init形状为 (n_features,) 的 ndarray, 默认=None

用于热启动优化的初始系数。

intercept_init形状为 (1,) 的 ndarray, 默认=None

用于热启动优化的初始截距。

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

应用于单个样本的权重(未加权时为 1.)。

返回:
self对象

已拟合的 SGDRegressor 估计器。

get_metadata_routing()[source]#

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

请查看用户指南,了解路由机制的工作原理。

返回:
routingMetadataRequest

封装路由信息的 MetadataRequest

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool, 默认=True

如果为 True,将返回此估计器及其包含的子对象(如果它们是估计器)的参数。

返回:
paramsdict

参数名称映射到其值。

partial_fit(X, y, sample_weight=None)[source]#

对给定样本执行一个 epoch 的随机梯度下降。

在内部,此方法使用 max_iter = 1。因此,不保证在调用它一次后达到成本函数的最小值。诸如目标收敛和提前停止之类的事项应由用户处理。

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

训练数据的子集。

y形状为 (n_samples,) 的 numpy 数组

目标值的子集。

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

应用于单个样本的权重。如果未提供,则假定为统一权重。

返回:
self对象

返回 self 的实例。

predict(X)[source]#

使用线性模型进行预测。

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

输入数据。

返回:
形状为 (n_samples,) 的 ndarray

X 中每个元素的预测目标值。

score(X, y, sample_weight=None)[source]#

返回测试数据的决定系数

决定系数 \(R^2\) 定义为 \((1 - \frac{u}{v})\),其中 \(u\) 是残差平方和 ((y_true - y_pred)** 2).sum()\(v\) 是总平方和 ((y_true - y_true.mean()) ** 2).sum()。最佳可能分数是 1.0,它也可以是负数(因为模型可能任意差)。一个总是预测 y 期望值而不考虑输入特征的常数模型将获得 0.0 的 \(R^2\) 分数。

参数:
X形状为 (n_samples, n_features) 的类数组

测试样本。对于某些估计器,这可能是一个预计算的核矩阵或一个通用对象列表,其形状为 (n_samples, n_samples_fitted),其中 n_samples_fitted 是估计器拟合中使用的样本数量。

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组

X 的真实值。

sample_weight形状为 (n_samples,) 的类数组, 默认=None

样本权重。

返回:
scorefloat

self.predict(X) 相对于 y\(R^2\)

备注

从 0.23 版本开始,调用回归器的 score 方法时使用的 \(R^2\) 分数使用 multioutput='uniform_average',以与 r2_score 的默认值保持一致。这影响了所有多输出回归器(除了 MultiOutputRegressor)的 score 方法。

set_fit_request(*, coef_init: bool | None | str = '$UNCHANGED$', intercept_init: bool | None | str = '$UNCHANGED$', sample_weight: bool | None | str = '$UNCHANGED$') SGDRegressor[source]#

请求传递给 fit 方法的元数据。

请注意,此方法仅在 enable_metadata_routing=True 时相关(参见 sklearn.set_config)。请参见用户指南,了解路由机制的工作原理。

每个参数的选项是

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

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

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

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

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

1.3 版本新增。

备注

此方法仅当此估计器用作元估计器的子估计器时相关,例如在 Pipeline 中使用时。否则它没有效果。

参数:
coef_initstr, True, False, 或 None, 默认=sklearn.utils.metadata_routing.UNCHANGED

fit 方法中 coef_init 参数的元数据路由。

intercept_initstr, True, False, 或 None, 默认=sklearn.utils.metadata_routing.UNCHANGED

fit 方法中 intercept_init 参数的元数据路由。

sample_weightstr, True, False, 或 None, 默认=sklearn.utils.metadata_routing.UNCHANGED

fit 方法中 sample_weight 参数的元数据路由。

返回:
self对象

更新后的对象。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**paramsdict

估计器参数。

返回:
self估计器实例

估计器实例。

set_partial_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') SGDRegressor[source]#

请求传递给 partial_fit 方法的元数据。

请注意,此方法仅在 enable_metadata_routing=True 时相关(参见 sklearn.set_config)。请参见用户指南,了解路由机制的工作原理。

每个参数的选项是

  • True:请求元数据,如果提供则传递给 partial_fit。如果未提供元数据,则忽略请求。

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

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

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

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

1.3 版本新增。

备注

此方法仅当此估计器用作元估计器的子估计器时相关,例如在 Pipeline 中使用时。否则它没有效果。

参数:
sample_weightstr, True, False, 或 None, 默认=sklearn.utils.metadata_routing.UNCHANGED

partial_fit 方法中 sample_weight 参数的元数据路由。

返回:
self对象

更新后的对象。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') SGDRegressor[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 方法(如果有)将无法继续拟合。