算法介绍
TCHouse-X 采用随机梯度下降(SGD)算法,通过最小化正则化经验损失(Regularized Empirical Loss)来拟合线性模型。
SGD 的核心逻辑在于高效的迭代更新:
梯度估计:在处理每个样本时实时估计损失函数的梯度。
参数更新:模型权重随学习率的动态递减进行持续演进。
为了防止过拟合并提升泛化能力,系统引入了正则化惩罚项:
惩罚方式:支持 L1 范数(绝对值范数)、L2 范数(平方欧几里得范数)或两者的组合(Elastic Net)。
特征选择:正则化器通过将参数向零向量收缩来控制模型复杂度。
稀疏学习:当参数更新因正则化跨越零点时,系统会将其截断为 0。这一机制天然支持稀疏模型(Sparse Model)的学习,从而实现高效的在线特征选择。
SGD 的优劣势分析如下:
维度 | 评价 | 详解 |
优势 | 高效性 | 计算复杂度低,尤其适合处理大规模、高维度的在线数据集。 |
优势 | 易于调优 | 参数逻辑清晰,便于针对特定场景进行性能优化。 |
劣势 | 尺度敏感 | SGD 对特征缩放高度敏感。在使用前,建议对数据进行标准化或归一化处理。 |
算法参数介绍
入参 | 类型 | 默认值 | 说明 |
loss | STRING | squared_error | 损失函数配置,可选值如下: squared_error:普通最小二乘损失。 huber:在误差超过 epsilon 后从平方损失切换为线性损失,以降低离群点影响。 epsilon_insensitive:忽略小于 epsilon 的误差,超过部分为线性(SVR 常用)。 squared_epsilon_insensitive:类似epsilon_insensitive,但超过容忍区间后使用平方损失。 |
penalty | STRING | None | l2 | 正则项(惩罚项)配置, 可选值如下: l2: 默认项,权重的二范数惩罚。 l1: 权重的一范数惩罚,适用于需要特征稀疏化或模型压缩的场景。 elasticnet: l1/l2 混合正则,兼顾特征选择与数值稳定性。 None: 禁用正则化。 |
alpha | FLOAT | 0.0001 | 正则项系数。值越大正则越强;当 learning_rate='optimal' 时也用于计算学习率。取值范围 [0.0, +inf)。 |
l1_ratio | FLOAT | None | 0.15 | Elastic Net 混合参数,0<=l1_ratio<=1:0 相当于 L2,1 相当于 L1。仅当 penalty='elasticnet' 时生效。若penalty 不是 'elasticnet',可为 None。范围 [0.0,1.0] 或 None。 |
fit_intercept | BOOLEAN | TRUE | 是否拟合截距项。若为 FALSE,假设数据已做中心化(均值为 0)。 |
max_iter | INT | 1000 | 训练数据最大遍历次数(epochs)。只影响 fit,不影响 partial_fit。范围 [1, +∞)。 |
tol | FLOAT | 1e-3 | 停止准则阈值。若不为 None,当连续 n_iter_no_change 个 epoch 满足停止条件(基于训练损失或验证损失,取决于 early_stopping)则停止。范围 [0.0, +∞)。 |
shuffle | BOOLEAN | TRUE | 每个 epoch 后是否打乱训练数据。 |
epsilon | FLOAT | 1e-4 | ε-不敏感损失相关参数;仅当 loss 为 huber、epsilon_insensitive、squared_epsilon_insensitive 时生效。对 huber:决定从 L2 切换到 L1 的阈值;对 ε-不敏感:预测与真实差异小于该阈值则忽略。范围 [0.0, +∞)。 |
random_state | INT | 42 | 当 shuffle 为 True 时用于打乱数据的随机种子;传入非负整数可复现结果。 |
learning_rate | STRING | invscaling | 学习率调度策略: 1. constant:eta=eta0; 2. optimal:eta=1/(alpha*(t+t0))(t0 为启发式); 3. invscaling:eta=eta0/pow(t,power_t); 4. adaptive:只要训练损失持续下降就保持 eta0,若连续 n_iter_no_change 未按 tol 改善(或 early_stopping=True 时验证分数未提升)则将学习率除以 5; 5. pa1/pa2:passive-aggressive 算法(仅 loss='epsilon_insensitive')。 |
eta0 | FLOAT | 0.01 | constant/invscaling/adaptive 的初始学习率为0.01,学习率设置范围为 (0.0, +inf); 对 pa1/pa2 表示“passive-aggressive”参数(文献中常称 C): PA-I 为最大步长; PA-II 对步长做正则(eta0 越小正则越强)。 对于 PA 方法的一般经验法则,当数据噪声大时,eta0 应该较小。 |
early_stopping | BOOLEAN | FALSE | 是否启用提前停止:若为 TRUE,会自动划分一部分训练数据作为验证集,当 score 的提升不超过阈值并持续 n_iter_no_change 个 epoch 时停止。 |
validation_fraction | FLOAT | 0.1 | 提前停止时划分为验证集的训练数据比例(0~1)。仅 early_stopping=True 生效。范围 (0.0,1.0)。 |
n_iter_no_change | INT | 5 | 连续多少次迭代无改进则停止。收敛检查基于训练损失或验证损失(取决于 early_stopping)。范围 [1, max_iter)。 |
average | BOOLEAN | INT | FALSE | 是否对 SGD 权重做平均并存入 coef_。若为 True:从头开始平均;若为大于 1 的整数:当累计见到样本数达到该值后开始平均(如 average=10 表示看到 10 个样本后开始平均)。 |