선형 회귀 방정식
$$ y = w_0 + w_1x_1 + w_2x_2 + \cdots + w_nx_n $$
y는 예측값(종속변수), $w_0$는 절편(bias), $w_1,w_2,\cdots,w_n$는 각 독립변수 $x_1,x_2,\cdots,x_n$의 가중치이다.
데이터 행렬 X:
$$ \mathbf{X} =\begin{bmatrix}1 & x_{11} & x_{12} & \cdots & x_{1n} \\1 & x_{21} & x_{22} & \cdots & x_{2n} \\\vdots & \vdots & \vdots & \ddots & \vdots \\1 & x_{m1} & x_{m2} & \cdots & x_{mn}\end{bmatrix} $$
첫 번째 열의 모든 값이 1로 채워져있다. 이 열은 절편 w_0에 해당한다.
x에 절편(bias) 항을 추가하는 코드는 아래와 같다.
np.ones((X.shape[0], 1))
샘플 수만큼의 행과 1개의 열을 가진 배열을 생성한다. 모든 요소는 1로 채워져 있다. 이 배열의 크기는 (m, 1)이다.
X = np.hstack((np.ones((X.shape[0], 1)), X))
np.hstack는 수평으로 배열을 쌓는 함수. 즉, 여러 배열을 가로로 이어붙인다. np.hstack((np.ones((X.shape[0], 1)), X))는 위에서 생성한 1로 채워진 열 벡터와 원래의 X 배열을 가로로 이어붙인다.
가중치 벡터 w:
$$ \mathbf{w} =\begin{bmatrix}w_0 \\w_1 \\w_2 \\\vdots \\w_n\end{bmatrix} $$
행렬 곱 형태:
y값을 계산하기 위해 행렬 곱 Xw를 수행한다.