为什么在使用多项式回归后尝试外推时会得到不相交的数据

Why do I get disjoint data when I try extrapolate after using polynomial regression

我想推断我拥有的一些数据,如下图所示。蓝线是原始数据,红线是我想要的外推。

为了使用回归分析,我使用了函数polyfit

sizespecial = size(i_C); 
endgoal = sizespecial(2); 
plothelp = 1:endgoal;

reg1 = polyfit(plothelp,i_C,2);
reg2 = polyfit(plothelp,i_D,2);

其中 i_Ci_D 是表示原始数据的向量。我使用以下代码扩展了数据:

plothelp=1:endgoal+11; 

for in = endgoal+1:endgoal+11
    i_C(in) = (reg1(1)*(in^2))+(reg1(2)*in)+reg1(3);
    i_D(in) = (reg2(1)*(in^2))+(reg2(2)*in)+reg2(3);
end

但是我现在输出的图是:

我不明白为什么要引入额外的刘海(红圈)。不要犹豫,请我澄清有关此问题的任何细节,并感谢您的所有回答。

我想正在发生的事情是您正在尝试对所有数据拟合二阶多项式。我的猜测是这个多项式看起来很像我用橙色绘制的曲线。如果您听从 Matt 从他的评论中提出的建议,并在原始数据上绘制回归多项式(而不仅仅是外推部分),您应该确认这一点。

您可能会通过拟合更高阶的多项式获得更好的结果。您的数据有两个拐点,因此三阶多项式可能效果很好。然而,对高阶多项式进行外推的一个危险是,它们可能会在您的数据域之外产生相当大的变化,并产生意想不到的疯狂结果。

减轻这种情况的一种方法是对系列的最终 x 数据点执行线性回归。这些是图中以黄色突出显示的点。您可以调整 x 作为参数,使其尽可能多地覆盖曲线的近似线性最后部分。我画的红线将是仅对这些数据(而不是整个数据集)执行线性回归的结果

另一种选择可能是拟合样条曲线并对其进行推断。您可以使用 interp1 函数指定 'spline''pchip'

然而,最佳选择在很大程度上取决于您要解决的问题的性质。