[모두의 딥러닝] 6. 다중 선형 회귀(multiple linear regression)

다중 선형 회귀(Multiple linear regression)

- 2개 이상의 독립 변수로부터 종속 변수 예측

- 단순 선형 회귀보다 더 정확한 예측 가능

 

 

 

다중 선형 회귀 예제 - 파이썬 코드로 구현

- 중간고사를 본 4명의 학생의 공부한 시간, 과외 수업 횟수와 성적 조사

- 독립 변수 : 공부한 시간, 과외 수업 횟수 / 종속 변수 : 성적

공부한 시간 2 4 6 8
과외 수업 횟수 0 4 2 3
성적 71 93 91 97

 

 

1. 환경 및 데이터 준비

- 독립 변수 x1(공부 시간), x2(과외 시간)로 종속 변수 y(성적)를 만들 경우, 식은  y = a1x1 + a2x2 + b

import numpy as np
import matplotlib.pyplot as plt

# 공부 시간 x1과 과외 시간 x2, 성적 y의 넘파이 배열을 만듦
x1 = np.array([2, 4, 6, 8])
x2 = np.array([0, 4, 2, 3])
y = np.array([81, 93, 91, 97])

 

 

2. 데이터 분포 확인

# 데이터의 분포를 그래프로 나타냄
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter3D(x1, x2, y)
plt.show()

 

 

3. 실행을 위한 변수 설정

# 기울기 a와 절편 b의 값을 초기화
a1 = 0
a2 = 0
b = 0

# 학습률 정함
lr = 0.01 

# 몇 번 반복될지 설정
epochs = 2001

 

 

4. 경사 하강법

# x 값이 총 몇 개인지 셈
n=len(x1)

#경사 하강법을 시작합니다.
for i in range(epochs):                  # epoch 수 만큼 반복
    
    y_pred = a1 * x1 + a2 * x2 + b       #예측 값을 구하는 식
    error = y - y_pred                   #실제 값과 비교한 오차를 error로 놓음
    
    a1_diff = (2/n) * sum(-x1 * (error)) # 오차함수를 a1로 편미분한 값
    a2_diff = (2/n) * sum(-x2 * (error)) # 오차함수를 a2로 편미분한 값
    b_diff = (2/n) * sum(-(error))       # 오차함수를 b로 편미분한 값
    
    a1 = a1 - lr * a1_diff  # 학습률을 곱해 기존의 a1 값을 업데이트
    a2 = a2 - lr * a2_diff  # 학습률을 곱해 기존의 a2 값을 업데이트
    b = b - lr * b_diff     # 학습률을 곱해 기존의 b 값을 업데이트
    
    if i % 100 == 0:        # 100번 반복될 때마다 현재의 a1, a2, b 값을 출력
        print("epoch=%.f, 기울기1=%.04f, 기울기2=%.04f, 절편=%.04f" % (i, a1, a2, b))

#실제 점수와 예측 된 점수를 출력
print("실제 점수:", y)
print("예측 점수:", y_pred)
실제 점수: [81 93 91 97]
예측 점수: [80.76387645 92.97153922 91.42520875 96.7558749 ]

 

 

 

'모두의 딥러닝 개정 3판'의 내용과 https://github.com/taehojo/deeplearning의 코드 참고