다중 선형 회귀(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의 코드 참고
'AI > 모두의 딥러닝' 카테고리의 다른 글
[모두의 딥러닝] 8. 로지스틱 회귀(logistic regression), 시그모이드 함수(sigmoid function), 교차 엔트로피 함수(cross entropy function) (0) | 2023.05.19 |
---|---|
[모두의 딥러닝] 7. 머신 러닝 용어, 텐서플로(tensorflow), 케라스(keras) API (0) | 2023.05.18 |
[모두의 딥러닝] 5. 경사 하강법(gradient decent) (0) | 2023.05.16 |
[모두의 딥러닝] 4. 평균 제곱 오차(Mean Square Error, MSE) (0) | 2023.05.16 |
[모두의 딥러닝] 3. 선형 회귀(linear regression), 최소 제곱법(method of least squares) (0) | 2023.05.15 |