Лисья Нора

Оглавление


§ Странное предисловие

Рано или поздно необходимо проверить как работает тот или иной метод после того как запустили новый эксперимент и получены определенные экспериментальные данные. Конечно, проще всего просто взять линейку и провести длинную линию сквозь весь график и примерно подсчитать середину, но этот метод не очень правильный и потому есть в математике метод, который называется следующим образом:
"Вычисление Линейной Аппроксимации Методом Наименьших Квадратов" [ВЛАМНК]
Не спорю, звучит как что-то ужасное из тёмных глубин Втулху Р'льех Фхтагн, несмотря ни на что, метод не настолько сложный, как могло бы показаться, но всё равно придётся применить МатАн.
Рис 1. Почти "случайное" распределение точек
Рис 1. Почти "случайное" распределение точек
На рисунке 1 изображен синтетический случай подобного, якобы случайного распределения.

§ Метод наименьших квадратов

Существует способ вычислить суммарное отклонение точек от некоторой функции. Допустим, у нас есть набор точек ( x_i, y_i ), и надо рассчитать, насколько они отклоняются от заданной функции, в данном случае, от прямой y = ax + b , где a и b – некоторые коэффициенты, которые как раз и нужно вычислить.
Возьмем просто случайный набор точек для примера (1,5), (2,7), и (3,10), а также возьмем линию с "от балды" взятыми коэффициентами a=1, b=2 (y=1*x+2) и проведем через точки x=1,2,3: (1,3), (2,4), (3,5).
Сопоставляя фактический результат и линейную функцию, получится следующее:
x r | y | разность | квадрат
1 5 | 3 | (5-3) = 2 | 2*2=4
2 7 | 4 | (7-4) = 3 | 3*3=9
3 10 | 5 | (10-5) = 5 | 5*5=25
Реальная r и ожидаемая y позиция достаточно сильно разнятся. Если просуммировать 2+3+5=10, что составляет аж 10 единиц общего отклонения! B 38 единиц квадратного отклонения. Это просто очень много и надо поискать получше значения a и b.
В общем виде формула для оценки отклонения будет следующей:
S(a,b) = \sum_{i=1}^{n} (y_i - (ax_i + b))^2
Как можно догадаться, надо сделать так, чтобы сумма эта стремилась к минимуму. И как это сделать, рассказано будет далее.

§ Вычисление экстремума

Без математического анализа тут просто никак не обойтись. Либо обойтись, но придётся перебирать решения, что совершенно неправильно. Заметим, что вычислить тут надо не одну неизвестную, а две.
В исследованиях функции есть один момент – это экстремум функции. Для того чтобы найти экстремум (точку перегиба функции), надо найти производную, которая сама по себе представляет уровень наклона, то есть, представляет из себя скорость роста в точке. Как известно, если производная равна нулю, то скорость роста в точке, где производная равна нулю, тоже нулевая, что прямо означает то, что именно тут и есть экстремум (либо минимум, либо максимум), который может быть как локальным для сложных функции, так и глобальным, для простых. У нас тут простая функция, так что и экстремум только один и он и локальный и глобальный одновременно.
Однако, надо учесть опять-таки, ищем мы две неизвестные, так что придется взять две частные производные по a и по b и приравнять результат к 0:
\dfrac{d}{da} S(a,b) = 0 и \dfrac{d}{db} S(a,b) = 0
Теперь поэтапно продифференцируем по компонентам a и b. Мы дифференцируем сложную функцию f( g(x) )' = f'(g(x)) g'(x) .
S(a,b)' = \sum ((y_i - ax_i - b)^2)' = \sum 2(y_i - ax_i - b)(-x_i)
S(a,b)' = \sum 2(y_i - ax_i - b)(-1)
В итоге получается система линейных уравнений, но для начала надо вывести все из скобок и за скобки, чтобы привести коэффициенты в порядок.

§ Система линейных уравнений

Почти всё готово для решения уравнения, но сначала надо приравнять их к нулю и записать суммы отдельно.
Приравняем к нулю и удалим лишние двойки, а также сразу перенесем свободные члены уравнения вправо.
В уравнении два неизвестных a и b, которые можно теперь легко найти при помощи метода Крамера, например. Кстати, здесь n – это количество элементов выборки.
Для метода Крамера необходимо подсчитать детерминант, который будет равен следующему:
D = n\sum x_i^2 - (\sum x_i)^2
Сначала, вычислим коэффициент наклона a. Для этого надо столбец со свободными членами подставить в столбец с неизвестным a и снова вычислить детерминант для делимого.
Поскольку у нас уже есть вычисленный наклон a, то вместо нового пересчета b можно воспользоваться подстановкой:
Могу сказать, что хоть решение и существует, причем почти всегда, но считать и пересчитывать эту аппроксимацию на счётах не так уж и просто. Нужно доверить это дело компьютеру, пусть считает.

§ Особая ситуация

Представим что x_i всегда один и тот же, то есть вся точки лежат только по оси Y. В этом случае детерминант вырождается в 0, и решения не может быть найдено, так как угол наклона a становится бесконечным. В этом случае мы имеем дело с вырожденным набором, и тогда, чтобы найти хоть какое-то значение, достаточно взять a равным нулю и получится что b станет равным обычным средним арифметическим:
Такие дела... Но только это не решение и не аппроксимация. Это отдельный случай.