Вы подписаны на Машинное обучение доступно
Отлично! завершите оплату для полного доступа к Машинное обучение доступно
Снова приветствуем Вас! Вы успешно авторизовались
Успех! Аккаунт активирован, и Вы имеете полный доступ к контенту.
Стохастический градиентный спуск	(SGD)

Стохастический градиентный спуск (SGD)

in

Стохастический градиентный спуск (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.