Линейная регрессия на пальцах
Самая важная формула первого раздела — уравнение прямой — и её смысл в ML.
Линейная регрессия — модель, которая описывает зависимость метки от признаков прямой линией.
Уравнение прямой
Всё держится на школьной формуле прямой:
y = k * x + b
Здесь:
x— признак (например, площадь квартиры);y— предсказание (цена);k— наклон: на сколько растётy, когдаxувеличивается на единицу (цена за дополнительный квадратный метр);b— сдвиг: значениеyприx = 0(базовая цена).
Обучить линейную регрессию — значит подобрать такие k и b, чтобы прямая проходила как можно ближе к точкам данных. Это и есть «обучение» для этой модели: всего два числа, но они полностью задают зависимость.
Почему прямая, а не точное попадание
Реальные точки никогда не лежат идеально на одной линии: на цену влияют ремонт, вид из окна, настроение продавца — всё это шум, который мы не учли. Линейная регрессия не пытается пройти через каждую точку. Она ищет линию, которая в среднем ближе всего ко всем точкам сразу. Получается «линия тренда».
Считаем предсказание вручную
Пусть модель уже подобрала k = 150 000 (руб за м²) и b = 2 000 000 (базовая цена). Посмотрим, что она предскажет. Код запускается:
# Готовая прямая: y = k*x + b
k = 150_000 # цена за дополнительный квадратный метр
b = 2_000_000 # базовая часть цены
def predict(area):
return k * area + b
for area in [40, 60, 80]:
price = predict(area)
print(f"{area} м2 -> {price/1_000_000:.2f} млн руб")
Вывод:
40 м2 -> 8.00 млн руб 60 м2 -> 11.00 млн руб 80 м2 -> 14.00 млн руб
Видно, как работает наклон: каждые +20 м² добавляют ровно 3 млн (20 × 150 000). А сдвиг b — это та часть цены, что есть даже у крошечной квартиры.
Несколько признаков
Обычно признаков больше одного. Тогда у каждого свой коэффициент:
y = k1*площадь + k2*комнаты + k3*этаж + ... + b
Идея та же — взвешенная сумма признаков плюс сдвиг. Геометрически это уже не линия на плоскости, а «плоскость» в многомерном пространстве, но смысл коэффициентов сохраняется: каждый показывает вклад своего признака.
# Линейная модель с двумя признаками
def predict(area, rooms):
return 120_000 * area + 500_000 * rooms + 1_000_000
print(predict(40, 1) / 1_000_000, "млн")
print(predict(60, 2) / 1_000_000, "млн")
print(predict(80, 3) / 1_000_000, "млн")
Вывод:
6.3 млн 9.2 млн 12.1 млн
Откуда берутся k и b
Пока мы задавали коэффициенты руками. Настоящая модель подбирает их сама, минимизируя ошибку между предсказаниями и реальными ценами. Чтобы это сделать, нужно сначала научиться измерять ошибку — этим займёмся в следующем уроке (функция потерь).
Итог
- Линейная регрессия — это прямая
y = k*x + b. k(наклон) — насколько растёт ответ при росте признака;b(сдвиг) — базовое значение.- Обучить модель = подобрать
kиb, чтобы линия в среднем была ближе всего к точкам. - При нескольких признаках у каждого свой коэффициент: взвешенная сумма плюс сдвиг.