Comments 25
если в наших руках такой мощный и простой прибор, в виде аналитического решения, который мгновенно телепортирует нас в нужное место?
Если вдруг нам «повезло» и процесс хорошо аппроксимируется полиномом 6й степени — сложно будет найти аналитическое решение. Или это выйдет «всего-то» система из 7 уравнений с 7 неизвестными?
Но в процессе написания статьи был удивлен — скорость работы спусков значительно ниже скорости простого аналитического решения.
Предполагаю две причины:
1) плохо задействована библиотека numpy
2) нужен пример где значения будут измеряться тысячами, а признаки десяткою (или десятками). Семь неизвестных тоже наверное сойдет))
NumPy не причем. Чистый спуск (не стохастический) гарантированно будет медленней аналитического решения, по крайней мере на относительно небольшом числе признаков (тысячи, я думаю). На большом числе признаков, аналитическое решение все еще должно быть быстрее, если использовать итеративные солверы типа метода сопряженных градиентов.
а в таком случае, действительно в каких ситуациях у градиентного спуска имеется преимущество перед аналитическим решением?
например когда значений в выборке переваливает за сотни тысяч или более и проще «исследовать» рандомно несколько тысяч из них (стохастический спуск)?
практикой не богат, а интересно ведь)
а в таком случае, действительно в каких ситуациях у градиентного спуска имеется преимущество перед аналитическим решением?
Для лин. рега с такими случаями не сталкивался. Это не значит что их нет, просто не сталкивался. SGD подразумевает несколько проходов по выборке, так или иначе, так что выигрыша особо не будет. Единственный вариант который мне приходит на ум это случай, когда данных настолько много, что они не влазят в память одной машины, и при этом нет простого способа реализовать CG.
Ну и на stats.stackexchange в целом со мной согласны
https://stats.stackexchange.com/questions/160179/do-we-need-gradient-descent-to-find-the-coefficients-of-a-linear-regression-mode
Solve using THE WORST POSSIBLE general purpose nonlinear optimization algorithm there is, i.e., gradient descent. Use this only if you want to see how bad and unreliable a solution method can be If someone tells you to use gradient descent to solve linear least squares problems
Если вдруг нам «повезло» и процесс хорошо аппроксимируется полиномом 6й степени — сложно будет найти аналитическое решение. Или это выйдет «всего-то» система из 7 уравнений с 7 неизвестными?
Если речь идет о том, что полином мы строим от значений признаков, то да, это та же линейная регрессия, просто на большем числе признаков, с таким же аналитическим решением.
Ребят, серьезно, может есть еще какие-нить интересные темы для статей кроме лин. рега?
Можно же разобрать экстремальный бустинг, факторизационные машины, какие-нибудь нетривиальные варианты SVM. Какой смысл плодить одинаковые статьи так себе качества?
Во-первых, спасибо за отзыв.
Во-вторых, статьи у меня еще будут.
В-третьих, собственно, я сам только начал свой путь в data science и месяц назад узнал о том, что такое градиентный спуск.
В-четвертых, в статье изложил те трудности, с которыми столкнулся при изучении материала. Несмотря на обилие статей мне пришлось хорошо покопаться в этом. Надеюсь, что кому-то, моя статья облегчит студенческую жизнь.
В-пятых, все в наших с вами руках: хотим статьи об экстремальном бустинге — берем и пишем :))
В-четвертых, в статье изложил те трудности, с которыми столкнулся при изучении материала. Несмотря на обилие статей мне пришлось хорошо покопаться в этом. Надеюсь, что кому-то, моя статья облегчит студенческую жизнь.
В том-то и проблема, что материала "от новичка новичкам" по лин. регу очень много, и еще одна средненькая статья ситуацию не улучшит. Кстати, неплохо было бы указать в статье чем не понравились предыдущие статьи.
В-пятых, все в наших с вами руках: хотим статьи об экстремальном бустинге — берем и пишем :))
Мне это не особо интересно.
просто в некоторых статьях была хорошо описана теория и совсем не было кода или он был настолько для меня сложный, что приходилось очень долго разбираться.., в некоторых статьях был код и вроде он понятный, но не хватало некоторого описания..., статей с простейшими примерами, в которых были бы и теория и код не встречал…
«Мне это не особо интересно.»
А жаль. Уверен, могли бы получиться хорошие статьи
www.sociologos.ru/metody_i_tehnologii/Razdel_Analiz_dannyh/Regressionnyj_analiz_i_korrelyaciya/Prikladnoj_regressionnyj_analiz_Drejper_Smit
Дрейпер, Смит. Прикладной регрессионный анализ.
Одно время была настольной книгой.
В общем случае регрессия сводится к решению задачи по оптимизации — нахождению экстремума функции. Линейной или нелинейной относительно параметров. И одним градиентным спуском там не ограничивается.
В общем, советую поискать серьезную литературу на эту тему — учебники, лекции. Может быть еще будет полезно поискать по теме «обработка экспериментальных данных». Там и статистический и регрессионный анализ используется.
Еще несколько замечаний
Можно и не возводить отклонение в квадрат, а воспользоваться свойством модуля и тогда у нас все отклонения будут положительными и будут накапливаться. Мы не будем останавливаться на этом моменте подробно, а просто обозначим, что для удобства расчетов, принято возводить отклонение в квадрат.
На самом деле это критический момент — производная у модуля в нуле не определена, а вторая производная нулевая, что означает невозможность использования наивного аналитического решения, и большие сложности со сходимостью у градиентных методов. Плюс модуль и квадрат по разному оценивают невязки, и в общем случае приводят к разным минимумам.
уравнения частных производных 1-го порядка
Честно говоря, тут сам не уверен, вроде уравнение частных производных требует, чтобы в формулировке участвовали и производные, и сама функция, в нашем случае это не так, и мы просто имеем дело с линейной системой.
градиент — это отрезок
Все таки вектор
значение производной в точке M(0,0) равное +25 означает, что в заданной точке, при смещении значения вправо на условную единицу, значение возрастает на 25 условных единиц.
Наверное все таки стоит рассказать что это за условные единицы.
Определяем псевдослучайным образом координаты коэффициентов и. В нашем примере, мы будем определять коэффициенты вблизи нуля.
Все еще не понятно, зачем в принципе брать псевдослучайные числа, когда можно взять ноль
вроде уравнение частных производных требует, чтобы в формулировке участвовали и производные, и сама функция
Никак нет:) Самые обычные уравнения в ч.п. — эллиптическое, параболическое и гиперболическое в частном случае обходятся без любых функций от функции (например обозначаемой буквой u):
uxx + uyy = 0;
uxx — ut = 0;
uxx — utt = 0.
Главное условие — что есть функция нескольких переменных и соответственно по всем этим переменным хотя бы какие-то производные.
Спасибо за ответ, совсем не разбираюсь в диффурах.
Но сохраняется ли это определение для уравнений первого порядка?
f(x,y)ux + g(x,y)uy = h(x,y)
Для случая с наличием правой части точно не помню, а при нулевой метод решения можно глянуть здесь:
math-it.petrsu.ru/users/semenova/DIFF_UR/Lections/Urav_Pp.pdf
Формула (5) применяется для решения уравнения (4).
производная у модуля в нуле не определена, а вторая производная нулеваяесли первая производная неизвестна, то как посчитали вторую?
В свою очередь градиентный спуск и его вариации будут медленно, но верно приближать нас к цели — минимуму функции.— но этот минимум может оказаться локальным.
Python — это про скорость разработки, но не расчётов.
В статье ничего не говорится об условиях применимости модели линейной регрессии.
Читателю советую ознакомиться хотя бы со статьёй на Википедии.
Автору — незачёт, переделайте статью или уберите этот позор из общего доступа.
Отвечу по порядку.
— но этот минимум может оказаться локальным
В статье безусловно говорится про то, что у функции может быть несколько минимумов:
"Обратим внимание на то, что функция может иметь несколько минимумов, и опустившись в один из них по предложенному далее алгоритму, мы не сможем найти другой минимум, который возможно находится ниже найденного. Расслабимся, нам это не грозит! В нашем случае мы имеем дело с единственным минимумом, так как наша функция на графике представляет собой обычную параболу. А как мы все должны прекрасно знать из школьного курса математики — у параболы существует только один минимум."
Python — это про скорость разработки, но не расчётов.
Никто и не утверждает здесь обратного, впрочем здесь языки вообще на сравнивают
В статье ничего не говорится об условиях применимости модели линейной регрессии
А должно? Прошу прочитать в самом начале цель статьи, если конечно не затруднит.
Рекомендую почитать Весьма доходчиво написано. Хотя и «много буков».
На самом деле, тема намного сложнее чем тут описано. Все сказанное выше хорошо и справедливо в том случае, когда есть данные и есть готовая модель (уравнение), которая их описывает и вопрос только в том, чтобы найти коэффициенты этой модели.
Но модели может и не быть как таковой. И типичная ситуация такова — вот вам результат и вот вам десяток факторов, которые могут на него влиять. А могут и не влиять. И для начала нужно определить что влияет на результат, а что нет — какие факторы нужно учитывать при построении модели, а какие можно отбросить. Это и есть регрессионный анализ.
Отмечу, что в статье действительно делался заход только со стороны поиска коэффициентов уравнения различными способами. Здесь не рассматривается анализ факторов (признаков), выбор лучшей модели и т.д. Вполне возможно, по этой причине появятся еще статьи о регрессионном анализе. Правда, очень много желающих, вернее «не желающих» более видеть статьи про регрессии. Посмотрим, тем-то много, о чем можно написать :)
А вот когда параметров станет 7-10 и более, то градиентный спуск для функции [среднеквадратичного отклонения] многих переменных может стать весьма ресурсозатратным.
А если еще выбранная модель будет нелинейной по параметрам, то станет совсем весело — появляется риск попасть на локальный минимум.
Весь код, приведенный в статье, написан на языке python 2.7 с использованием Jupyter Notebook.
Шёл 2019 год…
Решаем уравнение простой линейной регрессии