全栈工程师开发手册 (作者:栾鹏)
python数据挖掘系列教程
随机梯度下降(SGD) 是一种简单但又非常高效的方法,主要用于凸损失函数下线性分类器的判别式学习,例如(线性) 支持向量机 和 Logistic 回归 。
Stochastic Gradient Descent (随机梯度下降法)的优势:
- 高效。
- 易于实现 (有大量优化代码的机会)。
Stochastic Gradient Descent (随机梯度下降法)的劣势:
- SGD 需要一些超参数,例如 regularization (正则化)参数和 number of iterations (迭代次数)。
- SGD 对 feature scaling (特征缩放)敏感。
随机梯度下降分类
loss function(损失函数) 可以通过 loss 参数来设置。 SGDClassifier 支持以下的 loss functions(损失函数):
- loss=“hinge”: (soft-margin) linear Support Vector Machine ((软-间隔)线性支持向量机),
- loss=“modified_huber”: smoothed hinge loss (平滑的 hinge 损失),
- loss=“log”: logistic regression (logistic 回归),
- and all regression losses below(以及所有的回归损失)。
惩罚方法可以通过 penalty 参数来设定。 SGD 支持以下 penalties(惩罚):
- penalty=“l2”: L2 norm penalty on coef_.
- penalty=“l1”: L1 norm penalty on coef_.
- penalty=“elasticnet”: Convex combination of L2 and L1(L2 型和 L1 型的凸组合); (1 - l1_ratio) * L2 + l1_ratio * L1.
默认设置为 penalty=“l2” 。 L1 penalty (惩罚)导致稀疏解,使得大多数系数为零。 Elastic Net(弹性网)解决了在特征高相关时 L1 penalty(惩罚)的一些不足。参数 l1_ratio 控制了 L1 和 L2 penalty(惩罚)的 convex combination (凸组合)。
随机梯度下降法进行多分类
SGDClassifier 通过利用 “one versus all” (OVA)方法来组合多个二分类器,从而实现多分类。对于每一个 K 类, 可以训练一个二分类器来区分自身和其他 K-1 个类。
在 multi-class classification (多类分类)的情况下, coef_ 是 shape=[n_classes, n_features] 的一个二维数组, intercept_ 是 shape=[n_classes] 的一个一维数组。 coef_ 的第 i 行保存了第 i 类的 OVA 分类器的权重向量;类以升序索引 (参照属性 classes_ )。 注意,原则上,由于它们允许创建一个概率模型,所以 loss=“log” 和 loss=“modified_huber” 更适合于 one-vs-all 分类。
SGDClassifier 通过拟合参数 class_weight 和 sample_weight 来支持 weighted classes (加权类)和 weighted instances(加权实例)。
随机梯度下降法回归
SGDRegressor 类实现了一个简单的随机梯度下降学习例程,它支持用不同的损失函数和惩罚来拟合线性回归模型。 SGDRegressor 非常适用于有大量训练样本(>10.000)的回归问题,对于其他问题,我们推荐使用 Ridge ,Lasso ,或 ElasticNet 。
具体的损失函数可以通过 loss 参数设置。 SGDRegressor 支持以下的损失函数:
- loss=“squared_loss”: Ordinary least squares(普通最小二乘法),
- loss=“huber”: Huber loss for robust regression(Huber回归),
- loss=“epsilon_insensitive”: linear Support Vector Regression(线性支持向量回归).
Huber 和 epsilon-insensitive 损失函数可用于 robust regression(鲁棒回归)。不敏感区域的宽度必须通过参数 epsilon 来设定。这个参数取决于目标变量的规模。
SGDRegressor 支持 ASGD(平均随机梯度下降) 作为 SGDClassifier。 均值化可以通过设置 average=True
来启用。
对于利用了 squared loss(平方损失)和 l2 penalty(l2惩罚)的回归,在 Ridge 中提供了另一个采取 averaging strategy(平均策略)的 SGD 变体,其使用了随机平均梯度 (SAG) 算法。