随机梯度下降是一种简单而又高效的方法。主要用于凸损失函数下线性分类器的判别式学习,例如:线性SVM、Logistic回归。SGD在大规模学习方面获得了很大的关注。SGD 已成功应用于在文本分类和自然语言处理中经常遇到的大规模和稀疏的机器学习问题。对于稀疏数据,本模块的分类器可以轻易的处理超过 10^5 的训练样本和超过 10^5 的特征。
优势:
1、高效(快就一个字,我只说一次)
2、易于实现。
劣势:
对特征缩放十分敏感。
一、分类与回归
在拟合前,必须确保打乱数据。
SGDClassifier有如下损失函数:
hinge:(软间隔)线性支持向量机。
modified_huber:平滑的 hinge 损失(所谓平滑就是对异常值不敏感)
log:Logistic回归
SGDRegressor有以下损失函数:
squared_loss:普通最小二乘法
huber:Huber回归
epsilon_insensitive:线性支持向量回归
二、复杂度
SGD的复杂度基本稳定在,其中,k是迭代次数,p是每个样本非零特征的平均数。
三、使用建议
请对数据进行标准化,必须将相同的缩放应用于对应的测试向量中,以获得有意义的结果。使用 StandardScaler能很容易做到这一点。
经验表明,迭代次数一般设置为np.ceil( / n),其中 n 是训练集的大小。
经验表明,当特征很多或学习率很大时,使用ASGD(平均随机梯度下降) 效果更好。
四、数学描述
给定一组训练样本:,其中,{-1,1}。
评价函数:,其中模型参数,截距。
为了做预测, 我们只需要看 f(x)的符号。找到模型参数的一般选择是通过最小化由以下式子给出的正则化训练误差:
其中,L是衡量模型拟合程度的损失函数,R是惩罚模型复杂度的正则化项(也叫作惩罚),α>0是一个非负超平面。
L的不同选择产生不同的分类器,例如:
Hinge: (软-间隔) 支持向量机。
Log: Logistic 回归。
Least-Squares: 岭回归。
Epsilon-Insensitive: (软-间隔) 支持向量回归。
比较流行的正则化项R包括:
随机梯度下降法是一种无约束优化问题的优化方法。与(批量)梯度下降法相反,SGD 通过一次只考虑单个训练样本来近似的真实梯度。
算法按照如下公式来更新参数:
其中,是学习率,由以下公式给出:
,其中,t是时间步长,总时间步长为,为权重的期望值。
四、SGD示例
我们将SGD运用于手写数字识别,将它与Logistic做对比,并看看它的效果:
当然,不同的超参和机器可能有不同的结果,但是总的而言,在如此庞大的数据集下,SGD是优于Logistic回归的。