Статья Автор: Деникина Н.В., Деникин А.В.

Линейная регрессия в библиотеке sklearn

Линейная регрессия ищет линейную зависимость между признаками (X) и целевой переменной (y) в виде уравнения прямой:
 
y = w₁·x₁ + w₂·x₂ + ... + wₙ·xₙ + b
Или в упрощенном виде для одного признака:
y = w·x + b

Где:

  • w (weight) — коэффициент наклона (slope, угловой коэффициент)
  • b (bias) — свободный член (intercept, смещение)

Что такое Slope (наклон)?

Slope (коэффициент наклона) показывает, на сколько единиц изменится y при изменении x на 1 единицу.

Геометрический смысл:

  • Это тангенс угла наклона прямой к оси X
  • Чем больше slope, тем круче прямая
  • Положительный slope → прямая идет вверх
  • Отрицательный slope → прямая идет вниз
  • Slope = 0 → горизонтальная прямая (y не зависит от x)

Практический пример:

# Модель: цена доставки = 55·расстояние + 170
model.coef_[0] = 55.0  # slope
Интерпретация: Каждый дополнительный километр увеличивает стоимость доставки на 55 рублей.
Если расстояние = 10 км → цена ≈ 55·10 + 170 = 720 руб
Если расстояние = 11 км → цена ≈ 55·11 + 170 = 775 руб
Разница = 775 - 720 = 55 руб (это и есть slope!)
В sklearn:
print(model.coef_)  # Массив коэффициентов
# Для одного признака: [55.0]
# Для нескольких: [55.0, -10.5, 3.2]

print(model.coef_[0])  # Первый коэффициент
# 55.0

Что такое Intercept (свободный член)?

Intercept (свободный член) — это значение y, когда все признаки равны нулю.

Геометрический смысл:

  • Точка пересечения прямой с осью Y
  • Сдвиг прямой вверх или вниз относительно начала координат

Практический пример:

# Модель: цена доставки = 55·расстояние + 170
model.intercept_ = 170.0  # intercept
Интерпретация: Базовая стоимость доставки (фиксированная плата) составляет 170 рублей, даже если расстояние = 0.
Если расстояние = 0 км → цена = 55·0 + 170 = 170 руб

Важно понимать:

Intercept не всегда имеет практический смысл:

  • ✅ Цена доставки при расстоянии = 0 → имеет смысл (минимальная плата)
  • ❌ Цена квартиры при площади = 0 м² → не имеет смысла (нет таких квартир)

В таких случаях intercept — это просто математическая константа для корректировки модели.

В sklearn:

print(model.intercept_)  # Одно число
# 170.0
Печать