В этой статье рассказывается о множественной линейной регрессии и о том, как программировать модели множественной линейной регрессии в 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. Удачного кодирования!
Если у вас есть какие-либо отзывы, поделитесь ими в разделе комментариев или свяжитесь со мной, если вам нужна дополнительная информация.
Ссылки
- https://www.miuul.com/makine-ogrenmesi, Дата обращения: 4 декабря 2022 г.
- https://www.w3schools.com/python/python_ml_multiple_regression.asp, Дата обращения: 4 декабря 2022 г.