随机梯度下降(SGD)是一种用于在线性分类器下的线性分类器的判别学习方法,例如(线性)支持向量机和Logistic回归。尽管SGD长期以来一直在机器学习社区中出现,但最近在大规模学习的背景下它已经受到了相当多的关注。
SGD主要用于大规模稀疏机器学习问题
随机梯度下降的优点是:
高效。
易于实施(许多代码调整的机会)。
随机梯度下降的缺点包括:
SGD需要许多超参数,例如正则化参数和迭代次数。
SGD对功能扩展很敏感。
与其他分类器一样,SGD必须配备两个阵列:一个大小为[n_samples,n_features]的数组X,用于保存训练样本,一个大小为[n_samples]的数组Y,用于保存训练样本的目标值(类标签):
from sklearn.linear_model import SGDClassifier
X = [[0., 0.], [1., 1.]]
y = [0, 1]
clf = SGDClassifier(loss=“hinge”, penalty=“l2”, max_iter=5)
clf.fit(X, y)
SGDClassifier(alpha=0.0001, average=False, class_weight=None,
early_stopping=False, epsilon=0.1, eta0=0.0, fit_intercept=True,
l1_ratio=0.15, learning_rate=‘optimal’, loss=‘hinge’, max_iter=5,
n_iter=None, n_iter_no_change=5, n_jobs=None, penalty=‘l2’,
power_t=0.5, random_state=None, shuffle=True, tol=None,
validation_fraction=0.1, verbose=0, warm_start=False)
拟合之后,该模型可以用于预测新值
clf.predict([[2., 2.]])
array([1])
查看模型参赛
clf.coef_
array([[ 9.9…, 9.9…]])
clf.intercept_
array([-9.9…])
SGDClassifier参数含义:
loss function可以通过loss参数进行设置。SGDClassifier支持下面的loss函数:
loss=”hinge”: (soft-margin)线性SVM.
loss=”modified_huber”: 带平滑的hinge loss.
loss=”log”: logistic回归
可以通过penalty参数设置具体的惩罚。SGD支持以下处罚:
penalty=“l2”:L2正则化惩罚coef_。
penalty=“l1”:L1正则化惩罚coef_。
penalty=“elasticnet”:L2和L1的组合;