适合数据集的基本线性插值

通过一个简单的例子可以很好地解释拟合的基本用法:

 `f(x)` = a + b*x + c*x**2
 fit [-234:320][0:200] `f(x)` ’measured.dat’ using 1:2 skip 4 via a,b,c
 plot ’measured.dat’ u 1:2, `f(x)`

可以指定范围来过滤拟合中使用的数据。忽略超出范围的数据点。 (T. Williams,C。Kelley - gnuplot 5.0,交互式绘图程序

线性插值(用线拟合)是拟合数据集的最简单方法。假设你有一个数据文件,你的 y 数量的增长是线性的,你可以使用

[…]线性多项式,用于构建一组离散的已知数据点范围内的新数据点。 (来自维基百科, 线性插值

具有一年级多项式的示例

我们将使用以下数据集,名为 house_price.dat ,其中包括某个城市房屋的平方米,价格为 1000 美元。

### 'house_price.dat'
## X-Axis: House price (in $1000) - Y-Axis: Square meters (m^2)

245    426.72
312    601.68
279    518.16
308    571.50
199    335.28
219    472.44
405    716.28
324    546.76
319    534.34
255    518.16

让我们用 gnuplot 调整这些参数命令本身非常简单,你可以从语法中注意到,只需定义你的拟合原型,然后使用 fit 命令得到结果:

## m, q will be our fitting parameters
f(x) = m * x + q       
fit f(x) 'data_set.dat' using 1:2 via m, q

但是在绘图本身中使用获得的参数也可能很有趣。下面的代码将适合 house_price.dat 文件,然后绘制 mq 参数以获得数据集的最佳曲线近似。一旦你有参数,你可以计算 y-value,在这种情况下是房价,从任何给定的 x-vaule( 房子的平方米 )只是在公式中代替

y = m * x + q

适当的 x-value。让我们评论一下代码。

0.设置术语

set term pos col
set out 'house_price_fit.ps'

1.修饰图的普通管理

set title 'Linear Regression Example Scatterplot'
set ylabel 'House price (k$ = $1000)'
set xlabel 'Square meters (m^2)'
set style line 1 ps 1.5 pt 7 lc 'red'
set style line 2 lw 1.5 lc 'blue'

set grid
set key bottom center box height 1.4

set xrange [0:450]
set yrange [0:]

2.合适

为此,我们只需要输入命令:

f(x) = m * x + q
fit f(x) 'house_price.dat' via m, q

3.将 mq 值保存在字符串中并绘图

在这里,我们使用 sprintf 函数来准备标签(在 object rectangle 中加框),我们将在其中打印拟合的结果。最后,我们绘制整个图。

mq_value = sprintf("Parameters values\nm = %f k$/m^2\nq = %f k$", m, q)
set object 1 rect from 90,725 to 200, 650 fc rgb "white" 
set label 1 at 100,700 mq_value

p 'house_price.dat' ls 1 t 'House price', f(x) ls 2 t 'Linear regression'
set out

输出将如下所示。

StackOverflow 文档