일반적으로 선형 모델은 다음 식 처럼 입력 특성의 가중치 합과 편향(bias)(또는 절편)이라는 상수를 더해 예측을 만든다.
이 식은 벡터 형태로 더 간단하게 쓸 수 있다.
훈련 세트 X에 대한 선형 회귀 가설 h(세타)의 MSE는 다음 식 처럼 계산한다.
비용 함수를 최소화하는 세타값을 찾기 위한 해석적인 방법이 있다. 이를 정규방정식 이라고 한다.
이 공식을 테스트하기 위해 선형처럼 보이는 데이터를 생성해보자.
import numpy as np
import matplotlib.pyplot as plt
X=2*np.random.rand(100,1)
y=4+3*X+np.random.randn(100,1)
X_b=np.c_[np.ones((100,1)),X] #모든 샘플에 x0=1을 추가한다.
theta_best=np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
이 데이터를 생성하기 위해 사용한 함수는 y=4+3x1+가우시안_잡음 이다. 정규방정식으로 계산한 값을 확인해보자.
theta_best
세타햇을 사용해 예측을 해보자.
X_new=np.array([[0],[2]])
X_new_b=np.c_[np.ones((2,1)),X_new] # 모든 샘플에 x0=1을 추가
y_predict = X_new_b.dot(theta_best)
y_predict
모델의 예측을 그래프에 나타내보자
plt.plot(X_new,y_predict,'r-')
plt.plot(X,y,'b.')
plt.axis([0,2,0,15])
plt.show()
사이킷런에서 선형 회귀를 수행하는 것은 간단하다
from sklearn.linear_model import LinearRegression
lin_reg=LinearRegression()
lin_reg.fit(X,y)
lin_reg.intercept_,lin_reg.coef_ # 편향, 가중치
lin_reg.predict(X_new)
linearRegression 클래스는 scipy.linalg.lstsq() 함수를 기반으로 한다.
theta_best_svd,residuals,rank,s=np.linalg.lstsq(X_b,y,rcond=1e-6)
theta_best_svd
'Machine Learning > Advanced (hands on machine learning)' 카테고리의 다른 글
8. 모델훈련 - 다항 회귀 (0) | 2021.05.18 |
---|---|
7. 모델훈련 - 경사하강법 (0) | 2021.05.18 |
5. 머신러닝 프로젝트 - 머신러닝 알고리즘을 위한 데이터 준비 (0) | 2021.05.17 |
4. 머신러닝 프로젝트 - 데이터 이해를 위한 탐색과 시각화 (0) | 2021.05.15 |
3- 머신러닝 프로젝트 - 데이터 가져오기 (0) | 2021.05.15 |