適合資料集的基本線性插值
通過一個簡單的例子可以很好地解釋擬合的基本用法:
`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
檔案,然後繪製 m
和 q
引數以獲得資料集的最佳曲線近似。一旦你有引數,你可以計算 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.將 m
和 q
值儲存在字串中並繪圖
在這裡,我們使用 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
輸出將如下所示。