DeepLearning - 다중 선형 회귀
Q. 이거 얼마가 될까? - 다만, 변인이 여러 개야!
복습
평균제곱오차는 왜 나왔었을까
오차를 그냥 더해버리면 양수 오차와 음수 오차가 서로 상쇄되어 ‘틀린 크기’를 정확히 알 수 없다. 그러므로, 그 오차를 제곱시킴으로써 양수로 평균을 내버리는 방법을 택한다.
그래서 나온 평균제곱오차(MSE, Mean Squared Error)가 아래의 수식을 가졌었다.
다중 선형 회귀에 대하여
앞서 선형 회귀에서 오차가 있음을 확인했으니, 더 정교한 예측을 위하여 변수의 개수를 늘려야 한다
예시
- 다이어트 과정에서, 운동시간에 대한 변수를 추가한다
코드화
x1 = np.array([1, 2, 3, 4, 5]) # 다이어트 경과일
x2 = np.array([30, 60, 60, 40, 50]) # 운동 시간(m)
y = np.array([46.0, 46.2, 45.9, 45.8, 45.7]) # 몸무게
를 Z축으로 생각하여 3차원의 세상을 생각해도 좋다.
- 예측값을 구하는 식
predY = (a1*x1) + (a2*x2) + b
error = y - predY # 오차 = 실제값(Y) - 예측값(predY)
- 편미분 값(경사하강법의 평균제곱 오차 편미분 식 참고))
n = len(x1) # 변수 개수(n)
pDiff_a1 = (2/n) * sum(-x1 * (error)) # a1에 대한 편미분
pDiff_a2 = (2/n) * sum(-x2 * (error)) # a2에 대한 편미분
pDiff_b = (2/n) * sum(-(error)) # b에 대한 편미분
a1 = a1 - lr*pDiff_a1 // 학습률(lr) 곱하기
a2 = a2 - lr*pDiff_a2
b = b - lr*pDiff_b
2. 선형 회귀, 다중 선형 회귀 모델 in 텐서플로
가중치(w, weight)
- 기울기 a: 변수 x에 어느 정도의 가중치를 곱할지를 결정
편향(bias)
- 절편 b: 데이터의 특성에 따라 부여된 값
머신러닝에서의 용어
-
 
-
평균제곱오차 ⊃ 손실 함수(loss function)
-
경사하강법 ⊃ 옵티마이저(Optimizer)
텐서플로에서 선형회귀 실행하기
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
x = np.array([1, 2, 3, 4, 5]) # 다이어트 경과일
y = np.array([46.0, 46.2, 45.9, 45.8, 45.7]) # 몸무게
# 모델 선언
model = Sequential()
model.add(Dense(1, input_dim=1, activation='linear')) # 출력값: 1개, 입력변수: 1개, 선형회귀방식
# 학습 방법 설정
model.compile(optimizer='sgd', loss='mse') # sgd:경사하강법, mse: 평균제곱오차
# 학습수행
model.fit(x, y, epochs=100, verbose=0) #, ephochs: 반복횟수, verbose: 진행상황에 대한 자세한 정도
# 예측
model.predict(np.array([[8]])) # 8일차에 대한 예측
텐서플로에서 다중선형회귀 실행하기
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
x = np.array([ [1, 30],[2, 60], [3, 60],[4, 40],[5, 50]]) # 경과일, 운동시간
y = np.array([46.0, 46.2, 45.9, 45.8, 45.7]) # 몸무게
# 모델 선언
model = Sequential()
model.add(Dense(1, input_dim=2, activation='linear')) # 출력값: 1개, 입력변수: 2개, 선형회귀방식
# 학습 방법 설정
model.compile(optimizer='sgd', loss='mse') # sgd:경사하강법, mse: 평균제곱오차
# 학습수행
model.fit(x, y, epochs=100) #, ephochs: 반복횟수
# 예측
model.predict(np.array([[6, 45]]))) # 6일차, 45분 운동에 대한 예측