Regressão Polinomial usando Tensorflow.js

Este é um exemplo prático e interativo para entender regressão polinomial (especificamente do terceiro grau). O objetivo é apresentar o conceito de regressão e o funcionamento do algorítmo de machine learning e da biblioteca Tensorflow.js.
1
O que é regressão? Não confundir com extrapolação ou interpolação
Regressão é estimar parâmetros de uma função
Interpolação é estimar valores de uma função entre valores conhecidos.
Extrapolação é estimar valores de uma função fora do intervalo dos valores conhecidos.
2
Gerar dados para o exemplo Escolha os parâmetros iniciais
Regressão polinomal consiste em encontrar os coeficientes da função
Encontrar estes coeficientes não é trivial. Neste exemplo usaremos o Tensorflow.js para encontrar um curva em dados sintéticamente construidos.
O primeiro passo é ter dados que você acredita que possam ser modelados de alguma maneira. Neste caso tentaremos gerar dados aleatórios derivados de uma equação polinomial do terceiro grau.

$$ y(x) = ax^3 + bx^2 + cx + d$$

Escolha os coeficientes abaixo para gerar dados. Eles sofrerão um desvio de distribuição normal (ruído) conforme o sigma que for escolhido, desta forma o problema fique mais interessante.
3
Construindo um modelo O primeiro modelo começa com um chute inicial
Primeira iteração do algorítmo
Começaremos com estes coeficientes aleatórios:
a =
b =
c =
d =
Muito provavelmente a regressão inicial não é um bom modelo pois não representa os dados corretamente. Precisamos aprimorar nosso modelo com coeficientes melhores.
4
Treinando o modelo Para obter melhores coeficientes
Definir parâmetros do treinamento do modelo
Para treinar o modelo precisamos de três coisas:
  • Função de perda ( loss function): mede o quão bem o modelo representa a data. Quanto menor a perda, melhor a regressão.
    Neste tutorial usaremos o Método dos Quadrados mínimos ou MSE. É calculado pelo quadrado da diferença do y real e do y estimado. Então faz-se a média de todos os termos.
  • Otimizador ( optimizer): é o algorítmo que será implementado conforme o outpot da loss function, tentado fazer este output o menor possível.
    Neste exemplo usaremos o Gradiente Descendente Estocástico ou SGD. Ele pega o gradiente de pontos aleatórios em nossos dados e informa se este valor deveria subir ou descer. A taxa de aprendizagem ou learning rate controla o quão grande são estes incrementos ou decrementos. Valores baixos deixam o treino mais lento (precisa de mais iterações), no entanto taxas altas podem fazer os coeficientes ficarem oscilando e sobrecorrigindo.
  • Loop de treino ( training loop): vai iterativamente rodando o optimizer para diminuir a perda
MSQ =
Coef A B C D
Inicial -2 1 -0.5 3
Regressão
Diferença