fbpx
Sigmoidal
  • Home
  • CursosNOVO
  • Sobre Mim
  • Contato
Sem Resultado
Ver Todos Resultados
  • Home
  • CursosNOVO
  • Sobre Mim
  • Contato
Sem Resultado
Ver Todos Resultados
Sigmoidal
Sem Resultado
Ver Todos Resultados
Home Artigos Data Science

Como Implementar Regressão Linear com Python

Carlos Melo por Carlos Melo
julho 28, 2019
em Data Science
5
Como Implementar Regressão Linear com Python
118
COMPARTILHAMENTOS
3.9k
VIEWS
Publicar no LinkedInCompartilhar no FacebookCompartilhar no Whatsapp

O campo de Machine Learning oferece tantas opções de algoritmos que é muito difícil alguém conhecer todos e se manter atualizado a cada dia.

A escolha do algoritmo correto tem um enorme impacto na qualidade da solução, por isso é importante não apenas usar uma biblioteca pronta (sem ter a mínima ideia do que está por trás), mas ter pelo menos uma noção da teoria por trás dos modelos e algoritmos que você implementa.

Regressão Linear com scikit-learn e Python

Uma das primeiras técnicas que a(o) cientista de dados costuma ter contato no começo dos seus estudos é a Análise de Regressão, onde aprende a implementar um modelo de Regressão Linear Simples.

Entretanto, muita gente acaba apenas decorando como usar o scikit-learn e nunca mais vai atrás do conceito estatístico que está por trás da Regressão Linear.

Neste post, quero trazer uma conceituação um pouco mais aprofundada que o normal. O objetivo é apenas convidar você a despertar esse lado curioso pelas coisas que implementamos no dia-a-dia, afinal é isso que vai te destacar da média.

Acessar Código Fonte

Para ir acompanhar o código deste artigo e conseguir replicar exatamente os resultados, acesse o notebook com todo o código no repositório do Github clicando no botão acima. 

E se você está aprendendo e quer saber como se tornar um cientista de dados, leia este artigo do nosso blog 🙂

O que é Análise de Regressão

O objetivo da análise de regressão é explorar o relacionamento existente entre duas ou mais variáveis, visando obter informações sobre uma delas a partir dos valores conhecidas das outras.

Confuso? Simplificadamente, a frase aí de cima quis dizer que a análise de regressão busca entender o relacionamento entre variáveis, e esse relacionamento pode ser representado por uma equação matemática.

Regressão Linear com Python
Qual a relação que as variáveis de entrada tem com a saída “Preço”?

Vamos supor que você queira saber o preço de venda de uma casa sua e acredita que existe um relacionamento entre as variáveis que você está considerando (área construída, número de quartos e localização) com esse preço.

Seria possível fazer uma análise de regressão baseado nas outras casas da cidade, obter os pesos para os parâmetros em um modelo Regressão Linear e inferir qual o preço de venda que você deve colocar.

Relação não determinística

Um ponto importante, mas muito desconhecido, é que nos nossos problemas do cotidiano, muitas variáveis x e y aparentam estar relacionadas uma com a outra, porém de maneira não determinística.

Uma relação determínistica, por exemplo, é quando queremos saber a distância percorrida por um carro, mantendo velocidade constante $v$ ao longo de $\Delta t$ segundos. Nesse exemplo, sabemos que a distância percorrida será $\Delta s = v * \Delta t$, pois as variáveis estão relacionadas deterministicamente.

Um exemplo de variáveis relacionadas de maneira não determinística é se quisessemos saber $y = \text{tamanho do vocabulário de uma criança}$ sendo $x = \text{idade dessa criança}$. Não é algo exato.

Para entender melhor essa relação determinística, veja os gráficos que vamos gerar em Python abaixo.

# importar pacotes necessários
import numpy as np
import matplotlib.pyplot as plt
# exemplo de plots determinísticos
np.random.seed(42)
det_x = np.arange(0,10,0.1)
det_y = 2 * det_x + 3
# exemplo de plots não determinísticos
non_det_x = np.arange(0, 10, 0.1)
non_det_y = 2 * non_det_x + np.random.normal(size=100)
# plotar determinísticos vs. não determinísticos
fig, axs = plt.subplots(1, 2, figsize=(10,4), constrained_layout=True)
axs[0].scatter(det_x, det_y, s=2)
axs[0].set_title("Determinístico")
axs[1].scatter(non_det_x, non_det_y, s=2)
axs[1].set_title("Não Determinístico")
plt.show()

Olhando rapidamente você já consegue ver uma diferença importante, que apesar dos dois gráficos estarem mostrando pontos que se espalham sobre uma “reta virtual”, um deles não segue um padrão exato, determinístico. Parece que há algum tipo de aleatoriedade envolvida.

Regressão Linear em Python
Veja como os pontos da esquerdas cabem perfeitamente em uma reta, mas os da direita não, pois estão relacionados de maneira não determinística.

Ou seja, nos modelos de Regressão Linear que usamos em Machine Learning, não temos uma relação perfeita entre as variáveis, pois as observações do dataset não cabem exatamente em uma reta.

Isso significa que temos um modelo probabilístico, que captura a aleatoriedade que é inerente de qualquer processo do mundo real.

Pense: você consegue traçar uma reta pegando todos os pontos no gráfico da esquerda? E consegue traçar uma reta pegando todos os pontos no gráfico da direita?

Voltando para aquele exemplo de vender sua casa, basta imaginar que seu vizinho tem uma casa do mesmo tamanho, mesmo número de quartos, mesma localização, porém elas dificilmente teriam o mesmo preço exato.

É característica de uma pessoa realmente inteligente ser movida pela estatística.

George Bernard Shaw

O modelo de Regressão Linear Simples

Para representar a relação entre uma variável dependente ($y$) e uma variável independente ($x$), usamos o modelo




<math xmlns=

que determina uma linha reta com inclinação $\beta_1$ e intercepto $\beta_0$, com a variável aleatória (erro) $\varepsilon$, considerada normalmente distribuída com $E(\varepsilon) = 0$ e $V(\varepsilon) = \sigma^2$.

Para simplificar, vamos assumir a premissa de que o valor médio da variável $\varepsilon$ para um dado valor de $x$ é $0$. Dessa maneira, a equação da seguinte forma:




<math xmlns=

Quando a gente implementa um modelo de Regressão Linear com o scikit-learn, a gente quer encontrar os valores dos parâmetros $\beta_0$ e $\beta_1$ que melhor representam o relacionamento entre as variáveis.

Antes de você chamar o fit() do seu modelo, $\beta_0$ e $\beta_1$ são parâmetros totalmente desconhecidos.

Implementando Regressão Linear em Python com o Scikit-learn

Olhando no gráfico acima, você é capaz de dizer qual reta seria mais plausível?

Parece óbvio que é a reta verde, porém não seria possível essa análise visual caso tivessemos centenas de variáveis. E também temos um problema, o computador não consegue “olhar” para ver qual reta fica melhor.

A questão é, como encontrar boas estimativas de $\beta_0$ e $\beta_1$ para que nosso modelo forneça boas estimativas?

Se até agora tudo ainda está confuso para você, e você não consegue enxergar uma reta na equação acima, eu aconselho você revisar a equação fundamental da reta, que ficou esquecida na sua cabeça desde a época de ensino médio.

Estimando os parâmetros do modelo

De acordo com (DEVORE, 2014), um método usado para verificar se uma reta oferece um bom ajuste aos dados é o Método dos Mínimos Quadrados. Por esse método, o desvio vertical do ponto $(x_i, y_i)$ da reta $y=\beta_0 + \beta_1x$ é:




<math xmlns=

A soma dos quadrados de tais desvios verticais dos pontos $(x_1, y_1), \dots, (x_n, y_n)$ à reta é, portanto,




<math xmlns=

Uma reta é razoável se as distâncias verticais (desvios) dos pontos analisados em relação à reta são pequenas.

Método dos Mínimos Quadrados em Python

Ou seja, a reta que tem o melhor ajuste possível é aquela na qual se tem a menor soma possível de desvios quadrados. Os valores de minimização $\beta_0$ e $\beta_1$ são encontrados quando se resolvem as derivadas parciais abaixo, igualando-as a $0$.




<math xmlns=




<math xmlns=

Essa etapa requer um conhecimento mais avançado de cálculo, e eu não vou entrar em mais detalhes. Tudo que você precisa saber é que a cada iteração do algoritmo a gente espera encontrar a menor soma possível de desvios quadrados.

Implementando Regressão Linear com Python

Para ver na prática uma aplicação simples e direta da Regressão Linear, vamos usar as variáveis que plotamos lá em cima, non_det_x e non_det_y.

Lembrando que aqui eu estou ignorando completamente as etapas de split entre datasets de treino e teste ou qualquer outro tipo de etapa. O objetivo é apenas encontrar uma reta com um fit ideal aos nossos pontos.

# importar os pacotes necessários
from sklearn.datasets import load_diabetes
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# criar modelo linear e otimizar
lm_model = LinearRegression()
lm_model.fit(non_det_x.reshape(-1,1), non_det_y)
# extrair coeficientes
slope = lm_model.coef_
intercept = lm_model.intercept_

Como temos apenas uma variável, nosso x é um vetor (1 dimensão).

Após minimizar a função custo e encontrar o melhor fit os parâmetros da equação da reta que buscamos estarão armazenados como atributos de lm_model, onde $\beta_0 = \text{intercept_}$ e $\beta_1 = \text{coef_}$.

Imprimindo esses parâmetros a gente vê quais valores numéricos melhor representam nossa reta para o modelo de Regressão Linear:

# imprimir os valores encontrados para os parâmetros
print("b0: \t{}".format(intercept))
print("b1: \t{}".format(slope[0]))
# Será impresso os seguintes valores:
# b0: 	-0.17281285407737457
# b1: 	2.0139325932693497

E agora vamos plotar a reta, com os valores de parâmetros obtidos, sobrepondo ela aos pontos e ver como essa solução parece plausível visualmente.

# plotar pontos e retas com parâmetros otimizados
plt.scatter(non_det_x, non_det_y, s=3)
plt.plot(non_det_x, (non_det_x * slope + intercept), color='r')
plt.show()

Resultado da Regressão Linear com Python

E é isso! Essa solução parece, de fato, atender ao nosso problema.

Agora você sabe não apenas implementar uma Regressão Linear, que é feito com pouquíssimas linhas de código, mas consegue entender a lógica por trás do código 🙂

Resumo

Eu aposto que agora você conseguiu entender o funcionamento básico de um modelo de Regressão Linear, vendo tanto visualmente (como a reta vai “melhorando” a cada iteração) quanto absorvendo conceitos (com a matemática que foi exposta).

Este artigo foi muito mais teórico que aplicação de técnicas de Data Science ou Machine Learning, e tudo isso propositalmente. Ao limitar para uma variável, conseguimos realizar os plots em 2 dimensões  e acompanhar mais facilmente tudo.

Obviamente, todo essa teoria pode ser extrapolada para problemas mais complexos envolvendo múltiplas variáveis. A lógica é a mesma!

Lembre-se que o que vai te diferenciar das outras pessoas, da média, é o conceito que você sabe a mais e a criatividade para pensar em soluções fora-da-caixa. 

Para receber sempre conteúdos novos e exclusivos, inscreva-se abaixo com seu e-mail e receba todo o material de altíssima qualidade no conforto da sua inbox! Aproveite também para me seguir no Instagram, pois estou sempre gerando conteúdos de valor por lá 🙂

Tags: cientista de dadosdata sciencejupytermachine learningmatplotlibpythonregressão linearscikit-learn
Post Anterior

O que faz um cientista de dados: tudo sobre esta nova profissão

Próximo Post

Data Science: Investigando o naufrágio do Titanic [Pt. 2]

Carlos Melo

Carlos Melo

Engenheiro de Visão Computacional graduado em Ciências Aeronáuticas pela Academia da Força Aérea (AFA) e Mestre em Engenharia Aeroespacial pelo Instituto Tecnológico de Aeronáutica (ITA).

Relacionado Artigos

Entrevista com Mário Filho: como conquistar uma vaga no exterior
Data Science

Entrevista com Mário Filho: como conquistar uma vaga no exterior

por Equipe Sigmoidal
julho 25, 2023
Data Science no exterior - como fazer uma Cover Letter
Inglês

Como escrever uma Cover Letter poderosa para Data Science

por Rafael Duarte
janeiro 8, 2023
GESTÃO DE DADOS: aprenda Data Science ou pague o preço de uma decisão errada | PrimoCast com Thiago Nigro
Data Science

Aprenda Data Science ou pague o preço de uma decisão errada

por Carlos Melo
janeiro 5, 2023
Como a França usou Inteligência Artificial para detectar 20 mil piscinas
Deep Learning

Como a França usou Inteligência Artificial para detectar 20 mil piscinas

por Carlos Melo
dezembro 19, 2022
ChatGPT: A Inteligência Artificial que vai escrever seus códigos
Artigos

ChatGPT: A Inteligência Artificial que vai escrever seus códigos

por Carlos Melo
dezembro 18, 2022
Próximo Post
Data Science: Investigando o naufrágio do Titanic [Pt. 2]

Data Science: Investigando o naufrágio do Titanic [Pt. 2]

Comentários 5

  1. Avatar Paulo says:
    4 anos atrás

    Como faz pra traçar uma reta na distancia do ponto ate a reta? n esta no codigo

    Responder
    • Carlos Melo Carlos Melo says:
      4 anos atrás

      A própria função do Scikit-learn já faz essa conta para você. Mas basicamente se trata de calcular a distância euclidiana 🙂

      Responder
  2. Avatar Gilberto says:
    3 anos atrás

    Estou iniciando os estudos em ml e o artigo foi muito útil. Parabéns !!!

    Responder
  3. Avatar Adriana says:
    2 anos atrás

    Excelente explicação, muito didática. Estou tendo o primeiro contato com Machine Learning.

    Responder
  4. Avatar Giovanna says:
    2 anos atrás

    Um exercício meu pede que o valor de x seja determinado pelo usuário via comando input. O que eu tô tentando não está funcionando. Alguém consegue me dar uma luz?

    Responder

Deixe um comentário Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Destaques Sigmoidal

Aprenda Python e se destaque no mercado

Aprenda Python e se destaque no mercado

julho 17, 2022
7 Livros de Data Science em 2021

7 Livros de Data Science em 2021

outubro 8, 2021
Visão Computacional do zero até uma vaga no exterior

Visão Computacional do zero até uma vaga no exterior

abril 22, 2021
Especialização em Visão Computacional Especialização em Visão Computacional Especialização em Visão Computacional

Seguir

  • Camera Tracking, Reconstrução 3D e a Arte da Visão 🎥👁️‍🗨️

O “camera tracking” é uma técnica que permite a análise e reprodução do movimento da câmera em filmagens 2D. 

Esta análise fornece dados vitais sobre a posição e orientação da câmera ao longo do tempo, sendo essencial para a integração de elementos 3D virtuais em visuais 2D. 

A minha jornada acadêmica levou-me ao coração da engenharia de visão computacional, onde explorei tópicos cruciais como lens distortion, camera calibration e image processing. Dediquei-me a técnicas avançadas, abrangendo desde a utilização de filtros Gaussianos, conversão de imagens para grayscale até algoritmos de keypoint detection. 

No decorrer de meus estudos, tive a chance de trabalhar com métodos clássicos, como “Harris Corner Detection”, e também com abordagens mais contemporâneas como ORB, além de descritores como SIFT, SURF e BRISK.

Mas apesar da minha formação predominantemente técnica, centrada no mundo dos modelos quantitativos e da modelagem matemática, identifiquei um diferencial valioso na trilha da visão computacional.

🎨 Esse diferencial foi a capacidade de não se limitar apenas ao lado técnico. Ao contrário, busquei uma fusão entre a precisão técnica e a sensibilidade artística.

Compreendi que a verdadeira inovação surge quando se une o rigor técnico à visão criativa. Nessa intersecção, a arte e a ciência dançam juntas, produzindo resultados que são ao mesmo tempo precisos e emocionalmente impactantes.

Como o escritor A. D. Sertillanges expressou tão eloquentemente, nossa vocação como seres humanos exige que primeiro estejamos profundamente enraizados em nossa humanidade, viajando com confiança e solidez:

💬 “Toda ciência, quando cultivada isoladamente, não é apenas incompleta, mas também repleta de riscos.”

Serve como um lembrete constante de que dentro de cada tarefa computacional e linha de código existe uma miríade de histórias, prontas para serem reveladas e compartilhadas. 

#machinelearning #visãocomputacional
  • 🤖Você já testou essa ferramenta? 

Prece mentira, mas você pode gravar um vídeo seu agora mesmo, e subir nesse site para ele dublar para inglês e várias outras línguas! 🇺🇸🇪🇸🇧🇷🇩🇪

E não apenas isso! Ele sincroniza inclusive os seus lábios para ficar o mais real possível. 

O que você achou? Que tal testar agora mesmo e me mandar?

#machinelearning #inteligenciaartificial
  • ‘Eu nasci assim, eu cresci assim, vou sempre usar arquivos CSV…’ 🎶

Será mesmo? Se a síndrome de Gabriela te prende aos antigos e gigantes arquivos CSV, é hora de repensar! 🤔

Calma, não me entenda mal. Eu uso arquivos CSV para muitas coisas, mesmo! Mas permita-me apresentar um formato que já é bem conhecido pelos engenheiros de dados, mas que, por algum motivo, ainda não é muito famoso entre os cientistas de dados.

O principal problema do CSV é sua estrutura. Eles são armazenados como uma lista de linhas (conhecido como orientado a linhas), o que causa duas grandes complicações: eles são lentos para consultar e, para complicar ainda mais, SQL e CSV simplesmente não se dão bem.

Agora, entre em cena o Parquet: um formato orientado a colunas. Diferentemente dos CSVs, ele organiza seus dados por colunas, o que facilita e agiliza a consulta.

Além disso, é um formato de código aberto, licenciado sob Apache, o que o torna uma opção atrativa não apenas pela sua eficiência, mas também pela flexibilidade e transparência. Engenheiros de dados já se beneficiam das vantagens do Parquet há algum tempo, então por que os cientistas de dados não dariam uma chance também?

Se você é um cientista de dados e ainda não experimentou o Parquet, talvez seja o momento de se aventurar. E aí, já conhecia essa alternativa? Deixe seus comentários! 🚀

#machinelearning #datascience  #visaocomputacional
  • Eu não aprendi a estudar do dia para a noite.

Foram anos de aprimoramento e busca contínua por um método que me permitisse aprender qualquer coisa sozinho.

Nessa sequência de stories eu conto um pouco da minha trajetória, passando pela AFA, ITA e aprendizado de línguas. 

Se você ainda não tem o hábito da leitura, mas gostaria de aprender qualquer coisa rapidamente, como autodidata, você não pode perder a live de hoje. 

🔴AULA AO VIVO (hoje, às 20 horas)

✅Como criar uma rotina de estudo
✅Como criar resumos e notas de revisão
✅Como manter o foco e a concentração
✅Técnicas de Ultra-Aprendizado

Clique no link dos stories e ative a notificação da aula!
  • 📚Ao contrário do que o senso comum pode te induzir a pensar, você não pode querer apenas estudar livros técnicos. 

Ler e memorizar demandam a construção de múltiplas habilidades em diferentes dimensões. Afinal, você precisa crescer não apenas na vida profissional, mas também na humana, espiritual e familiar. 

No entanto, a escolha de livros errados podem prejudicar perigosamente a formação do conhecimento intelectual.

Por esse motivo, aqui vai uma sugestão de livros para aqueles que querem começar uma vida de estudos. 

E se você quiser aprender mais sobre como melhorar sua memória, elaborar resumos da maneira correta e manter o foco na leitura, mande uma mensagem por direct com a palavra “ESTUDO”. 

Depois que você enviar a palavra “estudo”, eu vou te encaminhar o link da aula exclusiva que eu farei sobre o assunto. 

Agora me diz, quais desses livros você já leu? Ou está na fila para leitura?

#leitura #estudos #machinelearning #computervision
  • ORB-SLAM é um sistema SLAM (Localização e Mapeamento Simultâneos) de última geração que utiliza uma combinação de métodos baseados em características e métodos diretos para alcançar desempenho em tempo real em diversas plataformas. Foi concebido por pesquisadores da Universidade de Zaragoza, Espanha, e agora é amplamente adotado tanto na academia quanto na indústria.

O nome ORB-SLAM deriva do seu uso de características Oriented FAST e Rotated BRIEF (ORB) para detectar e combinar pontos-chave em imagens. Essas características, juntamente com outras técnicas como fechamento de loop e otimização de pose, garantem uma localização e mapeamento robustos e precisos.

Graças à sua combinação de métodos baseados em características e diretos, juntamente com suas capacidades em tempo real e compatibilidade versátil de plataforma, ORB-SLAM destaca-se como um recurso inestimável para profissionais em visão computacional e robótica.

Ansioso para aprender como implementar o ORB-SLAM 3, desde sua instalação até a execução do sistema usando seus dados? Acesse o blog do sigmoidal e veja o tutorial com o passo a passo que eu preparei.

https://sigmoidal.ai

#visãocomputacional #machinelearning #slam #opencv
  • Filhos não são um direito, mas um dom de Deus. E hoje fomos abençoados com o nascimento da Bettina. 

Já te amamos muito, minha Pycotinha!
  • Sorria, você está sendo filmado (e analisado pela Visão Computacional)! Estimação de velocidade, fluxo óptico de pedestres e veículos, identificação de objetos abandonados, análise de comportamentos, cruzamento de dados com a base da polícia... quais outras possibilidades você enxerga?
Instagram Youtube LinkedIn Twitter
Sigmoidal

O melhor conteúdo técnico de Data Science, com projetos práticos e exemplos do mundo real.

Seguir no Instagram

Categorias

  • Artigos
  • Blog
  • Carreira
  • Colunistas
  • Cursos
  • Data Science
  • Deep Learning
  • Destaques
  • Entrevistas
  • Inglês
  • Iniciantes
  • Inteligência Artificial
  • Livros
  • Machine Learning
  • Notícias
  • Outros
  • Projetos
  • Python
  • Teoria
  • Tutoriais
  • Visão Computacional
  • Youtube

Navegar por Tags

camera calibration cancer carreira cientista de dados cnn computer vision Cursos dados desbalanceados data science data science na prática decision tree deep learning gis gpt-3 healthcare image formation iniciantes jupyter kaggle keras machine learning matplotlib medicina mnist nft opencv pandas personal branding portfólio profissão python redes neurais redes neurais convolucionais regressão logística salário seaborn sklearn tensorflow titanic tutorial vagas visão computacional vídeo youtube árvore de decisão

© 2023 Sigmoidal - Aprenda Data Science e Python na prática.

Sem Resultado
Ver Todos Resultados
  • Home
  • Cursos de Visão Computacional, Data Science e Python
  • Artigos
  • YouTube
  • Sobre Mim
  • Contato

© 2023 Sigmoidal - Aprenda Data Science e Python na prática.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In

Add New Playlist

Aprenda Python do Zero

50% Off

Oferta exclusiva de aniversário do Sigmoidal. Inscreva-se no curso Python do Zero hoje mesmo.

QUERO APROVEITAR O DESCONTO