O objetivo deste documento é explorar Regressão Linear com Python, a biblioteca NumPy, a biblioteca TensorFlow e aplicação à AI - Artificial Intelligence.
PS: Baseado no treinamento do Youtuber Jones Granatyr
- TensorFlow Instalado - Instruções para instalação)
$ conda create -n tensorflow python=3.7
$ conda activate tensorflow
$ conda install python=3.6.5
$ pip install tensorflow
- Jupyter-Notebook deste exercício disponível PythonNumPy.ipynb
Regressão LInear em estatística ou econometria, regressão linear é uma equação para se estimar a condicional (valor esperado) de uma variável y, dados os valores de algumas outras variáveis x.
No contexto de Regressão Linear, vejamos as semelhanças e diferenças entre Previsão e Classificação:
- Semelhanças entre Previsão e Classificação:
- Constrói-se um modelo de relação das variáveis numéricas (variável dependente y e variável explanatória x (ou atributos previsores)
- Usa-se o modelo para prever valores desconhecidos
- Diferenças entre Previsão e Classificação:
- Previsão é apropriada para modelar funções contínuas
- Classificação diz respeito à previsão de um rótulo de uma classe
- Regressão linear simples: quando temos uma única variável explanatória (x)
- Regressão Linear Múltipla: Regressão múltipla é uma coleção de técnicas estatísticas para construir modelos que descrevem de maneira razoável relações entre várias variáveis explicativas de um determinado processo. A diferença entre a regressão linear simples e a múltipla é que na múltipla são tratadas duas ou mais variáveis explicativas.
- {Temperatura, umidade e pressão do ar} (x)
->
velocidade do vento (y) - {Gastos no cartão de crédito, histórico} (x)
->
limite do cartão (y) - Idade (x)
->
custo do plano de saúde - Tamanho da casa (x)
->
preço da casa
- Com base na idade da pessoa, queremos utilizar regressão linear para prever o custo do plano de saúde.
- Supondo a variável explanatória idade (x), com base no histórico desejamos prever a variável dependente custo do plano de saúde (y)
- O processo de aprendizado no algorítimo de Regressão Linear é encontrar os melhores valores para
b0
eb1
- O parâmetro
b1
é considerado o declive da linha
- Para avaliar se a modelo da reta traçada está se adequando aos pontos existentes, calcula-se o erro de cada ponto até a linha
- Para medir o erro a técnica mais utilizada é o Mean Square Error ou método dos mínimos erros ao quadrado
- O método Mean Square Error penaliza os maiores erros
- Para fazer a minimização dos erros, há duas estratégias de cálculo:
- Design Matrix: Álgebra Linear
- Base de dados com poucos atributos
- Inversão de matrizes tem custo computacional alto
- Gradient Descent: Descida do Gradiente
- Desempenho melhor com muitos atribuitos
- Design Matrix: Álgebra Linear
- Criando um NumPy Array com os vetores
x
ey
import numpy as np
x = np.array([[18], [23], [28], [33], [38], [43], [48], [53], [58], [63] ])
y = np.array([[871], [1132], [1042], [1356], [1488], [1638], [1569], [1754], [1866], [1900] ])
print('\nx:')
for e in x:
print(e, end=', ')
print('\ny:')
for e in y:
print(e, end=', ')
x:
[18], [23], [28], [33], [38], [43], [48], [53], [58], [63],
y:
[871], [1132], [1042], [1356], [1488], [1638], [1569], [1754], [1866], [1900],
- No Jupyter-Notebook precisamos fazer o código
%matplotlib inline
import matplotlib.pyplot as plt
%matplotlib inline
plt.scatter(x,y)
- Para trabalhar com Regressão Linear no TensorFlow precisamos fazer um processo chamado Escalonamento de valores, que consiste em transformar os valores de
x
ey
na mesma escala de valores
from sklearn.preprocessing import StandardScaler
scaler_x = StandardScaler()
x_scaled = scaler_x.fit_transform(x)
from sklearn.preprocessing import StandardScaler
scaler_y = StandardScaler()
y_scaled = scaler_y.fit_transform(y)
print('\nx_scaled:')
for e in x_scaled:
print(e, end=', ')
print('\ny_scaled:')
for e in y_scaled:
print(e, end=', ')
- Não precisa se assustar com a advertência de que o array de números inteiros com dtype
int32
foi convertido emfloat64
C:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\validation.py:475: DataConversionWarning: Data with input dtype int32 was converted to float64 by StandardScaler.
warnings.warn(msg, DataConversionWarning)
- Observe que os valores foram escalonados:
x_scaled:
[-1.5666989], [-1.21854359], [-0.87038828], [-0.52223297], [-0.17407766], [0.17407766], [0.52223297], [0.87038828], [1.21854359], [1.5666989],
y_scaled:
[-1.75751985], [-0.98083058], [-1.24865447], [-0.31424669], [0.07856167], [0.52493481], [0.31960317], [0.87013004], [1.20342199], [1.3045999],
- Criação da fórmula ou modelo matemático da Regressão Linear Simples
y = b0 + b1 * x
- O objetivo da Regressão Linear Simples do TensorFlow é econtrar os parâmetos
b0
eb1
. O TensorFlow vai executar vários processamentos, usa a descida do gradiente para encontrar o melhor conjunto dos dois parâmetros. - Quando o TensorFlow executa pela primeira vez em geral ele vai inicializar os parâmetros de forma aleatória. Nós iremos inicializar os valores
b0
eb1
com valores aleatórios
np.random.seed(0) # inicializa a semente para que a partir deste momento seja os mesmos valores
np.random.rand(2) # gera dois valores aleatórios
- Importar biblioteca do TensorFlow, crair as duas variáveis
b0
eb1
. O TensorFlow faz uso das funções randômicas para geração de números aleatórios. - O TensorFlow usa variáveis com modelos de Machine Learning para otmizar valores de
b0
eb1
. Ele inicia com estas variáveis e vai ajustando até que ele tenha um valor interssante.
import tensorflow as tf
b0 = tf.Variable(0.54)
b1 = tf.Variable(0.71)