Introdução
No post/tutorial dessa semana vamos entrar de vez no mundo do “Aprendizado de Máquina”! A primeira técnica que aprenderemos é a Regressão Linear Simples. Como o próprio nome já diz, esta é uma técnica básica, mas interessante para o entendimento de alguns conceitos básicos de fundamental importância para o aprendizado das técnicas mais avançadas.
Espero que gostem.
Regressão Linear Simples
Esse tipo de técnica é uma abordagem utilizada para modelar a relação entre uma variável dependente t e uma variável de entrada x. Ou seja, a partir de um conjunto de dados tentamos criar uma hipótese de como as variáveis t se comportam dado os valores de entrada x. Tá, mas pra que isso serve? Simples, uma vez que tivermos essa hipótese/modelo definida, podemos prever os valores de t dados novos valores de x, que não estavam antes no conjunto de dados. Agora as coisas estão interessantes, não?
Essa regressão linear é chamada simples porque só utilizaremos uma variável de entrada (variável explicatória) x, mas existem outros modelos que trabalham com múltiplas variáveis – sim, vamos trabalhar com eles também –.
Um pouco de matemática
Com essa intuição de como uma regressão funciona podemos entrar um pouco na matemática, não? Para criarmos essa hipótese/modelo, de como a variável t se comporta diante do x, nós usaremos uma função polinomial da seguinte forma:
Onde:
M = é a ordem do polinômio
= x elevado a potência j
= são os coeficientes do polinômio ( mais tarde começaremos a chamá-los de pesos)
Nosso objetivo com esse polinômio é achar os valores dos coeficientes w que melhor se encaixam na função, nós faremos isso minimizando uma função de erro que mede a discrepância da nossa hipótese , para qualquer valor de w, e os valores dos dados de treino. Então nossa ideia é a seguinte:
Escolher os coeficientes w para que nossa hipótese h(x,w) seja próxima de t dado os nossos dados de treino (x,t).
Como já disse antes, um dos jeitos de se definir os valores de w é minimizando-se uma função de erro. A função de erro que utilizaremos hoje, uma das mais utilizadas no mundo, é chamada de soma dos quadrados dos erros. Essa função é dada da seguinte forma:
Esta fórmula resolve a maioria dos problemas de regressão linear, e é bastante eficiente para se encontrar os melhores valores de w.
Com essas intuições e fórmulas, podemos ir para a parte interessante, programar!
Conseguindo os dados
Bom para começarmos a criar hipóteses/modelos precisamos primeiro de um data set, certo? O conjunto de dados que escolhi para começarmos é um conjunto pequeno, de fácil visualização, ideal para começarmos. O link para o conjunto é este:
A fonte desses dados é essa aqui.
Como eu gosto muito de pizza, escolhi um data set que é constituído dos dados de custo para se abrir uma franquia de pizzaria, os dados são divididos em :
x = taxa de franquia anual
t = custo inicial de uma franquia
Esse conjunto é constituído de dois arquivos .txt, o arquivo “slr11l1.txt” é a nossa variável x, e o arquivo “slr11l2.txt” será nossa variável t.
Now show me the code
Vamos começar logo para a parte interessante então, mude seu diretório de trabalho no workspace para a pasta onde você salvou extraiu os arquivos .zip. Comando “cd /caminho_para_sua_pasta”. Estando no diretório dos arquivos, vamos carregar os dados dos arquivos .txt em variáveis do Octave, fazemos isso da seguinte maneira:
octave:1> x = load('slr11l1.txt') x = 25.0000 8.5000 35.0000 15.0000 10.0000 30.0000 10.0000 50.0000 17.5000 16.0000 18.5000 7.0000 8.0000 15.0000 5.0000 15.0000 12.0000 15.0000 28.0000 20.0000 20.0000 15.0000 20.0000 25.0000 20.0000 3.5000 35.0000 25.0000 8.5000 10.0000 10.0000 25.0000 octave:2> t = load('slr11l2.txt') t = 125.000 80.000 330.000 58.000 110.000 338.000 30.000 175.000 120.000 135.000 97.300 50.000 55.000 40.000 35.000 45.000 75.000 33.000 55.000 90.000 85.000 125.000 150.000 120.000 95.000 30.000 400.000 148.000 135.000 45.000 87.000 150.000
Que tal plotarmos os dados para termos uma visão melhor?
octave:3> plot(x,t,'xr');hold on; xlabel('Taxa de Custo Anual'); ylabel('Custo para se iniciar a franquia');
Isso nos gera o seguinte gráfico: Sabendo como nossos dados estão distribuídos devemos agora definir o valor da variável w para criarmos a nossa hipótese/modelo de regressão, certo? Acontece que agora vamos dar um jeito de facilitar as coisas, isso é, otimizar o processamento do Octave. Em vez de criarmos um for loop para interagirmos em cada valor de x e y faremos isso de forma vetorizada – memoriza esse nome, utilizaremos muito ele no futuro – , isso quer dizer que multiplicaremos todos os valores de x e y de uma só vez, aumentando a velocidade de processamento, pois o Octave foi feito para este tipo de operação! Bom para fazermos isso, utilizaremos a normal equation, ela é feita da seguinte forma:
No Octave o código é o seguinte:
octave:4> w = (pinv(x'*x))*x'*y w = 6.2525
Pronto! Encontramos o melhor valor de w! Então nossa hipótese/modelo ficará da seguinte maneira:
Vamos plotar nossa hipótese/modelo junto com os dados de treino para termos uma visão da nossa criação? O código é o seguinte:
octave:5> h = w*x; octave:6> plot(x, h);hold on; plot(x,t,'xr')
Temos como saída o seguinte gráfico:
Conclusão
Então é isso! Criamos nossa primeira hipótese/modelo baseado em um conjunto de dados com regressão linear de apenas uma variável, legal não? Essa técnica é básica, introdutória, para adentrarmos em modelos infinitamente mais complexos que este e sermos capazes explicar nossos dados com mais precisão, eficiência e com níveis maiores de abstração.
Espero que tenham gostado, qualquer dúvida, sugestão ou opinião sempre será bem vinda!
Pingback: Regressão Linear com Octave | Mineração de Dados
Muito bom cara, espero que continue com seu blog muito maneiro.
CurtirCurtir
Era apenas trocar o y pelo t, desculpe.
CurtirCurtir