上面的问题说明了一切。基本上,我的问题是针对一个通用的拟合函数(可能会任意复杂),该函数在我尝试估算的参数中是非线性的,如何选择初始值来初始化拟合?我正在尝试做非线性最小二乘法。有什么策略或方法吗?已经研究过了吗?有参考吗?除了临时猜测之外,还有什么吗?具体来说,现在正在使用的一种拟合形式是具有我要估计的五个参数的高斯加线性形式,例如
其中(横坐标数据)和y = log 10(纵坐标数据)意味着在对数对数空间中,我的数据看起来像一条直线加一个高斯近似的凸点。我没有任何理论,关于如何初始化非线性拟合的任何指导,除了可能像线的斜率和凹凸的中心/宽度之类的图形和眼球之外,都没有指导我。但是我有一百多种适合的方法,而不是图形和猜测,我更喜欢一些可以自动化的方法。
我在图书馆或在线找不到任何参考。我唯一能想到的就是随机选择初始值。MATLAB提供了从[0,1]均匀分布的值中随机选择值的功能。因此,对于每个数据集,我都会运行随机初始化的拟合一千次,然后选择最高的那个。还有其他(更好的)想法吗?
附录1
首先,这是数据集的一些直观表示,目的是向大家展示我在谈论哪种数据。我要以原始形式发布数据,而无需进行任何形式的转换,然后将其以可视化的形式记录在日志-日志空间中,因为它阐明了某些数据的功能,同时扭曲了其他功能。我同时发布了好坏数据的样本。
每个图中的六个面板中的每个面板都显示四个数据集,它们分别绘制为红色,绿色,蓝色和青色,每个数据集恰好具有20个数据点。由于数据中出现的颠簸,我试图用直线加高斯拟合它们中的每一个。
第一个数字是一些好的数据。第二个图是与图一相同的好数据的对数-对数图。第三个数字是一些不良数据。第四个图是图三的对数-对数图。数据更多,这只是两个子集。大部分数据(大约3/4)都是好数据,类似于我在此处显示的好数据。
现在发表一些评论,请耐心等待,因为这可能会花费很长时间,但是我认为所有这些细节都是必要的。我会尽量简洁。
我原本期望一个简单的幂定律(意思是对数-对数空间中的直线)。当我在对数-对数空间中绘制所有图形时,我看到了4.8 mHz附近的意外凸起。对颠簸进行了彻底的调查,并在其他工作中也发现了颠簸,因此并不是我们搞砸了。它实际上在那儿,其他出版的作品也提到了这一点。因此,我只是在线性形式中添加了一个高斯项。请注意,此拟合将在对数-对数空间中完成(因此,我的两个问题包括此问题)。
现在,在阅读了Stumpy Joe Pete对我的另一个问题(根本与这些数据无关)的答案并阅读了这个,这个以及其中的引用(由Clauset逐句填充)之后,我意识到我不应该适合log-log空间。所以现在我想在预先转换的空间中做所有事情。
问题1:从好的数据来看,我仍然认为在预变换空间中线性加高斯仍然是一种好形式。我很想听听其他有更多数据经验的人的想法。高斯+线性合理吗?我应该只做高斯吗?还是完全不同的形式?
问题2:无论问题1的答案是什么,我仍然需要(最有可能)非线性最小二乘拟合,因此仍需要初始化方面的帮助。
在看到两组数据的情况下,我们非常希望捕获4-5 mHz附近的第一个凸起。因此,我不想添加更多的高斯项,而我们的高斯项应以第一个颠簸为中心,这几乎总是更大的颠簸。我们希望在0.8mHz至5mHz之间的“更高的精度”。我们不太关心较高的频率,但也不想完全忽略它们。那么也许是某种权衡?还是B总是可以在4.8mHz附近初始化?
问题3:在这种情况下,你们认为用这种方法推断什么?任何利弊?还有其他推论吗?再一次,我们只关心较低的频率,所以在0到1mHz之间外推...有时非常小的频率,接近于零。我知道这个帖子已经收拾好了。我在这里问这个问题是因为答案可能是相关的,但是如果你们愿意,我可以分开这个问题,以后再问另一个。
最后,这里是应要求提供的两个样本数据集。
0.813010000000000 0.091178000000000 0.012728000000000
1.626000000000000 0.103120000000000 0.019204000000000
2.439000000000000 0.114060000000000 0.063494000000000
3.252000000000000 0.123130000000000 0.071107000000000
4.065000000000000 0.128540000000000 0.073293000000000
4.878000000000000 0.137040000000000 0.074329000000000
5.691100000000000 0.124660000000000 0.071992000000000
6.504099999999999 0.104480000000000 0.071463000000000
7.317100000000000 0.088040000000000 0.070336000000000
8.130099999999999 0.080532000000000 0.036453000000000
8.943100000000001 0.070902000000000 0.024649000000000
9.756100000000000 0.061444000000000 0.024397000000000
10.569000000000001 0.056583000000000 0.025222000000000
11.382000000000000 0.052836000000000 0.024576000000000
12.194999999999999 0.048727000000000 0.026598000000000
13.008000000000001 0.045870000000000 0.029321000000000
13.821000000000000 0.041454000000000 0.067300000000000
14.633999999999999 0.039596000000000 0.081800000000000
15.447000000000001 0.038365000000000 0.076443000000000
16.260000000000002 0.036425000000000 0.075912000000000
第一列是以兆赫为单位的频率,在每个数据集中都相同。第二列是一个良好的数据集(第一个和第二个数据良好,图5,红色标记),第三列是一个不好的数据集(三个和四个不良数据,图5,红色标记)。
希望这足以激发更多开明的讨论。谢谢大家