인공지능수학 7주차

wi_label·2021년 12월 21일
1

Graduate school

목록 보기
9/17

과제 목표

파이썬 numpy 패키지를 이용해 선형회귀(linear regression) 문제를 해결한다.

import numpy as np
import numpy.linalg

문제 정의

2차원 공간의 아래 4개의 점이 있다.

p1=[31],p2=[11],p3=[13],p4=[33]\mathbf{p}_1 = \left[ \begin{array}{rrr} -3 \\ -1 \end{array} \right], \quad \mathbf{p}_2 = \left[ \begin{array}{rrr} -1 \\ -1 \end{array} \right], \quad \mathbf{p}_3 = \left[ \begin{array}{rrr} 1 \\ 3 \end{array} \right], \quad \mathbf{p}_4 = \left[ \begin{array}{rrr} 3 \\ 3 \end{array} \right]

이 점들을 잘 설명할 수 있는 직선 l:y=mx+bl: y = mx + b을 구하려 한다. 최소제곱법의 해(least squares solution)를 이용해 직선을 구하시오.

선형시스템 Ax=bA\mathbf{x} = \mathbf{b} 구성

주어진 점 pi\mathbf{p}_{i}가 각각 직선 ll 위에 놓인다고 가정하고 선형시스템의 각 행(row)를 작성하도록 한다 (단, i=1,2,3,4i=1,2,3,4).

4x2 행렬 AA와 4-벡터 b\mathbf{b} 구성하세요.

A = np.array(([-3,-1], [-1,-1], [1,3], [3,3]))
b = np.array((1,2,3,4))

print(A)
print(b)

최소제곱법을 이용해 선형시스템 풀기

Ax=bA \mathbf{x} = \mathbf{b}

이 문제는 over-determined 문제로 최소제곱법을 이용한 선형시스템의 최적해(optimal solution) xˉ\mathbf{\bar{x}}를 구할 수 있습니다. [참고자료: 링크]

최소제곱법을 이용해 선형시스템의 최적해 xˉ\mathbf{\bar{x}}를 구하는 numpy 코드를 작성하세요.

x_opt = np.linalg.lstsq(A, b, rcond=None)[0]

print(x_opt)

선형시스템의 해 확인

앞서 최소제곱법으로 구한 최적해 xˉ\mathbf{\bar{x}}가 선형시스템 Ax=bA\mathbf{x} = \mathbf{b}의 해(solution)로서 알맞게 구한 것인지 검증하는 코드를 작성하시오.

방법: AxˉA\mathbf{\bar{x}}의 연산결과가 b\mathbf{b}와 충분히 가까운지를 검증한다. [참고자료: 링크]

## 결과 검증

bb = np.dot(A, x_opt)

if np.allclose(b, bb):
  print("Ok")
else:
  print("something wrong")

최소제곱법으로 구한 최적해 xˉ\mathbf{\bar{x}}일반적으로 Ax=bA \mathbf{x} = \mathbf{b}를 만족하지 않습니다. [참고자료: 링크]

왜 그런지 이유를 기술해 보세요.

  • b가 행렬 A의 column space상에 존재한다면 이 선형시스템은 가해 조건(solvability condition)을 만족하며 해를 구할 수 있다고 배웠다(b를 붙인 Augmented matrix를 만든 뒤 함께 소거하여 후방대입). 아주 정확한 해는 구할 수 없지만 가장 근접한 해를 구하는 것.
profile
옥은 부서질 지언정 흰 빛을 잃지 않고, 대나무는 불에 탈 지언정 그 곧음을 잃으려 하지 않는다.

0개의 댓글