Создать линейную регрессию кусками - PullRequest
0 голосов
/ 26 апреля 2018

Создайте 25 точек функции sin (x) + 2; с помощью

xS = linspace (0.2 * pi, 25); 
yS = sin (xS) + 2;

Найдите линии, которые корректируют предыдущую кривую с такими интервалами, чтобы ошибка в каждом интервале была менее 5%.Разместите их рядом с точками.enter image description here

Кто-нибудь может мне помочь с этой программой?

моя программа:

функция линейной регрессии:

function [m,b,error, yApp]=f_regresionLineal(x,y)
xp = mean(x);
yp = mean(y);
n = length(x);
m = ( sum(x.y) -nxpyp )/( sum(x.^2)-nxp^2 );
b = yp-m*xp;
yApp = m*x+b;
error = mean(abs(y-yApp)./y);
end

скрипт:

S = linspace(0,2*pi,25);
yS = sin(xS)+2;
plot(xS,yS,'r*')
grid on
axis tight
hold on

xxS=xS(1:8);
yyS=yS(1:8);
[m,b,error, yApp]=f_regresionLineal(xxS,yyS)
hold on;
plot(xxS,yApp,'b');

xxS=xS(8:18);
yyS=yS(8:18);
[m,b,error, yApp]=f_regresionLineal(xxS,yyS)
hold on;
plot(xxS,yApp,'g');

xxS=xS(18:22);
yyS=yS(18:22);
[m,b,error, yApp]=f_regresionLineal(xxS,yyS)
hold on;
plot(xxS,yApp,'k');

xxS=xS(22:25);
yyS=yS(22:25);
[m,b,error, yApp]=f_regresionLineal(xxS,yyS)
hold on;
plot(xxS,yApp,'y');

1 Ответ

0 голосов
/ 26 апреля 2018

Во-первых, я должен сказать, что в вашем коде так много опечаток ....

Во-вторых, с моей точки зрения, Кусочно-линейная регрессия - это метод, который соответствует вашим потребностям (извините, но я не уверен насчет правильного названия этого метода на английском языке.)

Некоторые вычисления: enter image description here

Поэтому мы выбрали для подгонки линейную функциюна каждые три пункта.

В-третьих, приведенный ниже код является некоторыми вашими расширениями:

f_regresionLineal.m

function [m,b,error, yApp]=f_regresionLineal(x,y)

xp = mean(x); yp = mean(y); n = length(x);

m = (sum(x.*y)-n*xp*yp)/(sum(x.^2)-n*(xp^2)); 

b = yp-m*xp;

yApp = m*x+b; error = mean(abs(y-yApp)./y);

end

script:

clc; clear;
xS = linspace(0,2*pi,25)'; yS = sin(xS)+2;

plot(xS,yS,'r*'); 
grid on 
axis tight 
hold on

L=1:2:length(xS);
for ii=2:length(L)
  xxS=xS(L(ii-1):L(ii));
  yyS=yS(L(ii-1):L(ii));
  [m,b,error, yApp]=f_regresionLineal(xxS,yyS);
  plot(xxS,yApp,'b');
end

Вывод: enter image description here

...