series_fit_poly()
Aplica uma regressão polinomial de uma variável independente (x_series) a uma variável dependente (y_series). Esta função pega uma tabela contendo séries múltiplas (matrizes numéricas dinâmicas) e gera o melhor ajuste polinomial de alta ordem para cada série usando regressão polinomial.
Dica
- Para regressão linear de uma série uniformemente espaçada, como criado pelo operador make-series, use a função mais simples series_fit_line(). Consulte o Exemplo 2.
- Se x_series for fornecido, e a regressão for feita para um grau alto, considere normalizar para o intervalo [0-1]. Consulte o Exemplo 3.
- Se x_series for do tipo datetime, ele deverá ser convertido em duplo e normalizado. Consulte o Exemplo 3.
- Para implementação de referência de regressão polinomial usando Python embutido, consulte series_fit_poly_fl().
Sintaxe
T | extend series_fit_poly(
y_series [ ,
x_series ,
grau ])
Saiba mais sobre as convenções de sintaxe.
Parâmetros
Nome | Digitar | Obrigatória | Descrição |
---|---|---|---|
y_series | dynamic |
✔️ | Uma matriz de valores numéricos que contém a variável dependente. |
x_series | dynamic |
Uma matriz de valores numéricos que contém a variável independente. Necessário apenas para séries com espaçamento desigual. Se não for especificado, ele será definido como um valor padrão de [1, 2, ..., length(y_series)]. | |
grau | A ordem necessária do polinômio para se encaixar. Por exemplo, 1 para regressão linear, 2 para regressão quadrática e assim por diante. O padrão é 1, que indica regressão linear. |
Devoluções
A series_fit_poly()
função retorna as seguintes colunas:
rsquare
: R-quadrado é uma medida padrão da qualidade do ajuste. O valor é um número no intervalo [0-1], onde 1 - é o melhor ajuste possível, e 0 significa que os dados não estão ordenados e não se encaixam em nenhuma linha.coefficients
: Matriz numérica contendo os coeficientes do polinômio mais bem ajustado com o grau dado, ordenados do maior coeficiente de potência para o menor.variance
: Variância da variável dependente (y_series).rvariance
: Variância residual que é a variância entre os valores de dados de entrada e os valores aproximados.poly_fit
: Matriz numérica contendo uma série de valores do polinômio mais bem ajustado. O comprimento da série é igual ao comprimento da variável dependente (y_series). O valor é usado para gráficos.
Exemplos
Exemplo 1
Um polinômio de quinta ordem com ruído nos eixos 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
Exemplo 2
Verifique se series_fit_poly
com degree=1 corresponde 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)
Exemplo 3
Séries temporais irregulares (espaçadas de forma desigual):
//
// 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)
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de