ML | Множественная линейная регрессия с использованием Python

Опубликовано: 25 Июля, 2021

Линейная регрессия:
Это основной и часто используемый тип для прогнозного анализа. Это статистический подход к моделированию взаимосвязи между зависимой переменной и заданным набором независимых переменных.

Они бывают двух типов:

  1. Простая линейная регрессия
  2. Множественная линейная регрессия

Давайте обсудим множественную линейную регрессию с использованием Python.

Множественная линейная регрессия пытается смоделировать взаимосвязь между двумя или более функциями и откликом путем подбора линейного уравнения к наблюдаемым данным. Шаги по выполнению множественной линейной регрессии почти аналогичны шагам простой линейной регрессии. Разница заключается в оценке. Мы можем использовать его, чтобы узнать, какой фактор имеет наибольшее влияние на прогнозируемый результат, и теперь разные переменные связаны друг с другом.

Here : Y = b0 + b1 * x1 + b2 * x2 + b3 * x3 + …… bn * xn
Y = Dependent variable and x1, x2, x3, …… xn = multiple independent variables

Предположение регрессионной модели:

  • Линейность: отношения между зависимыми и независимыми переменными должны быть линейными.
  • Гомоскедастичность: следует поддерживать постоянный разброс ошибок.
  • Многомерная нормальность: множественная регрессия предполагает, что остатки распределены нормально.
  • Отсутствие мультиколлинеарности: предполагается, что мультиколлинеарность данных незначительна или отсутствует.

Фиктивная переменная -
Как мы знаем, в модели множественной регрессии мы используем много категориальных данных. Использование категориальных данных - хороший метод для включения нечисловых данных в соответствующую модель регрессии. Категориальные данные относятся к значениям данных, которые представляют значения категорий-данных с фиксированным и неупорядоченным количеством значений, например, пол (мужской / женский). В регрессионной модели эти значения могут быть представлены фиктивными переменными.

Эти переменные состоят из таких значений, как 0 или 1, представляющих наличие и отсутствие категориального значения.

Ловушка фиктивной переменной -
Ловушка фиктивной переменной - это состояние, при котором две или более сильно коррелированы. Проще говоря, мы можем сказать, что одна переменная может быть предсказана на основе предсказания другой. Решение ловушки фиктивной переменной состоит в том, чтобы отбросить одну категориальную переменную. Итак, если есть m фиктивных переменных, тогда в модели используются m-1 переменные.

 D2 = D1-1   
 Здесь D2, D1 = фиктивные переменные

Метод построения моделей:

  • Все в
  • Обратное исключение
  • Прямой выбор
  • Двунаправленное исключение
  • Сравнение оценок

Обратное исключение:

Шаг № 1: Выберите значительный уровень для начала в модели.
Шаг № 2: Подобрать полную модель со всеми возможными предикторами.
Шаг № 3: Рассмотрите предиктор с самым высоким P-значением. Если P> SL переходите к ШАГУ 4, в противном случае модель готова.
Шаг №4: Удалите предсказатель.
Шаг № 5: Подберите модель без этой переменной.

Прямой выбор:

Шаг № 1: Выберите уровень значимости для входа в модель (например, SL = 0,05)
Шаг № 2: Подобрать все простые регрессионные модели y ~ x (n). Выберите тот, у которого наименьшее значение Р.
Шаг № 3: Сохраните эту переменную и подгоните все возможные модели с одним дополнительным предиктором, добавленным к уже имеющимся.
Шаг №4: Рассмотрите предиктор с наименьшим P-значением. Если P <SL, переходите к шагу №3, в противном случае модель готова.

Шаги, включенные в любую модель множественной линейной регрессии

Шаг № 1: предварительная обработка данных

  1. Импорт библиотек.
  2. Импорт набора данных.
  3. Кодирование категориальных данных.
  4. Как избежать ловушки фиктивной переменной.
  5. Разделение набора данных на обучающий набор и тестовый набор.

Шаг # 2: подгонка множественной линейной регрессии к обучающей выборке
Шаг № 3: Прогнозирование результатов набора тестов.

Код 1:




import numpy as np
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
def generate_dataset(n):
x = []
y = []
random_x1 = np.random.rand()
random_x2 = np.random.rand()
for i in range (n):
x1 = i
x2 = i / 2 + np.random.rand() * n
x.append([ 1 , x1, x2])
y.append(random_x1 * x1 + random_x2 * x2 + 1 )
return np.array(x), np.array(y)
x, y = generate_dataset( 200 )
mpl.rcParams[ 'legend.fontsize' ] = 12
fig = plt.figure()
ax = fig.gca(projection = '3d' )
ax.scatter(x[:, 1 ], x[:, 2 ], y, label = 'y' , s = 5 )
ax.legend()
ax.view_init( 45 , 0 )
plt.show()

Выход:

Код 2:




def mse(coef, x, y):
return np.mean((np.dot(x, coef) - y) * * 2 ) / 2
def gradients(coef, x, y):
return np.mean(x.transpose() * (np.dot(x, coef) - y), axis = 1 )
def multilinear_regression(coef, x, y, lr, b1 = 0.9 , b2 = 0.999 , epsilon = 1e - 8 ):
prev_error = 0
m_coef = np.zeros(coef.shape)
v_coef = np.zeros(coef.shape)
moment_m_coef = np.zeros(coef.shape)
moment_v_coef = np.zeros(coef.shape)
t = 0
while True :
error = mse(coef, x, y)
if abs (error - prev_error) < = epsilon:
break
prev_error = error
grad = gradients(coef, x, y)
t + = 1
m_coef = b1 * m_coef + ( 1 - b1) * grad
v_coef = b2 * v_coef + ( 1 - b2) * grad * * 2
moment_m_coef = m_coef / ( 1 - b1 * * t)
moment_v_coef = v_coef / ( 1 - b2 * * t)
delta = ((lr / moment_v_coef * * 0.5 + 1e - 8 ) *
(b1 * moment_m_coef + ( 1 - b1) * grad / ( 1 - b1 * * t)))
coef = np.subtract(coef, delta)
coef return
coef = np.array([ 0 , 0 , 0 ])
c = multilinear_regression(coef, x, y, 1e - 1 )
fig = plt.figure()
ax = fig.gca(projection = '3d' )
ax.scatter(x[:, 1 ], x[:, 2 ], y, label = 'y' ,
s = 5 , color = "dodgerblue" )
ax.scatter(x[:, 1 ], x[:, 2 ], c[ 0 ] + c[ 1 ] * x[:, 1 ] + c[ 2 ] * x[:, 2 ],
label = 'regression' , s = 5 , color = "orange" )
ax.view_init( 45 , 0 )
ax.legend()
plt.show()

Выход: