罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

罗兰在MATLAB的艺术已经存档,不会被更新。

数据分布插值缩放

今天的嘉宾是乔希·迈耶,一个技术作家MATLAB数学和大数据团队。他将讨论一个散乱数据插值中遇到的常见问题,以及如何解决它!

内容

这个问题

一个常见的问题,可能出现对分散的数据进行插值,生成的功能表面似乎比你期望的低质量。例如,当表面似乎并没有通过所有的样品数据点。这篇文章探讨了如何以及为什么分散数据的比例会影响插值结果。

让我们转到一个示例,您可以看到我在说什么。想象你刚从传感器收集的数据样本值在几个点。最终你想适合表面数据,这样您就可以近似的价值底层函数在点你没有数据。所以,你从策划开始。

rng默认的x =兰德(500 1)/ 100;y = 2。* (rand (500 1) -0.5)。* 90;vals = (x。* 100) ^ 2;ptColor = [。6 . 07 . 07];plot3 (x, y,瓦尔斯,“。”,“颜色”ptColor)网格包含(“x”)ylabel (“y”)zlabel (“v (x, y)”)标题(分散的数据点的)

接下来,您使用scatteredInterpolant创建一个interpolant数据。这个计算观察到的点的插值函数,允许您查询函数在其凸包。你创建一个网格查询点,在这些点评估interpolant,情节功能表面。全部完成!

F = scatteredInterpolant (x, y, vals);X = linspace (min (X)、马克斯(X), 25);Y = linspace (min (Y), max (Y), 25);[xq, yq] = meshgrid (X, Y);zq = F (xq yq);持有三色= (0.68 0.88 0.95);冲浪(xq, yq zq、“FaceColor”,三色)包含(“x”)ylabel (“y”)zlabel (“v (x, y)”)标题(“分散数据插值结果”)

…但是等等,结果绝对不是你期待什么!所有这些“折叠”是什么面?为什么它看起来像表面不经过所有的点?插入表面应该通过所有数据点!

让我们快速迂回谈论散乱数据插值之前回到这个有问题的数据。

背景散射插值

与网格插值点位置在哪里定义良好、分散数据提出了不同的挑战。找到插入的值在给定查询点,您需要使用的值附近的点。但你怎么能这样做当数据分散在吗?一个点的位置不能被用来预测另一个点的位置。通过接触广告的形式和比较所有的点的位置,以确定哪些接近给定查询点不是一个非常有效的方法。

X = [-1.5 - 3.2;1.8 - 3.3;-3.7 - 1.5;-1.5 - 1.3;0.8 - 1.2;3.3 - 1.5;-4.0 - -1.0;-2.3 - -0.7;0 -0.5;2.0 - -1.5; 3.7 -0.8; -3.5 -2.9; -0.9 -3.9; 2.0 -3.5; 3.5 -2.25]; V = X(:,1).^2 + X(:,2).^2; plot(X(:,1),X(:,2),的r *)

为了解决这个问题,MATLAB首先计算一个德劳内三角的分散数据。这就产生了一系列的三角形的数据点,这样每个三角形的外接圆由顶点没有附上任何点。计算出的德劳内三角是独一无二的,微不足道的对称性。和最好的部分是,三角可以轻松查询来确定点接近给定查询点。

这图显示了德劳内三角和分散的外接圆数据。注意红色的数据点躺在一个或多个外接圆的边界,但没有人躺在内部的一个圆圈。

tr = delaunayTriangulation (X (: 1), (2):,);[C r] =外心(tr);= C (: 1);b = C (:, 2);pos =[一个r b-r 2 * r, r 2 *);持有triplot (tr)k = 1:长度(r)的矩形(“位置”pos (k,:)“弯曲”[1],“EdgeColor”三色)结束包含(“x”)ylabel (“y”)标题(“德劳内三角分布数据的)举行

武装的三角测量数据,发现插值结果的值在给定查询查询三角结构的点成为一个问题,以确定哪些三角形包含查询点。然后,数据点组成三角形的顶点可以用来计算的值插值结果查询,这取决于使用插值法(加权、线性等…)。

这个图展示了一个查询在一个二维三角点。找到插入的值在这个查询点,MATLAB使用封闭的三角形的顶点。通过重复这个计算在许多不同的查询点,功能表面的数据形式。这个功能表面允许你做出预测点,你没有收集数据。

triplot (tr)情节(X (: 1) X (:, 2),的r *)trisurf (tr.ConnectivityList X (: 1) X (:, 2), V,“FaceColor”三色,“FaceAlpha”,0.9)轴([4、4、4、4 0 25]);网格plot3 (-2.6, -2.6, 0,‘* b”,“线宽”,1.6)plot3 ([-2.6 - -2.6], [-2.6 - -2.6], [0 13.52]”,“- b”,“线宽”,1.6)视图(322.5,30);文本(-2.0,-2.6,Xq的,“FontWeight”,“大胆”,“HorizontalAlignment”,“中心”,“写成BackgroundColor”,“没有”);包含(“x”)ylabel (“y”)zlabel (“v (x, y)”)标题(查询点的插值)

回到这个问题

现在我们知道scatteredInterpolant使用德劳内三角测量的数据执行计算,让我们检查的基本三角插值数据我们有麻烦。

三= delaunayTriangulation (x, y);triplot(三)情节(x, y,的r *)举行包含(“x”)ylabel (“y”)标题(原始数据的三角)

真是一团糟!只有一些小的合理的三角形,其中大部分是又细又长,远离彼此的连结点。它看起来像三角通过所有的数据点,而穷人插值结果我们看到不早些时候。我们希望,插值结果更好看。

基于这个三角,MATLAB not-enviable确定哪些工作的长,薄三角形每个查询点在于。这给我们带来了……

引起这个问题的

可怜的插值结果造成的不同尺度的数据(x轴范围从(0,0.01)和y轴(-100、100))以及由此产生的长,薄三角形的三角测量。在MATLAB将查询点分为相应的三角形,然后使用三角形顶点插值结果的价值。长期以来,薄三角形顶点相互远离,这导致当地的插值结果值基于远点的值,而不是相邻点。

这是一个三角的GIF显示发生了什么x拼了,而y拼是恒定的。什么开始作为一个定义良好的三角很快就会变得充满了许多长,薄的三角形。

数据实际上是被推到越来越小的区域沿轴。如果轴保持不变的情况下,上面的动画看起来是这样的。

显然,三角支撑分布插值计算扭曲敏感数据。该算法预计x, y坐标是相对合理的比例。但是,为什么?

这种行为源于使用外接圆的德劳内三角剖分算法。当你挤在一个方向上的数据,有效地改变外接圆的半径。走上极端,当点挤在一起,成为一条直线在一维,外接圆的半径趋于无穷时的轨迹点与中心等距的圆的变成了一条直线。三角形的分布越来越由于邻近点的y方向,因此为什么点关闭y值但非常不同x价值观成为三角形顶点。

如果我们把上面的外接圆的动画,你可以看到,圆的半径炸毁作为数据被挤压。

规范化的救援

解决此问题的方法通常是删除数据规范化的扭曲。标准化可以提高插值结果在某些情况下,当三角有许多薄的三角形,但在其他人可以妥协的解决方案的准确性。是否使用归一化是一种判断基于插值的数据的性质。

  • 好处:规范化的数据有可能改善插值结果的独立变量有不同的单位和不同尺度。在这种情况下,扩展输入有相似的大小可能会提高插值的数值方面。一个例子,如果标准化将是有益的x在rpm从500年到3500年,代表发动机转速y代表引擎负载从0到1。的尺度xy相差几个数量级,和他们有不同的单位。
  • 注意事项:使用要谨慎规范化数据如果独立变量有相同的单位,即使变量的尺度是不同的。与数据相同的单位,正常化扭曲了的解决方案通过添加一个方向偏差,影响底层三角插值的准确性,最终妥协。一个例子,标准化是如果两个错误xy表示地点和单位的米。扩展xy不平等的不推荐,因为10米向东应该空间一样的10米。

为我们的问题,我们假设xy有不同的单位和正常化他们,使他们有类似的大小。您可以使用相对较新正常化这个函数;默认情况下它使用z得分数据。这转换数据,这样原始的意思\μ变成了0美元,和原来的标准差σ\变成1美元:

$ $ x ' = \压裂{\离开(x - \μ\右)}{\σ}$ $

这个正常化是很常见的,也被称为标准化

x =正常化(x);y =正常化(y);

现在数据规范化,让我们看一下三角。

三= delaunayTriangulation (x, y);triplot(三)情节(x, y,的r *)举行包含(“x”)ylabel (“y”)标题(规范化数据的三角)

这是更好的!三角形主要是定义良好的。只有少数的长,薄边缘附近的三角形。让我们来看看现在分散插值曲面。

X = linspace (min (X)、马克斯(X), 25);Y = linspace (min (Y), max (Y), 25);[xq, yq] = meshgrid (X, Y);F = scatteredInterpolant (x, y, vals);zq = F (xq yq);plot3 (x, y,瓦尔斯,“。”,“颜色”ptColor)举行冲浪(xq, yq zq、“FaceColor”,三色)网格包含(“x”)ylabel (“y”)zlabel (“v (x, y)”)标题(的规范化数据插值结果的)

在这种情况下,采样点允许正常化scatteredInterpolant计算一个更好的三角测量,从而更好的插值结果。

数据扩展

归一化只是一个形式的数据扩展。标准化你正在改变的形状分布的数据和变化的平均值的位置。

你也可以重新调节数据,改变其最大和最小值的范围(例如,0的最小值和1最大的值)。当你重新调节数据保存的形状分布但紧缩或扩张的数轴。这改变了平均值,但保留标准差。

数据扩展关注是很重要的。如果数据不正确了,它可以隐藏关系数据或扭曲他们的力量。一些算法可以改变很多的结果取决于所使用的确切比例。我们刚才看到的三角如何分散对扩展数据敏感,但也可能会导致其他问题的算法。例如,机器学习算法通常取决于之间的欧几里得距离点,所以它们是敏感数据的比例。没有适当的扩展,一些功能将太大贡献相比,影响结果的准确性。

但这是一个广泛的话题最好的覆盖在另一篇文章!

现在让我们来推断!

你经常使用散乱数据插值在你的工作吗?如果是这样告诉我们在评论里!

确认

我想感谢Cosmin Ionita,达米安Sheehy和康斯坦丁·Kovalev宝贵的见解,而我在写这篇文章。

进一步的阅读




发表与MATLAB®R2018b


  • 打印

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。