Як працює лінійна регресія

Середній рівень регресії зі statsmodels у Python

Maarten Van den Broeck

Content Developer at DataCamp

Стандартний графік простої лінійної регресії

Точкова діаграма з трендовою лінією лінійної регресії.

Середній рівень регресії зі statsmodels у Python

Візуалізація залишків

Точкова діаграма з трендовою лінією лінійної регресії та відрізками від точок до лінії, що показують залишки.

Середній рівень регресії зі statsmodels у Python

Метрика найкращого прилягання

Найпростіша ідея (яка не працює)

  • Підсумувати всі залишки.
  • Деякі залишки від'ємні.

Наступна проста ідея (яка працює)

  • Піднести кожен залишок до квадрата і підсумувати квадрати.
  • Це називається сума квадратів.
Середній рівень регресії зі statsmodels у Python

Відступ у чисельну оптимізацію

Графік лінії для квадратного рівняння

x = np.arange(-4, 5, 0.1)
y = x ** 2 - x + 10

xy_data = pd.DataFrame({"x": x,
                        "y": y})

sns.lineplot(x="x",
             y="y",
             data=xy_data)

Квадратична функція y = x ** 2 - x + 10

Середній рівень регресії зі statsmodels у Python

Розв'язання рівняння за допомогою аналізу

$y = x ^ 2 - x + 10$

$\frac{\partial y}{\partial x} = 2 x - 1$

$0 = 2 x - 1$

$x = 0.5$

$y = 0.5 ^ 2 - 0.5 + 10 = 9.75$

  • Не всі рівняння можна розв'язати так.
  • Можна доручити це Python.

Не хвилюйтеся, якщо це незрозуміло — для вправ це не знадобиться.

Попередня квадратична функція, тепер розв'язана для знаходження мінімуму

Середній рівень регресії зі statsmodels у Python

minimize()

from scipy.optimize import minimize
def calc_quadratic(x):
  y = x ** 2 - x + 10
  return y
minimize(fun=calc_quadratic,
         x0=3)
      fun: 9.75
 hess_inv: array([[0.5]])
      jac: array([0.])
  message: 'Optimization terminated successfully.'
     nfev: 6
      nit: 2
     njev: 3
   status: 0
  success: True
        x: array([0.49999998])
Середній рівень регресії зі statsmodels у Python

Алгоритм лінійної регресії

Визначте функцію для обчислення метрики суми квадратів.

 

Викличте minimize() щоб знайти коефіцієнти, які мінімізують цю функцію.

def calc_sum_of_squares(coeffs):
  intercept, slope = coeffs
  # More calculation!
minimize(
  fun=calc_sum_of_squares,
  x0=0
)
Середній рівень регресії зі statsmodels у Python

Давайте потренуємось!

Середній рівень регресії зі statsmodels у Python

Preparing Video For Download...