SGD回归
算法介绍
SGDRegressor是一种基于随机梯度下降(Stochastic Gradient Descent, SGD)的线性回归模型。该模型使用梯度下降方法来最小化损失函数,通过不断更新权重参数的值来学习最佳拟合直线或曲面。
使用场景
- 大型数据集:相比于基于矩阵计算的线性回归模型,SGDRegressor 可以允许在处理大规模数据时使用一定的随机采样策略和并行计算加速训练过程。
- 非常高维度数据:SGDRegressor 能够有效处理较高维度的数据集。
- 在噪声较大的情况下建议使用这个模型。由于可以选择不同类型的损失函数(如平均绝对误差),它更具有鲁棒性,能处理由于去噪,误差等造成的离散点和边缘点带来的影响。
- 优势介绍
- 计算速度快:由于采用随机梯度下降算法,SGDRegressor 处理大规模数据集的速度相较于基于矩阵计算的线性回归模型更快,而且在机器学习算法中所需内存小。
- 易于实现和解释:与Linear Regression 模型相似,SGDRegressor 算法也易于实现和解释。
- 适用范围广泛:SGDRegressor 不仅支持线性回归问题,还在其基础上拓展了很多其他的问题类型(如分类问题、回归问题等)。此外,SGDRegressor 可以通过选择不同类型的损失函数,可以更好地适应多样的数据场景。
- 参数更新快:因为每次计算时只选取一个样本进行训练,使得参数跟新的速度更快。
- 劣势介绍
- 对数据要求高:与其他机器学习算法一样,SGDRegressor 回归模型需要 inputs 数据是有意义的。建立模型之前,需要保证输入的特征数据清洗和标准化,确保模型具有良好的性能。
- 调参较多:SGDRegressor 支持多种不同的参数及超参数设置,例如学习率,惩罚系数等,需要在训练期间进行调整,以达到最优模型。亦因此,SGDRegressor 训练过程中存在调参难度较高的问题。
- 容易混淆参数:SGDRegressor 有多种超参数可以调整,而不同的超参数可能会导致模型结果不同,这给用户带来了一定的困惑和实践风险。
- 对离群值比较敏感:SGDRegressor 基于梯度下降算法,对存在是离群值的样本点比较敏感。
参数介绍
仅支持通过可视化方式,配置读取该组件参数,参数详情如下表所示:
页签 | 参数 | 参数名称 | 是否必选 | 参数描述 | 默认值 |
---|---|---|---|---|---|
数据源 | 表名 | inputTable | 是 | 数据表 | 无 |
默认参数 | 选择特征标签列 | labelColName | 是 | 输入表中选择标签列名类型。 | 无 |
模型参数 | 损失函数 | loss | 是 | 损失函数的类型包括squared_loss、huber、epsilon_unsensitive或squared_epsilon_unsensitive。 | squared_loss |
模型参数 | 惩罚项 | penalty | 是 | 惩罚项包含l1,l2,elasticnet。 | l2 |
模型参数 | 是否估计截距 | fit_intercept | 是 | 布尔值,是否估计截距,如果为假,认为数据已经中心化。 | True |
调优参数 | 优化算法的迭代次数 | max_iter | 是 | 整数,可选的。迭代的最大次数。 | 1000 |
调优参数 | 训练结束误差边界 | tol | 是 | 浮点数。训练结束的误差边界。当previous_loss - cur_loss < tol时,训练结束。 | 0.001 |
调优参数 | 学习率策略 | learning_rate | 是 | 学习速率的策略包括constant, optimal, invscaling, adaptive。 | invscaling |
调优参数 | 是否使用提前停止终止 | early_stopping | 是 | 布尔值。验证分数没有提高时,是否使用提前停止终止培训。如果设置为True,则当分数方法返回的验证分数没有至少提高tol时,它将自动保留一部分训练数据作为验证,并终止训练。 | False |
调优参数 | 允许在提前停止前无改进的迭代次数 | n_iter_no_change | 是 | 在提前停止之前没有改进的迭代次数。 | 10 |
- 推荐参数值
- loss:损失函数,支持'mean_squared_error'(均方误差),'huber','epsilon_insensitive'和'squared_epsilon_insensitive'等,默认为'mean_squared_error'。
- penalty:正则化惩罚项,支持'l1', 'l2', 'elasticnet'和'none',默认为'l2'。
- learning_rate:学习率更新策略,支持'constant'、'optimal'和'invscaling',具体策略需要结合具体场景进行选择和调整。
- power_t:学习率指数因子,即考虑到学习率衰减的速率,默认为0.25。
- max_iter:最大迭代次数,支持的类型是正整数,默认为1000。
- tol:停止训练条件,定义迭代过程中不同权重参数之间的差异小于 tol 时,则停止优化过程。默认值为1e-3。
- early_stopping:是否提前停止训练,bool型变量,默认为False。
- validation_fraction:在进行提前停止训练时,训练集的比例,默认为0.1。
- n_iter_no_change:进行提前停止训练时,在连续 n_iter_no_change 次迭代中没有获得更好的结果时停止训练。默认值为5。
- 调参建议
- 调整 loss 函数:
SGDRegressor
默认的损失函数是Mean squared error
(均方误差),但有些特定问题可能需要使用其他类型的损失函数才能获得最佳结果。例如,分类任务通常采用代价敏感的经验风险函数,比如log
或hinge
损失函数。 - 确定正则化强度系数:为了防止过度拟合,
SGDRegressor
可以使用 L1 或 L2 正则化操作。调整alpha
参数可以左右正则化项的惩罚程度,因此可以尝试先使用交叉验证等方法寻找最佳的alpha
值。 - 衰减学习速率:在训练过程中逐渐减小学习速率,这样可以保证模型能够收敛到局部最优解而不会震荡不停。例如,使用
'invscaling'
和power_t
参数可以实现指定衰减率的学习率参考策略。 - 设置初始学习速率:考虑到数据集的不同,通常需要逐步增大或缩小学习速率。可以通过交叉验证等方法来确定最佳的初始学习速率参数
eta0
。 - 停止提前训练:使用参数
early_stopping
,还可以令训练过程在发现准确度下降时自动停止,以避免浪费计算资源,同时也可设置一些超参数,如n_iter_no_change
和tol
参数,使模型尝试在达到指定的值后中止训练。 - 加入交叉验证进行模型选择:这是
linear_model.SGDRegressor
中很重要的一步, 在各种参数组合之间切换并评估不同的指标可以帮助调整好超参数,找出能够更好地适应数据的模型配置。