Я реализую стохастический градиентный спуск для линейной регрессии вручную, учитывая частные производные (df / dm) и (df / db)
Цель состоит в том, чтобы мы случайным образом выбрали w0 (веса), а затемсходятсяПоскольку это стохастик, мы должны брать выборку набора данных при каждом прогоне
Первоначально скорость обучения должна составлять 1, а после каждого прогона она должна уменьшаться на 2, поэтому, когда wK + 1 равна wK (k = 1,2,3, ......) тогда цикл должен остановиться
Это реализовано в наборе данных Бостона в Sklearn
Поскольку я новичок в Python не сделалИспользуйте функции Ниже приведен код:
r= 1
m_deriv = 0
b_deriv = 0
learning_rate = 1
it = 1
w0_random = np.random.rand(13)
w0 = np.asmatrix(w0_random).T
b = np.random.rand()
b0 = np.random.rand()
while True:
df_sample = bos.sample(100)
price = df_sample['price']
price = np.asmatrix(price)
xi = np.asmatrix(df_sample.drop('price',axis=1))
N = len(xi)
for i in range(N):
# -2x * (y-(mx +b))
m_deriv += np.dot(-2*xi[i].T , (price[:,i] - np.dot(xi[i] , w0_random) + b))
# -2(y - (mx + b))
b_deriv += -2*(price[:,i] - (np.dot(xi[i] , w0_random) + b))
w0_new = m_deriv * learning_rate
b0_new = b_deriv * learning_rate
w1 = w0 - w0_new
b1 = b0 - b0_new
it += 1
if (w0==w1).all():
break
else:
w0 = w1
b0 = b1
learning_rate = learning_rate/2
, и когда цикл запускается, я получаю большие значения для w и b.Они не сходятся должным образом, где цикл пошел не так, что приводит к более высоким значениям и как их решить.