선형 회귀 경사하강법 관련 질문
-
게시물 수정 , 삭제는 로그인 필요
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
data = [[2,0,81],[4,4,93],[6,2,91],[8,3,97]]
x1 = [i[0] for i in data]
x2 = [i[1] for i in data]
y = [i[2] for i in data]
plt.figure(figsize= (10,10))
ax = plt.axes(projection = '3d')
ax.set_xlabel('study_time')
ax.set_ylabel('privite class')
ax.set_zlabel('Score')
ax.dist = 11
ax.scatter(x1,x2,y)
plt.show()
x1_data = np.array(x1)
x2_data = np.array(x2)
y_data = np.array(y)
a1 = 0
a2 = 0
b = 0
Ir = 0.05
epochs = 2001
for i in range(epochs):
y_pred = a1 * x1_data +a2 *x2_data +b
error = y_data - y_pred
a1_diff = -(1/len(x1_data)) * sum(x1_data * (error))
a2_diff = -(1/len(x2_data))*sum(x2_data*(error))
b_new= -(1/len(x1_data))*sum(y_data - y_pred)
a1 = a1 -Ir *a1_diff
a2 = a2 - Ir *a2_diff
b = b - Ir *b_new
if i % 100 == 0:
print("epoch = {}, 기울기1 = {:0.4f}, 기울기2= {:0.4f}, 절편 = {:0.4f},".format(i,a1,a2,b))
이 코드가 제가 공부하고 있는 책에 예시로 나와있는 코드인데요,
a1_diff = -(1/len(x1_data)) * sum(x1_data * (error))을 해서 얻은 편미분값이 만약 양수라면 기울기값을 줄여야 오차범위가 줄어들텐데 기울기에 적용시키는 코드를 보면:a1 = a1 -Ir *a1_diff 이미 마이너스 처리된 편미분값에 다시 마이너스를 붙여 오히려 기울기를 증가시키는 셈이 되어버리고 이로서 오차가 더 커져야 되는 게 아닌가요?
print써서 보니까 배열이 들어가 있어서 그런건가 하는데 이해가 잘 안돼서요.이에 대해서 설명 좀 해주세요.
#선형 회귀 분석 #선형 회귀 #선형 회귀 모델 #선형 회귀 방정식 #선형 회귀 로지스틱 회귀 #선형 회귀 알고리즘 #선형 회귀식 #선형 회귀분석 개념 #선형 회귀란 #선형 회귀 뜻