我想在我的数据集中使用任意函数。因此,我在MATLAB中使用了lsqcurvefit
。现在我想给拟合过程赋予权重,这意味着当曲线拟合函数(lsqcurvefit
)计算拟合的残差时,某些数据点比其他数据点更重要。更具体地说,我想使用统计加权方法。
w=1/y(x),
其中w
是一个矩阵,包含每个数据点的权重,y
是数据集。
无论如何我都找不到使用lsqcurvefit
进行加权曲线拟合。有没有我应该遵循的技巧,还是有其他功能而不是lsqcurvefit
为我做这件事?
答案 0 :(得分:4)
为了进行加权,我发现使用lsqnonlin
更加容易,这是lsqcurvefit
调用以进行实际拟合的函数。
首先必须定义一个你想要最小化的函数,即。成本函数。您需要将加权函数extra parameter作为向量传递给函数:
x = yourIndependentVariable;
y = yourData;
weightVector = sqrt(abs(1./y));
costFunction = @(A) weightVector.*(yourModelFunction(A) - y);
aFit = lsqnonlin(costFunction,aGuess);
加权函数定义中平方根的原因是lsqnonlin
需要残差,而不是平方残差或它们的总和,所以你需要预先对权重进行非方形化。
或者,如果你有统计工具箱,你可以使用nlinfit
接受加权矢量/矩阵作为可选输入之一。