为什么在使用多项式回归后尝试外推时会得到不相交的数据
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_C
和 i_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'
。
然而,最佳选择在很大程度上取决于您要解决的问题的性质。
我想推断我拥有的一些数据,如下图所示。蓝线是原始数据,红线是我想要的外推。
为了使用回归分析,我使用了函数polyfit
:
sizespecial = size(i_C);
endgoal = sizespecial(2);
plothelp = 1:endgoal;
reg1 = polyfit(plothelp,i_C,2);
reg2 = polyfit(plothelp,i_D,2);
其中 i_C
和 i_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'
。
然而,最佳选择在很大程度上取决于您要解决的问题的性质。