logo

Regressão linear múltipla

No tópico anterior, aprendemos sobre Regressão Linear Simples, onde uma única variável Independente/Preditor(X) é usada para modelar a variável resposta (Y). Mas pode haver vários casos em que a variável resposta é afetada por mais de uma variável preditora; para tais casos, é utilizado o algoritmo de Regressão Linear Múltipla.

Além disso, a regressão linear múltipla é uma extensão da regressão linear simples, pois é necessária mais de uma variável preditora para prever a variável de resposta. Podemos defini-lo como:

A regressão linear múltipla é um dos algoritmos de regressão importantes que modela a relação linear entre uma única variável contínua dependente e mais de uma variável independente.

Exemplo:

Previsão de CO2emissão com base no tamanho do motor e no número de cilindros de um carro.

Alguns pontos-chave sobre MLR:

  • Para MLR, a variável dependente ou alvo (Y) deve ser contínua/real, mas o preditor ou variável independente pode ser de forma contínua ou categórica.
  • Cada variável de recurso deve modelar o relacionamento linear com a variável dependente.
  • O MLR tenta ajustar uma linha de regressão através de um espaço multidimensional de pontos de dados.

Equação MLR:

Na regressão linear múltipla, a variável alvo (Y) é uma combinação linear de múltiplas variáveis ​​preditoras x1, x2, x3, ...,xn. Por se tratar de um aprimoramento da Regressão Linear Simples, o mesmo se aplica à equação de regressão linear múltipla, a equação passa a ser:

 Y= b<sub>0</sub>+b<sub>1</sub>x<sub>1</sub>+ b<sub>2</sub>x<sub>2</sub>+ b<sub>3</sub>x<sub>3</sub>+...... bnxn ............... (a) 

Onde,

Y= Variável de saída/resposta

matemática.pow java

b0, b1, b2, b3, bn....= Coeficientes do modelo.

x1, x2, x3, x4,...= Várias variáveis ​​independentes/de recurso

Suposições para regressão linear múltipla:

  • A relação linear deve existir entre as variáveis ​​de destino e preditoras.
  • Os resíduos da regressão devem ser distribuído normalmente .
  • MLR assume pouco ou sem multicolinearidade (correlação entre a variável independente) nos dados.

Implementação do modelo de regressão linear múltipla usando Python:

Para implementar MLR usando Python, temos o problema abaixo:

Descrição do Problema:

Temos um conjunto de dados de 50 empresas iniciantes . Este conjunto de dados contém cinco informações principais: Gastos com P&D, gastos com administração, gastos com marketing, estado e lucro para um exercício financeiro . Nosso objetivo é criar um modelo que possa determinar facilmente qual empresa tem o lucro máximo e qual é o fator que mais afeta o lucro de uma empresa.

Como precisamos encontrar o Lucro, então ele é a variável dependente, e as outras quatro variáveis ​​são variáveis ​​independentes. Abaixo estão as principais etapas de implantação do modelo MLR:

    Etapas de pré-processamento de dados Ajustando o modelo MLR ao conjunto de treinamento Prever o resultado do conjunto de testes

Etapa 1: Etapa de pré-processamento de dados:

O primeiro passo éImportando bibliotecas:Primeiramente importaremos a biblioteca que auxiliará na construção do modelo. Abaixo está o código para isso:

 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 
    Importando conjunto de dados:Agora iremos importar o dataset(50_CompList), que contém todas as variáveis. Abaixo está o código para isso:
 #importing datasets data_set= pd.read_csv(&apos;50_CompList.csv&apos;) 

Saída: Obteremos o conjunto de dados como:

Regressão linear múltipla

Na saída acima, podemos ver claramente que existem cinco variáveis, nas quais quatro variáveis ​​são contínuas e uma é variável categórica.

    Extraindo variáveis ​​dependentes e independentes:
 #Extracting Independent and dependent Variable x= data_set.iloc[:, :-1].values y= data_set.iloc[:, 4].values 

Saída:

Fora[5]:

java substitui caractere em string
 array([[165349.2, 136897.8, 471784.1, &apos;New York&apos;], [162597.7, 151377.59, 443898.53, &apos;California&apos;], [153441.51, 101145.55, 407934.54, &apos;Florida&apos;], [144372.41, 118671.85, 383199.62, &apos;New York&apos;], [142107.34, 91391.77, 366168.42, &apos;Florida&apos;], [131876.9, 99814.71, 362861.36, &apos;New York&apos;], [134615.46, 147198.87, 127716.82, &apos;California&apos;], [130298.13, 145530.06, 323876.68, &apos;Florida&apos;], [120542.52, 148718.95, 311613.29, &apos;New York&apos;], [123334.88, 108679.17, 304981.62, &apos;California&apos;], [101913.08, 110594.11, 229160.95, &apos;Florida&apos;], [100671.96, 91790.61, 249744.55, &apos;California&apos;], [93863.75, 127320.38, 249839.44, &apos;Florida&apos;], [91992.39, 135495.07, 252664.93, &apos;California&apos;], [119943.24, 156547.42, 256512.92, &apos;Florida&apos;], [114523.61, 122616.84, 261776.23, &apos;New York&apos;], [78013.11, 121597.55, 264346.06, &apos;California&apos;], [94657.16, 145077.58, 282574.31, &apos;New York&apos;], [91749.16, 114175.79, 294919.57, &apos;Florida&apos;], [86419.7, 153514.11, 0.0, &apos;New York&apos;], [76253.86, 113867.3, 298664.47, &apos;California&apos;], [78389.47, 153773.43, 299737.29, &apos;New York&apos;], [73994.56, 122782.75, 303319.26, &apos;Florida&apos;], [67532.53, 105751.03, 304768.73, &apos;Florida&apos;], [77044.01, 99281.34, 140574.81, &apos;New York&apos;], [64664.71, 139553.16, 137962.62, &apos;California&apos;], [75328.87, 144135.98, 134050.07, &apos;Florida&apos;], [72107.6, 127864.55, 353183.81, &apos;New York&apos;], [66051.52, 182645.56, 118148.2, &apos;Florida&apos;], [65605.48, 153032.06, 107138.38, &apos;New York&apos;], [61994.48, 115641.28, 91131.24, &apos;Florida&apos;], [61136.38, 152701.92, 88218.23, &apos;New York&apos;], [63408.86, 129219.61, 46085.25, &apos;California&apos;], [55493.95, 103057.49, 214634.81, &apos;Florida&apos;], [46426.07, 157693.92, 210797.67, &apos;California&apos;], [46014.02, 85047.44, 205517.64, &apos;New York&apos;], [28663.76, 127056.21, 201126.82, &apos;Florida&apos;], [44069.95, 51283.14, 197029.42, &apos;California&apos;], [20229.59, 65947.93, 185265.1, &apos;New York&apos;], [38558.51, 82982.09, 174999.3, &apos;California&apos;], [28754.33, 118546.05, 172795.67, &apos;California&apos;], [27892.92, 84710.77, 164470.71, &apos;Florida&apos;], [23640.93, 96189.63, 148001.11, &apos;California&apos;], [15505.73, 127382.3, 35534.17, &apos;New York&apos;], [22177.74, 154806.14, 28334.72, &apos;California&apos;], [1000.23, 124153.04, 1903.93, &apos;New York&apos;], [1315.46, 115816.21, 297114.46, &apos;Florida&apos;], [0.0, 135426.92, 0.0, &apos;California&apos;], [542.05, 51743.15, 0.0, &apos;New York&apos;], [0.0, 116983.8, 45173.06, &apos;California&apos;]], dtype=object) 

Como podemos ver na saída acima, a última coluna contém variáveis ​​​​categóricas que não são adequadas para aplicação direta no ajuste do modelo. Portanto, precisamos codificar esta variável.

Codificando variáveis ​​fictícias:

Como temos uma variável categórica (Estado), que não pode ser aplicada diretamente ao modelo, iremos codificá-la. Para codificar a variável categórica em números, usaremos o EtiquetaEncoder aula. Mas não é suficiente porque ainda possui alguma ordem relacional, o que pode criar um modelo errado. Então, para remover esse problema, usaremos OneHotEncoder , que criará as variáveis ​​fictícias. Abaixo está o código para isso:

 #Catgorical data from sklearn.preprocessing import LabelEncoder, OneHotEncoder labelencoder_x= LabelEncoder() x[:, 3]= labelencoder_x.fit_transform(x[:,3]) onehotencoder= OneHotEncoder(categorical_features= [3]) x= onehotencoder.fit_transform(x).toarray() 

Aqui estamos codificando apenas uma variável independente, que é um estado, pois outras variáveis ​​são contínuas.

Saída:

Regressão linear múltipla

Como podemos ver na saída acima, a coluna de estado foi convertida em variáveis ​​fictícias (0 e 1). Aqui, cada coluna de variável fictícia corresponde a um estado . Podemos verificar comparando-o com o conjunto de dados original. A primeira coluna corresponde ao Estado da Califórnia , a segunda coluna corresponde ao Estado da Flórida , e a terceira coluna corresponde ao Estado de Nova Iorque .

Observação:Não devemos usar todas as variáveis ​​fictícias ao mesmo tempo, portanto deve ser 1 a menos que o número total de variáveis ​​fictícias, caso contrário, criará uma armadilha de variável fictícia.

  • Agora, estamos escrevendo uma única linha de código apenas para evitar a armadilha da variável fictícia:
 #avoiding the dummy variable trap: x = x[:, 1:] 

Se não removermos a primeira variável dummy, ela poderá introduzir multicolinearidade no modelo.

Regressão linear múltipla

Como podemos ver na imagem de saída acima, a primeira coluna foi removida.

  • Agora dividiremos o conjunto de dados em conjunto de treinamento e teste. O código para isso é fornecido abaixo:
 # Splitting the dataset into training and test set. from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0.2, random_state=0) 

O código acima dividirá nosso conjunto de dados em um conjunto de treinamento e um conjunto de teste.

Saída: O código acima dividirá o conjunto de dados em conjunto de treinamento e conjunto de teste. Você pode verificar a saída clicando na opção do explorador de variáveis ​​fornecida no Spyder IDE. O conjunto de teste e o conjunto de treinamento serão semelhantes à imagem abaixo:

Conjunto de teste:

Regressão linear múltipla

Conjunto de treinamento:

Regressão linear múltipla

Observação:No MLR, não faremos escalonamento de recursos, pois isso é feito pela biblioteca, portanto não precisamos fazer isso manualmente.

Etapa: 2- Ajustar nosso modelo MLR ao conjunto de treinamento:

Agora preparamos bem nosso conjunto de dados para fornecer treinamento, o que significa que ajustaremos nosso modelo de regressão ao conjunto de treinamento. Será semelhante ao que fizemos em Modelo de regressão linear simples. O código para isso será:

 #Fitting the MLR model to the training set: from sklearn.linear_model import LinearRegression regressor= LinearRegression() regressor.fit(x_train, y_train) 

Saída:

 Out[9]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False) 

Agora, treinamos nosso modelo com sucesso usando o conjunto de dados de treinamento. Na próxima etapa, testaremos o desempenho do modelo usando o conjunto de dados de teste.

Etapa: 3- Previsão dos resultados do conjunto de testes:

A última etapa do nosso modelo é verificar o desempenho do modelo. Faremos isso prevendo o resultado do conjunto de testes. Para previsão, criaremos um y_pred vetor. Abaixo está o código para isso:

 #Predicting the Test set result; y_pred= regressor.predict(x_test) 

Ao executar as linhas de código acima, um novo vetor será gerado na opção do explorador de variáveis. Podemos testar nosso modelo comparando os valores previstos e os valores do conjunto de teste.

comandos linux que

Saída:

Regressão linear múltipla

Na saída acima, previmos o conjunto de resultados e o conjunto de testes. Podemos verificar o desempenho do modelo comparando esses dois valores, índice por índice. Por exemplo, o primeiro índice tem um valor previsto de 103015$ lucro e teste/valor real de 103282$ lucro. A diferença é apenas de US$ 267 , o que é uma boa previsão, então, finalmente, nosso modelo está concluído aqui.

  • Também podemos verificar a pontuação do conjunto de dados de treinamento e do conjunto de dados de teste. Abaixo está o código para isso:
 print(&apos;Train Score: &apos;, regressor.score(x_train, y_train)) print(&apos;Test Score: &apos;, regressor.score(x_test, y_test)) 

Saída: A pontuação é:

 Train Score: 0.9501847627493607 Test Score: 0.9347068473282446 

A pontuação acima indica que nosso modelo é 95% preciso com o conjunto de dados de treinamento e 93% preciso com o conjunto de dados de teste.

Observação:No próximo tópico veremos como podemos melhorar o desempenho do modelo utilizando oEliminação para trásprocesso.

Aplicações de regressão linear múltipla:

Existem principalmente duas aplicações de regressão linear múltipla:

  • Eficácia da variável independente na previsão:
  • Prever o impacto das mudanças: