Как увеличить количество итераций для оптимизации моей функции стоимости на каждом этапе с помощью partial_fit в Scikit SGDClassifier?

При использовании partial_fit в Scikit SGDClassifier количество итераций для сходимости функций стоимости равно 1, как указано в описании:

Выполните одну эпоху стохастического градиентного спуска на заданных образцах.
Внутри этот метод использует max_iter = 1. Поэтому не гарантируется, что минимум функции стоимости будет достигнут после его однократного вызова. Такие вопросы, как объективная конвергенция и ранняя остановка, должны решаться пользователем.

Как я могу увеличить max_iter, чтобы моя функция стоимости была оптимизирована правильно, а не только за одну итерацию? Или, что касается scikit-описания, как я могу справиться с «объективной конвергенцией» и «ранней остановкой» моего классификатора, используя partial_fit?


person Luk-StackOverflow    schedule 03.09.2020    source источник


Ответы (2)


Вы можете просто использовать метод fit() вместо метода partial_fit() и увеличить max_iter, указав целочисленное значение для количества итераций, которое вы хотели бы иметь для SGDClassifier. По умолчанию здесь 1000 итераций.

Посмотрите документацию с параметром max_iter: https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html

person Kim Tang    schedule 03.09.2020
comment
Мне нужен partial_fit(), потому что я использую его в качестве онлайн-обучающего, который требует, чтобы после каждого шага веса обновлялись на основе фактических значений веса. Я думаю, что когда я использую fit(), эти веса не обновляются на основе фактических значений веса. Я думаю, что они инициализированы. - person Luk-StackOverflow; 04.09.2020
comment
Хм, может я неправильно понял. Почему бы вам просто не попытаться построить цикл вокруг метода partial_fit? Я думаю, это тоже должно работать. - person Kim Tang; 04.09.2020

Просто выполняет команду partial_fit() снова и снова с одними и теми же данными, например. с фактической партией. Вот мой фрагмент кода, где я только что запрограммировал цикл вокруг команды partial_fit():

for i_iter in np.arange(iterPerBatch):
       clf.partial_fit(X_batch, y_batch, classes=[0,1])

Переменная iterPerBatch определяет количество итераций.

person Luk-StackOverflow    schedule 04.09.2020