2016-06-22 13 views
0

Numpy는 X_i * beta = Y_i와 같은 베타를 계산하기 위해 np.linalg.lstsq (X, Y) 형식의 편리한 최소 자승 추정을 사용합니다. 여기서 X_i는 mxn 행렬이고, beta는 길이 -n 행 벡터이고, Y는 길이 n 열 벡터이다.Python의 증분 최소 제곱

그러나 X에 행을 추가하고 Y에 값을 추가 할 때 반복적으로 베타를 추정하려면 어떻게해야합니까? 즉, 처음에는 단 하나의 (x, y) 쌍으로 베타를 추정 한 다음 두 (x, y) 쌍을 사용하여 베타를 추정 한 다음 세 (x, y) 쌍을 사용하여 베타를 추정합니다. 예를 들어 온라인 학습 환경에서

반복적으로 업데이트되는 X 및 Y에서 np.linalg.lstsq (X, Y)를 반복적으로 호출하면 작동하지만 이전 계산을 사용하지 않습니다. 이것은 낭비가 보인다.

더 좋은 방법이 있습니까?

+0

[동적 프로그래밍] (https://www.codechef.com/wiki/tutorial-dynamic-programming) 접근 방식을 살펴볼 수 있습니다. – Andrew

답변

0

각 새로운 (x, y) 쌍에 대해 베타를 다시 계산하지만 이전 계산을 저장하는 자체 함수를 작성했습니다.

특히 우리

의해 베타를 추정 할 일반적으로 대응하는 n 개의 Y-관측 열 벡터로서 R^N에서 N 개의 X-관측 매트릭스 및 Y와 같은 R^(NXD)에 주어진 X,

beta_hat = (X^TX)^(- 1) (X^타이)

그런 다음 당신은 그냥 R에서 X^TX^(DXD) 및 R^(DX1)에서 X^타이를 유지할 수 있습니다 온라인. 예를 들어

새로운 예제를 추가 (x_n + 1 y_n + 1)가

X^TX = np.add (X^TX, np.outer (x_n + 1))

재 계산 X^타이 np.add = (X^TX, np.multiply (x_n + 1 np.tile (y_n + 1, d))) T.

에 대한 의존성을 제거

I이 상상 팬더 또는 어딘가에 존재하지만, 스스로 구현하는 것만 큼 쉽습니다.

관련 문제