曲线拟合
这些函数支持通过双变量非线性数据构建曲线。
多项式曲线拟合
polyfit
函数是一个通用的曲线拟合器,用于建模两个随机变量之间的非线性关系。
polyfit
函数传递 x 轴和 y 轴,并将平滑曲线拟合到数据。如果只提供一个数组,则将其视为 y 轴,并为 x 轴生成一个序列。可以添加第三个参数来指定多项式的阶数。如果未提供阶数,则默认使用 3 阶多项式。阶数越高,可以建模的曲线就越多。
polyfit
函数可以与线性回归类似的方式在 Zeppelin-Solr 中可视化。
下面的示例使用 polyfit
函数将非线性曲线拟合到随机样本的散点图。蓝色点是原始观测值的散点图,红色点是预测曲线。
在上面的示例中,从 logs
集合中提取包含两个字段 filesize_d
和 response_d
的随机样本。这两个字段被向量化并设置为变量 x
和 y
。
然后,使用 polyfit
函数使用 5 阶多项式将非线性模型拟合到数据。polyfit
函数返回一个模型,然后由 zplot
与原始观测值一起直接绘制。
拟合模型也可以像线性回归一样被 predict
函数使用。下面的示例使用拟合模型来预测文件大小为 42000 时的响应时间。
如果提供了预测值数组,则将返回预测数组。
polyfit
模型执行 插值 和 外推,这意味着它可以预测数据集范围内和范围外的结果。
高斯曲线拟合
gaussfit
函数通过高斯峰拟合一条平滑曲线。gaussfit
函数接收 x 轴和 y 轴数据,并对数据拟合一条平滑的高斯曲线。如果只传递一个数字向量,gaussfit
将其视为 y 轴数据,并为 x 轴生成一个序列。
gaussfit
的一个有趣的用例是可视化回归模型的残差与正态分布的拟合程度。
一个拟合良好的回归模型的特点之一是其残差理想情况下会符合正态分布。我们可以通过构建残差的直方图,然后将高斯曲线拟合到直方图的曲线来测试这一点。
在下面的示例中,来自 polyfit
回归的残差使用 hist
函数建模,以返回一个包含 32 个 bin 的直方图。hist
函数返回一个包含每个 bin 统计信息的元组列表。在该示例中,col
函数用于返回一个向量,其中包含每个 bin 的 N
列,即该 bin 中观察值的计数。如果残差呈正态分布,我们预计 bin 计数大致遵循高斯曲线。
然后将 bin 计数向量作为 y 轴传递给 gaussfit
。gaussfit
为 x 轴生成一个序列,然后将高斯曲线拟合到数据。
然后使用 zplot
绘制原始 bin 计数和拟合曲线。在下面的示例中,蓝线是 bin 计数,平滑的黄线是拟合曲线。我们可以看到,分箱的残差与正态分布的拟合相当好。
第二个图显示了两个曲线叠加的区域图
谐波曲线拟合
harmonicFit
函数(或简称 harmfit
)通过正弦波的控制点拟合一条平滑的线。harmfit
函数接收 x 轴和 y 轴数据,并对数据拟合一条平滑曲线。如果提供单个数组,则将其视为 y 轴,并为 x 轴生成一个序列。
下面的示例显示了 harmfit
拟合正弦波的单个振荡。harmfit
函数返回每个控制点的平滑值。返回值也是一个模型,可供 predict
、derivative
和 integrate
函数使用。
harmfit 函数在单个振荡而不是长序列的振荡上运行时效果最佳。如果正弦波有噪声,尤其如此。拟合曲线后,它可以外推到过去或未来的任何时间点。 |
在下面的示例中,原始控制点以蓝色显示,拟合曲线以黄色显示。
harmfit
的输出是一个模型,可供 predict
函数用于内插和外推正弦波。在下面的示例中,natural
函数创建一个从 0 到 127 的 x 轴,用于预测模型的结果。这会将正弦波外推到 128 个点,而原始模型曲线只有 19 个控制点。