Share via


series_fit_poly()

Aplica una regresión polinómica de una variable independiente (x_series) a una variable dependiente (y_series). Esta función toma una tabla que contiene varias series (matrices numéricas dinámicas) y genera el polinomial de mejor ajuste para cada serie mediante regresión polinómica.

Sugerencia

  • Para la regresión lineal de una serie espaciada uniformemente, tal como se crea mediante el operador make-series, use la función más sencilla series_fit_line(). Consulte el ejemplo 2.
  • Si se proporciona x_series y la regresión se realiza para un grado alto, considere la posibilidad de normalizar el intervalo [0-1]. Consulte el ejemplo 3.
  • Si x_series es de tipo datetime, se debe convertir en double y normalized. Consulte el ejemplo 3.
  • Para ver la implementación de referencia de la regresión polinómica mediante Python insertado, consulte series_fit_poly_fl().

Syntax

T | extend series_fit_poly(y_series [,grado de x_series, ])

Obtenga más información sobre las convenciones de sintaxis.

Parámetros

Nombre Tipo Requerido Descripción
y_series dynamic ✔️ Matriz de valores numéricos que contiene la variable dependiente.
x_series dynamic Matriz de valores numéricos que contiene la variable independiente. Solo se requiere para series espaciadas desigualmente. Si no se especifica, se establece en un valor predeterminado de [1, 2, ..., length(y_series)].
Grado Orden requerido del polinomio que cabe. Por ejemplo, 1 para la regresión lineal, 2 para la regresión cuadrática, etc. El valor predeterminado es 1, que indica la regresión lineal.

Devoluciones

La series_fit_poly() función devuelve las columnas siguientes:

  • rsquare: r cuadrado es una medida estándar de la calidad de ajuste. El valor es un número del intervalo [0-1], donde 1 es el mejor ajuste posible y 0 significa que los datos no están ordenados y no caben en ninguna línea.
  • coefficients: matriz numérica que contiene los coeficientes del polinomio mejor ajustado con el grado dado, ordenado del coeficiente de potencia más alto al más bajo.
  • variance: varianza de la variable dependiente (y_series).
  • rvariance: varianza residual que es la varianza entre los valores de datos de entrada los aproximados.
  • poly_fit: matriz numérica que contiene una serie de valores del polinomio mejor ajustado. La longitud de la serie es igual a la longitud de la variable dependiente (y_series). El valor se usa para la creación de gráficos.

Ejemplos

Ejemplo 1

Un quinto orden polinómico con ruido en x & ejes 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 

Gráfico que muestra el ajuste polinómico de quinto orden a una serie con ruido.

Coeficientes de ajuste polinómico de quinto orden a una serie con ruido.

Ejemplo 2

Compruebe que series_fit_poly con degree=1 coincide series_fit_linecon :

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)

Gráfico que muestra la regresión lineal.

Coeficientes de regresión lineal.

Ejemplo 3

Serie temporal irregular (espaciada desigualmente):

//
//  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)

Gráfico que muestra el octavo orden polinómico que se ajusta a una serie temporal irregular.