曲线拟合

这些函数支持通过双变量非线性数据构建曲线。

多项式曲线拟合

polyfit 函数是一个通用的曲线拟合器,用于建模两个随机变量之间的非线性关系。

polyfit 函数传递 x 轴和 y 轴,并将平滑曲线拟合到数据。如果只提供一个数组,则将其视为 y 轴,并为 x 轴生成一个序列。可以添加第三个参数来指定多项式的阶数。如果未提供阶数,则默认使用 3 阶多项式。阶数越高,可以建模的曲线就越多。

polyfit 函数可以与线性回归类似的方式在 Zeppelin-Solr 中可视化。

下面的示例使用 polyfit 函数将非线性曲线拟合到随机样本的散点图。蓝色点是原始观测值的散点图,红色点是预测曲线。

polyfit

在上面的示例中,从 logs 集合中提取包含两个字段 filesize_dresponse_d 的随机样本。这两个字段被向量化并设置为变量 xy

然后,使用 polyfit 函数使用 5 阶多项式将非线性模型拟合到数据。polyfit 函数返回一个模型,然后由 zplot 与原始观测值一起直接绘制。

拟合模型也可以像线性回归一样被 predict 函数使用。下面的示例使用拟合模型来预测文件大小为 42000 时的响应时间。

polyfit predict

如果提供了预测值数组,则将返回预测数组。

polyfit 模型执行 插值外推,这意味着它可以预测数据集范围内和范围外的结果。

残差

残差可以以与线性回归相同的方式计算和可视化。在下面的示例中,ebeSubtract 函数用于从观测值中减去拟合模型,以计算残差向量。然后,将残差绘制在 残差图 中,其中 x 轴为预测值,y 轴为模型误差。

polyfit resid

高斯曲线拟合

gaussfit 函数通过高斯峰拟合一条平滑曲线。gaussfit 函数接收 x 轴和 y 轴数据,并对数据拟合一条平滑的高斯曲线。如果只传递一个数字向量,gaussfit 将其视为 y 轴数据,并为 x 轴生成一个序列。

gaussfit 的一个有趣的用例是可视化回归模型的残差与正态分布的拟合程度。

一个拟合良好的回归模型的特点之一是其残差理想情况下会符合正态分布。我们可以通过构建残差的直方图,然后将高斯曲线拟合到直方图的曲线来测试这一点。

在下面的示例中,来自 polyfit 回归的残差使用 hist 函数建模,以返回一个包含 32 个 bin 的直方图。hist 函数返回一个包含每个 bin 统计信息的元组列表。在该示例中,col 函数用于返回一个向量,其中包含每个 bin 的 N 列,即该 bin 中观察值的计数。如果残差呈正态分布,我们预计 bin 计数大致遵循高斯曲线。

然后将 bin 计数向量作为 y 轴传递给 gaussfitgaussfit 为 x 轴生成一个序列,然后将高斯曲线拟合到数据。

然后使用 zplot 绘制原始 bin 计数和拟合曲线。在下面的示例中,蓝线是 bin 计数,平滑的黄线是拟合曲线。我们可以看到,分箱的残差与正态分布的拟合相当好。

gaussfit

第二个图显示了两个曲线叠加的区域图

gaussfit2

谐波曲线拟合

harmonicFit 函数(或简称 harmfit)通过正弦波的控制点拟合一条平滑的线。harmfit 函数接收 x 轴和 y 轴数据,并对数据拟合一条平滑曲线。如果提供单个数组,则将其视为 y 轴,并为 x 轴生成一个序列。

下面的示例显示了 harmfit 拟合正弦波的单个振荡。harmfit 函数返回每个控制点的平滑值。返回值也是一个模型,可供 predictderivativeintegrate 函数使用。

harmfit 函数在单个振荡而不是长序列的振荡上运行时效果最佳。如果正弦波有噪声,尤其如此。拟合曲线后,它可以外推到过去或未来的任何时间点。

在下面的示例中,原始控制点以蓝色显示,拟合曲线以黄色显示。

harmfit

harmfit 的输出是一个模型,可供 predict 函数用于内插和外推正弦波。在下面的示例中,natural 函数创建一个从 0 到 127 的 x 轴,用于预测模型的结果。这会将正弦波外推到 128 个点,而原始模型曲线只有 19 个控制点。

harmfit2