기울기 하강법을 사용한 선형 회귀
우리는 회귀 모델에서 그것을 알고 있습니다. 선(선형 회귀의 경우) 또는 평면/초평면(다변량 회귀의 경우)을 맞추려고 합니다. 따라서 해당 선/평면을 사용하여 테스트/미래 데이터에 대한 예측을 수행할 수 있습니다.
나는 이미 Scikit Learn을 사용하여 선형 및 다변량 회귀 모델링 구현에 대한 블로그를 작성했으며 찾을 수 있습니다.
당신은 우리가 이미 그것을 다루었다면 우리가 그것을 다시 하고 있는지 궁금할 것입니다.
사물sklearn.linear_model.LinearRegression은 데이터에 가장 잘 맞는 선을 찾기 위해 일반 최소 제곱 선형 회귀 방법을 사용합니다. 그러나 Gradient Descent가 선형 회귀에서 어떻게 작동하는지 확인하고 싶습니다.
Ordinary least square method로 할 수 있는데 왜 Gradient Descent로 해야 할까요?
일반 최소 제곱 방법은 도함수가 0일 때 해결하는 0에 대해 해결하여 최상의 기울기를 찾습니다. 그러나 때때로 도함수가 0인 경우를 풀 수 없으며, 이것이 Gradient Descent가 많은 상황에서 사용될 수 있는 이유입니다. 이것이 선형 회귀의 경우가 아니라는 것을 알고 있습니다. 선형 회귀의 미분이 0인 경우 쉽게 해결할 수 있지만 선형 회귀를 사용하여 기울기 하강법의 사용법과 힘을 이해하기 쉽습니다. 또한 Neural Network는 Gradient Descent도 사용하고 여기에서 사용하는 비용 함수 MSE도 Neural Networks에서 사용됩니다. 따라서 이것은 또한 우리가 논의할 때 신경망을 위한 경사 하강법의 아이디어를 확장하는 데 도움이 될 것입니다.
파이썬 구현
선형 회귀 모델
y = mx + c
에 대해 x와 y가 있다고 가정해 보겠습니다. 여기서 x와 y의 값은 다음과 같습니다.
x = np.array([1,2,3,4,5])
y = np.array([5,7,9,11,13])
Gradient descent를 사용하여 매개변수 m & c를 조정하려고 합니다. 따라서 우리는 x가 주어진 y를 정확하게 찾을 수 있습니다.
무엇이든 시작하기 전에 사용할 비용 함수를 결정하십시오. 이 구현을 위해 MSE(Mean Square Error) LOSS/COST 기능을 사용할 것입니다.
1 단계
LearningRate와 최대 반복 횟수(단계)를 초기화하는 것으로 시작하겠습니다.
learningRate = 0.01
max_iterations = 10000
n = len(x)
2 단계
모든 매개 변수를 조정하려는 임의의 값으로 초기화합니다.
m=1 # slope
c=0 # intercept
3단계
매개변수의 현재 값을 사용하여 예측을 수행합니다.
y_pred = ((m * x) + c)
4단계
그런 다음 각각의 매개변수에 대해 Loss 함수의 편도함수를 취합니다. 멋진 기계 학습에서는 손실 함수의 기울기를 계산합니다.
t1 = x * (y-y_pred)
t2 = (y-y_pred)
md = -(2/n)*sum(t1)
cd = -(2/n)*sum(t2)
5단계
매개변수 업데이트
m = m - learningRate * md
c = c - learningRate * cd
6단계
단계 수에 대해 3에서 5를 반복합니다.
for each in range(max_iterations):
# Step-2
# Prediction
y_pred = ((m * x) + c)
# Step-3
# Calculating Gradient (Vector of Partial Directives)
t1 = x * (y-y_pred)
t2 = (y-y_pred)
md = -(2/n)*sum(t1)
cd = -(2/n)*sum(t2)
# Step-4
# Update the parameters/variable
m = m - learningRate * md
c = c - learningRate * cd
print(f"Slope= {m}\nIntercept={c}")
최종 코드
def gradientDescent(x,y):
# Initializing Learning rate
learningRate = 0.01
# Step-1
# Initialization
max_iterations = 10000
m=1
c=0
n = len(x)
for each in range(max_iterations):
# Step-2
# Prediction
y_pred = ((m * x) + c)
# Step-3
# Calculating Gradient (Vector of Partial Directives)
t1 = x * (y-y_pred)
t2 = (y-y_pred)
md = -(2/n)*sum(t1)
cd = -(2/n)*sum(t2)
# Step-4
# Update the parameters/variable
m = m - learningRate * md
c = c - learningRate * cd
print(f"Slope= {m}\nIntercept={c}")
x = np.array([1,2,3,4,5])
y = np.array([5,7,9,11,13])
gradientDescent(x,y)
학습률 및 반복 조정(단계)
우리는 일반적으로 반복(단계) 수를 적게 유지하는 것으로 시작하고 작은 학습률(예: 0.001)로 시작합니다. 각 반복에 대한 비용을 줄이는지 확인합니다. 비용을 줄이는 경우 비용이 여전히 감소하는 경우 학습 속도를 0.001에서 0.1로 높일 수 있습니다. 비용이 증가하여 Global Minima를 넘어설 때까지 학습 속도를 계속 높일 수 있습니다. 따라서 우리의 목표는 각 단계에서 비용을 줄이는 것이므로 COST를 증가시키는 학습 속도보다 작아야 합니다.
일단 찾으면 비용이 감소하는 최대 학습 속도를 시도하고 있습니다. 반복 횟수(단계)를 늘릴 수 있습니다.
학습률에 대한 최적의 값을 찾는 정확한 방법/방법은 없으며 단계는 히트와 시도에 가깝습니다. 이것은 그것에 대해 갈 수있는 방법 중 하나 일 수 있습니다.
이들은 기본적으로 동일한 작업을 수행하는 좋은 YouTube 동영상입니다.
데이비드 아웃
Reference
이 문제에 관하여(기울기 하강법을 사용한 선형 회귀), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/daud99/linear-regression-using-gradient-descent-32bn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)