SGD回归器#

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 代表随机梯度下降:损失的梯度是每次一个样本进行估计,并且模型会随着递减的强度调度(又称学习率)逐步更新。

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

此实现使用特征的浮点值的密集 numpy 数组表示的数据。

用户指南 中了解更多信息。

参数:
lossstr, default=’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}, default=’l2’

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

您可以在 SGD:惩罚项 中看到惩罚项的可视化。

alphafloat, default=0.0001

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

l1_ratiofloat, default=0.15

弹性网络混合参数,其中 0 <= l1_ratio <= 1。l1_ratio=0 对应于 L2 惩罚,l1_ratio=1 对应于 L1。仅当 penalty 为 'elasticnet' 时使用。值必须在范围 [0.0, 1.0] 内。

fit_interceptbool, default=True

是否应该估计截距。如果为 False,则假设数据已经居中。

max_iterint, default=1000

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

在 0.19 版本中添加。

tolfloat 或 None, default=1e-3

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

在 0.19 版本中添加。

shufflebool, default=True

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

verboseint, default=0

详细程度。值必须在范围 [0, inf) 内。

epsilonfloat, default=0.1

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

random_stateint, RandomState 实例, default=None

用于数据洗牌,当shuffle设置为True时。传入一个整数,以便在多次函数调用中获得可重复的结果。参见词汇表

learning_ratestr, default=’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, default=0.01

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

power_tfloat, default=0.25

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

early_stoppingbool, default=False

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

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

0.20版本新增: 新增 ‘early_stopping’ 选项。

validation_fractionfloat, default=0.1

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

0.20版本新增: 新增 ‘validation_fraction’ 选项。

n_iter_no_changeint, default=5

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

0.20版本新增: 新增 ‘n_iter_no_change’ 选项。

warm_startbool, default=False

设置为 True 时,重复使用先前调用 fit 的解作为初始化,否则,只清除先前的解。参见词汇表

当 warm_start 为 True 时,重复调用 fit 或 partial_fit 可能导致与一次调用 fit 不同的解,因为数据是如何洗牌的。如果使用动态学习率,则学习率会根据已经看到的样本数量进行调整。调用fit会重置此计数器,而partial_fit会导致增加现有计数器。

averagebool or int, default=False

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

属性:
coef_ndarray of shape (n_features,)

分配给特征的权重。

intercept_ndarray of shape (1,)

截距项。

n_iter_int

达到停止条件之前的实际迭代次数。

t_int

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

n_features_in_int

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

0.24版本新增。

feature_names_in_ndarray of shape (n_features_in_,)

拟合期间看到的特征名称。仅当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{array-like, sparse matrix}, shape (n_samples, n_features)

训练数据。

yndarray of shape (n_samples,)

目标值。

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]#

获取此估计器的参数。

参数:
deep布尔值,默认为True

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

返回:
params字典

参数名称与其值的映射。

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

对给定样本执行一次随机梯度下降。

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

参数:
X{array-like, sparse matrix}, shape (n_samples, n_features)

训练数据的子集。

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

目标值的子集。

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

应用于各个样本的权重。如果未提供,则假定为均匀权重。

返回:
self对象

返回 self 的实例。

predict(X)[source]#

使用线性模型进行预测。

参数:
X{array-like, sparse matrix}, shape (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

样本权重。

返回:
score浮点数

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

备注

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

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

fitcoef_init参数的元数据路由。

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

fitintercept_init参数的元数据路由。

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

fitsample_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%,才能提供显著的益处。

调用此方法后,使用partial_fit方法(如果有)进行进一步拟合将无法工作,除非您调用densify。