SGDClassifier
- classsklearn.linear_model.SGDClassifier(loss='hinge', *, penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, warm_start=False, average=False)[source]
-
Линейные классификаторы (SVM, логистическая регрессия и т. д.) с обучением по методу стохастического градиентного спуска.
Этот оценщик реализует регрессионные линейные модели с обучением по методу стохастического градиентного спуска (SGD): градиент потерь оценивается для каждого примера по отдельности, а модель обновляется по мере необходимости с уменьшением силы градиента (т. е. скоростью обучения). SGD позволяет выполнять обучение с мини-пакетами (онлайн/вне ядра) через метод
partial_fit. Для достижения наилучших результатов при использовании стандартного графика скорости обучения данные должны иметь нулевое среднее значение и единичную дисперсию.Эта реализация работает с данными, представленными как плотные или разреженные массивы с плавающей точкой для признаков. Модель, которую она подгоняет, может контролироваться параметром loss; по умолчанию она подгоняет линейную машину опорных векторов (SVM).
Регуляризатор — это штраф, добавляемый к функции потерь, который сжимает параметры модели к нулевому вектору, используя либо квадратную евклидову норму L2, либо абсолютную норму L1, либо их комбинацию (Elastic Net). Если обновление параметра пересекает значение 0.0 из-за регуляризатора, обновление усекается до 0.0, чтобы позволить обучение разреженных моделей и добиться онлайн-отбора признаков.
Подробнее см. в Руководстве пользователя.
- Параметры:
-
- loss{‘hinge’, ‘log_loss’, ‘modified_huber’, ‘squared_hinge’, ‘perceptron’, ‘squared_error’, ‘huber’, ‘epsilon_insensitive’, ‘squared_epsilon_insensitive’}, по умолчанию=’hinge’
-
Функция потерь, которая должна быть использована.
- ‘hinge’ даёт линейную SVM.
- ‘log_loss’ даёт логистическую регрессию, вероятностный классификатор.
- ‘modified_huber’ — это ещё одна гладкая функция потерь, которая обеспечивает толерантность к выбросам, а также оценки вероятностей.
- ‘squared_hinge’ — это как hinge, но с квадратичной penalization.
- ‘perceptron’ — это линейная функция потерь, используемая алгоритмом perceptron.
- Другие функции потерь, ‘squared_error’, ‘huber’, ‘epsilon_insensitive’ и ‘squared_epsilon_insensitive’ предназначены для регрессии, но могут быть полезны и в классификации; см.
SGDRegressorдля описания.
Более подробные сведения о формулах функций потерь можно найти в Руководстве пользователя, а визуализацию функций потерь можно найти в SGD: выпуклые функции потерь.
- penalty{‘l2’, ‘l1’, ‘elasticnet’, None}, по умолчанию=’l2’
-
Функция штрафа (также известная как регуляризация). По умолчанию ‘l2’, что является стандартной функцией регуляризации для линейных моделей SVM. ‘l1’ и ‘elasticnet’ могут привести к разреженности модели (отбор признаков), чего нельзя достичь с помощью ‘l2’. Штраф не добавляется, если установлено значение
None.Визуализацию функций штрафа можно найти в SGD: Функции штрафа.
- alphafloat, по умолчанию=0.0001
-
Постоянная, которая умножает регуляризационную функцию. Чем выше значение, тем сильнее регуляризация. Также используется для вычисления скорости обучения, когда
learning_rateустановлено в ‘optimal’. Значения должны быть в диапазоне[0.0, inf). - l1_ratiofloat, по умолчанию=0.15
-
Параметр смешивания Elastic Net, при 0 <= l1_ratio <= 1. l1_ratio=0 соответствует L2 штрафу, l1_ratio=1 к L1. Используется только если
penaltyравно ‘elasticnet’. Значения должны быть в диапазоне[0.0, 1.0]. - fit_interceptbool, по умолчанию=True
-
Указывает, должна ли оцениваться точка пересечения с осью Y или нет. Если False, предполагается, что данные уже центрированы.
- max_iterint, по умолчанию=1000
-
Максимальное количество проходов по обучающей выборке (эпох). Это влияет только на поведение метода
fit, а не на методpartial_fit. Значения должны быть в диапазоне[1, inf).Добавлена в версии 0.19.
- tolfloat или None, по умолчанию=1e-3
-
Критерий остановки. Если не None, обучение остановится, когда (loss > best_loss - tol) в течение
n_iter_no_changeпоследовательных эпох. Сходимость проверяется по функции потерь обучения или по функции потерь валидации в зависимости от параметраearly_stopping. Значения должны быть в диапазоне[0.0, inf).Добавлена в версии 0.19.
- shufflebool, по умолчанию=True
-
Указывает, нужно ли перемешивать обучающую выборку после каждой эпохи.
- verboseint, по умолчанию=0
-
Уровень подробности. Значения должны быть в диапазоне
[0, inf). - epsilonfloat, по умолчанию=0.1
-
Epsilon в функциях потерь epsilon-insensitive; только если
lossравно ‘huber’, ‘epsilon_insensitive’ или ‘squared_epsilon_insensitive’. Для ‘huber’ определяет порог, при котором становится менее важным получить точное предсказание. Для epsilon-insensitive, любые различия между текущим предсказанием и правильным значением игнорируются, если они меньше этого порога. Значения должны быть в диапазоне[0.0, inf). - n_jobsint, по умолчанию=None
-
Количество процессоров, используемых для вычислений OVA (One Versus All, для многоклассовых задач).
Noneозначает 1, за исключением контекстаjoblib.parallel_backend.-1означает использование всех процессоров. См. Словарь для получения дополнительной информации. - random_stateint, RandomState instance, по умолчанию=None
-
Используется для перемешивания данных, когда
shuffleустановлено вTrue. Передайте целое число для воспроизводимого результата при нескольких вызовах функции. См. Словарь. Целочисленные значения должны быть в диапазоне[0, 2**32 - 1]. - learning_ratestr, по умолчанию=’optimal’
-
Расписание скорости обучения:
- ‘constant’:
eta = eta0 - ‘optimal’:
eta = 1.0 / (alpha * (t + t0))гдеt0выбирается по эвристике, предложенной Леоном Ботто. - ‘invscaling’:
eta = eta0 / pow(t, power_t) - ‘adaptive’:
eta = eta0, до тех пор, пока обучение продолжает уменьшаться. Каждый раз, когда n_iter_no_change последовательных эпох не удаётся уменьшить функцию потерь обучения на tol или не удаётся увеличить оценку валидации на tol, еслиearly_stoppingустановлено вTrue, текущая скорость обучения делится на 5.
Добавлена в версии 0.20: Добавлен параметр ‘adaptive’.
- ‘constant’:
- eta0float, по умолчанию=0.0
-
Начальная скорость обучения для расписаний ‘constant’, ‘invscaling’ или ‘adaptive’. Значение по умолчанию равно 0.0, так как eta0 не используется в расписании по умолчанию ‘optimal’. Значения должны быть в диапазоне
[0.0, inf). - power_tfloat, по умолчанию=0.5
-
Экспонента для обратного масштабирования скорости обучения. Значения должны быть в диапазоне
(-inf, inf). - early_stoppingbool, по умолчанию=False
-
Использовать ли раннюю остановку для прекращения обучения, когда оценка валидации не улучшается. Если установлено значение
True, он автоматически отложит часть обучающих данных для валидации и прекратит обучение, когда оценка валидации, возвращаемая методомscore, не улучшается по крайней мере на tol в течение n_iter_no_change последовательных эпох.Пример влияния ранней остановки см. в Ранняя остановка стохастического градиентного спуска.
Добавлена в версии 0.20: Добавлен параметр ‘early_stopping’.
- validation_fractionfloat, по умолчанию=0.1
-
Доля обучающих данных, которая должна быть отложена в качестве набора данных для валидации при ранней остановке. Должно находиться в диапазоне от 0 до 1. Используется только если
early_stoppingравно True. Значения должны быть в диапазоне(0.0, 1.0).Добавлена в версии 0.20: Добавлен параметр ‘validation_fraction’.
- n_iter_no_changeint, по умолчанию=5
-
Количество итераций без улучшения, которое необходимо подождать до остановки обучения. Сходимость проверяется по функции потерь обучения или по функции потерь валидации в зависимости от параметра
early_stopping. Целочисленные значения должны быть в диапазоне[1, max_iter).Добавлена в версии 0.20: Добавлен параметр ‘n_iter_no_change’.
- class_weightdict, {метка_класса: вес} или “balanced”, по умолчанию=None
-
Настройка для параметра class_weight при подгонке.
Веса, связанные с классами. Если не задано, все классы предполагаются с весом 1.
Режим “balanced” использует значения y для автоматической настройки весов, обратно пропорциональных частотам классов в обучающих данных, как
n_samples / (n_classes * np.bincount(y)). - warm_startbool, по умолчанию=False
-
Если установлено значение True, используется решение предыдущего вызова fit в качестве начального значения. В противном случае, предыдущее решение просто стирается. См. Словарь.
Повторный вызов fit или partial_fit, когда warm_start равен True, может привести к другому результату, чем при вызове fit один раз, из-за способа перемешивания данных. Если используется динамическая скорость обучения, скорость обучения адаптируется в зависимости от числа уже увиденных выборок. Вызов
fitсбрасывает этот счётчик, в то время какpartial_fitувеличит существующий счётчик. - averagebool или int, по умолчанию=False
-
Если установлено в
True, вычисляет усреднённые веса SGD по всем обновлениям и сохраняет результат в атрибутеcoef_. Если установлено значение больше 1, усреднение начнется, когда общее число увиденных выборок достигнетaverage. Таким образом,average=10начнёт усреднение после просмотра 10 выборок. Целочисленные значения должны быть в диапазоне[1, n_samples].
- Атрибуты:
-
- coef_массив формы (1, n_features), если n_классов == 2, иначе (n_классов, n_признаков)
-
Веса, присвоенные признакам.
- intercept_массив формы (1,), если n_классов == 2, иначе (n_классов,)
-
Константы в функции принятия решений.
- n_iter_int
-
Фактическое количество итераций до достижения критерия остановки. Для многоклассовых подгонок — максимальное значение по всем бинарным подгонкам.
- classes_массив формы (n_классов,)
- t_int
-
Количество обновлений весов, выполненных во время обучения. То же самое, что и
(n_iter_ * n_samples + 1). - n_features_in_int
-
Количество признаков, увиденных во время подгонки.
Добавлен в версии 0.24.
-
feature_names_in_массив формы (
n_features_in_,) -
Названия признаков, увиденные во время подгонки. Определены только тогда, когда
Xимеет имена признаков, которые являются строками.Добавлен в версии 1.0.
См. также
sklearn.svm.LinearSVC-
Линейная классификация опорных векторов.
LogisticRegression-
Логистическая регрессия.
Perceptron-
Наследуется от SGDClassifier.
Perceptron()эквивалентноSGDClassifier(loss="perceptron", eta0=1, learning_rate="constant", penalty=None).
Примеры
>>> import numpy as np >>> from sklearn.linear_model import SGDClassifier >>> from sklearn.preprocessing import StandardScaler >>> from sklearn.pipeline import make_pipeline >>> X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]]) >>> Y = np.array([1, 1, 2, 2]) >>> # Always scale the input. The most convenient way is to use a pipeline. >>> clf = make_pipeline(StandardScaler(), ... SGDClassifier(max_iter=1000, tol=1e-3)) >>> clf.fit(X, Y) Pipeline(steps=[('standardscaler', StandardScaler()), ('sgdclassifier', SGDClassifier())]) >>> print(clf.predict([[-0.8, -1]])) [1]- decision_function(X)[source]
-
Предсказание оценок уверенности для образцов.
Оценка уверенности для образца пропорциональна подписанному расстоянию этого образца до гиперплоскости.
- Параметры:
-
- X{массив-подобный объект, разреженная матрица} формы (n_образцов, n_признаков)
-
Матрица данных, для которой мы хотим получить оценки уверенности.
- Возвращает:
-
- scoresмассив формы (n_образцов,) или (n_образцов, n_классов)
-
Оценки уверенности для каждой
(n_samples, n_classes)комбинации. В бинарном случае оценка уверенности дляself.classes_[1], где >0 означает, что этот класс будет предсказан.
- densify()[source]
-
Преобразовать матрицу коэффициентов в плотный массив.
Преобразует
coef_член (обратно) в массив numpy.ndarray. Это стандартный форматcoef_, и он необходим для подгонки, поэтому вызов этого метода требуется только для моделей, которые были предварительно разрежены; в противном случае это бесполезно.- Возвращает:
-
- self
-
Обученная модель.
- fit(X, y, coef_init=None, intercept_init=None, sample_weight=None)[source]
-
Оценивание линейной модели с помощью стохастического градиентного спуска.
- Параметры:
-
- X{массив-подобный объект, разреженная матрица}, форма (n_образцов, n_признаков)
-
Данные обучения.
- yмассив формы (n_образцов,)
-
Целевые значения.
- coef_initмассив формы (n_классов, n_признаков), по умолчанию None
-
Начальные коэффициенты для ускорения оптимизации.
- intercept_initмассив формы (n_классов,), по умолчанию None
-
Начальный свободный член для ускорения оптимизации.
- sample_weightмассив-подобный объект, форма (n_образцов,), по умолчанию None
-
Веса, применяемые к отдельным образцам. Если не указаны, предполагаются равные веса. Эти веса будут умножаться на class_weight (переданный через конструктор), если class_weight указан.
- Возвращает:
-
- selfобъект
-
Возвращает экземпляр self.
- get_metadata_routing()[source]
-
Получить маршрутизацию метаданных этого объекта.
Пожалуйста, ознакомьтесь с Руководством пользователя, чтобы узнать, как работает механизм маршрутизации.
- Возвращает:
-
- routingMetadataRequest
-
MetadataRequestencapsulating routing information.
- get_params(deep=True)[source]
-
Получить параметры этого оценщика.
- Параметры:
-
- deepbool, по умолчанию True
-
Если True, вернет параметры этого оценщика и вложенных подобъектов, которые являются оценщиками.
- Возвращает:
-
- paramsdict
-
Имена параметров, сопоставленные с их значениями.
-
- partial_fit(X, y, classes=None, sample_weight=None)[source]
-
Выполнить одну эпоху стохастического градиентного спуска на заданных образцах.
Внутренне этот метод использует
max_iter = 1. Поэтому нет гарантии, что после вызова будет достигнут минимум функции стоимости. Вопросы, такие как сходимость по целевой функции, раннее прекращение обучения и корректировка скорости обучения, должны быть решены пользователем.- Параметры:
-
- X{array-like, sparse matrix}, форма (n_samples, n_features)
-
Подмножество обучающих данных.
- yndarray формы (n_samples,)
-
Подмножество целевых значений.
- classesndarray формы (n_classes,), по умолчанию=None
-
Классы по всем вызовам partial_fit. Могут быть получены с помощью
np.unique(y_all), где y_all — целевой вектор всего набора данных. Этот аргумент требуется для первого вызова partial_fit и может быть опущен в последующих вызовах. Обратите внимание, что y не обязательно должен содержать все метки вclasses. - sample_weightarray-like, форма (n_samples,), по умолчанию=None
-
Веса, применяемые к отдельным образцам. Если не указано, предполагаются равные веса.
- Возвращаемое значение:
-
- selfобъект
-
Возвращает экземпляр self.
- predict(X)[source]
-
Предсказать метки классов для образцов в X.
- Параметры:
-
- X{array-like, sparse matrix} формы (n_samples, n_features)
-
Матрица данных, для которой мы хотим получить предсказания.
- Возвращаемое значение:
-
- y_predndarray формы (n_samples,)
-
Вектор, содержащий метки классов для каждого образца.
- predict_log_proba(X)[source]
-
Логарифм оценок вероятности.
Этот метод доступен только для логарифмической функции потерь и модифицированной функции потерь Хубера.
Когда loss=”modified_huber”, оценки вероятности могут быть жёсткими нулями и единицами, поэтому вычисление логарифма невозможно.
Подробнее см.
predict_proba.- Параметры:
-
- X{array-like, sparse matrix} формы (n_samples, n_features)
-
Входные данные для предсказания.
- Возвращаемое значение:
-
- Tarray-like, формы (n_samples, n_classes)
-
Возвращает логарифм вероятности выборки для каждого класса в модели, где классы упорядочены так же, как и в
self.classes_.
- predict_proba(X)[source]
-
Оценки вероятности.
Этот метод доступен только для логарифмической функции потерь и модифицированной функции потерь Хубера.
Многоклассовые оценки вероятности выводятся из бинарных (один против всех) оценок путём простого нормирования, как рекомендуется Zadrozny и Elkan.
Бинарные оценки вероятности для loss=”modified_huber” даются (clip(decision_function(X), -1, 1) + 1) / 2. Для других функций потерь необходимо выполнить корректную калибровку вероятностей, обернув классификатор с помощью
CalibratedClassifierCVвместо этого.- Параметры:
-
- X{array-like, sparse matrix}, форма (n_samples, n_features)
-
Входные данные для предсказания.
- Возвращаемое значение:
-
- ndarray формы (n_samples, n_classes)
-
Возвращает вероятность выборки для каждого класса в модели, где классы упорядочены так же, как и в
self.classes_.
Ссылки
Zadrozny и Elkan, «Преобразование оценок классификатора в многоклассовые оценки вероятности», SIGKDD’02, https://dl.acm.org/doi/pdf/10.1145/775047.775151
Обоснование формулы в случае loss=”modified_huber” приведено в приложении B в: http://jmlr.csail.mit.edu/papers/volume2/zhang02c/zhang02c.pdf
- score(X, y, sample_weight=None)[source]
-
Возвращает среднюю точность на заданных тестовых данных и метках.
В многоклассовой классификации это подмножество точности, которое является жёстким показателем, так как требуется для каждого образца, чтобы каждый набор меток был правильно предсказан.
- Параметры:
-
- Xarray-like формы (n_samples, n_features)
-
Тестовые образцы.
- yarray-like формы (n_samples,) или (n_samples, n_outputs)
-
Истинные метки для
X. - sample_weightarray-like формы (n_samples,), по умолчанию=None
-
Веса образцов.
- Возвращаемое значение:
-
- scorefloat
-
Средняя точность
self.predict(X)относительноy.
- set_fit_request(*, coef_init:bool|None|str='$UNCHANGED$', intercept_init:bool|None|str='$UNCHANGED$', sample_weight:bool|None|str='$UNCHANGED$') SGDClassifier[source]
-
Запрос метаданных, переданных методу
fit.Обратите внимание, что этот метод актуален только если
enable_metadata_routing=True(см.sklearn.set_config). Обратитесь к Руководству пользователя для получения информации о работе механизма маршрутизации.Варианты для каждого параметра:
-
True: метаданные запрашиваются и передаются методуfitпри их наличии. Запрос игнорируется, если метаданные не предоставлены. -
False: метаданные не запрашиваются и мета-оценщик не передаст их методуfit. -
None: метаданные не запрашиваются, и мета-оценщик выдаст ошибку, если пользователь их предоставит. -
str: метаданные должны быть переданы мета-оценщику с этим псевдонимом вместо исходного имени.
По умолчанию (
sklearn.utils.metadata_routing.UNCHANGED) сохраняется существующий запрос. Это позволяет изменить запрос для некоторых параметров, а не для всех.Добавлен в версии 1.3.
Примечание
Этот метод актуален только в том случае, если этот оценщик используется в качестве под-оценщика мета-оценщика, например, внутри
Pipeline. В противном случае он не оказывает никакого влияния.- Parameters:
-
- coef_initstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
-
Маршрутизация метаданных для параметра
coef_initвfit. - intercept_initstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
-
Маршрутизация метаданных для параметра
intercept_initвfit. - sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
-
Маршрутизация метаданных для параметра
sample_weightвfit.
- Returns:
-
- selfobject
-
Обновленный объект.
-
- set_params(**params)[source]
-
Устанавливает параметры этого оценщика.
Метод работает как с простыми оценщиками, так и со вложенными объектами (такими как
Pipeline). Последние имеют параметры в формате<component>__<parameter>, что позволяет обновлять каждый компонент вложенного объекта.- Parameters:
-
- **paramsdict
-
Параметры оценщика.
- Returns:
-
- selfestimator instance
-
Экземпляр оценщика.
- set_partial_fit_request(*, classes:bool|None|str='$UNCHANGED$', sample_weight:bool|None|str='$UNCHANGED$') SGDClassifier[source]
-
Запрос метаданных, переданных методу
partial_fit.Обратите внимание, что этот метод актуален только если
enable_metadata_routing=True(см.sklearn.set_config). Обратитесь к Руководству пользователя для получения информации о работе механизма маршрутизации.Варианты для каждого параметра:
-
True: метаданные запрашиваются и передаются методуpartial_fitпри их наличии. Запрос игнорируется, если метаданные не предоставлены. -
False: метаданные не запрашиваются и мета-оценщик не передаст их методуpartial_fit. -
None: метаданные не запрашиваются, и мета-оценщик выдаст ошибку, если пользователь их предоставит. -
str: метаданные должны быть переданы мета-оценщику с этим псевдонимом вместо исходного имени.
По умолчанию (
sklearn.utils.metadata_routing.UNCHANGED) сохраняется существующий запрос. Это позволяет изменить запрос для некоторых параметров, а не для всех.Добавлен в версии 1.3.
Примечание
Этот метод актуален только в том случае, если этот оценщик используется в качестве под-оценщика мета-оценщика, например, внутри
Pipeline. В противном случае он не оказывает никакого влияния.- Parameters:
-
- classesstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
-
Маршрутизация метаданных для параметра
classesвpartial_fit. - sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
-
Маршрутизация метаданных для параметра
sample_weightвpartial_fit.
- Returns:
-
- selfobject
-
Обновленный объект.
-
- set_score_request(*, sample_weight:bool|None|str='$UNCHANGED$') SGDClassifier[source]
-
Запрос метаданных, переданных методу
score.Обратите внимание, что этот метод актуален только если
enable_metadata_routing=True(см.sklearn.set_config). Пожалуйста, ознакомьтесь с Руководством пользователя для понимания работы механизма маршрутизации.Варианты для каждого параметра:
-
True: метаданные запрашиваются и передаются методуscoreесли они предоставлены. Запрос игнорируется, если метаданные не предоставлены. -
False: метаданные не запрашиваются, и мета-эстиматор не передаст их методуscore. -
None: метаданные не запрашиваются, и мета-эстиматор выдаст ошибку, если пользователь их предоставит. -
str: метаданные должны быть переданы мета-эстиматору с данным псевдонимом вместо оригинального названия.
По умолчанию (
sklearn.utils.metadata_routing.UNCHANGED) сохраняется существующий запрос. Это позволяет изменить запрос для некоторых параметров, а не для всех.Добавлен в версии 1.3.
Примечание
Этот метод актуален только если этот эстиматор используется в качестве под-эстиматора мета-эстиматора, например, внутри
Pipeline. В противном случае он не имеет эффекта.- Parameters:
-
- sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
-
Маршрутизация метаданных для параметра
sample_weightвscore.
- Returns:
-
- selfobject
-
Обновленный объект.
-
- sparsify()[source]
-
Преобразовать матрицу коэффициентов в разреженный формат.
Преобразует член
coef_в матрицу scipy.sparse, что для моделей с L1-регуляризацией может быть намного более эффективным по памяти и хранению, чем обычное представление numpy.ndarray.Член
intercept_не преобразуется.- Returns:
-
- self
-
Обученный эстиматор.
Примечания
Для неразреженных моделей, то есть когда в
coef_не так много нулей, это может фактически увеличить использование памяти, поэтому используйте этот метод с осторожностью. Правило большого пальца состоит в том, что количество нулевых элементов, которое можно вычислить с помощью(coef_ == 0).sum(), должно быть более 50% для получения значительных преимуществ.После вызова этого метода дальнейшая подгонка с методом partial_fit (если таковой имеется) не будет работать, пока вы не вызовете densify.
Примеры из галереи
© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.SGDClassifier.html