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

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

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

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

За какво говорим?

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

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

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

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

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

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

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

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

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

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

Нека сега заместим вместо това Линейна регресия и методи за нейното възстановяване и Линейна регресия и методи за нейното възстановяване Променливите, от които се нуждаем, са:

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

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

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

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

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

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

QR разлагане

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

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

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

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

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

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

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

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

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

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

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

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

градиентно спускане

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

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

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

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

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

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

LSQR

LSQR е друг метод за решаване на проблема, който е подходящ както за възстановяване на линейна регресия, така и за решаване на системи от линейни уравнения. Основната му характеристика е, че съчетава предимствата на матричните методи и итеративния подход. Реализациите на този метод могат да бъдат намерени и в двете библиотеки SciPy, и в MATLAB. Тук няма да бъде дадено описание на този метод (може да бъде намерено в статията LSQR: Алгоритъм за разредени линейни уравнения и разредени най-малки квадрати). Вместо това ще бъде демонстриран подход за адаптиране на LSQR към изпълнение в разпределена среда.

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

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

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

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

Заключение

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

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

Добавяне на нов коментар