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 个样本后开始平均。
- 属性:
另请参见
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 方法(如果有)将无法继续拟合。