Градиент

testMath.md

# Доказательство линейности МНК для линейной комбинации функций Дана функция $f(x) = a_1 f_1(x) + a_2 f_2(x) + \ldots + a_n f_n(x)$ Где $a_1, a_2 \ldots , a_n$ - параметры, а $f_1, f_2 \ldots , f_n$ - произвольные функции. *В дальшейнем я буду называть такую функцию **линейной*** Задача в том, что бы найти линейный алгоритм решения для минимизации отклонения функции $f(x)$ от дискретных данных используя метод наименьших квадратов. Метод наименьших квадратов заключается в минимизации суммы: $$\sum_{i=1}^{k} (y_i - f(x_i))^2$$ Эта сумма для фиксированного набора точек будет зависить только от выбранных параметров, можно написать: $$F(a_1, a_2, \ldots , a_n) = \sum_{i=1}^{k} (y_i - f(x_i))^2$$ Задача сводится к минимизации функции нескольких переменных $F$, поэтому можно применить необходимый признак экстремума для нахождения её минимума, а для этого нужно найти все частные производные по аргументам, в целом не составит труда найти производную в общем виде: $$F'_{a_j} = (\sum_{i=1}^{k} (y_i - f(x_i))^2)' = 0$$ По свойствам производной заносим её в сумму, и дифференцируем квадрат $$\sum_{i=1}^{k} 2 * (y_i - f(x_i)) * (y_i - f(x_i))' = 0$$ $y_i$ - постоянный множитель при дифференцировании + выносим двойку за сумму и сокращаем $$\sum_{i=1}^{k} (y_i - f(x_i)) * (-f'_{a_j}(x_i)) = 0$$ Производная функции $f$ по произвольному $a_n$ очень простая: $$f'_{a_j}(x) = f_j(x)$$ Подставляем и раскрываем скобки $$\sum_{i=1}^{k} (y_i - f(x_i)) * (-f_j(x_i))= 0$$ $$\sum_{i=1}^{k} (f(x_i) * f_j(x_i) - y_i * f_j(x_i))= 0$$ Распределяем суммы и переносим сумму с игреком $$\sum_{i=1}^{k} f(x_i) * f_j(x_i) = \sum_{i=1}^{k} y_i * f_j(x_i)$$ Тепер вместо $f(x_i)$ напишем раскрытый вид начальной функции $$\sum_{i=1}^{k} (a_1 f_1(x_i) + a_2 f_2(x_i) + \ldots) * f_j(x_i) = \sum_{i=1}^{k} y_i * f_j(x_i)$$ Опять перераспределим суммы $$\sum_{i=1}^{k} a_1 f_1(x_i) * f_j(x_i) + \sum_{i=1}^{k} a_2 f_2(x_i) * f_j(x_i) + \ldots + \sum_{i=1}^{k} a_n f_n(x_i) * f_j(x_i) = \sum_{i=1}^{k} y_i * f_j(x_i)$$ Вынесем коефициенты $a$ за суммы $$a_1 \sum_{i=1}^{k} f_1(x_i) * f_j(x_i) + a_2 \sum_{i=1}^{k} f_2(x_i) * f_j(x_i) + \ldots + a_n \sum_{i=1}^{k}f_n(x_i) * f_j(x_i) = \sum_{i=1}^{k} y_i * f_j(x_i)$$ В итоге мы получили общее выражение для частной производной функции. Теперь можно записать все частные производные для необходимого признака экстремума ввиде системы. $$ \begin{cases} a_1 \sum_{i=1}^{k} f_1(x_i) * f_1(x_i) + a_2 \sum_{i=1}^{k} f_2(x_i) * f_1(x_i) + \ldots + a_n \sum_{i=1}^{k}f_n(x_i) * f_1(x_i) = \sum_{i=1}^{k} y_i * f_1(x_i) \\ a_1 \sum_{i=1}^{k} f_1(x_i) * f_2(x_i) + a_2 \sum_{i=1}^{k} f_2(x_i) * f_2(x_i) + \ldots + a_n \sum_{i=1}^{k}f_n(x_i) * f_2(x_i) = \sum_{i=1}^{k} y_i * f_2(x_i) \\ \vdots \\ a_1 \sum_{i=1}^{k} f_1(x_i) * f_n(x_i) + a_2 \sum_{i=1}^{k} f_2(x_i) * f_n(x_i) + \ldots + a_n \sum_{i=1}^{k}f_n(x_i) * f_n(x_i) = \sum_{i=1}^{k} y_i * f_n(x_i) \end{cases} $$ Теперь видно что эту систему можно представить как матричное умножение $$AX=B$$ Где $$A= \begin{pmatrix} \sum_{i=1}^{k} f_1(x_i) * f_1(x_i) & \sum_{i=1}^{k} f_2(x_i) * f_1(x_i) & \ldots & \sum_{i=1}^{k} f_n(x_i) * f_1(x_i)\\ \sum_{i=1}^{k} f_1(x_i) * f_2(x_i) & \sum_{i=1}^{k} f_2(x_i) * f_2(x_i) & \ldots & \sum_{i=1}^{k} f_n(x_i) * f_2(x_i)\\ \vdots &\vdots & \ddots & \vdots \\ \sum_{i=1}^{k} f_1(x_i) * f_n(x_i) & \sum_{i=1}^{k} f_2(x_i) * f_n(x_i) & \ldots & \sum_{i=1}^{k} f_n(x_i) * f_n(x_i)\\ \end{pmatrix}$$ *проще говоря, $A_{ij} = \sum_{i=1}^{k} f_i(x_i) * f_j(x_i)$* $$B= \begin{pmatrix} \sum_{i=1}^{k} y_i * f_1(x_i) \\ \sum_{i=1}^{k} y_i * f_2(x_i) \\ \vdots \\ \sum_{i=1}^{k} y_i * f_n(x_i) \\ \end{pmatrix}$$ *проще говоря, $B_{i} = \sum_{i=1}^{k} y_i * f_i(x_i)$* $$X= \begin{pmatrix} a_1 \\ a_2 \\ \vdots \\ a_n \\ \end{pmatrix}$$ $X$ - вектор переменных, которые нам и нужно найти, просто решив матричное уравление. Таким образом, любую функцию такого вида(или приводимую к такому виду) можно минимизировать с помощью линейного МНК, только вычислив систему линейных уравнений. ## Обобщение с $y$ Были рассмотрены линейные функции вида $y = a_1 f_1(x) + a_2 f_2(x) + \ldots + a_n f_n(x)$, но для линейного МНК не обязательно выражать функцию через чистый $y$, зависимости вроде $g(y) = \ldots$ тоже можно линейно минимизировать, просто заменив применив функцию $g$ к $y$ координатам точек. Поменяется лишь свободный вектор $B$: $$B= \begin{pmatrix} \sum_{i=1}^{k} y_i * f_1(x_i) \\ \sum_{i=1}^{k} y_i * f_2(x_i) \\ \vdots \\ \sum_{i=1}^{k} y_i * f_n(x_i) \\ \end{pmatrix} \rightarrow \begin{pmatrix} \sum_{i=1}^{k} g(y_i) * f_1(x_i) \\ \sum_{i=1}^{k} g(y_i) * f_2(x_i) \\ \vdots \\ \sum_{i=1}^{k} g(y_i) * f_n(x_i) \\ \end{pmatrix}$$ Такие зависимости сами по себе нет смысла минимизировать. Но есть нелинейные сложные функции, которые можно будет свести к линейным. *Следуя той же логике можно обобщить линейность МНК до функций типа* $$g(x,y) = a_1 f_1(x,y) + a_2 f_2(x,y) + \ldots + a_n f_n(x,y)$$ *где каждый одночлен зависит от $x$ и $y$ одновременно* ## Примеры ### Экспоненциальная функция $$y = b * e^{ax}$$ Для приведения этой функции к линейной, достаточно прологарифмировать левую и правую части. $$\ln(y) = \ln(b * e^{ax})$$ $$\ln(y) = \ln(e^{ax}) + \ln(b)$$ $$\ln(y) = ax + \ln(b)$$ Эту зависимость уже можно минимизировать, сделав замену $b_1 = ln(b)$ $$\ln(y) = ax + b_1$$ Потом выразить оригинальные параметры через обратную замену *(В данном случае $b = e^{b_1}$)* ### Синусоида $$y = a\sin(Kx + b) + c$$ Можно раскрыть синус суммы: $$y = a (\sin(Kx)\cos(b) + \cos(Kx)\sin(b)) + c$$ $$y = a \cos(b) * \sin(Kx) + a \sin(b) * \cos(Kx) + c$$ Сделав замену $$a_1 = a\cos(b); a_2 = a \sin(b)$$ Получим выражение: $$y = a_1 * \sin(Kx) + a_2 * \cos(Kx) + c$$ После линейного МНК, выражаем оригинальные $a$ и $b$: $$a = \sqrt{a_1^2 + a_2^2}$$ $$b = \mathrm{arctg} (a_2/a_1)$$ ### Сложная экспонента $$y = e^{f(x)}$$ Для примера можно принять функцию $y = e^{ax^2 + bx + c}$, хотя такой подход применим к любым подобным функциям, где в показателе любое линейное выражение. Для приведения функции к линейной достаточно просто прологарифмировать: $$\ln y = \ln(e^{ax^2 + bx + c})$$ $$\ln y = ax^2 + bx + c$$ Даже параметры выражать не нужно. ### Степенная функция $$y = b * x^a$$ Опять достаточно будет только прологарифмировать: $$\ln y = \ln (b x^a)$$ $$\ln y = a \ln(x) + b$$ Это отличается от экспоненты тем, что получается функция от $\ln x$, а не от простого $x$ ### Гипербола $$y = \frac{a}{x + b}$$ Гипербола такого вида может быть преобразована умножением обоих частей на $x + b$ $$(x+b)y = a$$ $$xy+by = a$$ $$xy = a - by$$ *Тут можно и закончить, потому что выражение линейно относительно $(x,y)$, но можно разделить на $y$ и получить еще более простой вид* $$x = \frac{a}{y} - b$$