빅 데이터 설정을 위해 병렬 / 분산 방식으로 선형 회귀를 실행하는 방법은 무엇입니까?


13

데이터 크기가 너무 커서 시스템 클러스터에 저장 해야하는 매우 큰 선형 회귀 문제를 연구 중입니다. 모든 샘플을 하나의 단일 시스템 메모리 (디스크 포함)로 집계하기에는 너무 큽니다.

이 데이터를 회귀시키기 위해 병렬 접근 방식, 즉 각 개별 상자에서 회귀를 실행 한 다음 각 개별 베타 통계 (아마도 평균 또는 중앙값)를 기반으로 베타를 계산하려고합니다.

이것은 어떤 의미가 있습니까? 그렇다면 각 개별 R 2 에서 총 예상 아르 자형2 를 어떻게 구해야 합니까?아르 자형2

답변:


10

짧은 대답:

예, 선형 회귀를 병렬로 실행했습니다. 예를 들어, Xiangrui Meng et al. (2016) Apache Spark의 기계 학습용. 작동 방식은 확률 적 경사 하강 (SGD)을 사용하는 것입니다. 저자는 3 장 핵심 기능에서 다음과 같이 언급했다.

일반화 된 선형 모델은 작업자 계산에 빠른 C ++ 기반 선형 대수 라이브러리를 사용하여 기울기 계산을 병렬화하는 최적화 알고리즘을 통해 학습됩니다.

SGD 작동 방식에 대한 예는 다음 답변에서 찾을 수 있습니다. 확률 적 그라디언트 디센트는 표준 그라디언트 디센트에 비해 시간을 어떻게 절약 할 수 있습니까?


긴 답변 :

표기법이 내가 제공 한 링크와 일치하지 않으므로이 질문에서 행렬 표기법이 더 좋습니다.

선형 회귀 분석을 수행하려고합니다.

최소화 엑스β와이2

파생 상품은

2엑스(엑스β와이)

작은 데이터 설정에서 미분을 설정하고 직접 풀 수 있습니다. (예를 들어, R에서의 QR 분해) 빅 데이터 설정에서, 데이터 매트릭스 는 너무 커서 메모리에 저장되지 않고 직접 풀기가 어렵다. (거대한 행렬에 대해 QR 분해 또는 Cholesky 분해를 수행하는 방법에 익숙하지 않습니다).0엑스

이를 병렬화하는 한 가지 방법은 반복적 방법 인 확률 적 그라디언트 디센트 (stochastic gradient descent)를 사용하여 데이터의 서브 세트를 사용하여 그라디언트를 추정 할 수 있습니다. (우리가 사용하는 경우 , 데이터의 서브 세트를 표현하기 위해, 기울기에 의해 근사화 될 수 , 우리는 업데이트 할 수 근사화 구배 참조).엑스에스와이에스2엑스에스(엑스에스β와이에스)β

또한 통계량 의 경우 데이터의 하위 집합을 사용하여 모든 데이터에 대해 를 병렬로 계산 하거나 근사화 할 수 있습니다.아르 자형2아르 자형2

작동 방식에 대한 이해 (패러다임의 실현) :

나는 부분 집합을 사용하여 근사를 계속 말한다; 이 예제가 작동하는 이유에 대한 직감은 다음 예제에서 설명 할 수 있습니다. 1 천억 개의 데이터 포인트가 있고 모든 데이터 포인트의 평균을 계산하려고한다고 가정하십시오. 이러한 작업을 수행하는 데 시간이 오래 걸리고 전체 데이터를 메모리에 저장할 수 없다고 가정합니다.

우리가 할 수있는 일은 단지 10 억 개의 항목을 가진 부분 집합을 취하여 이들의 평균을 계산하는 것입니다. 이렇게 생성 된 근사치가 진실과 멀어지지 않아야합니다 (즉, 전체 데이터 사용).

병렬화하기 위해 100 대의 컴퓨터를 사용할 수 있으며 각 컴퓨터는 10 억 개의 데이터 포인트의 다른 서브 세트를 가져 와서 평균을 계산합니다. 일반적으로 MAP 단계라고합니다. 마지막으로이 100 개의 숫자 (REDUCE 단계)에 대해 다른 평균을 실행하십시오.

평균(<엑스,와이>)=평균(엑스)+평균 (y)엑스와이

참고 문헌 :

Xiangrui Meng et al. (2016) . MLlib : Apache Spark의 기계 학습


8

@ hxd1011에서 언급했듯이 선형 회귀를 최적화 문제로 공식화 한 다음 반복 알고리즘 (예 : 확률 적 경사 하강)을 사용하여 문제를 해결하는 방법이 있습니다. 이 접근법은 병렬화 될 수 있지만 몇 가지 중요한 질문이 있습니다. 1) 어떻게 문제를 하위 문제로 나눠야합니까? 2) SGD와 같은 최적화 알고리즘은 본질적으로 순차적이므로 하위 솔루션에 대한 솔루션을 결합하여 글로벌 솔루션을 얻으려면 어떻게해야합니까?

Zinkevich et al. (2010)은 여러 머신에서 병렬화하는 몇 가지 이전 방법을 설명합니다.

  • 1) 다음과 같이 SGD를 병렬화하십시오. 여러 머신에서 데이터를 분할하십시오. 각 단계에서 각 로컬 컴퓨터는 데이터의 하위 집합을 사용하여 기울기를 추정합니다. 모든 기울기 추정값은 중앙 시스템으로 전달되어 전체 매개 변수 업데이트를 수행합니다. 이 방법의 단점은 네트워크 통신이 많이 필요하므로 효율성이 떨어집니다.

  • 2) 로컬 시스템에서 데이터를 고르게 파티션하십시오. 각 머신은 배치 솔버를 사용하여 자체 데이터 하위 집합에 대한 문제를 정확하게 해결합니다. 로컬 시스템의 최종 모수 추정값을 평균하여 글로벌 솔루션을 생성합니다. 이 접근 방식의 이점은 네트워크 통신이 거의 필요하지 않지만 매개 변수 추정값이 차선책 일 수 있다는 단점이 있습니다.

그들은 새로운 접근법을 제안합니다.

  • 3) 각 로컬 머신이 임의로 데이터 포인트를 그릴 수 있도록합니다. 각 머신에서 SGD를 실행하십시오. 마지막으로, 전체 솔루션을 얻기 위해 여러 시스템의 매개 변수 평균을 구하십시오. (2)와 마찬가지로이 방법은 네트워크 통신이 거의 필요하지 않습니다. 그러나 각 머신이 더 큰 부분의 데이터에 액세스 할 수 있으므로 매개 변수 추정값이 더 좋습니다.

병렬 최적화 방법은 매우 일반적이며 선형 회귀뿐만 아니라 많은 머신 러닝 알고리즘에 적용됩니다.

또 다른 대안은 병렬 / 분산 매트릭스 분해 알고리즘 또는 선형 솔버를 사용하는 것입니다. 최소 제곱 선형 회귀는 행렬 분해 방법을 사용하여 풀 수있는 특별한 구조를 갖습니다. 이것은 메모리에 맞는 더 작은 데이터 세트의 경우 일반적으로 해결하는 방법입니다. 이것은 여러 머신에 매트릭스 블록을 분산시킨 다음 병렬 / 분산 매트릭스 계산을 사용하여 문제를 해결함으로써 병렬화 할 수 있습니다. 이 접근 방식이 선형 시스템을 해결하는 데 더 전문적이라는 점을 고려할 때 성능이 일반적인 분산 최적화 접근 방식과 어떻게 비교되는지 보는 것이 흥미로울 것입니다. 누구든지 이것에 대해 더 많은 정보를 제공 할 수 있다면 기뻐할 것입니다.

참고 문헌 :

Zinkevich et al. (2010) . 병렬화 된 확률 적 경사 하강.


내가 자세히 설명하지 않은 문제를 해결하기위한 +1 훌륭한 답변입니다.
Haitao Du

@ hxd1011 +1뿐만 아니라 SGD에 대한 설명과 OP 문제에 연결하는 방법
user20160

2

길고 오래지도가 줄어들 기 전에 이것을 해결했습니다. 아래는 Journal of Econometrics 1980의 오래된 논문을 참조한 것입니다. 이것은 비선형 최대 가능성과 평행을 이루 었으며 M 추정에 효과적입니다.

이 방법은 회귀에 대해 정확합니다. k 개의 프로세서 / 유닛에서 k 개의 부분 집합으로 데이터를 나눕니다 (순서대로 수행 될 수도 있습니다). k 회귀는 회귀 계수를 각각에 대한 X'X 행렬로 유지합니다. 이 b1, ..., bk 및 W1, ..., Wk를 각각 호출하면 전체 회귀 계수는 b = inverse (W1 + .. + Wk) * (W1 * b1 + ... + Wk * bk) 1로 지정됩니다. 는 추정 된 오차 분산, R ^ 2 전체 F 등을 얻기 위해 파라미터에 대해 b를 사용하여 잔차를 계산하기 위해 데이터를 다시 통과해야한다. 그런 다음 b의 공분산 행렬은 sigma ^ 2 (역 (W1 + .. + Wk))로 정확하게 제공됩니다. * 이상은 행렬 곱셈을 나타냅니다.

https://www.sciencedirect.com/science/article/pii/0304407680900950


내가 할 때 당신의 일을 알고 싶습니다! academic.oup.com/imaiai/article-abstract/5/4/379/...
JohnRos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.