본문 바로가기
Coding/AI

다중선형회귀란 무엇인가

by 루민즈 2023. 10. 7.
반응형

안녕하세요 

전에 선형회귀에 대해 포스팅을 했습니다. 

https://ruminz.tistory.com/271 (선형회귀란 무엇인가) 

 

이때 공부를 한 시간에 대해 성적이 변화하여 이에 맞는 최적의 선을 구하는 딥러닝을 구현하였습니다. 

하지만 세상에 거의 모든일이 하나의 독립변수로 인해 종속변수가 변하진 않습니다. 성적을 예로 들자면 무조건 시간에 비례하는건 아니죠 과외를 받았다던지 인강을 들었다던지  여러요인이 있습니다.  이러한 요인이 2개 이상이라면 

이건 단순선형회귀가 아니라 다중선형회귀라고 합니다. 

 

이번엔 과외 받은 횟수를 추가해봅시다. 

 

공부한 시간만 있다면 그건 단순선형회귀에 불과합니다. 하지만 과외 수업횟수를 추가해서 다중선형회귀가 되었습니다. 

여기서 독립변수 2개가 생깁니다. 식은 다음과 같습니다. 

$$y = a1x1 + a2x2 + b $$ 

 

이제 파이썬으로 이를 바탕으로 다중선형회귀를 구현해봅시다. 

먼저 numpy 랑 matplotlib.pyplot 라이브러리를 임포트 해줍니다. 

 

독립변수가 2개있습니다. 시간과 과외 수업횟수입니다. 이를 배열로 저장해줍시다. 그리고 y값또한 배열로 저장해줍시다. 

 

import numpy as np 
import matplotlib.pyplot as plt

x1 = np.array([2,4,6,8])
x2 = np.array([0,4,2,3])
y = np.array([81,93,91,97])

 

 

그다음 데이터의 분포를 그래프로 나타낸다음 기울기 a의 값과 절편 b의 값을 초기화 합니다. 

그다음 학습률을 0.01로 설정해줍니다

fig = plt.figure()
ax = fig.add_subplot(111,projection='3d')
ax.scatter3D(x1,x2,y)
plt.show() 

a1 = 0 
a2 = 0
b = 0 

lr = 0.01

 

에포크를 정하고 x값이 총 몇개인지 셉니다. x1과 x2가 같으므로 x1만 설정합니다. 

epochs = 2001
n = len(x1)

 

그다음 경사 하강법을 시작합니다. 

for i in range(epochs):
y_pred = a1 * x1 + a2 * x2 + b 
error = y - y_pred 

a1_diff = (2/n) * sum(-x1 * (error))
a2_diff = (2/n) * sum(-x2 * (error)) 
b_diff = (2/n) * sum(-(error))

a1 = a1 - lr * a1_diff 
a2 = a2 - lr * a2_diff 
b = b - lr * b_diff 

if i % 100 == 0:
	print("epoch=%.f, 기울기1=%.04f,기울기2=%.04f, 절편=%.04f" % (i,a1,a2,b))
    
print("실제 점수: " ,y)
print("예측 점수: ",y_pred)

 

실행을 해보면 기울기1 기울기2 그리고 절편 마지막으로 

실제점수랑 예측점수가 나타나는걸 확인하실수 있습니다.


Post

다음글 무직자 대출 알아보기 >