Лінійна регресія та методи її відновлення

Лінійна регресія та методи її відновлення
Джерело: xkcd

Лінійна регресія одна із базових алгоритмів багатьом галузей, що з аналізом даних. Причина цього очевидна. Це дуже простий і зрозумілий алгоритм, що сприяє його широкому застосуванню вже багато десятків, якщо не сотні років. Ідея у тому, що ми припускаємо лінійну залежність однієї змінної від набору інших змінних, та був намагаємося цю залежність відновити.

Але в цій статті не піде мова про застосування лінійної регресії для вирішення практичних завдань. Тут будуть розглянуті цікаві особливості реалізації розподілених алгоритмів її відновлення, з якими ми зіткнулися при написанні модуля машинного навчання Apache Ignite. Дещо базової математики, основ машинного навчання та розподілених обчислень допоможуть розібратися, як відновлювати лінійну регресію, навіть якщо дані розподілені між тисячами вузлів.

Про що мова?

Перед нами стоїть завдання відновлення лінійної залежності. Як вхідні дані дається безліч векторів імовірно незалежних змінних, кожному з яких ставиться у відповідність деяке значення залежної змінної. Ці дані можна подати у вигляді двох матриць:

Лінійна регресія та методи її відновлення

Тепер, якщо вже передбачається залежність, та ще й лінійна, запишемо наше припущення у вигляді твору матриць (для спрощення запису тут і далі передбачається, що вільний член рівняння ховається за Лінійна регресія та методи її відновлення, а останній стовпець матриці Лінійна регресія та методи її відновлення містить одиниці):

Лінійна регресія та методи її відновлення

Дуже схоже на систему лінійних рівнянь, чи не так? Схоже, але рішень такої системи рівнянь швидше за все не буде. Причиною тому є шум, який є практично в будь-яких реальних даних. Так само причиною може бути відсутність лінійної залежності як такої, з якою можна намагатися боротися запровадженням додаткових змінних, які нелінійно залежать від вихідних. Розглянемо наступний приклад:
Лінійна регресія та методи її відновлення
Джерело: Вікіпедія

Це простий приклад лінійної регресії, який демонструє залежність однієї змінної (осі Лінійна регресія та методи її відновлення) від іншої змінної (по осі Лінійна регресія та методи її відновлення). Щоб відповідна даному прикладу система лінійних рівнянь мала розв'язання, всі точки повинні лежати точно на одній прямій. Але це не так. А не лежать вони на одній прямій саме через шум (або через те, що припущення про наявність лінійної залежності було помилковим). Таким чином, щоб відновити лінійну залежність за реальними даними, зазвичай потрібно ввести ще одне припущення: вхідні дані містять шум і цей шум має нормальний розподіл. Можна робити припущення і про інші типи розподілу шуму, але в переважній більшості випадків розглядають саме нормальний розподіл, про який далі йтиметься.

Метод максимальної правдоподібності

Отже, ми припустили наявність випадкового розподіленого шуму. Як же бути у такій ситуації? На цей випадок у математиці існує і широко використовується метод максимальної правдоподібності. Якщо коротко, його суть полягає у виборі функції правдоподібності та наступної її максимізації.

Повертаємося до відновлення лінійної залежності за даними із нормальним шумом. Зауважимо, що передбачувана лінійна залежність є математичним очікуванням Лінійна регресія та методи її відновлення наявного нормального розподілу. У той же час, ймовірність того, що Лінійна регресія та методи її відновлення приймає те чи інше значення, за умови наявності спостережуваних Лінійна регресія та методи її відновлення, виглядає наступним чином:

Лінійна регресія та методи її відновлення

Підставимо тепер замість Лінійна регресія та методи її відновлення и Лінійна регресія та методи її відновлення потрібні нам змінні:

Лінійна регресія та методи її відновлення

Залишилось тільки знайти вектор Лінійна регресія та методи її відновлення, у якому ця ймовірність максимальна. Щоб максимізувати таку функцію зручно спочатку її прологарифмувати (логарифм функції досягатиме максимуму в тій самій точці, що й сама функція):

Лінійна регресія та методи її відновлення

Що, у свою чергу, зводиться до мінімізації наступної функції:

Лінійна регресія та методи її відновлення

До речі, це називається методом найменших квадратів. Найчастіше всі наведені вище міркування опускаються і використовується цей метод.

QR розкладання

Мінімум наведеної вище функції можна знайти, якщо знайти точку в якій градієнт цієї функції дорівнює нулю. А градієнт буде записаний так:

Лінійна регресія та методи її відновлення

QR розкладання є матричним методом вирішення задачі мінімізації, що використовується в методі найменших квадратів. У зв'язку з цим перепишемо рівняння у матричній формі:

Лінійна регресія та методи її відновлення

Отже, ми розкладаємо матрицю Лінійна регресія та методи її відновлення на матриці Лінійна регресія та методи її відновлення и Лінійна регресія та методи її відновлення і виконуємо ряд перетворень (сам алгоритм QR розкладання тут розглядатися не буде, тільки його використання стосовно поставленого завдання):

Лінійна регресія та методи її відновлення

матриця Лінійна регресія та методи її відновлення є ортогональною. Це дозволяє нам позбутися твору Лінійна регресія та методи її відновлення:

Лінійна регресія та методи її відновлення

А якщо замінити Лінійна регресія та методи її відновлення на Лінійна регресія та методи її відновлення, то вийде Лінійна регресія та методи її відновлення. Враховуючи що Лінійна регресія та методи її відновлення є верхньою трикутною матрицею, виглядає це так:

Лінійна регресія та методи її відновлення

Це можна вирішувати шляхом підстановки. Елемент Лінійна регресія та методи її відновлення знаходиться як Лінійна регресія та методи її відновлення, попередній елемент Лінійна регресія та методи її відновлення знаходиться як Лінійна регресія та методи її відновлення і так далі.

Тут варто зазначити, що складність алгоритму, що вийшов за рахунок використання QR розкладання, дорівнює Лінійна регресія та методи її відновлення. При цьому, незважаючи на те, що операція множення матриць добре розпаралелюється, написати ефективну розподілену версію цього алгоритму неможливо.

Градієнтний спуск

Говорячи про мінімізацію деякої функції, завжди варто згадувати метод (стохастичного) градієнтного спуску. Це простий та ефективний метод мінімізації, заснований на ітеративному обчисленні градієнта функції у точці та подальшому її зміщенні у бік, протилежний градієнту. Кожен такий крок наближає рішення до мінімуму. Градієнт при цьому виглядає так само:

Лінійна регресія та методи її відновлення

Ще цей метод добре розпаралелюється і розподіляється за рахунок лінійних властивостей оператора градієнта. Зауважимо, що у наведеній вище формулі під знаком суми знаходяться незалежні доданки. Іншими словами, ми можемо порахувати градієнт незалежно для всіх індексів Лінійна регресія та методи її відновлення з першого до Лінійна регресія та методи її відновлення, паралельно з цим порахувати градієнт для індексів з Лінійна регресія та методи її відновлення до Лінійна регресія та методи її відновлення. Потім скласти градієнти. Результатом додавання буде таким самим, якби ми порахували відразу градієнт для індексів з першого до Лінійна регресія та методи її відновлення. Таким чином, якщо дані розподілені між декількома частинами даних, градієнт може бути обчислений незалежно на кожній частині, а потім результати цих обчислень можуть бути підсумовані для отримання остаточного результату:

Лінійна регресія та методи її відновлення

З погляду реалізації, це вкладається в парадигму MapReduce. На кожному кроці градієнтного спуску на кожен вузол даних відправляється завдання на обчислення градієнта, потім обчислені градієнти збираються разом, і результат підсумовування використовується для поліпшення результату.

Незважаючи на простоту реалізації та можливість виконання в парадигмі MapReduce градієнтний спуск має і свої недоліки. Зокрема, кількість кроків, необхідне досягнення збіжності, значно більше проти іншими більш спеціалізованими методами.

LSQR

LSQR — ще один метод розв'язання поставленого завдання, який підходить як для відновлення лінійної регресії, так і для розв'язання систем лінійних рівнянь. Його головна особливість полягає в тому, що він поєднує у собі переваги матричних методів та ітеративного підходу. Реалізації цього можна знайти як у бібліотеки SciPy, Так і в MATLAB. Опис цього методу наводитися тут не буде (його можна знайти у статті LSQR: An algoritm for sparse linear equations and sparse least squares). Натомість буде продемонстровано підхід, що дозволяє адаптувати LSQR до виконання у розподіленому середовищі.

В основі методу LSQR лежить процедура бідіагоналізації. Це ітеративна процедура, кожна ітерація якої складається з наступних кроків:
Лінійна регресія та методи її відновлення

Але якщо виходити з того, що матриця Лінійна регресія та методи її відновлення горизонтально партизована, то кожну ітерацію можна представити у вигляді двох кроків MapReduce. Таким чином вдається мінімізувати пересилання даних під час кожної з ітерацій (тільки вектора довжиною, що дорівнює кількості невідомих):

Лінійна регресія та методи її відновлення

Саме цей підхід використовується при реалізації лінійної регресії в Apache Ignite ML.

Висновок

Існує багато алгоритмів відновлення лінійної регресії, але не всі можуть застосовуватися в будь-яких умовах. Так QR розкладання чудово підходить для точного рішення на невеликих масивах даних. Градієнтний спуск реалізується і дозволяє швидко знайти наближене рішення. А LSQR поєднує в собі найкращі властивості попередніх двох алгоритмів, так як він може бути розподілений, швидше сходиться в порівнянні з градієнтним спуском, а також дозволяє ранню зупинку алгоритму на відміну від QR-розкладання для пошуку наближеного рішення.

Джерело: habr.com

Додати коментар або відгук