-
Linear Regression에서 Forward 이해하기ML engineer/DIY Machine Learning 2024. 9. 14. 00:57반응형
Linear Regression 이란?
Linear Regression은 선형회귀라는 명칭으로 비단 ML이 아닌 영역에서도 많이 들어보셨을 수 있습니다.
말 그대로, 어떤 모델이 데이터셋으로부터 linear(선형) 관계를 가정하고 그 임의의 선형식을 찾아가는(regression) 방법입니다.
예를 들어, 택시 요금을 예측하는 모델을 만든다고 가정해 볼 때, 약 10만 건의 택시 이용 로그 데이터를 가지고 있다고 합시다. 각 택시 이용 로그는, 다음 네가지 feature를 가진다고 칩니다.
1. 이용 시각 및 날짜 (연-월-일-시:분:초)
2. 탑승 거리 (km)
3. 탑승 시간 (분)
4. 이용 요금 (원)Linear 관계를 가정한다라는건, 우리는 다음과 같은 linear equation 하나로 이용요금과 다른 feature들 간의 상관관계를 충분히 모델링할 수 있다고 보는 것입니다. 즉, 우리 모델에는 지수, 로그와 같은 non-linearity가 전혀 없다는 뜻입니다. 사용할 수 있는 feature의 개수 또한 제약이 없고, 단지 계수와 변수만 추가로 더해주면 되는 것이죠.
$price(x, y, z) = w_1 *x + w_2*y + w_3*z$
$x$: 이용 시각 및 날짜, $y$: 탑승 거리, $z$: 탑승 시간
모델 학습
Linear regression 모델을 학습하기 위해서는 위의 수식에서 $price(x, y, z)$ 함수가 학습 데이터셋에 있는 택시 이용요금을 가장 잘 예측할 수 있도록 하는 $w_i$로 표현된 모델의 weight값을 찾는 과정입니다.
그리고 ML로 나아가서 위의 linear equation을 여러 개의 데이터에 대해서 한 번에 처리하려면 다음과 같이 행렬 곱으로 표현하면 한번에 대량의 데이터를 효율적으로 처리할 수 있습니다. (GPU와 같은 병렬 컴퓨팅이 필요하겠지만, 하드웨어 문제는 빼고 생각합니다 일단은)
$ \left[
\begin{matrix}
1 & 2 & 3\\
4 & 5 & 6\\
\end{matrix} \right]
*
\left[
\begin{matrix}
x \\ y \\ z
\end{matrix} \right]
=
\left[
\begin{matrix}
price_1 \\ price_2 \\ price_3
\end{matrix} \right]
$조금 과하게 생략이 되었을지 모르겠지만, 이 정도면 linear regression모델을 학습하기 위한 기본적인 내용은 이해되셨을 것 같네요.
구현
간단하게 numpy를 이용해서 모델 weight를 초기화 하고, forward, get_error를 구현해봅니다.
forward는 모델을 실행하여 예측 값을 구하고, get_error는 모델이 얼마나 잘 예측했는지를 오차를 측정하는 함수입니다.import math import numpy as np from numpy.typing import NDArray np.random.seed(0) class LinearRegressionModel: def __init__(self, n, m): # 흔히 쓰이는 모델 weight 초기화 알고리즘이니 일단 그냥 넘어갑니다. scale = 1/max(1., (n+m)/2.) limit = math.sqrt(3.0 * scale) self.weights = np.random.uniform(-limit, limit, size=(n, m)) def get_model_prediction(self, X: NDArray[np.float32]) -> NDArray[np.float32]: prediction = np.matmul(X, self.weights) return prediction def get_error(model_prediction: NDArray[np.float32], ground_truth: NDArray[np.float32]) -> float: error = np.mean(np.square(model_prediction - ground_truth)) return error
반응형'ML engineer > DIY Machine Learning' 카테고리의 다른 글
Gradient Descent 에 대한 이해 (0) 2024.08.04 시리즈를 시작하며 (0) 2024.08.04