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)#
线性模型通过最小化带有SGD的正则化经验损失进行拟合。
SGD代表随机梯度下降:损失的梯度是每次估计一个样本,并且模型沿着具有递减强度计划(即学习率)的路径进行更新。
正则化器是添加到损失函数中的惩罚项,使用L2的平方欧几里得范数或L1的绝对范数或两者的组合(弹性网络)将模型参数收缩到零向量。如果由于正则化器,参数更新跨越0.0值,则更新被截断为0.0,以允许学习稀疏模型并实现在线特征选择。
此实现适用于以浮点值密集numpy数组表示的数据。
更多信息请参阅 用户指南 。
- Parameters:
- 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
时,不添加惩罚。- 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)
内。Added in version 0.19.
- tolfloat or None, default=1e-3
停止标准。如果它不为None,当连续
n_iter_no_change
个epoch的损失大于best_loss - tol时,训练将停止。 根据early_stopping
参数,收敛性检查针对训练损失或验证损失。 值必须在范围[0.0, inf)
内。Added in version 0.19.
- shufflebool, default=True
是否应在每个epoch后打乱训练数据。
- verboseint, default=0
详细级别。 值必须在范围
[0, inf)
内。- epsilonfloat, default=0.1
epsilon-insensitive损失函数中的epsilon;仅当
loss
为’huber’、’epsilon_insensitive’或’squared_epsilon_insensitive’时。 对于’huber’,确定预测准确性变得不那么重要的阈值。 对于epsilon-insensitive,任何小于此阈值的当前预测和正确标签之间的差异都会被忽略。 值必须在范围[0.0, inf)
内。- random_stateint, RandomState instance, default=None
用于在
shuffle
设置为True
时打乱数据。 传递一个int以在多次函数调用中获得可重复的输出。 参见 Glossary 。- 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。
Added in version 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时终止训练。Added in version 0.20: 添加了’early_stopping’选项
- validation_fractionfloat, default=0.1
作为提前停止验证集的训练数据比例。必须在0和1之间。 仅在
early_stopping
为True时使用。 值必须在范围(0.0, 1.0)
内。Added in version 0.20: 添加了’validation_fraction’选项
- n_iter_no_changeint, default=5
在停止拟合之前等待没有改善的迭代次数。 根据
early_stopping
参数,收敛性检查针对训练损失或验证损失。 整数值必须在范围[1, max_iter)
内。Added in version 0.20: 添加了’n_iter_no_change’选项
- warm_startbool, default=False
当设置为True时,重用上一次调用fit的解决方案作为初始化,否则,只需擦除之前的解决方案。 参见 the Glossary 。
当warm_start为True时,反复调用fit或partial_fit可能会导致与单次调用fit不同的解决方案,因为数据被打乱的方式。 如果使用动态学习率,学习率会根据已看到的样本数量进行调整。调用
fit
会重置此计数器,而partial_fit
将导致增加现有计数器。- averagebool or int, default=False
当设置为True时,计算所有更新中SGD权重的平均值,并将结果存储在
coef_
属性中。如果设置为大于1的int,则在看到的总样本数达到average
后开始平均。因此average=10
将在看到10个样本后开始平均。
- Attributes:
- 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
fit 期间看到的特征数量。
Added in version 0.24.
- feature_names_in_ndarray of shape (
n_features_in_
,) fit 期间看到的特征名称。仅当
X
的特征名称为所有字符串时定义。Added in version 1.0.
See also
HuberRegressor
对异常值稳健的线性回归模型。
Lars
最小角回归模型。
Lasso
使用L1先验作为正则化训练的线性模型。
RANSACRegressor
RANSAC(随机样本一致性)算法。
Ridge
带l2正则化的线性最小二乘。
sklearn.svm.SVR
Epsilon-支持向量回归。
TheilSenRegressor
Theil-Sen估计器稳健的多变量回归模型。
Examples
>>> 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) >>> # 始终缩放输入。最方便的方法是使用管道。 >>> reg = make_pipeline(StandardScaler(), ... SGDRegressor(max_iter=1000, tol=1e-3)) >>> reg.fit(X, y) Pipeline(steps=[('standardscaler', StandardScaler()), ('sgdregressor', SGDRegressor())])
- densify()#
将系数矩阵转换为密集数组格式。
将
coef_
成员(回)转换为 numpy.ndarray。这是coef_
的默认格式,并且是拟合所必需的,因此只有在之前已经稀疏化的模型上才需要调用此方法;否则,它是一个空操作。- Returns:
- self
拟合的估计器。
- fit(X, y, coef_init=None, intercept_init=None, sample_weight=None)#
拟合带有随机梯度下降的线性模型。
- Parameters:
- X{array-like, sparse matrix}, shape (n_samples, n_features)
训练数据。
- yndarray of shape (n_samples,)
目标值。
- coef_initndarray of shape (n_features,), default=None
用于优化预热启动的初始系数。
- intercept_initndarray of shape (1,), default=None
用于优化预热启动的初始截距。
- sample_weightarray-like, shape (n_samples,), default=None
应用于单个样本的权重(1.表示未加权)。
- Returns:
- selfobject
拟合的
SGDRegressor
估计器。
- get_metadata_routing()#
获取此对象的元数据路由。
请查看 用户指南 以了解路由机制的工作原理。
- Returns:
- routingMetadataRequest
MetadataRequest
封装的 路由信息。
- get_params(deep=True)#
获取此估计器的参数。
- Parameters:
- deepbool, 默认=True
如果为True,将返回此估计器和包含的子对象(也是估计器)的参数。
- Returns:
- paramsdict
参数名称映射到它们的值。
- partial_fit(X, y, sample_weight=None)#
执行一轮给定样本的随机梯度下降。
内部使用
max_iter = 1
。因此,不能保证在一次调用后达到成本函数的最小值。诸如目标收敛和提前停止等问题应由用户处理。- Parameters:
- X{array-like, sparse matrix}, shape (n_samples, n_features)
训练数据的子集。
- ynumpy array of shape (n_samples,)
目标值的子集。
- sample_weightarray-like, shape (n_samples,), default=None
应用于单个样本的权重。 如果未提供,则假设均匀权重。
- Returns:
- selfobject
返回 self 的一个实例。
- predict(X)#
使用线性模型进行预测。
- Parameters:
- X{array-like, sparse matrix}, shape (n_samples, n_features)
输入数据。
- Returns:
- shape (n_samples,) 的 ndarray
对 X 中每个元素预测的目标值。
- score(X, y, sample_weight=None)#
返回预测的决定系数。
决定系数 \(R^2\) 定义为 \((1 - rac{u}{v})\) ,其中 \(u\) 是残差平方和
((y_true - y_pred)** 2).sum()
,而 \(v\) 是总平方和((y_true - y_true.mean()) ** 2).sum()
。最好的可能得分是 1.0,它可能是负的(因为模型可能任意地差)。一个总是预测y
的期望值的常数模型,忽略输入特征,将得到 \(R^2\) 得分为 0.0。- Parameters:
- Xarray-like of shape (n_samples, n_features)
测试样本。对于某些估计器,这可能是一个预计算的核矩阵或一个形状为
(n_samples, n_samples_fitted)
的通用对象列表,其中n_samples_fitted
是估计器拟合中使用的样本数量。- yarray-like of shape (n_samples,) or (n_samples, n_outputs)
X
的真实值。- sample_weightarray-like of shape (n_samples,), default=None
样本权重。
- Returns:
- scorefloat
\(R^2\) 相对于
y
的self.predict(X)
。
Notes
在调用回归器的
score
时使用的 \(R^2\) 得分从 0.23 版本开始使用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 #
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:
- coef_initstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
Metadata routing for
coef_init
parameter infit
.- intercept_initstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
Metadata routing for
intercept_init
parameter infit
.- 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_partial_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') SGDRegressor #
Request metadata passed to the
partial_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 topartial_fit
if provided. The request is ignored if metadata is not provided.False
: metadata is not requested and the meta-estimator will not pass it topartial_fit
.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 inpartial_fit
.
- Returns:
- selfobject
The updated object.
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') SGDRegressor #
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。