선형 회귀 경사하강법 관련 질문

선형 회귀 경사하강법 관련 질문

작성일 2023.05.04댓글 1건
    게시물 수정 , 삭제는 로그인 필요

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[0for i in data]
x2 = [i[1for i in data]
y = [i[2for 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써서 보니까 배열이 들어가 있어서 그런건가 하는데 이해가 잘 안돼서요.이에 대해서 설명 좀 해주세요.



#선형 회귀 분석 #선형 회귀 #선형 회귀 모델 #선형 회귀 방정식 #선형 회귀 로지스틱 회귀 #선형 회귀 알고리즘 #선형 회귀식 #선형 회귀분석 개념 #선형 회귀란 #선형 회귀 뜻

profile_image 익명 작성일 -

a1_diff = -(1/len(x1_data)) * sum(x1_data * (error))에서 편미분 값을 구한 후에 기울기값을 줄이기 위해서는 해당 편미분 값에 학습률(Ir)과 마이너스 부호를 붙여서 빼주어야 합니다. 따라서, a1 = a1 -Ir *a1_diff의 코드는 올바른 코드입니다.

예를 들어, a1_diff가 0.1이라면, 학습률(Ir)이 0.05라고 가정했을 때, a1값은 a1 - 0.05 * 0.1 = a1 - 0.005가 되어 갱신됩니다. 이때, 마이너스 부호가 붙는 것은 a1_diff가 양수이기 때문입니다. 따라서, 이 코드는 기울기값을 적절하게 갱신하는 코드입니다.

그리고, sum() 함수 안에서 x1_data * (error) 연산을 수행하여 배열을 만들고, 이 배열의 원소들을 모두 더한 후 전체 배열의 원소 개수인 len(x1_data)로 나누는 것이므로, 마이너스 부호는 편미분 값을 음수로 만들어 줍니다. 따라서, 마이너스 부호를 사용하는 것이 올바른 방법입니다.

선형 회귀에서 최소 제곱법 적용

... 비선형 회귀를 수행합니다. 이를 위해 경사 하강법이나 뉴튼 랩슨 등의 최적화... ♣답변이 도움되셨다면 채택 부탁드려요♣ ♣추가로 궁금하신점이 있으시다면 추가질문을...

회귀 모델엔 뭐가 있나여??

... SGDRegressor은 경사하강법을 활용한 모델입니다. 반면 Lasso, Ridge, ElasticNet은 선형 회귀(Linear... ※ 질문주신 내용 이외에도, 머신러닝과 관련하여...

쓰이는 라쏘(Lasso)회귀 질문드립니다!

... 일반적으로 Lasso 회귀경사하강법과 같은 반복적인 최적화 알고리즘을 사용하여 최적의 회귀 계수를 찾습니다. 그러나 Lasso 회귀는 미분 가능하지 않은 비선형...

linear regression 질문

... (반복 횟수는 5번) 계산과정 자세히 부탁드립니다 선형 회귀 분석에서 가장 많이 사용되는 알고리즘은 경사하강법(Gradient Descent)입니다....

선형회귀 질문

... 최적화를 경사하강법으로 해서 그런거라면 손실함수를 미분해서 저렇게 나온건가요… 만약 그렇다면 미분과정을 설명해주시면 감사하겠습니다.. W는 벡터입니다....