適合資料集的基本線性插值

通過一個簡單的例子可以很好地解釋擬合的基本用法:

 `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 文件