Стохастический градиентный спуск (SGD)
Стохастический градиентный спуск (Stochastic Gradient Descent) – это простой, но очень эффективный подход к подгонке линейных классификаторов и регрессоров под выпуклые Функции потерь (Loss Function), такие как Метод опорных векторов (SVM) и Логистическая регрессия (Logistic Regression). Несмотря на то, что SGD существует в сообществе Машинного обучения (ML) уже давно, совсем недавно он привлек значительное внимание в контексте крупномасштабного обучения.
SGD успешно применяется для решения крупномасштабных и разреженных задач машинного обучения, часто встречающихся при Классификации (Classification) текста и Обработке естественного языка (NLP). Учитывая, что данные немногочисленны, классификаторы в этом модуле легко масштабируются для решения задач с более чем 105 обучающими примерами и более чем 105 Признаками (Feature).
Преимущества и недостатки
К достоинствам СГП можно причислить:
- Эффективность
- Простоту реализации (множество возможностей для настройки кода)
К недостаткам:
- Требовательность (SGD необходим ряд гиперпараметров, таких как параметр регуляризации и количество итераций)
- Чувствительность к масштабированию признаков.
SGD и Scikit-learn
Давайте посмотрим, как SGD реализован в SkLearn. Для начала импортируем необходимые библиотеки:
import sklearn
from sklearn.linear_model import SGDClassifier
Как и другие классификаторы, SGD должен быть "снабжен" двумя массивами: массив формы X (n_samples, n_features), содержащий обучающие образцы, и массив формы y (n_samples,), содержащий целевые значения (метки классов) для обучающих образцов:
X = [[0., 0.], [1., 1.]]
y = [0, 1]
clf = SGDClassifier(loss = "hinge", penalty = "l2", max_iter = 5)
clf.fit(X, y)
Система отражает полный спектр настроек модели, к примеру, перемешивание обучающих сэмплов (shuffle = True
) или подробность отчета об обучении (verbose = 0
):
/usr/local/lib/python3.7/dist-packages/sklearn/linear_model/_stochastic_gradient.py:557: ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.
ConvergenceWarning)
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_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,
random_state=None, shuffle=True, tol=0.001,
validation_fraction=0.1, verbose=0, warm_start=False)
После установки Модель (Model) может быть использована для прогнозирования новых значений:
clf.predict([[2., 2.]])
Легко сопоставить, что паре "2, 2" будет соответствовать ряд "1":
array([1])
SGD подгоняет линейную модель к обучающим данным. Атрибут coef_
содержит параметры модели:
clf.coef_
array([[9.91080278, 9.91080278]])
Атрибут intercept_
содержит перехват, также известный как Смещение (Bias):
clf.intercept_
array([-9.97004991])
Ноутбук, не требующий дополнительной настройки на момент написания статьи, можно скачать здесь.
Фото: @kirk7501
Автор оригинальной статьи: scikit-learn.org
Понравилась статья? Поддержите нас, поделившись статьей в социальных сетях и подписавшись на канал. И попробуйте курс «Введение в Машинное обучение» на Udemy.