曲線擬合

這些函式支援建構通過雙變數非線性資料的曲線。

多項式曲線擬合

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 個箱子的直方圖。hist 函數會返回一個元組列表,其中包含每個箱子的統計資訊。在此範例中,col 函數用於返回一個向量,其中包含每個箱子的 N 列,也就是箱子中觀察值的計數。如果殘差呈常態分佈,我們會預期箱子的計數大致遵循高斯曲線。

接著,箱子計數向量會作為 y 軸傳遞給 gaussfitgaussfit 會為 x 軸產生一個序列,然後將高斯曲線擬合到資料。

然後使用 zplot 來繪製原始箱子計數和擬合的曲線。在下面的範例中,藍色線是箱子計數,而平滑的黃色線是擬合的曲線。我們可以發現,分組的殘差與常態分佈相當符合。

gaussfit

第二個圖表顯示了兩個曲線以面積圖重疊顯示。

gaussfit2

諧波曲線擬合

harmonicFit 函數(或簡稱 harmfit)將一條平滑線擬合到正弦波的控制點。harmfit 函數會傳遞 x 軸和 y 軸,並將平滑曲線擬合到資料。如果提供單一陣列,則將其視為 y 軸,並為 x 軸產生一個序列。

下面的範例顯示 harmfit 擬合正弦波的單一振盪。harmfit 函數會返回每個控制點的平滑值。傳回值也是一個模型,可供 predictderivativeintegrate 函數使用。

harmfit 函數在單一振盪而不是長振盪序列上執行時效果最佳。如果正弦波有雜訊,情況尤其如此。在曲線擬合後,可以將其外推到過去或未來任何時間點。

在下面的範例中,原始控制點以藍色顯示,而擬合的曲線以黃色顯示。

harmfit

harmfit 的輸出是一個模型,可供 predict 函數使用來內插和外推正弦波。在下面的範例中,natural 函數會建立一個從 0 到 127 的 x 軸,用於預測模型的結果。這會將正弦波外推到 128 個點,而原始模型曲線只有 19 個控制點。

harmfit2