Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 27.06.2013
Сообщений: 128

Нелинейная регрессия по параметру

09.01.2017, 12:55. Показов 2628. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создаю модель нелинейной регрессии по параметрам и оптимизирую её с помощью алгоритма Левенберга-Марквардта:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
clc; clear; close all;
 
%% Параметры
Fs     = 1e3;
dt     = 1/Fs;
fc     = 10;
period = 5;
T      = period/fc;
t      = 0:dt:T;
t      = t';
N      = length(t);
 
As     = 1;
At     = 8;
sigma  = 0.2;
 
 
trend   =  At*t/T;
dataset =  As*cos(2*pi*fc*t) + trend + normrnd(0, sigma, N, 1);
 
 
%% Регрессия
info      = struct('x', t, 'y', dataset, 'lambda', 0, 'num_iters', 10, 'w', [0.1; 1; 0.1]);
w         = LMA_regress(info);
 
predicted = w(1)*cos(2*pi*w(2)*t) + w(3)*t;
 
 
%% Вывод
figure;
plot(t, dataset, '-ob', 'markerfacecolor', 'b', 'markersize', 3, 'DisplayName', 'dataset');
grid on; hold on;
plot(t, predicted, '-r', 'linewidth', 2, 'DisplayName', 'predicted');
legend show;
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
%% --------------------------------------------- Levenberg–Marquardt algorithm ------------------------------------------------- %
function w = LMA_regress(info)
 
%% Инициализация вектора параметров
x          = info.x;
y          = info.y;
l          = info.lambda;
w          = info.w;
num_iters  = info.num_iters;
 
 
%% Оптимизация параметров
for i = 1:num_iters
    
    f   = model_fun(w, x);
            
    J   = jacobian(w, x);
    Jt  = J';
    JtJ = Jt*J; 
    
    reg = diag(l*diag(JtJ));
 
    dw  = (JtJ + reg) \ Jt * (y - f);           
    w   = w + dw;
    
end;
 
 
%% Вывод 
disp('настраиваемые параметры:'); 
for i = 1:length(w)
    disp(w(i));
end;
 
end
 
 
%% --------------------------------------------------------- Модель ------------------------------------------------------------ %
function f = model_fun(w, x)
 
f = w(1)*cos(2*pi*w(2)*x) + w(3)*x;
 
end
 
 
%% --------------------------------------------------------- Якобиан ------------------------------------------------------------- %
function J = jacobian(w, x)
 
db1 = cos(2*pi*w(2)*x);
db2 = -w(1)*sin(2*pi*w(2)*x)*2*pi.*x;
db3 = x;
 
J   = [db1 db2 db3];
 
end
Но настройка параметров модели происходит корректно только для параметра тренда w(3). Почему остальные параметры w(1) и w(2) неверно оптимизируются?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.01.2017, 12:55
Ответы с готовыми решениями:

Нелинейная оптимизация fmincon
Решаю задачу с помощью функции fmincon x = fmincon(fun,x0,A,b,Aeq,beq) x0-начальное приближение. При разном значении x0 получаются...

нелинейная система уравнений
Нужно найти все значения неизвестных переменных K1*c1*c2=1 c1*c2=1 g2*(c2*(-KU1+1))+c1*(g1)+c2*g1=0,01 g2*g1=1 При условии...

нелинейная система уравнений
Добрый день,нужно решить данную систему уравнений C1*C2*R1*R3*R4=23.265; C1*R1*(R3+R4)=5.105e5; C1*C2*R1*R3*R4=23.265; ...

5
533 / 438 / 47
Регистрация: 17.07.2013
Сообщений: 2,236
09.01.2017, 17:20
Цитата Сообщение от serg_orl Посмотреть сообщение
неверно оптимизируются
Как Вы это определили?

Попробуйте все это в CFTOOL
0
1 / 1 / 0
Регистрация: 27.06.2013
Сообщений: 128
10.01.2017, 12:15  [ТС]
"... неверно оптимизируются..." - графически видно, что на рисунке ниже красная кривая не восстанавливает зависимости должным образом по набору данных. Почему? Что не так в модели?
Миниатюры
Нелинейная регрессия по параметру  
0
533 / 438 / 47
Регистрация: 17.07.2013
Сообщений: 2,236
10.01.2017, 13:29
Цитата Сообщение от serg_orl Посмотреть сообщение
Почему? Что не так в модели?
В фиттинге, как и указано в документации к МАТЛАБ, очень большое значение имеет правильный выбор алгоритма и стартовых, начальных и конечных точек. Если мне не изменяет память, в алгоритме Левенберга-Марквардта весь этот выбор отдан алгоритму, который и не дает нужного результата. Насколько мне известно, четких алгоритмов по адекватному нахождению стартовых, начальных и конечных точек, не существует и единственный нормально работающий алгоритм - Ваш опыт. Начните с CFTOOL и Вам многое прояснится.

Добавлено через 8 минут
Parametric Fitting
http://www.mathworks.com/help/... #bs4yidr-1
0
1 / 1 / 0
Регистрация: 27.06.2013
Сообщений: 128
11.01.2017, 18:40  [ТС]
cftool работает, но магическим образом выбирает стартовые точки... (рис. cftool.png) Причем выбор начальных приближений для некоторых параметров особенно критичен как в случае с параметром b2 (частота второго синуса) - чуть не так угадал с ним и нет восстановления зависимости

К слову, моя реализация Levenberg–Marquardt algorithm работает (рис. my.png), но также чувствительна к параметру частоты синуса (w(2) в коде первого сообщения).

Большой вопрос: как matlab так сразу угадал начальное приближение для параметров?! Важно отметить, что инструмент cftool работает отменно, но как? Очень хочется воcпроизвести такую же автоматизацию по выбору начальных точек для оптимизируемых параметров в cpp-коде !!!
Миниатюры
Нелинейная регрессия по параметру   Нелинейная регрессия по параметру  
0
533 / 438 / 47
Регистрация: 17.07.2013
Сообщений: 2,236
11.01.2017, 19:26
В CFTOOL есть возможность организовать м-файл и в тесте программы можно менять и стартовые и граничные точки.
Алгоритм выбора этих точек в CFTOOL описан в приводимой ранее ссылке
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.01.2017, 19:26
Помогаю со студенческими работами здесь

Нелинейная краевая задача
Добрый день! Прошу помощи в решении задачи. Не могу разобраться с заданием прямоугольной области и граничных условий в pdetool, а также...

нелинейная система уравнений
Как решить данную систему уравнений? дело в том что уравнений 5 а переменных 4,получается решить только если исключить одну из систем,но...

Нелинейная регрессия
Здравствуй, дорогой Человек! Необходимо построить аппроксимирующую функцию. Вид функции: a + bx + cx2 = y. Мои проделанные шаги: ...

Множественная нелинейная регрессия
В каких программно-статистических пакетах возможно рассчитать нелинейную множественную регрессию?

Апроксимация и нелинейная регрессия
Помогите, первого задания я не нашла даже никаких похожих примеров С нелинейной , немного лучше но все равно , что то не верно ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru