less than 1 minute read

정규 방정식

Fish Market의 데이터 중에서 Species:Perch X=Weight y=Length1을 사용하여 정규방정식을 돌려보기로 했다.

그래프를 그려 보면

image-20220507212538936

의 그래프가 나온다.

$\hat{\boldsymbol{\theta}} = (\mathbf{X}^T \mathbf{X})^{-1} \mathbf{X}^T \mathbf{y}$

X_b = np.c_[np.ones((56, 1)), X] 

theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)

모든 샘플에 $X_0 = 1$ 을 추가함으로써 X_b의 크기는 (56,2)가 된다. (Species:Perch 의 샘플 :56개)

$X^TX$: ( 2, 56 ) ( 56, 2 ) -> ( 2, 2 )

numpy의 inverse함수를 사용해서 역행렬을 구하고

$(X^TX)^{-1}X^T$ (2,2)(2,56)->(2,56)

역행렬과 X의 transpose를 곱해준다.

$(X^TX)^{-1}X^Ty$ (2,56)(56,1)->(2,1)

이후 y를 곱해주면 (2,1)행렬이 된다.

결과값을 보면 행렬을 확인할 수 있다.

image-20220507212556820

이 $\theta$로 직선을 그려보면

image-20220507212446608

정규방정식을 통해 그렸기 때문에 이 직선이 최적의 MSE값을 내는 직선이라고 할 수 있다.

sklearn의 LinearRegression을 사용해서 그려보아도 똑같은 값을 구할 수 있다.

from sklearn.linear_model import LinearRegression

lin_reg = LinearRegression()
lin_reg.fit(X, y)
lin_reg.intercept_, lin_reg.coef_

image-20220507212819713

경사 하강법

배치 경사 하강법