과제 목표
파이썬 numpy 패키지를 이용해 선형회귀(linear regression) 문제를 해결한다.
import numpy as np
import numpy.linalg
문제 정의
![linear_regression.jpg]()
2차원 공간의 아래 4개의 점이 있다.
p1=[−3−1],p2=[−1−1],p3=[13],p4=[33]
이 점들을 잘 설명할 수 있는 직선 l:y=mx+b을 구하려 한다. 최소제곱법의 해(least squares solution)를 이용해 직선을 구하시오.
선형시스템 Ax=b 구성
주어진 점 pi가 각각 직선 l 위에 놓인다고 가정하고 선형시스템의 각 행(row)를 작성하도록 한다 (단, i=1,2,3,4).
4x2 행렬 A와 4-벡터 b 구성하세요.
A = np.array(([-3,-1], [-1,-1], [1,3], [3,3]))
b = np.array((1,2,3,4))
print(A)
print(b)
최소제곱법을 이용해 선형시스템 풀기
Ax=b
이 문제는 over-determined 문제로 최소제곱법을 이용한 선형시스템의 최적해(optimal solution) xˉ를 구할 수 있습니다. [참고자료: 링크]
최소제곱법을 이용해 선형시스템의 최적해 xˉ를 구하는 numpy 코드를 작성하세요.
x_opt = np.linalg.lstsq(A, b, rcond=None)[0]
print(x_opt)
선형시스템의 해 확인
앞서 최소제곱법으로 구한 최적해 xˉ가 선형시스템 Ax=b의 해(solution)로서 알맞게 구한 것인지 검증하는 코드를 작성하시오.
방법: Axˉ의 연산결과가 b와 충분히 가까운지를 검증한다. [참고자료: 링크]
bb = np.dot(A, x_opt)
if np.allclose(b, bb):
print("Ok")
else:
print("something wrong")
최소제곱법으로 구한 최적해 xˉ는 일반적으로 Ax=b를 만족하지 않습니다. [참고자료: 링크]
왜 그런지 이유를 기술해 보세요.
- b가 행렬 A의 column space상에 존재한다면 이 선형시스템은 가해 조건(solvability condition)을 만족하며 해를 구할 수 있다고 배웠다(b를 붙인 Augmented matrix를 만든 뒤 함께 소거하여 후방대입). 아주 정확한 해는 구할 수 없지만 가장 근접한 해를 구하는 것.