티스토리 뷰
멀티캠퍼스 AI과정/05 Machine Learning
Machine Learning 03 - Regression, loss function, 오차, Hypothesis
jhk828 2020. 9. 22. 17:35Machine Learning에서의 Regression
y = ax + b
=>H = Wx + b
a
기울기,b
절편 =>W
Weight,b
bias
Hypothesis와 최소 제곱법
y = Wx + b
에서, 초기 w, b 값은 랜덤으로 추출한다.- 오차 (error)를 이용해서, 해당 직선이 데이터를 잘 표현하고 있는지 수치화한다.
- 오차 : 실제 값에서 예측값을 뺀다.
- 오차의 합이 작으면 좋은 직선
- 최소 제곱법 (least squared method) 이용
- 오차들을 각각 제곱해서 평균을 구한다.
loss function (손실 함수)
- loss function
y = Wx + b
의 값이 작을 수록 좋다.- loss function의 값을 최소로 만드는 W, b값을 찾는다.
- 이때의 W, b가 만드는 Hypothesis를 구한다.
- 이를 위해 미분과 경사하강법을 사용한다. -> 기울기가 최소일 때의 W 값을 찾는다.
Linear Regression Model을 Python으로 구현
1. Training Data Set
2. Linear Regression Model을 정의
3. loss function을 정의
4. learning rate 정의
5. 학습을 진행
|
# 1. Training Data Set
import numpy as np
import matplotlib.pyplot as plt
# Training Data Set
x_data = np.array([1,2,3,4,5,7,8,10,12,13,14,15,18,20,25,28,30]).reshape(-1,1)
t_data = np.array([5,7,20,31,40,44,46,49,60,62,70,80,85,91,92,97,98]).reshape(-1,1)
# 데이터의 분포를 scatter로 확인
plt.scatter(x_data.ravel(), t_data.ravel())
plt.show()
행렬 곱으로 처리하기 위해 y = X*w + b로 처리한다.
# 2. Linear Regression Model을 정의
W = np.random.rand(1, 1) # matrix
b = np.random.rand(1) # scalar
# H = W * x + b
# 3.loss function을 정의
def loss_func(x, t):
y = np.dot(x, W) + b # Hypothesis = Wx + b
return np.mean(np.power((t-y), 2)) # 최소제곱법
# 미분 함수
def numerical_derivative(f, x):
# f: 미분하려고 하는 다변수 함수
# x : 모든 변수를 포함하고 있어야 한다. ndarray (차원 상관 없이)
delta_x = 1e-4
derivative_x = np.zeros_like(x) # 미분한 결과를 저장하는 ndarray
# iterator를 이용해서 입력변수 x에 대해 편미분을 수행
it = np.nditer(x, flags=['multi_index'])
while not it.finished:
idx = it.multi_index # iterator의 현재 index를 추출
# 현재 칸의 값을 어딘가에 잠시 저장한다.
tmp = x[idx]
x[idx] = tmp + delta_x
fx_plus_delta = f(x) # f(x + delta_x)
x[idx] = tmp - delta_x
fx_minus_delta = f(x) # f(x - delta_x)
derivative_x[idx] = (fx_plus_delta - fx_minus_delta) / (2 * delta_x)
x[idx] = tmp # 데이터 원상 복구
it.iternext()
return derivative_x
# 학습 종료 후 임의의 데이터에 대한 예측값을 알아오는 함수
# prediction
def predict(x):
return np.dot(x, W) + b # Hypothesis, Linear Regression Model
# 4. learning rate 상수가 필요, 정의
learning_rate = 0.0001
# 미분을 진행할 loss_func()에 대한 lambda 함수를 정의
f = lambda x : loss_func(x_data, t_data)
# 5. 학습을 진행
# W와 b를 update하면서 반복적으로 학습 진행
for step in range(90000):
W = W - learning_rate * numerical_derivative(f,W) # W의 편미분
b = b - learning_rate * numerical_derivative(f,b) # b의 편미분
if step % 9000 == 0:
print('W : {}, b : {}, loss : {}'.format(W, b, loss_func(x_data, t_data)))
# 학습 종료 후 예측
print(predict(19))
# 데이터의 분포를 scatter로 확인
plt.scatter(x_data.ravel(), t_data.ravel())
plt.plot(x_data.ravel(), np.dot(x_data,W) + b) # 직선
plt.show()
회귀모델
- 어떠한 모델에 의해, 그 값에 영향을 주는 조건을 고려해서
- 데이터의 평균을 구하기 위한 함수
- 즉, 회귀 (Regression) => 평균으로의 회귀
이러한 모델을 왜 만드느냐?
- 해결해야 할 현실을 좀 더 단순한 형태로 표현하기 위해서
- 현실 세계의 문제를 단순화시켜 Regression model을 만들면
- 독립변수와 종속변수의 인과관계를 수식화/수치화 시켜 미래의 측정치를 구할 수 있다.
- cf) 공분산은 두 변수간의 인과관계를 구할 수는 없다.
해결하려는 정보를 단순화 하려면?
- 불필요한 정보들을 버린다.
- 이때 근거는, 회귀모델의 assumption (가정)
- 회귀모델을 만들 때, "실제 데이터는 이러이러한 특징을 가지고 있다." 라는 가정이 많을 수록
- 모델이 단순화된다.
- 이러한 가정에 따라 다양한 회귀 모델이 존재한다.
- Linear Regression Model
- Non-linear Regression Model
회귀모델이 [선형인지/ 비선형]인지 구별하는 기준은,
- 독립/ 종속 변수와의 관계가 아니다.
- y = ax + b
- y = ax^2 + bx + c
- 이러한 모양을 가지고 말하는게 아니다.
Linear Regreesion Model
회귀 계수가 선형적(+, -) 으로 결합되는 모델이다.
- 반대 : Non-Linear Regression
- 장점
- 회귀 계수를 추정하기 쉽고, 해석하기 쉽다. 새로운 특성 (feature)를 추가하기 쉽다.
- 종속 변수의 갯수에 따라 나뉜다.
- 단병량 회귀 모델
- 다변향 회귀 모델
'멀티캠퍼스 AI과정 > 05 Machine Learning' 카테고리의 다른 글
Machine Learning 04 - Simple Linear Regression_2 (0) | 2020.09.28 |
---|---|
Machine Learning 04 - Simple Linear Regression, Gradient Descent Algorithm, sklearn, Tukey Outlier, Z-Score (0) | 2020.09.23 |
Machine Learning 02 - Regression, loss function, 오차, 최소제곱법 (0) | 2020.09.21 |
Machine Learning 02 - 수치미분 (0) | 2020.09.21 |
Machine Learning 01 - Introduction (0) | 2020.09.21 |
댓글