NumPy는 불충분 한 시스템의 최소 제곱을 어떻게 해결합니까?


14

X 모양 (2, 5)
와 y 모양 (2,) 가 있다고 가정 해 봅시다.

이것은 작동합니다 : np.linalg.lstsq(X, y)

X가 모양 (N, 5) 인 경우에만 이것이 작동 할 것으로 예상합니다. N> = 5 그러나 왜 그리고 어떻게?

예상대로 5 개의 가중치를 다시 얻지 만이 문제는 어떻게 해결됩니까?

우리가 2 개의 방정식과 5 개의 미지수를 갖는 것과 같지 않습니까?
numpy가 어떻게 이것을 해결할 수 있습니까?
더 인공 방정식을 만들려면 보간과 같은 작업을 수행해야합니까? ..


3
왜 안되나요? 결정되지 않은 시스템에는 많은 솔루션이 있습니다.
Matthew Gunn

관련 이론에 대한 링크가 있습니까? ..
George Pligoropoulos

답변:


19

내 이해는 numpy.linalg.lstsqLAPACK 루틴 dgelsd 에 의존 한다는 것 입니다.

문제는 해결하는 것입니다.

minimize(overx)Axb2

물론, 이것은 순위 가 vector 길이보다 작은 행렬 A에 대한 고유 한 솔루션 이 없습니다 . 결정되지 않은 시스템의 경우 솔루션 을 다음과 같이 제공하십시오.bdgelsdz

  • Az=b
  • z2x2 모든 만족시키는 . (즉, 는 결정되지 않은 시스템에 대한 최소 표준 솔루션입니다.xAx=bz

예를 들어, 시스템이 이면 numpy.linalg.lstsq는 반환 합니다.x+y=1x=.5,y=.5

dgelsd는 어떻게 작동합니까?

루틴 dgelsd은 A의 특이 값 분해 (SVD)를 계산합니다 .

SVD를 사용하여 선형 시스템을 해결하는 아이디어를 스케치하겠습니다. 특이 값 분해는 인수 분해 여기서 와 는 직교 행렬이고 는 대각 항목을 특이 값으로 알려진 대각 행렬입니다.UΣV=AUVΣ

행렬 의 유효 순위 는 사실상 0이 아닌 (즉, 기계 정밀도 등과 관련하여 0과 충분히 다른) 특이 값의 수입니다. 0이 아닌 특이 값의 대각 행렬 이라고하자 . SVD는 다음과 같습니다.AS

A=U[S000]V

역행렬 의 로 주어진다 :A

A=V[S1000]U

솔루션을 고려하십시오 . 그때:x=Ab

Axb=U[S000]VV[S1000]Ubb=U[I000]Ubb

기본적으로 두 가지 경우가 있습니다.

  1. 0이 아닌 특이 값의 수 (즉, 행렬 의 크기 )는 길이보다 작습니다 . 여기서 해결책은 정확하지 않습니다. 우리는 선형 시스템을 최소 제곱의 의미로 해결합니다.Ib
  2. Axb=0

이 마지막 부분은 약간 까다 롭습니다 ... 행렬 차원을 추적하고 가 직교 행렬 임을 사용해야합니다 .U

의사 역수의 동등성

경우 선형 독립적 행을 갖는다 (예를 들어 우리는 지방 행렬을 갖는다.), 다음 : A

A=A(AA)1

결정되지 않은 시스템의 경우 의사 역수가 최소 표준 솔루션을 제공함을 보여줄 수 있습니다.

경우 선형 독립적 인 열을 갖는 (예를 들어 우리는 마른 행렬을 갖는다.), 다음 : A

A=(AA)1A


dgelsd는 SVD를 사용하지만 R lm은 QR을 사용합니까?
하이 타오 두

@ hxd1011R lm은 기본적으로 QR 분해를 사용하지만 대안을 지정할 수 있습니다.
Sycorax는 Reinstate Monica
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.