批量梯度下降
def gradient_descent(x, y, w, learning_rate, iterations):
m = len(y)
cost_history = np.zeros(iterations)
for i in range(iterations):
predictions = h(x, w)
errors = predictions - y
w -= (learning_rate / m) * np.dot(x.T, errors) # 更新权重
cost_history[i] = cost_function(x, y, w) # 记录代价函数值
return w, cost_history
小批量梯度下降
def mini_batch_gradient_descent(x, y, w, learning_rate, iterations, batch_size):
m = len(y)
cost_history = np.zeros(iterations)
for i in range(iterations):
# Shuffle the data
indices = np.random.permutation(m)
x_shuffled = x[indices]
y_shuffled = y[indices]
for j in range(0, m, batch_size):
x_batch = x_shuffled[j:j + batch_size]
y_batch = y_shuffled[j:j + batch_size]
predictions = h(x_batch, w)
errors = predictions - y_batch
# Update weights
w -= (learning_rate / batch_size) * np.dot(x_batch.T, errors)
cost_history[i] = cost_function(x, y, w)
return w, cost_history