在数据中拟合多项式,matlab

时间:2012-01-22 20:33:44

标签: matlab statistics

我有一个非常简单的问题。我有

x = [1 2 3 4 5];
y = [5.5 43.1 128 290.7 498.4];
p = polyfit(x,y,3);
x2 = 1:.1:5;
y2 = polyval(p,x2);
plot(x,y,'o',x2,y2)
grid on

如何证明使用polyfit(x,y,4),我得到非重要参数,所以我应该只采用polyfit(x,y,3); 的问候,

2 个答案:

答案 0 :(得分:2)

当您使用更多参数时,它可能会导致过度拟合:样本点中的误差最小,但适合其他点(拟合模型的泛化能力)会降低。这在机器学习的背景下被称为bias-variance权衡。

我会选择数据点(训练集)的随机子集,使用3阶和4阶多项式拟合,而不是获得遗漏点的MSE(验证集)。如果第3阶测试集的误差较小,则4阶多项式会导致过度拟合。

这不是一个数学上严格的方法,但可能会给出一个很好的经验理由。

答案 1 :(得分:1)

虽然WebMonster建议使用学习和测试集通常非常有价值,但对于您提供的数据集,它是不可用的。

通常,n阶多项式由n+1个参数确定。因此,您至少需要n+1个数据点才能适合您的数据。为了找到系数(即参数),我们只表示所有f(x) = yx的{​​{1}},y未知数n+1方程式由于所有n+1 - 值都是唯一的,因此可以完全解决。当您拥有比未知数更多的数据点(方程)时,可以计算出最佳解(通常是最小二乘)解。这是一种最小化模型和数据点之间距离的解决方案。

这也为您的数据集带来了一些直觉。您有5个点,因此四阶多项式可以在您提供的点处完美地拟合数据。这意味着您的测量中存在的任何噪声都将成为您模型的一部分,即如果您的数据不包含任何干扰(噪声),您获得的模型只能是无偏的。

但是,从这些少量数据中,您无法断定您应该使用三阶或四阶模型。为此,您需要更多信息。您需要更多数据点,或者需要具有字段信息。例如。如果你知道数据是由一个可以用三阶多项式描述的系统生成的,那么(很可能)你应该使用它。

使用具有这个小证据的四阶模型显然是荒谬的(因为你假设你的测量是完美的),选择三阶模型同样是愚蠢的“因为四阶模型不会做” 。

我计算了数据的最小二乘成本函数(这是x最小化的成本函数),即

polyfit

成本函数for n = 1:4 p = polyfit(x,y,n); ym = polyval(p,x); e = y - ym; V(n) = sum(e.^2)/2 end 衡量的是您的模型对每个订单V(n)的执行情况有多严重,成本越高,您的适合度越差。我计算了n。由此您可以清楚地看到线性(一阶)模型具有非常差的拟合,而四阶模型具有(近)完美拟合(成本实际上等于零)。但是二阶和三阶模型都具有非常相似的性能。引入第三个参数仅会降低成本V= [6269, 28.885, 28.621, 6.083e-25]

您可以了解所有数据点的组合与模型的偏差:0.264。对于第二个订单,这是d = sqrt(2*V),而对于第三个订单,这只是7.601,因此您看到的差异小于7.566(以0.04为单位轴)判断你的模型。

如果选择三阶模型,这意味着您认为这种差异很大。只看你的最后一次测量,相当于y的相对不确定性。长话短说:我严重怀疑三阶模型明显优于二阶模型。就个人而言,我会从这些数据中选择二阶模型。

我根据AICMDL标准的调整后的成本函数快速检查了这些模型,并且这些模型表明二阶模型也优于第三阶模型。这些成本函数包括增加模型复杂度(即Occam's Razor)的惩罚,以防止过度拟合。

请注意,所有这些与这两种模型在现实生活中的表现几乎没有关系。您确实需要更多数据才能得出合理的结论。当您包含更多测量值时,您可能需要四阶或更高阶模型。