series_fit_poly()
適用於:✅Microsoft網狀架構✅Azure 數據✅總管 Azure 監視器✅Microsoft Sentinel
將獨立變數(x_series)的多項式回歸套用至相依變數(y_series)。 此函式會採用包含多個數列的數據表(動態數值數位),並使用多項式回歸為每個數位產生最適合的高階多項式。
提示
- 對於平均間距數列的線性回歸,如make-series運算元所建立,請使用更簡單的函式series_fit_line()。 請參閱 範例 2。
- 如果 提供x_series ,而且會針對高度進行回歸,請考慮正規化為 [0-1] 範圍。 請參閱 範例 3。
- 如果 x_series 為 datetime 類型,則必須轉換成 double 並正規化。 請參閱 範例 3。
- 如需使用內嵌 Python 的多項式回歸參考實作,請參閱 series_fit_poly_fl()。
語法
T | extend series_fit_poly(
y_series [,
x_series,
度 ])
深入瞭解 語法慣例。
參數
姓名 | 類型 | 必要 | 描述 |
---|---|---|---|
y_series | dynamic |
✔️ | 包含相依變數的數值數位。 |
x_series | dynamic |
包含獨立變數的數值陣列。 僅適用於 不平均間距的數列。 如果未指定,則會將它設定為預設值 [1, 2, ..., length(y_series)]。 | |
度 | 要符合多項式的必要順序。 例如,線性回歸 1、二次回歸 2 等。 默認值為 1,表示線性回歸。 |
傳回
函 series_fit_poly()
式會傳回下列資料列:
rsquare
: r-square 是符合質量的標準量值。 值是範圍 [0-1] 中的數位,其中 1 - 是最佳大小,0 表示數據未排序且不符合任何一行。coefficients
:數值陣列,包含最佳配適多項式係數與指定度,從最高功率係數排序為最低。variance
:相依變數的變異數(y_series)。rvariance
:剩餘變數,這是輸入數據值之間近似值的變異數。poly_fit
:數值陣列,包含最適合多項式的一系列值。 數列長度等於相依變數的長度(y_series)。 值用於圖表。
範例
範例 1
x 和 y 軸上具有雜訊的第五個順序多項式:
range x from 1 to 200 step 1
| project x = rand()*5 - 2.3
| extend y = pow(x, 5)-8*pow(x, 3)+10*x+6
| extend y = y + (rand() - 0.5)*0.5*y
| summarize x=make_list(x), y=make_list(y)
| extend series_fit_poly(y, x, 5)
| project-rename fy=series_fit_poly_y_poly_fit, coeff=series_fit_poly_y_coefficients
|fork (project x, y, fy) (project-away x, y, fy)
| render linechart
範例 2
確認 series_fit_poly
degree=1 符合 series_fit_line
:
demo_series1
| extend series_fit_line(y)
| extend series_fit_poly(y)
| project-rename y_line = series_fit_line_y_line_fit, y_poly = series_fit_poly_y_poly_fit
| fork (project x, y, y_line, y_poly) (project-away id, x, y, y_line, y_poly)
| render linechart with(xcolumn=x, ycolumns=y, y_line, y_poly)
範例 3
不規則(不平均間距)的時間序列:
//
// x-axis must be normalized to the range [0-1] if either degree is relatively big (>= 5) or original x range is big.
// so if x is a time axis it must be normalized as conversion of timestamp to long generate huge numbers (number of 100 nano-sec ticks from 1/1/1970)
//
// Normalization: x_norm = (x - min(x))/(max(x) - min(x))
//
irregular_ts
| extend series_stats(series_add(TimeStamp, 0)) // extract min/max of time axis as doubles
| extend x = series_divide(series_subtract(TimeStamp, series_stats__min), series_stats__max-series_stats__min) // normalize time axis to [0-1] range
| extend series_fit_poly(num, x, 8)
| project-rename fnum=series_fit_poly_num_poly_fit
| render timechart with(ycolumns=num, fnum)