При работе с несколькими функциями простая линейная регрессия теряет свое очарование, поэтому множественная регрессия необходима для инкапсуляции эффекта нескольких функций.

(Просмотр на Kaggle: https://www.kaggle.com/pragyanbo/performing-multiple-regression-using-python)

Я буду работать с набором данных прогнозирования цен на жилье в Бостоне, чтобы показать этот метод регрессии. Начнем с обычного импорта, а также импорта некоторых статистических моделей.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import statsmodels.api as sm
import statsmodels.formula.api as smf
%matplotlib inline

Теперь получение данных.

from sklearn.datasets import load_boston
boston_data = load_boston()
df =pd.DataFrame(boston_data.data,columns=boston_data.feature_names)

df будет нашим фреймом данных, где я буду хранить все столбцы функций.

df.head()

Затем для простоты я буду использовать X и y для обозначения функции и целевых переменных.

X = df
y = boston_data.target

Теперь давайте добавим дополнительный постоянный член, чтобы статистические модели могли рассчитать смещение.

X_constant = sm.add_constant(X)

Теперь давайте создадим экземпляр и подгоним нашу модель к обычной модели наименьших квадратов.

model = sm.OLS(y, X_constant)
lin_reg = model.fit()

Чтобы увидеть результаты, запустите следующий код:

lin_reg.summary()

Другой способ сделать вашу модель - это использовать формулу

f_model = smf.ols(formula = 'y ~ CRIM + ZN + INDUS + CHAS + NOX + RM + AGE + DIS + RAD + TAX + PTRATIO + B + LSTAT', 
              data=df)
f_lin_reg = f_model.fit()
print(f_lin_reg.summary())

Чтобы увидеть, как выглядит фактический прогноз для 10 строк фрейма данных функций, запустите следующее:

print(lin_reg.predict(X_constant[:10]))
print(f_lin_reg.predict(X_constant[:10]))

Ну вот! Вот как вы выполняете множественную регрессию с помощью Python!

(Просто дополнение. Если вам интересно, какая функция важна, пройдите это.)

Давайте посмотрим на корреляцию между различными функциями.

pd.options.display.float_format = '{:,.4f}'.format
corr = df.corr()
corr[np.abs(corr) < 0.65] = 0
plt.figure(figsize=(16,10))
sns.heatmap(corr, annot=True, cmap='YlGnBu')
plt.show()

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

from sklearn.metrics import r2_score
linear_reg = smf.ols(formula = 'y ~ CRIM + ZN + INDUS + CHAS + NOX + RM + AGE + DIS + RAD + TAX + PTRATIO + B + LSTAT', 
              data=df)
base = linear_reg.fit()
print(r2_score(y, base.predict(df)))

Оценка R2, которую я получил, была 0,7406, и теперь она будет служить моим базовым числом. Если удаление функции значительно изменяет оценку R2, то эту функцию можно назвать важной функцией.

Например, если из приведенной выше формулы удалить LSTAT, то показатель R2 упадет до 0,68, тогда как если удалить AGE, он останется на уровне 0,74. Следовательно, LSTAT является важной функцией.

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