У меня проблемы с использованием numpy для распараллеливания этого цикла for ниже (get_new_weights).С моей первой попыткой df_dm в update_weights вес совершенно неверный.Со второй попыткой df_dm мой вес превышает оптимальный.
Примечание. Смещение - это одно число, а вес - это одно число (одна переменная линейная регрессия), а X - это форма (442,1), а y - это форма (442,1).Также обратите внимание, что обновление моего смещения отлично работает в update_weights - это просто обновление веса, с которым у меня возникают проблемы.
# This is the for loop that I am trying to parallelize with numpy:
def get_new_weights(X, y, weight, bias, learning_rate=0.01):
weight_deriv = 0
bias_deriv = 0
total = len(X)
for i in range(total):
# -2x(y - (mx + b))
weight_deriv += -2*X[i] * (y[i] - (weight*X[i] + bias))
# -2(y - (mx + b))
bias_deriv += -2*(y[i] - (weight*X[i] + bias))
weight -= (weight_deriv / total) * learning_rate
bias -= (bias_deriv / total) * learning_rate
return weight, bias
# This is my attempt at parallelization
def update_weights(X, y, weight, bias, lr=0.01):
df_dm = np.average(-2*X * (y-(weight*X+bias))) # this was my first guess
# df_dm = np.average(np.dot((-X).T, ((weight*X+bias)-y))) # this was my second guess
df_db = np.average(-2*(y-(weight*X+bias)))
weight = weight - (lr*df_dm)
bias = bias - (lr*df_db)
return weight,bias
Это уравнение, которое я использую для обновления моего веса и смещения: