2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.



Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5 ... 14  След.
 
 Re: Линейная регрессия
Сообщение29.01.2014, 20:06 
Заблокирован


30/12/13

254
Ясно. Придется покоординатный спуск расписывать, а это в разы увеличит время счета...

 Профиль  
                  
 
 Re: Линейная регрессия
Сообщение29.01.2014, 20:21 
Заслуженный участник
Аватара пользователя


11/03/08
9543
Москва
Во-первых, действительно ли нужна минимизация суммы квадратов отклонений измеренной переменной от оцененной, или же минимизация суммы квадратов отклонений логарифмов (второе на практике встречается куда чаще)?
Во-вторых, есть алгоритмы нелинейной регрессии, основанные на линеаризации, например, Левенберга-Марквардта. В них строится вспомогательная линейная регрессия, в которой регрессоры - производные по параметрам модели, а регрессанд - отклонения наблюдаемой величины Y от расчётной. Коэффициенты регрессии - поправка к значениям коэффициентов нелинейной модели.

 Профиль  
                  
 
 Re: Линейная регрессия
Сообщение29.01.2014, 22:10 
Заблокирован


30/12/13

254
Вот мне бы и хотелось иметь подобную модель с учетом поправок. Мне нужна минимальная сумма квадратов отклонений самой функции, но никак не ее логарифма. Пусть формула будет в три раза большей, но чтобы была явной.
Наверняка в литературе такое имеется.
Про алгоритм Левенберга-Марквардта: http://www.katy.ru/science/LMA.pdf Пришла интересная идея, которую попробую реализовать. Если получится, непременно сообщу. Завтра кровь из носу нужно проблему решить...

 Профиль  
                  
 
 Re: Линейная регрессия
Сообщение30.01.2014, 08:38 
Заслуженный участник
Аватара пользователя


11/03/08
9543
Москва
Формула будет не "в три раза большей", а итеративной. Для модели $y_i=f(x_i,\alpha)$, выбрав начальные значения $\alpha_0$, строим вспомогательную линейную регрессию с регрессандом $u_i=y_i-f(x_i,\alpha^k)$, где k - номер итерации, и регрессорами z_{i,j}=\frac {\partial f(x_j, \alpha^k_j)}{\partial \alpha^k_j}$ вида $u=Z\beta$ и $\beta^k=(Z^TZ)^{-1}Z^Tu$ даёт поправку к альфе.
Повторяем до сходимости. При этом в случае нескольких параметров матрица производных, возможно, будет близка к матрице неполного ранга (мультиколлинеарность), что заставляют применять приёмы повышения обусловленности типа ридж-регрессии (что, собственно, и есть метод Левенберга-Марквардта), для одного параметра такой проблемы нет.

 Профиль  
                  
 
 Re: Линейная регрессия
Сообщение30.01.2014, 14:49 
Заблокирован


30/12/13

254
Метод Левенберга-Марквардта оказался практически малопригодным, поскольку число параметров может доходить до 4-5. Поставленную в теме задачу удалось достаточно просто решить так: в первом приближении рассчитываем два параметра классическим методом линейной регрессии, а затем методом Монте-Карло (с любой заданной точностью) эти два параметра сводим к оптимуму.

 Профиль  
                  
 
 Re: Линейная регрессия
Сообщение30.01.2014, 15:37 
Аватара пользователя


21/01/09
3923
Дивногорск
Вот такое нау-хау.
Функция регрессии: $T(t)=T_0 \exp(at)$.
Находим $a$ после логарифмирования.
1. Формируем три параметра $a_{0}=0,9a; a_1=a; a_{2}=1,1a$, то есть 10%-ные отклонения вверх и вниз. Для каждого параметра делаем замену переменных $z_k(t)=\exp(a_kt); k=0,1,2.$ Имеем три функции регрессии вида $T_k(t)=T_{0k}z_k$. По МНК находим $T_{0k}$ и считаем сумму квадратов невязок $S_k(a_k)$. Считая эти 3 пары координатами параболы находим $a'$, при котором парабола имеет минимум.
2. Повторяем п.1 с новым значением $a'$ и с 5%-ным отклонением. Находим $a''$.
3. Повторяем п.1 с новым значением $a''$ и с 1%-ным отклонением. Находим $a'''$.
4. Для функции регрессии $T(t)=T_{0}z'''$ находим $T_0$ по МНК.
Проверил на вашем примере, коэффициенты получаются оптимальные.

 Профиль  
                  
 
 Re: Линейная регрессия
Сообщение30.01.2014, 16:51 
Заблокирован


30/12/13

254
Принцип ясен. Спасибо!
Можно и метод деления отрезка пополам применить. Очень интересно. Попробую самые разные итерации прогнать. Приму окончательно такую, которая потребует минимум времени счета с заданной точностью.

 Профиль  
                  
 
 Re: Линейная регрессия
Сообщение30.01.2014, 20:46 
Заблокирован


30/12/13

254
Александрович, я тоже получил оптимальные коэффициенты до 8-го знака после запятой. Какие Ваши результаты?

 Профиль  
                  
 
 Re: Линейная регрессия
Сообщение30.01.2014, 21:28 
Заслуженный участник
Аватара пользователя


11/03/08
9543
Москва
Вообще-то Левенберг-Марквардт как раз для многомерной модели, на 10-20 параметрах работает прекрасно... Да и более справится.

 Профиль  
                  
 
 Re: Линейная регрессия
Сообщение30.01.2014, 21:42 
Заблокирован


30/12/13

254
Монте-Карло работает при неограниченном числе параметров.
Такой оптимум был получен для поверочного примера

Изображение

Точность до 8-го знака после запятой стабилизировалась.

 Профиль  
                  
 
 Re: Линейная регрессия
Сообщение31.01.2014, 04:28 
Аватара пользователя


21/01/09
3923
Дивногорск
tatkuz1990 в сообщении #820838 писал(а):
Александрович, я тоже получил оптимальные коэффициенты до 8-го знака после запятой. Какие Ваши результаты?

У меня такая позиция - коэффициенты регрессии не могут быть получены точнее чем это позволяют исходные данные. Иными словами, добавление в исходные данные незначащей цифры не должно влиять на значения коэффициентов регрессии.

 Профиль  
                  
 
 Re: Линейная регрессия
Сообщение31.01.2014, 09:50 
Заслуженный участник
Аватара пользователя


11/03/08
9543
Москва
А можно подробнее о Вашей процедуре Монте-Карло?

 Профиль  
                  
 
 Re: Линейная регрессия
Сообщение31.01.2014, 10:07 
Заслуженный участник
Аватара пользователя


18/05/06
13437
с Территории
Скажите хотя бы, сколько раз Вам в итоге приходится вычислять оценку.

 Профиль  
                  
 
 Re: Линейная регрессия
Сообщение31.01.2014, 20:41 
Заблокирован


30/12/13

254
Объяснять словами долго, лучше я напишу текст программы и дам комментарии. Итак текст предельно простой:

Код:
dim x(100),y(100)
n=4
x(1)=0:x(2)=1:x(3)=2:x(4)=3
y(1)=13.8:y(2)=7.9:y(3)=6.1:y(4)=2.9
rem ЛИНЕЙНАЯ  РЕГРЕССИЯ
for k=1 to n
sx=sx+x(k)
sy=sy+y(k)
sx2=sx2+x(k)^2
slny=slny+log(y(k))
sxlny=sxlny+x(k)*log(y(k))
next k
b=(n*sxlny-sx*slny)/(n*sx2-(sx)^2)
a=slny/n-b/n*sx
rem МЕТОД  МОНТЕ-КАРЛО
z=.00001
a0=a:b0=b
s1=10^150
for j=1 to 3000000
a=a0*(1+z*(ran()-.5))
b=b0*(1+z*(ran()-.5))
s=0
for k=1 to 4
x=x(k):y=y(k)
f=exp(a+b*x)
s=s+(y-f)^2
next k
if s<=s1 then
print a using "##.########",b using "##.########",s using "##.########"
s1=s
a0=a:b0=b:fi
next j


Это элементарный бейсик, тут все понятно, как в блок-схемах.
Сначала составляю массив данных, затем вычисляю коэффициенты линейной регрессии. Далее идет Монте-Карло. Начинаю случайно менять значения двух коэффициентов и для них определять сумму квадратов отклонений. Печатаю новые коэффициенты только тогда, когда предыдущий результат хуже. Число циклов для данной задачи принял 3 млн. Для моего мощного компа - это всего 0,1 с (если не высвечивать на мониторе все вычисления). Если высвечивать (как показано в листинге), то секунд 5 считает. Но это с точностью до 8 знака после запятой. Чем меньше нужна точность, тем естественно быстрее. Но сразу оговорюсь: меня не волнует время решения задачи - пусть хоть неделю пашет. Главное - найти оптимум.
Вот так если коротко. Выше мной приведен самый хвостик расчетов (что на черном фоне).

 Профиль  
                  
 
 Re: Линейная регрессия
Сообщение31.01.2014, 21:43 
Заслуженный участник
Аватара пользователя


18/05/06
13437
с Территории
Опрокидывать доску - за это бьют канделябрами. Мы-то думали, что Вам нужно решить первоначальную задачу, быстро, многократно.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 208 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 14  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group