Одномерная линейная регрессия — один из самых простых регрессионных методов (и вообще один из самых простых методов машинного обучения), который позволяет описывать линейную зависимость наблюдаемой величины от одного из признаков. В общем случае в задачах машинного обучения приходится сталкиваться с большим количеством различных признаков; одномерная линейная регрессия в таком случае выбирает тот из них, который позволяет добиться наилучшей корреляции с целевой функцией. В предыдущем посте из этой серии мы обсудили точность вычислений средних и ковариаций, а также познакомились с методом Уэлфорда, который во многих случаях позволяет избежать вычислительных погрешностей в этих задачах. Сегодня мы рассмотрим практическое применение метода Уэлфорда в задаче одномерной линейной регрессии.  В задаче одномерной линейной регрессии мы предполагаем, что имеются две последовательности вещественных чисел: признаки  и ответы . Кроме того, имеется вектор соответствующих весов . Как и всегда, мы будем предполагать, что эти последовательности содержат потенциально бесконечное количество элементов, но на данный момент рассмотрены только  первых элементов каждой из последовательностей. Нашей задачей будет восстановить линейную зависимость между признаками и ответами, то есть, построить линейную решающую функцию :   При этом минимизируется среднеквадратичный функционал потерь:   Для анализа проще работать с формулой, свободной от радикала и нормировки:   Поскольку точки минимума для функционалов  и  совпадают, такая замена корректна. Для функционала потерь  легко записать производные по  и :     Если приравнять их к нулю, получим:       Важное отступление. Приравнивание производной нулю в данном случае корректно, т.к.:
1. Функционал потерь является выпуклым по оптимизируемым параметрам, поэтому любая точка локального оптимума будет также точкой глобального оптимума.
2. Функционал потерь по оптимизируемым параметрам представляет собой параболу, поэтому найденные экстремальные точки будут точками минимума. Если бы оптимальный параметр  равнялся нулю, найти решение не составило бы труда. Можно заметить, что центрирование, стандартный для машинного обучения способ предобработки выборки, приводит именно к этому эффекту. Действительно, рассмотрим задачу для центрированных переменных:     Сумма взвешенных признаков теперь равняется нулю, так же, как и сумма взвешенных ответов:     Тогда оптимальное значение свободного параметра равняется нулю:   А это значит, что и оптимальное значение параметра  найти легко:   Теперь давайте попробуем вернуться к общему случаю нецентрированных данных. Если  — решающая функция для центрированного случая, значения которой определяются формулой   и приближают величину , то следующая решающая функция аппроксимирует уже величину :   Поэтому решение изначальной задачи одномерной линейной регрессии можно записать следующим образом:     Здесь мы используем введенное в прошлой статье обозначение для взвешенного среднего:     Можно понять, что такой переход корректен, еще одним способом. Если решение для центрированных данных оптимально, то параметры  и  доставляют минимум функционалу потерь :   Произведём теперь замену переменных, вернувшись к нецентрированным данным:     Получившееся выражение описывает значение функционала потерь  для несмещённых данных в соответствии с формулами для  и , которые мы получили выше. Значение функционала при этом достигает минимума, следовательно, задача решена корректно! Теперь заметим, что при вычислении параметра  используются те самые ковариации, вычислением которых мы занимались в предыдущей статье. В самом деле, используя обозначения из неё, можно записать:   Это значит, что для вычисления коэффициента регрессии требуется два раза вычислить ковариации при помощи метода Уэлфорда. В процессе этих вычислений мы одновременно найдём и средние величины, необходимые для вычисления свободного коэффициента регрессии. Код для добавления очередного элемента в выборку состоит из обновления средних и дисперсий для признаков и ответов, а также ковариации между признаками и ответами: А так выглядит метод, который решает задачу нахождения оптимальных параметров одномерной линейной регрессии после добавления всех элементов: Величина GoalsDeviation здесь не используется, но она потребуется нам в дальнейших статьях. Объединение всех вычислений в рамках одного класса позволяет избежать некоторых накладных расходов. Скажем, если бы в реализации использовались два объекта для хранения средних и три объекта для хранения ковариаций (признаки с признаками, ответы с ответами, признаки с ответами), то сумма весов обновлялась бы пять раз для каждого примера из выборки. Для практического сравнения я написал программу, в которой реализуются различные способы решения задач одномерной и многомерной линейной регрессии. О многомерной регрессии речь пойдёт в следующих статьях, а сейчас сосредоточимся на одномерном случае. Сравнивать будем, как обычно, "наивные" методы, методы, основанные на суммировании методом Кэхэна, и методы, основанные на методе Уэлфорда. "Наивные" методы непосредственно применяют формулы для вычисления ковариаций: Класс является шаблонным и имеет специализации со счетчиками типа double и типа TKahanAccumulator. Кроме того, реализован класс TTypedBestSLRSolver, который выбирает лучший из признаков для построения одномерной регрессионной модели. Делается это очень просто: задача одномерной линейной регрессии решается для каждого из признаков, а затем выбирается лучшая из получившихся моделей. Для проверки разработанных методов воспользуемся модельными данными из коллекции LIAC. Некоторые из наборов данных для удобства помещены в директорию data в формате, который понимает написанная программа. Данные в задачах "портятся" простым способом: значения признаков и ответов умножаются на некоторое число, после чего к ним прибавляется некоторое другое число. Таким образом мы можем получить проблемный с точки зрения вычислений случай: большие средние значения по сравнению с величинами разбросов. В режиме research-bslr выборка изменяется несколько раз подряд, и каждый раз на ней запускается процедура скользящего контроля. Результатом проверки является среднее значение коэффициента детерминации для тестовых выборок. Например, для выборки kin8nm результаты работы получаются следующими: В данном случае уменьшение всех значений в выборке в 10 тысяч раз вместе с одновременным добавлением к ним величины в 10000 приводит к неработоспособности стандартного алгоритма, даже при использовании суммирования по методу Кэхэна. Аналогичные результаты получаются и на других выборках, в том числе и тех из них, что встречаются в реальной жизни в продакшене. Итак, сегодня мы поговорили о задаче одномерной линейной регрессии, разобрались с тем, как получаются аналитические решения в этой задаче и как использовать метод Уэлфорда для нахождения решений. Метод Уэлфорда делает решение задачи существенно более устойчивым к возможным проблемам в данных. Однако, этот метод оказывается в 2-4 раза медленнее стандартного алгоритма, поэтому на практике нужно решить для себя, что в данный момент важнее — не зависеть от возможных проблем в данных или работать максимально быстро. Если же есть необходимость много раз строить модели на различных данных и нет возможности контролировать качество каждой полученной модели, я бы рекомендовал использовать метод Уэлфорда. В следующей статье мы поговорим о применении метода Уэлфорда для решения задачи многомерной линейной регрессии.