Краткий ответ:
Да, параллельная регрессия запущена. Например, Xiangrui Meng et al. (2016) для машинного обучения в Apache Spark. Как это работает, использует стохастический градиентный спуск (SGD). В разделе 3, основные функции, автор упомянул:
Обобщенные линейные модели изучаются с помощью алгоритмов оптимизации, которые распараллеливают вычисления градиента, используя быстрые библиотеки линейной алгебры на основе C ++ для рабочих вычислений.
Пример того, как работает SGD, можно найти в моем ответе здесь: Как стохастический градиентный спуск может сэкономить время по сравнению со стандартным градиентным спуском?
Длинный ответ:
Обратите внимание, что запись не соответствует предоставленной мной ссылке, я чувствую, что матричная запись лучше в этом вопросе.
Чтобы сделать линейную регрессию, мы пытаемся сделать
минимизировать ∥ X β- у∥2
Производная
2 хT( Хβ- у)
В небольших настройках данных мы можем установить производную на и решить ее напрямую. (например, QR-разложение в R.) При больших настройках данных матрица данных слишком велика, чтобы ее можно было сохранить в памяти, и ее может быть сложно решить напрямую. (Я не знаю, как сделать QR-разложение или разложение Холецкого для огромных матриц).0Икс
Одним из способов распараллеливания этого является попытка использовать итерационный метод: стохастический градиентный спуск, где мы можем аппроксимировать градиент, используя подмножество данных. (Если мы используем , для представления подмножества данных, градиент может быть аппроксимирован , и мы можем обновить с помощью аппроксимированного градиента).ИксsYs2 хTs( Хsβ- уs)β
Кроме того, для статистики мы можем вычислить для всех данных параллельно или приблизить их, используя подмножество данных.р2р2
Интуиция о том, как это работает (парадигма mapreduce):
Я продолжаю говорить приближение, используя подмножество; Интуицию о том, почему это работает, можно описать в следующем примере: предположим, у меня есть 100 миллиардов точек данных, и мы хотим вычислить среднее значение всех точек данных. Предположим, что выполнение такой операции занимает очень много времени, и, кроме того, все данные не могут быть сохранены в памяти.
Что мы можем сделать, так это просто взять подмножество, скажем, 1 миллиард предметов, и вычислить среднее из них. Полученное приближение не должно быть далеко от истины (т. Е. Использование целых данных).
Для распараллеливания мы можем использовать 100 компьютеров, каждый из которых берет различное подмножество из 1 миллиарда точек данных и вычисляет среднее из них. (Обычно упоминается как шаг MAP). Наконец, запустите другое среднее значение для этих 100 чисел (или шаг REDUCE).
Обратите внимание, что «парадигма mapreduce» будет работать хорошо в некоторых случаях, но не очень хорошо в других. Например, упомянутая ранее «средняя» операция очень проста, потому что мы знаем, что , ( при условии, что длина и одинаковы). Для некоторых итерационных методов, т. Е. Текущая итерация зависит от результатов предыдущей итерации, ее трудно распараллелить. Стохастический градиентный спуск решает эту проблему путем аппроксимации градиента с использованием подмножества данных. А подробности можно найти в ответе @ user20160.значит ( < х , у> ) = среднее ( х ) + среднее (у)ИксY
Рекомендации:
Xiangrui Meng et al. (2016) . MLlib: Машинное обучение в Apache Spark