Изменения

Перейти к: навигация, поиск

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

175 байт добавлено, 28 январь
Нет описания правки
При выборе случайного элемента можно использовать следующие эвристики:
* брать объекты из разных классов ;* брать объекты, на которых ошибка больше, то есть чем меньше отступ (в метрических классификаторах расстояние от разделяющей поверхности до объекта) i-го объекта $M_i$, тем больше вероятность взять этот объект;* брать объекты, на которых уверенность меньше, то есть чем меньше $|M_i|$, тем больше вероятность взять этот объект;* не брать объекты, на которых уже высокая уверенность ($M_i > \mu_+$) либо не брать объекты-выбросы ($M_i<\mu_i$);
Выбирать величину градиентного шага можно следующими способами:
* $h_t = \dfrac{1}{t}$;* метод скорейшего градиентного спуска: $\mathscr{L}_i({\bf w} - h\nabla \mathscr{L}_i({\bf w})) \rightarrow \min\limits_h$;* при квадратичной функции потерь можно использовать $h = ||x_i||^2$;* иногда можно выполнять пробные шаги, а именно увеличивать $h$ для выбивания процесса из локальных минимумов;* [https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B5%D0%B2%D0%B5%D0%BD%D0%B1%D0%B5%D1%80%D0%B3%D0%B0_%E2%80%94_%D0%9C%D0%B0%D1%80%D0%BA%D0%B2%D0%B0%D1%80%D0%B4%D1%82%D0%B0 метод Левенберга-Марквардта];
== Регуляризация ==
== Достоинства и недостатки ==
'''Достониства:'''
* легко реализуется;* функция потерь и семейство алгоритмов могут быть любыми (если функция потерь не дифференцируема, ее можно аппроксимировать дифференцируемой);* легко добавить регуляризацию;* возможно потоковое обучение;* подходит для задач с большими данными, иногда можно получить решение даже не обработав всю выборку;
'''Недостатки'''
* нет универсального набора эвристик, их нужно выбирать для конкретной задачи отдельно;
Классификатор [https://scikit-learn.org/stable/modules/sgd.html sklearn.linear_model.'''SGDClassifier'''] имеет несколько параметров, например:
'''loss''' $-$ функция потерь. По умолчанию используется "hinge", дающая алгоритм линейного SVM;
'''penalty''' $-$ метод регуляризации. По умолчанию "l2";
'''alpha''' $-$ $\tau$, коэффициент регуляризации;
'''learning_rate''' $-$ алгоритм изменения градиентного шага;
'''eta0''' $-$ начальный градиентный шаг;
'''shuffle''' перемешивать тренировочную выборку после каждой итерации;
* Импортируем нужные библиотеки:
'''from''' sklearn.linear_model '''import''' SGDClassifier
'''from''' sklearn '''import''' datasets
'''from''' sklearn.model_selection '''import''' train_test_split
* Выберем тренировочное и тестовое множества:
iris = datasets.'''load_iris()'''
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size='''0.3''')
* Обучение:
clf = SGDClassifier(shuffle = True)
model = clf.'''fit'''(X_train, y_train)
* Предсказание:
y_pred = model.'''predict'''(X_test)
model.'''score'''(X_test, y_test)
50
правок

Навигация