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 个样本后开始平均。
- 属性:
另请参阅
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
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%,才能提供显著的益处。调用此方法后,使用partial_fit方法(如果有)进行进一步拟合将无法工作,除非您调用densify。