Как реализовать линейную регрессию с обучением и инференсом без использования готовых библиотек
Что проверяют
Понимаете ли вы линейную регрессию на уровне формул, а не вызова fit: функцию потерь, градиент, роль скорости обучения и масштабирования признаков. Следом обычно просят добавить регуляризацию или объяснить, когда аналитическое решение хуже градиентного спуска.
Как отвечать
Сначала уточните рамки: можно ли NumPy или нужны чистые списки, на каком языке писать. Если просят Go, матричные операции придётся написать самому, это пара вложенных циклов. Затем опишите модель: y_hat = X·w + b, потеря MSE, то есть среднее квадратов ошибок.
- аналитическое решение: нормальное уравнение
w = (XᵀX)⁻¹Xᵀy. Точное и без гиперпараметров, но стоит порядкаn·d² + d³и неустойчиво, когда признаки коллинеарны. Матрицу явно не обращают, решают систему или берут QR-разложение; - градиентный спуск: градиент MSE по весам
(2/n)·Xᵀ(y_hat - y), по смещению удвоенное среднее остатков. Шагw -= lr * grad, остановка по числу эпох или по малому изменению потерь; - масштабирование: стандартизируйте признаки (вычесть среднее, поделить на стандартное отклонение), иначе при разных масштабах спуск идёт зигзагом или расходится;
- мини-батчи: на больших данных градиент считают по случайной пачке строк, это SGD;
- регуляризация: L2 (ridge) добавляет
λ·‖w‖²к потере и2λwк градиенту, смещение не штрафуют.
Инференс это скалярное произведение, но с теми же параметрами масштабирования, что посчитаны на обучающей выборке. Их сохраняют вместе с весами.
Корректность проверьте на синтетике: сгенерируйте данные с известными коэффициентами и шумом и убедитесь, что модель их восстанавливает. Качество оцените через MSE и R² на отложенной выборке.
Где спотыкаются
Не масштабируют признаки и подбирают lr наугад. Потери улетают в inf, и кандидат ищет баг в формуле.
Забывают смещение или считают градиент по одному объекту во вложенных циклах там, где можно векторизовать.
На инференсе заново считают среднее и отклонение по новым данным. Модель получает признаки в другой шкале, и прогноз сдвигается.