В этой статье рассказывается о множественной линейной регрессии и о том, как программировать модели множественной линейной регрессии в Python.

Множественная линейная регрессия (MLR) — это статистический метод, используемый для моделирования связи между зависимой переменной и одной или несколькими независимыми переменными. Он называется «множественным», потому что включает в себя несколько независимых переменных, и «линейным», потому что отношение между независимыми и зависимыми переменными предполагается линейным. В MLR к данным подгоняется модель линейной регрессии, что означает, что через данные проводится линия наилучшего соответствия. Наклон и точка пересечения этой линии выбираются таким образом, чтобы сумма квадратов расстояний между прогнозируемыми значениями и фактическими значениями была минимальной.

Формула и расчет множественной линейной регрессии

Формула множественной линейной регрессии аналогична формуле простой линейной регрессии с добавлением большего количества независимых переменных. Общая форма уравнения:

где Y — зависимая переменная, X1, X2, … Xn — независимые переменные, а b0, b1, b2, … bn — коэффициенты (или веса) модели.

Коэффициенты независимых переменных в подобранной модели можно использовать для прогнозирования зависимой переменной с учетом набора значений независимых переменных. Затем эти прогнозы можно использовать для принятия решений или выводов о лежащих в основе взаимосвязях между зависимыми и независимыми переменными.

Теперь мы можем перейти к реализации Python.

Мы будем строить модель MLR для прогнозирования выбросов CO2 автомобилями. Перед построением нашей модели необходимо импортировать и обработать данные и определить переменные для нашей регрессионной модели.

Импорт библиотек

#Importing the libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# import warnings
import warnings
warnings.filterwarnings("ignore")

# We will use some methods from the sklearn module
from sklearn import linear_model
from sklearn.linear_model import LinearRegression
from sklearn import metrics
from sklearn.metrics import mean_squared_error, mean_absolute_error
from sklearn.model_selection import train_test_split, cross_val_score
# Reading the Dataset
df = pd.read_csv("/kaggle/input/cardataset/data.csv")
df.head()

df.shape
(36, 5)
print(df.corr())
        Volume    Weight       CO2
Volume  1.000000  0.753537  0.592082
Weight  0.753537  1.000000  0.552150
CO2     0.592082  0.552150  1.000000
print(df.describe())
        Volume       Weight         CO2
count    36.000000    36.000000   36.000000
mean   1611.111111  1292.277778  102.027778
std     388.975047   242.123889    7.454571
min     900.000000   790.000000   90.000000
25%    1475.000000  1117.250000   97.750000
50%    1600.000000  1329.000000   99.000000
75%    2000.000000  1418.250000  105.000000
max    2500.000000  1746.000000  120.000000

Затем составьте список независимых значений и назовите эту переменную X. Поместите зависимые значения в переменную с именем y.

Обычно список независимых значений обозначается буквой X в верхнем регистре, а список зависимых значений — буквой y в нижнем регистре.

  • Уравнение: продажи = β0 + (β1 вес) + (β2объем) + e
  • Установка значений для независимой переменной (X) и зависимой переменной (Y)
#Setting the value for X and Y
X = df[['Weight', 'Volume']]
y = df['CO2']

Проверка выбросов

fig, axs = plt.subplots(2, figsize = (5,5))
plt1 = sns.boxplot(df['Weight'], ax = axs[0])
plt2 = sns.boxplot(df['Volume'], ax = axs[1])
plt.tight_layout()

Исследовательский анализ данных

Распределение целевой переменной

sns.distplot(df['CO2']);

Связь CO2 с другими переменными

sns.pairplot(df, x_vars=['Weight', 'Volume'], y_vars='CO2', height=4, aspect=1, kind='scatter')
plt.show()

Тепловая карта

Функция sns.heatmap() создает визуализацию, которая показывает матрицу корреляции набора данных в виде тепловой карты. Параметр annot этой функции показывает или не показывает значения корреляции в ячейках тепловой карты. Если для этого параметра установлено значение True, отображаются значения корреляции в ячейках.

# Create the correlation matrix and represent it as a heatmap.
sns.heatmap(df.corr(), annot = True, cmap = 'coolwarm')
plt.show()

Построение модели

Разделение набора данных на обучающий и тестовый наборы

Нам нужно разделить наш набор данных на наборы для обучения и тестирования. Мы выполним это, импортировав train_test_split из библиотеки sklearn.model_selection. Обычно хорошо хранить 70 % данных в наборе данных поезда, а остальные 30 % — в наборе тестовых данных.

X_train,X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 100)
y_train.shape
(25,)

y_test.shape
(11,)
reg_model = linear_model.LinearRegression()

#Fitting the Multiple Linear Regression model
reg_model = LinearRegression().fit(X_train, y_train)

#Printing the model coefficients
print('Intercept: ',reg_model.intercept_)

# pair the feature names with the coefficients
list(zip(X, reg_model.coef_))
Intercept:  74.33882836589245
[('Weight', 0.0171800645996374), ('Volume', 0.0025046399866402976)]
#Predicting the Test and Train set result 
y_pred= reg_model.predict(X_test)  
x_pred= reg_model.predict(X_train)
print("Prediction for test set: {}".format(y_pred))
Prediction for test set: [ 90.41571939 102.16323413  99.56363213 104.56661845 101.54657652
  95.94770019 108.64011848 102.22654214  92.80374837  97.27327129
  97.57074463]
#Actual value and the predicted value
reg_model_diff = pd.DataFrame({'Actual value': y_test, 'Predicted value': y_pred})
reg_model_diff

mae = metrics.mean_absolute_error(y_test, y_pred)
mse = metrics.mean_squared_error(y_test, y_pred)
r2 = np.sqrt(metrics.mean_squared_error(y_test, y_pred))

print('Mean Absolute Error:', mae)
print('Mean Square Error:', mse)
print('Root Mean Square Error:', r2)
Mean Absolute Error: 6.901980901636316
Mean Square Error: 63.39765310998792
Root Mean Square Error: 7.9622643205301795

Спасибо, что прочитали эту статью. Вы можете получить доступ к подробным кодам проекта и других проектов в мой аккаунт Github или аккаунт Kaggle. Удачного кодирования!

Если у вас есть какие-либо отзывы, поделитесь ими в разделе комментариев или свяжитесь со мной, если вам нужна дополнительная информация.

Ссылки

  1. https://www.miuul.com/makine-ogrenmesi, Дата обращения: 4 декабря 2022 г.
  2. https://www.w3schools.com/python/python_ml_multiple_regression.asp, Дата обращения: 4 декабря 2022 г.