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。 
 
 
     
