随机梯度下降多分类
算法介绍
SGD多分类算法(Stochastic Gradient Descent)是一种用于大规模线性模型和支持向量机(SVM)的优化方法。它使用小批量数据来逼近目标函数,并在每个小批量中迭代地使用梯度下降来更新参数。
使用场景
适用于大规模数据集和高维数据情况下的分类或回归任务。
优势介绍
- 计算量小:与其他机器学习算法相比,SGD使用小批量数据而不是全部数据进行训练,因此计算速度更快,更适合处理大型数据集;
- 可调节的学习率:学习率可以随着迭代次数变化而自适应地进行调整,以达到最优解;
- 易于实现:由于算法原理较为简单,代码实现也相对容易。
- 劣势介绍
- 对初始值敏感:SGD通常需要一些调整才能成功地使用,这主要涉及到选择合适的超参数和初值条件。如果没有正确的初始值,可能会导致收敛到局部极小值的情况;
- 对特征缩放和正则化要求高:SGD需要对特征进行缩放和正则化以获得更好的结果。如果未进行预处理,则可能导致误差增加;
- 噪音较大:由于SGD使用小批量数据进行训练,因此每次迭代中都存在随机的噪声干扰,可能会影响梯度计算导致精度下降;
- 难以找到最优解:与传统的梯度下降相比,SGD在函数值近似平稳时难以找到全局最优解。这需要一些技巧和经验来适当调整超参数和学习率等变量,以获得更好的结果。
参数介绍
仅支持通过可视化方式,配置读取该组件参数,参数详情如下表所示:
页签 | 参数 | 参数名称 | 是否必选 | 参数描述 | 默认值 |
---|---|---|---|---|---|
数据源 | 表名 | inputTable | 是 | 数据表 | 无 |
默认参数 | 选择特征标签列 | labelColName | 是 | 输入表中选择标签列名类型。 | 无 |
模型参数 | 损失函数 | loss | 是 | 损失函数的类型。默认值为hinge。包含hinge,log,modified_huber,squared_hinge,perceptron。 | hinge |
模型参数 | 惩罚项 | penalty | 是 | 惩罚项。默认值为l2。包含l1,l2,elasticnet。 | l2 |
模型参数 | 是否估计截距 | fit_intercept | 是 | 布尔值,是否估计截距,如果为假,认为数据已经中心化。 | True |
调优参数 | 优化算法的迭代次数 | max_iter | 是 | 整数,可选的。迭代的最大次数,如果参数tol不是空,则默认值为1000。 | 1000 |
调优参数 | 训练结束误差边界 | tol | 是 | 浮点数。训练结束的误差边界。当previous_loss - cur_loss < tol时,训练结束。 | 0.001 |
调优参数 | 是否打乱数据顺序 | shuffle | 是 | 布尔值,可选的。每轮迭代后是否打乱数据的顺序,默认为True。 | True |
调优参数 | 学习率策略 | learning_rate | 是 | 学习速率的策略包括constant、optimal、invscaling。 | optimal |
调优参数 | 用于标示分类模型中各种类型的权重 | class_weight | 是 | balanced,类库根据训练样本量来计算权重。某种类型的样本量越多,则权重越低。也支持自定义。 | balanced |
- 推荐参数值
- loss 损失函数,默认值为"hinge"。对于二元分类问题,建议选择"hinge"损失;对于多类分类问题,建议使用"log"或"modified_huber"损失。
- penalty 正则化项类型,默认为"l2",可以选择惩罚矩阵W中各特征权重的L1正则化项("l1"),L2正则化项("l2")或弹性网络正则化项("elasticnet"),以控制模型复杂度,并可以改善模型泛化能力。
- learning_rate 学习率类型,默认为 "optimal"。学习率决定梯度下降策略更新的步骤大小。常见的有constant、optimal、invscaling三种类型,分别表示恒定学习率、自适应学习率和随时间增加的学习率。
- max_iter 最大迭代次数,默认值1000。可以将该参数的值调整为较大的值,以确保算法收敛。
- shuffle 是否打乱训练数据的顺序,默认为True。可以通过随机搜索网格来获得更好的性能,调整这些参数组合以及基本训练配置属性。
- 调参建议
- 由于SGDClassifier中使用随机梯度下降算法进行参数估计,因此对于特征值相差较大的数据集,需要对其进行标准化处理(scaling)。一般来说,可以使用preprocessing.StandardScaler()或者preprocessing.MinMaxScaler()等函数完成数据缩放。
- 学习率(learning rate)的选择:在SGDClassifier中,我们通常考虑使用"constant"或者"adaptative"作为学习率类型,并通过设置"eta0"和"learning_rate_init"等参数来指定学习率的大小。
- 数据量的选择:SGD算法通常在大数据集上表现良好,在小数据集上容易过拟合。因此,在训练模型时,应注意避免使用太小的数据集。