|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
Дано: вектор Y находится в таблице [Ytable] с полями [i] (целое) и [y] (действительное); N векторов Xn находятся в таблице [Xtable] с полями [n] (целое), [i] (целое) и [x] (действительное); i принимает значения от 1 до 10000, n -- от 1 до 100 (то есть в таблице [Xtable] 100*10000 = миллион записей). Можно ли написать SQL-запрос, который помещает в таблицу [Atable] коэффициенты линейной регрессии вектора Y на вектора Xn? (пост связан с постом https://www.sql.ru/forum/1333430/vopros-o-shodimosti-psevdoregressii ) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2021, 22:59 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
Иван FXS, Полно в разных базах данных либо готовых функций либо необходимые чтобы собрать в необходимое решение, например: Hive: regr_r2() regr_slope() regr_intercept() sum() count() avg() variance() stddev_pop() T-SQL AVG() SUM() COUNT() VAR() STDEV() DAX COUNT( ) AVERAGE( ) STDEV.P( ) VAR.P( ) SUM( ) MDX (в MDX так-же есть поддержка VBA функций) LINREGINTERCEPT() CORRELATION() COVARIANCE() LINREGSLOPE() AVG() ...COUNT LINREGR2() STDDEV() SUM() VAR() Кроме всего многие базы данных поддерживают интеграцию с внешними библиотеками а так-же родные процедуры работы с ML компонентами (например R или Python ).. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2021, 01:14 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
vikkiv, это я понимаю, меня интересует именно "можно ли написать SQL-запрос" (а не вызвать внешнюю -- для SQL -- функцию). Ну и линейная регрессия -- это всё-таки не AVG(), SUM(), COUNT(), VAR() или STDEV()... немножко посложнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2021, 01:46 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
Иван FXS, Чуть чаем не подавился.. мы точно об одной регрессии говорим? Или в школах какой-то альтернативный математический прогресс пошел? Насколько я помню именно наличие этих функций является вполне достаточным условием для нахождения коэффициентов простой линейной регрессии, (кроме стандартных/основных {арифметических} алгебраических операций: сложения, вычитания, умножения и деления, и можно чисто с бюрократической точки зрения добавить операции со степенями и функцию power()) для множественной (многофакторной) немного замороченнее, но тоже вычисляемо был вопрос - можно-ли.. соответственно дан ответ: можно, и показано направление, причём на HIVE SQL и некоторых др. диалектах есть готовые функции но при наличии специально под эти задачи заточенных инструментов вполне интегрируемых в SQL напрашивается другой не заданный вопрос: нужно-ли (натягивать сову на глобус, или лезть на кактус)? Есть же библиотеки оптимизированные на векторную/линейную алгебру, GPU, расширенные инструкции, дополнительные регистры, параллельность, многопоточность по всем ядрам и CPU, даже на кластерах через тот-же Spark например.. одни MKL/BLAS + AVX512 чего только стоят по производительности на задачах этого класса, Python или R в руки и вперёд, уже довольно давно принятый в корпоративном мире стандарт. но если сильно хочется то напр. на T-SQL набросать можно что-то такое: (заметь: именно sum/count/avg/var) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
С MySQL тоже схожая ситуация как и с MSSQL, в PostgreSQL и Oracle как и в HIVE ещё есть готовые regr_intercept()/regr_slope()/regr_r2() , плюс дополнительные суммы квадратов, ковариации, корреляции и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2021, 15:15 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
vikkiv для множественной (многофакторной) немного замороченнее, но тоже вычисляемо --но вы видите что в посте идёт речь именно о "множественной (многофакторной)" или нет? И даже количество факторов указано -- 100. То, что регрессия переменной Y на ОДНУ переменную Х конструируется ... как два пальца об асфальт, я знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2021, 15:54 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
Иван FXS, технически, если вдаваться в семантику - то это не было указанно в явном виде / или я не понял (может только если отследить по другой теме и придти к такому выводу), т.к. там нет детерминированности и возможны варианты интерпретации, но в виде как указанно в последнем сообщении - эта неопределённость уходит теперь собственно к ответу на тему по множественной: для частных случаев где n в пределах малых чисел (даже скорее цифр: 2,3...) - тоже вполне можно жестко прописать и на SQL, для общей формы где n = произвольное - уже надо писать более замороченную логику генерации выражений под вычисления с использованием циклов/рекурсий, промежуточных таблиц через динамический SQL, что потребует намного больших трудозатрат, появятся проблемы с отловом ошибок и обслуживанием так-же и появятся претензии к производительности (особенно большая чуствительность с ростом n чем при увеличении кол-ва строк) (не отвечая на не заданный вопрос "нужно-ли это" с учётом наличия более оптимальных средств/языков {процедурно/объектного программирования с нужным набором функций} специально предназначенных для таких типов задач) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2021, 16:42 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
UNION в цикле наверное потянет. Но для этого динамический SQL не требуется. Достаточно простого PL/SQL, и в нём реализовать рекуррентность из того самого поста. Но это ИМХО. Согласен, что обслуживать сложно. По трудозатратам вполне сравнимо с алгоритмикой. Если ради эстетства. Я один раз так и сделал: алгоритмическое ТЗ реализовал чередой запросов, но меня мотивировало, что ТЗ было размытым и опасался, что курочить алгоритм придётся многажды. Но курочить оказалось только эпилог. Так что не знаю, выиграл или проиграл. Под 1000 строк вышло. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2021, 17:04 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
(порезал про зависимость векторов) Коль скоро озвучены порядки задачи. Видим же, что размерность векторного пр-ва и кол-во векторов несопоставимо. Не знаю уж как возникают эти векторы. При заметной случайности очевидно, векторы будут сильно не ортогональны. Матрица ковариаций всего лишь 100х100. Такую задачу, если она изолированная, просто решить типовыми методоми. Например Главных компонент. Собственные значения и собс-ные векторы легко находятся школьными методами. Например модифицированным гауссом или корнями 100-полинома. Полином считается итерационно спец методом для таких матриц (для симметричных). Ничего запредельного в размерности 100 кроме обеспечения точности. Но даже и это можно запихнуть в SQL-ы, только я бы не стал. Конечно есть нюанс, если данная матрица представляет только однну реализацию однотипной послед-сти действий. Тогда может понадобиться обеспечить устойчивость решения. И тогда метод редукции регрессии к 2-мерным регрессиям вполне оправдано. Только получение коэф-тов нужно обеспечить устойчивым методом, иначе в разнос пойдёт. Про желаемый же метод этого (устойчивость) не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 13:59 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
Правильно ли я понял. Речь идет об этом https://ru.wikipedia.org/wiki/Линейная_регрессия Код: sql 1. 2. 3. 4. 5.
На вход - координаты измерений в декартовой плоскости. На выходе прямая которая удовлетворяет требованию близости одновременно ко всему множеству измерений. По сути прямая здесь обозначена двумя вещественными коэфициентиками (k) и (b). Верно? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 16:28 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
mayton, y(i) = b0(i) + b1*x1(i) + ... + bj*xj(i) + ... + bk*xk(i) + e(i) -- на той же странице Википедии в разделе "Парная и множественная регрессия" ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 17:46 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
mayton ...По сути прямая здесь обозначена двумя вещественными коэфициентиками (k) и (b). Верно? В данной задаче даже не идёт речь о последовательности случайных величин (векторов). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 17:57 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
Пример Метода Леверье. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 18:10 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
Предыдущее было для выч хар. полинома. Щас пример : корни полинома с действит-ми коэфф-ми. Метод Лагера. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 18:19 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
Технически, наверное не сложно портировать Basic на PL/SQL, или T/SQL. Но автор хотел решить задачу следующим подходом: Код: sql 1.
и возвращать представление таблицы ATable. Что в этой задаче плохо? В ней плох формат исходных даных. А именно матрица 100*10000. И ее декартов порядок. Обычно реляционные СУБД плохо работают с матрицами. Готов спорить на виски, что реализация этого метода на PL/SQL + Collections будет на порядок эффективнее чем любая реализация которая будет считывать данные непосредственно из таблиц Ytable/Xtable в процессе самого расчета ЛР. Разумеется я предполагаю что коллекции будут инициализированы из таблиц Ytable/Xtable будут как минимум 1 раз. Кстати я предполагаю дать фору. И изменить структуру данных таким образом чтобы Ytable/Xtable были уже соединены в отдельную материализацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 19:20 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
ИМХО загвоздка в переменной n. Это кол-во полей (векторов Х). Лично я не знаю как это сделать даже с With abcde AS(). М.б. динамическим SQL. Но я не сильно спец, поэтому предполагал в виде (непонятно только , зачем?), где единственный оператор PL/SQL - это FOR FOR k in 2..n ... курсоры ... курсоры SELECT ..... UNION SELECT ..... END Кстати, в оракуле есть матричные функции, подразумевающие представление таблицы в стандартном массиве, где одно из полей есть номер поля таблицы (или имя этого поля, не помню без словаря) . Короче, ширина массива предзадана. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 19:44 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
exp98 ИМХО загвоздка в переменной n. Это кол-во полей (векторов Х). ..... предполагал в виде (непонятно только , зачем?), где единственный оператор PL/SQL - это FOR ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 20:19 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
В рамках пятничного хакатона можно было-бы сделать нечто оригинальное на языках Stored Precedures. Это и быстро-бы летало. И практично. А чистый SQL... ну... похоже на тестовое задание. Но уж сильно специфичное. Да и кому нужен чистый SQL? Это - утопия. Ни в одной конторе не требуют. Всегда предупреждают-де у нас - такой-то софт (MSSQL/Postgres e.t.c.) и под него мы разрабатываем. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 20:35 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
В принципе, формулируя вопрос, я интуитивно предполагал, что это невозможно. И хотел получить подтверждение этому. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 20:52 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
Иван FXS, Это не невозможно, очень даже возможно, это попросту непрактично, поэтому и была череда намёков про сову на глобус .. кактус. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 21:01 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
Почему невозможно? Лет 15 назад в Oracle мы доказывали что SQL-полный по Тьюрингу. Это значит что мы можем решать на нём любые задачи. Шахматы. Численные методы. Реализовывать машины с состояниями. Но из этого не следует что нам будет легко! Нам надо будет освоить хитрую технику... ну я не знаю наподобие разворота цикла в рекурсию (как делают например в Haskell) чтобы протащить состояние машины через итерации например. Ну вобщем наверное можно. Но цена такого доказательства будет слишком дорогой. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 21:02 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
mayton SQL-полный по Тьюрингу. Или что "программа", состоящая из набора последовательно выполняемых SQL-запросов (запускаемых, например, макросом) является полной по Тьюрингу? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 23:58 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
Я пытаюсь вспомнить события тех лет. Кажется речь шла о рекурсивных запросах. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2021, 01:52 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
Кстати о птичках. Эта задачка всплыла у меня в связи с идеей пощупать "корреляционную матрицу" (читай "регрессионную") для американского рынка акций -- если вдруг кому-нибудь эта тема интересна... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2021, 07:51 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
Иван FXS пощупать "корреляционную матрицу" (читай "регрессионную") для американского рынка акций -- если вдруг кому-нибудь эта тема интересна... Сомневаюсь что нынешний рынок акций поддается хоть какому-то тех.анализу. Туда идет огромный поток свеженапечатанных баксов, поэтому его колбасит то от твитов Маска, то от троллинга с реддита и т.д. и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2021, 10:11 |
|
Можно ли на SQL реализовать линейную регрессию?
|
|||
---|---|---|---|
#18+
Dima T, уважаю ваше право сомневаться, поскольку это вопрос мировоззренческий -- для тех, кто на берегу, то есть не пробует ("поддать нынешний рынок акций хоть какому-то тех.анализу"). А правительства в самом деле печатают много денег. От этого рынок акций просто "системно" растёт как целое. И будет дальше расти. Я бы понял, если бы вы произнесли коронный аргумент "от рефлексивности рынка": типа, там очень много богатых ребят, которые нанимают умных ребят, и если бы там были возможности для теханализа, то умные ребята их бы давно нашли, а богатые ребята на них уселись бы и тем самым "исчерпали" бы их... А так -- ну, баксов много поступает, ну колбасит его (да и так ли уж колбасит-то) ... ну и что? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2021, 11:21 |
|
|
start [/forum/topic.php?fid=16&fpage=3&tid=1339673]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 156ms |
0 / 0 |