图像缩略图

形状语言建模

version 1.14 (668 KB) by 约翰D 'Errico
使用形状原语的最小二乘样条建模

25 k下载

更新2017年4月16日

查看许可协议

如果你只能在荒岛上下载一个曲线拟合工具到你的笔记本电脑上,这应该是它。
多年来,我一直建议人们使用最小二乘样条曲线拟合曲线,但有一点需要注意。样条曲线为构建任何形状或形式的曲线提供了极大的灵活性。它们几乎可以很好地适应您向它们抛出的任何数据集。这种灵活性有时也是他们的失败。与多项式模型一样,如果不小心,样条曲线可能过于灵活。诀窍是把你对所研究系统的知识带到问题中去。
作为科学家、工程师、数据分析师等,您通常了解希望建模的过程。有时这些知识来自物理原理,有时来自经验,有时这些知识只是来自于对数据的观察。不管源是什么,我们经常想要在我们的建模工作中构建这个过程的先验知识。这可能是使用非线性回归工具的最大原因,我认为这是最糟糕的原因。如果仅仅因为数据是单调的且数据似乎具有这种特性而拟合一个s型函数,那么您就选择了错误的建模工具。(如果您正在拟合一个s型曲线,因为已知这是您的流程的合适模型,那么就继续拟合这个s型曲线。)
当你只需要一个单调曲线拟合时,我会说一个合适的工具是最小二乘样条曲线,但是一个样条曲线,它被适当地约束以具有你知道的基本形状。这是一种非常贝叶斯的建模方法,在我的经验中是非常有用的。
这里提供的SLM工具为您提供了一个易于使用的界面,可以从数据构建无限数量的曲线类型。SLM代表形状语言建模。其思想是使用一组形状原语为曲线拟合提供一个处方。如果你的曲线是单调的,那么将这些信息构建到模型中,这样你就可以估计出最适合你的数据的单调曲线。你会发现,一旦你使用了合适的约束集,你会奇怪为什么你曾经使用过非线性回归!!
例如,此文件的屏幕截图是针对以下数据生成的:

X = (sort(rand(1100)) - 0.5)*pi;
y=sin(x)。^5+randn(尺寸(x))/10;

slm=slmengine(x,y,'plot','on','knots',10,'increating','on'。。。
“leftslope”,0,“rightslope”,0)
slm =
形式:“slm”
度:3
结:[10x1双结]
系数:[10 x2双)
处方:[1 x1 struct]
x:[100x1双精度]
y (x1 100双):

可以使用slmeval计算样条曲线或其导数。

slmeval(1.3,slm)
ans =
0.79491

可以使用plotslm绘制这些样条曲线。

plotslm (slm)

plotslm函数很好,因为它是一个简单的gui,允许你绘制曲线,残差,它的导数或积分。您还可以评估样条的各种参数,如在一个区间内的最大函数值,最小或最大斜率,等等。

slmpar(slm,“最大坡度”)
ans =
1.5481

您可以使用属性/值对接口向slmengine提供所有这些信息。Slmset充当这种交互的中介,因此您可以使用它来创建将要使用的属性集。默认的属性集及其值由slmset提供。关于函数的形状、斜率、曲率、值等一切都可以通过一个简单的命令来控制。SLMENGINE还提供了生成各种顺序的样条以及自由结样条的能力。

有关SLM工具的完整示例集,请参阅随本次提交一起发布的教程。还有一篇小论文包括了曲线拟合的形状语言建模的概念。

SLM工具包将在未来某个时候得到大幅改进。我将添加一个图形界面。同样,如果我遗漏了任何自然形状基本体,请告诉我。虽然我努力做到包容,但我肯定错过了一些东西。如果我能将你的最爱添加到上面的列表中,我会尝试这样做。

最后,SLM工具需要优化工具箱来解决各种估计问题。

引用作为

约翰D 'Errico(2021)。形状语言建模(//www.tianjin-qmedu.com/matlabcentral/fileexchange/24443-slm-shape-language-modeling), MATLAB中央文件交换。检索

SLMtools / html /