上面的问题说明了一切。基本上我的问题是一个通用的拟合函数(可能是任意复杂的),它在我试图估计的参数中是非线性的,如何选择初始值来初始化拟合?我正在尝试做非线性最小二乘。有什么策略或方法吗?这个有研究过吗?有参考吗?除了临时猜测之外还有什么?具体来说,现在我正在使用的拟合形式之一是高斯加线性形式,其中包含我试图估计的五个参数,例如
其中(横坐标数据)和(纵坐标数据)意味着在对数对数空间中,我的数据看起来像一条直线加上我用高斯近似的凹凸。我没有理论,没有什么可以指导我如何初始化非线性拟合,除了可能像线条的斜率和凹凸的中心/宽度那样的图形和眼球观察。但是我有超过一百个这样的拟合,而不是图形和猜测,我更喜欢一些可以自动化的方法。
我在图书馆或网上找不到任何参考资料。我唯一能想到的就是随机选择初始值。MATLAB 提供从均匀分布的 [0,1] 中随机选择值。因此,对于每个数据集,我运行随机初始化的拟合一千次,然后选择具有最高的那个?还有其他(更好的)想法吗?
附录#1
首先,这里有一些数据集的可视化表示,只是为了向你们展示我在说什么类型的数据。我以原始形式发布数据,没有任何类型的转换,然后在日志空间中发布它的可视化表示,因为它澄清了一些数据的特征,同时扭曲了其他特征。我正在发布好数据和坏数据的样本。
每个图中的六个面板中的每一个都显示了四个数据集,红色、绿色、蓝色和青色绘制在一起,每个数据集正好有 20 个数据点。由于数据中看到的颠簸,我试图用一条直线加上一个高斯来拟合它们中的每一个。
第一个数字是一些好的数据。第二个图是图一中相同好的数据的对数图。第三个数字是一些不良数据。第四个图是图三的对数图。还有更多数据,这些只是两个子集。大部分数据(大约 3/4)是好的,类似于我在这里展示的好的数据。
现在有一些评论,请耐心等待,因为这可能会很长,但我认为所有这些细节都是必要的。我会尽量简洁。
我最初期望一个简单的幂律(意味着对数空间中的直线)。当我在对数空间中绘制所有内容时,我看到了 4.8 mHz 左右的意外颠簸。颠簸经过彻底调查,并且在其他工作中也被发现,所以不是我们搞砸了。它在物理上就在那里,其他已发表的作品也提到了这一点。所以我只是在我的线性形式中添加了一个高斯项。请注意,这种拟合是在日志空间中完成的(因此我的两个问题包括这个)。
现在,在阅读了Stumpy Joe Pete 对我的另一个问题的回答(根本与这些数据无关)并阅读了这个和这个以及其中的引用(Clauset 的东西)之后,我意识到我不应该适合 log-log空间。所以现在我想在预先转换的空间中做所有事情。
问题一:看好数据,我还是觉得在预变换空间中一个线性加一个高斯还是一个好形式。我很想听听其他拥有更多数据经验的人的想法。高斯+线性合理吗?我应该只做高斯吗?还是完全不同的形式?
问题 2:无论问题 1 的答案如何,我仍然需要(很可能)非线性最小二乘拟合,因此仍然需要初始化帮助。
我们看到两组数据,我们非常喜欢在 4-5 mHz 左右捕获第一个颠簸。所以我不想添加更多的高斯项,我们的高斯项应该以第一个凹凸为中心,这几乎总是更大的凹凸。我们希望在 0.8mHz 和 5mHz 左右之间“更准确”。我们不太关心更高的频率,但也不想完全忽略它们。所以也许某种称重?或者 B 可以始终在 4.8mHz 左右初始化?
横坐标数据是以毫赫兹为单位的频率,用表示。纵坐标数据是我们正在计算的系数,用表示。所以没有对数转换,形式为
- 是频率,总是正的。
- 为正系数。所以我们在第一象限工作。
- ,我认为幅度也应该始终为正,因为我们只是在处理颠簸。当我查看数据时,我总是看到高峰而没有低谷。看起来在所有数据中都有多个更高频率的颠簸。第一个凸起总是比其他凸起大得多。在良好的数据中,次级凸起非常弱,但在不良数据(例如面板 2 和 5)中,次级凸起很强。所以我们实际上没有一个山谷,而是两个颠簸。意味着幅度。而且由于我们主要关心第一个峰值,因此更有理由保持积极态度。
- 是凸起的中心,我们总是希望它位于 4-5mHz 左右的那个大凸起上。在我们解析的频率范围内,它几乎总是出现在 4.8mHz。
- 是凸块的宽度。我想它是围绕零对称的,这意味着相同的效果,因为它是平方的。所以我们不在乎它的价值是什么。假设我们更喜欢它是积极的。
- 是线的斜率,似乎它可能略微为负,因此不对它实施任何限制。斜坡本身就很有趣,所以我们不想对其施加任何限制,我们只想看看它会是什么。它是积极的还是消极的?它的大小有多大/小?等等。
- 是(几乎)截距。这里微妙的是,由于高斯项,不完全是截距。实际截距(如果我们外推到)将是
所以这里唯一的限制是截距也应该是正数。截距为零,我不知道这意味着什么。但消极肯定看起来很荒谬。我想在这里我们可以允许在必要时以较小的幅度略微为负。和截距的原因在这里很重要,但我们的一些同事实际上也对外推感兴趣。我们拥有的最小频率是 0.8mHz,他们想在 0 到 0.8mHz 之间进行推断。我幼稚的想法是只使用 fit 一直到。
我知道外推比插值更难/更危险,但使用直线加高斯(希望它衰减得足够快)对我来说似乎是合理的。有点像具有自然边界条件的自然三次样条曲线,左端点处的斜率,只需延长线并查看它与轴相交的位置。如果它不是负数,则使用该线进行外推。
问题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
第一列是以 mHz 为单位的频率,在每个数据集中都相同。第二列是一个好的数据集(好的数据图一和二,面板 5,红色标记),第三列是一个坏的数据集(坏数据图三和四,面板 5,红色标记)。
希望这足以激发一些更开明的讨论。谢谢大家。