Линейна регресия и методи за нейното възстановяване

Линейна регресия и методи за нейното възстановяване
Източник: xkcd

Линейната регресия е един от основните алгоритми за много области, свързани с анализа на данни. Причината за това е очевидна. Това е много прост и очевиден алгоритъм, което допринася за широко му приложение вече много десетилетия, ако не и стотици години. Идеята е, че предполагаме линейна зависимост на една променлива от набор от други променливи и след това се опитваме да възстановим тази зависимост.

Но в тази статия няма да говорим за прилагането на линейната регресия за решаване на практически задачи. Тук ще разгледаме интересни особености на реализацията на разпределени алгоритми за нейното възстановяване, с които се сблъскахме при написването на модула за машинно обучение в Apache Ignite. Малко базова математика, основи на машинното обучение и разпределени изчисления ще помогнат да разберем как да възстановим линейната регресия, дори ако данните са разпределени между хиляди възли.

За какво става дума?

Имаме задача за възстановяване на линейна зависимост. Като входни данни получаваме множество вектори на предполагаемо независими променливи, на които се съответства определена стойност на зависимата променлива. Тези данни могат да бъдат представени под формата на две матрици:

Линейна регресия и методи за нейното възстановяване

Сега, след като се предполага зависимост, и то линейна, да запишем нашето предположение под формата на произведение на матрици (за опростяване на записа тук и по-нататък се предполага, че свободният член на уравнението е скрит зад Линейна регресия и методи за нейното възстановяване, а последният стълб на матрицата Линейна регресия и методи за нейното възстановяване съдържа единици):

Линейна регресия и методи за нейното възстановяване

Много прилича на система от линейни уравнения, нали? Изглежда, но вероятно такава система уравнения няма да има решения. Причината за това е шумът, който присъства практически във всички реални данни. Другата причина може да бъде отсъствието на линейна зависимост като такава, с която можем да се опитаме да се справим, като въведем допълнителни променливи, които нелинейно зависят от изходните. Нека разгледаме следния пример:
Линейна регресия и методи за нейното възстановяване
Източник: Wikipedia

Това е прост пример за линейна регресия, който демонстрира зависимостта на една променлива (по оста Линейна регресия и методи за нейното възстановяване) от друга променлива (по оста Линейна регресия и методи за нейното възстановяване). За да има система от линейни уравнения решение, всички точки трябва да лежат точно на една права. Но това не е така. А те не лежат на една права именно заради шума (или заради това, че предположението за наличие на линейна зависимост е било погрешно). Така че, за да възстановим линейната зависимост по реални данни обикновено е необходимо да въведем още едно предположение: входните данни съдържат шум и този шум има нормално разпределение. Могат да бъдат правени предположения и за други видове разпределение на шума, но в подавляващата част от случаите се разглежда именно нормалното разпределение, за което по-нататък ще става дума.

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

И така, предположихме наличие на случайно нормально разпределен шум. Как да действаме в такава ситуация? За този случай в математиката съществува и широко се използва метод на максимално правдоподобие. В обобщение, сутьта му е в избора на функция на правдоподобие и последващото и максимизиране.

Връщаме се към възстановяването на линейната зависимост по данни с нормален шум. Нека отбележим, че предполагаемата линейна зависимост е математическото очакване Линейна регресия и методи за нейното възстановяване на наличното нормально разпределение. В същото време, вероятността, че Линейна регресия и методи за нейното възстановяване приема някаква стойност, при условие, че има наблюдавани Линейна регресия и методи за нейното възстановяване, изглежда по следния начин:

Линейна регресия и методи за нейното възстановяване

Сега да поставим на мястото на Линейна регресия и методи за нейното възстановяване и Линейна регресия и методи за нейното възстановяване нужните ни променливи:

Линейна регресия и методи за нейното възстановяване

Остана само да намерим вектор Линейна регресия и методи за нейното възстановяване, при който тази вероятност е максимална. За да максимизираме такава функция е удобно първо да я прологарим (логаритъмът на функцията ще достига максимум в същата точка, както и самата функция):

Линейна регресия и методи за нейното възстановяване

Което от своя страна се свежда до минимизиране на следната функция:

Линейна регресия и методи за нейното възстановяване

Между другото, това се нарича метод на най-малки квадрати. Често всички горепосочени разсъждения се пропускат и просто се използва този метод.

QR разлагане

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

Линейна регресия и методи за нейното възстановяване

QR разлагане е матричен метод за решаване на задача за минимизиране, използван в метода на най-малките квадрати. Във връзка с това да запишем уравнението в матрична форма:

Линейна регресия и методи за нейното възстановяване

И така, разлагаме матрицата Линейна регресия и методи за нейното възстановяване на матрици Линейна регресия и методи за нейното възстановяване и Линейна регресия и методи за нейното възстановяване и извършваме редица преобразувания (самият алгоритъм за QR разлагане няма да бъде разгледан тук, само неговото приложение към поставената задача):

Линейна регресия и методи за нейното възстановяване

Матрицата Линейна регресия и методи за нейното възстановяване е ортогонална. Това ни позволява да се отървем от произведението Линейна регресия и методи за нейното възстановяване:

Линейна регресия и методи за нейното възстановяване

А ако замените Линейна регресия и методи за нейното възстановяване на Линейна регресия и методи за нейното възстановяване, тогава ще получите Линейна регресия и методи за нейното възстановяване. Като се има предвид, че Линейна регресия и методи за нейното възстановяване е горна триъгълна матрица, това изглежда по следния начин:

Линейна регресия и методи за нейното възстановяване

Това може да се реши чрез метода на подстановката. Елементът Линейна регресия и методи за нейното възстановяване се намира като Линейна регресия и методи за нейното възстановяване, предходният елемент Линейна регресия и методи за нейното възстановяване се намира като Линейна регресия и методи за нейното възстановяване и така нататък.

Тук следва да се отбележи, че сложността на получения алгоритъм благодарение на използването на QR разлагането е Линейна регресия и методи за нейното възстановяване. Въпреки че операцията по умножение на матрици се разпаралелизира добре, написването на ефективна разпределена версия на този алгоритъм не е възможно.

Градиентен спуск

Когато става въпрос за минимизиране на определена функция, винаги трябва да се припомня методът (стохастически) градиентен спуск. Това е прост и ефективен метод на минимизиране, основан на итеративното изчисление на градиента на функцията в точка и последващото ѝ изместване в посока, противоположна на градиента. Всеки такъв ход приближава решението до минимума. Градиентът изглежда все така:

Линейна регресия и методи за нейното възстановяване

Този метод също така добре се разпаралелизира и разпределя благодарение на линейните свойства на оператора градиент. Забележете, че в горната формула под знака на сумата се намират независими съставки. С други думи, можем да изчислим градиента независимо за всички индекси Линейна регресия и методи за нейното възстановяване от първия до Линейна регресия и методи за нейното възстановяване, паралелно с това може да се изчисли градиентът за индексите от Линейна регресия и методи за нейното възстановяване до Линейна регресия и методи за нейното възстановяване. След това да се съберат получените градиенти. Резултатът от събирането ще бъде същият, както ако бяхме изчислили веднага градиента за индексите от първия до Линейна регресия и методи за нейното възстановяване. Така, ако данните са разпределени между няколко части данни, градиентът може да бъде изчислен независимо за всяка част, а след това резултатите от тези изчисления могат да бъдат събрани за получаване на окончателния резултат:

Линейна регресия и методи за нейното възстановяване

От гледна точка на реализацията, това е в парадигмата MapReduce. На всяка стъпка на градиентния спуск се изпраща задача за изчисление на градиента на всеки узел от данните, след което изчислените градиенти се събират заедно, а резултатът от тяхното събиране се използва за подобряване на резултата.

Въпреки простотата на реализацията и възможността за изпълнение в парадигмата MapReduce, градиентният спуск има и свои недостатъци. В частност, броят на стъпките, необходими за достигане на съвместимост, е значително по-висок в сравнение с други по-специализирани методи.

LSQR

LSQR — още един метод за решаване на поставената задача, който е подходящ както за възстановяване на линейна регресия, така и за решаване на системи от линейни уравнения. Неговата главна особеност е, че комбинира предимствата на матричните методи и итеративния подход. Реализациите на този метод могат да бъдат намерени както в библиотеките SciPy, така и в MATLAB. Описанието на този метод няма да бъде приведено тук (може да бъде намерено в статията LSQR: An algorithm for sparse linear equations and sparse least squares). Вместо това ще бъде демонстриран подход, който позволява адаптиране на LSQR за изпълнение в разпределена среда.

В основата на метода LSQR стои процедурата бидиагонализация. Това е итеративна процедура, всяка итерация от която се състои от следните стъпки:
Линейна регресия и методи за нейното възстановяване

Но ако вземем предвид, че матрицата Линейна регресия и методи за нейното възстановяване е хоризонтално партиционирана, то всяка итерация може да бъде представена под формата на две стъпки от MapReduce. По този начин успяваме да минимизираме прехвърлянето на данни по време на всяка от итерациите (само вектори с дължина, равна на броя на неизвестните):

Линейна регресия и методи за нейното възстановяване

Този подход се използва при реализирането на линейна регресия в Apache Ignite ML.

Заключение

Съществуват много алгоритми за възстановяване на линейната регресия, но не всички от тях могат да бъдат приложени при всякакви условия. Например, QR разлагането е отлично за точно решение на малки масиви от данни. Градиентният спуск се реализира лесно и позволява бързо намиране на приближено решение. А LSQR комбинира най-добрите свойства на предходните два алгоритма, тъй като може да бъде разпределен, по-бързо събира в сравнение с градиентния спуск, а също така позволява ранно спиране на алгоритъма в отличие от QR-разлагането при търсенето на приближено решение.

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster