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

Линейна регресия и методи за нейното възстановяване
Източник: 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