이 글은 PyTorchZeroToAll을 기반으로 작성한 글입니다.
[머신러닝 이론] Linear Regression(선형 회귀)
이 글은 모두의 딥러닝 시즌1을 기반으로 작성한 글입니다. [머신러닝 이론] Machine Learning 개념 이 글은 모두의 딥러닝 시즌1을 기반으로 작성한 글입니다. 머신러닝은 사람이 하나하나 프로그래
chaerrylog.tistory.com
위 글에서 선형회귀에 대해서 설명했다. 이 내용을 토대로 파이썬을 사용해 실습을 진행한다.
Data Generation
x_data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
y_data = [1, 1, 2, 4, 5, 7, 8, 9, 9, 10]
X, Y 데이터를 생성한다.
import matplotlib.pyplot as plt
plt.scatter(x_data, y_data)
plt.show()
matplotlib 라이브러리를 사용해서 데이터를 시각화한다.
Hypothesis Define
단순 선형 회귀의 수식은 f(x) = Wx + b이다. 여기서 bias를 뺀 간단한 버전인 f(x) = Wx라는 모델을 구현해봤다.
def forward(x):
return x * w
forward() 함수는 인스턴스 x에 weight를 곱한 모델의 예측값(y = Wx)을 리턴한다.
Loss Function Define
선형 회귀에서 보통 사용되는 loss function은 MSE이다. MSE를 사용하여 구현해봤다.
def loss(x, y):
y_pred = forward(x)
return (y_pred - y) * (y_pred - y)
loss() 함수는 forward() 함수를 사용해 나온 값을 y_pred에 저장하고, y_pred(예측값)에서 y(실제값)을 뺀 후 제곱한 값을 리턴한다.
w_list = []
mse_list = []
weight 리스트와 MSE 리스트를 만든다.
import numpy as np
for w in np.arange(0.0, 4.1, 0.1):
# Print the weights and initialize the lost
print("w=", w)
l_sum = 0
for x_val, y_val in zip(x_data, y_data):
# For each input and output, calculate y_hat
# Compute the total loss and add to the total error
y_pred_val = forward(x_val)
l = loss(x_val, y_val)
l_sum += l
print("\t", x_val, y_val, y_pred_val, l)
# Now compute the Mean squared error (mse) of each
# Aggregate the weight/mse from this run
print("MSE=", l_sum / len(x_data))
w_list.append(w)
mse_list.append(l_sum / len(x_data))
weight를 0.0부터 4.0까지 0.1 간격으로 넣어준다.
리스트 x_data와 y_data의 요소를 각각 x_val과 y_val에 넣어준다.
y_pred_val에 x_val에 해당하는 예측값을 저장하고, l_sum에 y_pred(예측값)에서 실제값(y_val)을 뺀 후 제곱한 loss 값을 저장한다.
w_list에 weight 값을 추가하고, mse_list에 loss 값을 x_data의 개수로 나눠서 평균을 구한 MSE 값을 추가한다.
weight 값을 출력하고
x값, y값, 해당 w값에 대한 Wx값, 예측값에서 실제값을 빼고 제곱한 loss 값을 출력하고
loss값을 인스턴스의 개수로 나눈 평균인 MSE 값을 출력한다.
import matplotlib.pyplot as plt
plt.plot(w_list, mse_list)
plt.ylabel('Loss')
plt.xlabel('w')
plt.show()
matplotlib 라이브러리를 사용해 MSE를 시각화했다.
이처럼 weight 값을 다양하게 주면아래로 볼록한 그래프가 나오는 것을 확인할 수 있다.
이러한 그래프는 경사하강법을 사용해서 loss가 최소가 되는 weight 값을 찾을 수 있다.
이는 다음 글에서 다루겠다.
'머신러닝&딥러닝 > 모두를 위한 딥러닝' 카테고리의 다른 글
[머신러닝 실습] Gradient Descent(경사하강법) (0) | 2023.09.07 |
---|---|
[머신러닝 이론] Gradient descent(경사하강법) (0) | 2023.09.06 |
[머신러닝 이론] Linear Regression(선형 회귀) (0) | 2023.09.02 |
[머신러닝 이론] Machine Learning 개념 (0) | 2023.08.30 |
[딥러닝 이론] Artificial Neural Network(인공신경망) (0) | 2023.08.26 |