题目
梯度下降在机器学习中是一种常用的优化算法,用于求解最小化损失函数的问题。其具体步骤如下:
1. 初始化参数
- 创建一个与输入矩阵 X X X 和输出矩阵 y y y 相关的矩阵 w w w。
- 数学表达式为:
w = 0 w = 0 w=0
本题初始化参数为0,但在实际使用中更常见的是使用随机初始化。
2. 计算梯度
- 计算损失函数 L L L 对参数 w w w 的梯度 g g g。
- 数学表达式为:
g = ∇ L ( w ) g = \nabla L(w) g=∇L(w)
本题使用的损失函数为均方误差,即:
L
(
w
)
=
1
2
m
∑
i
=
1
m
(
h
(
x
i
)
−
y
i
)
2
L(w) = \frac{1}{2m} \sum_{i=1}^{m} (h(x_i) - y_i)^2
L(w)=2m1i=1∑m(h(xi)−yi)2
其中,
h
(
x
i
)
h(x_i)
h(xi) 是预测值,
y
i
y_i
yi 是真实值,
m
m
m 是样本数量。
因此,梯度为:
g
=
1
m
∑
i
=
1
m
(
h
(
x
i
)
−
y
i
)
×
x
i
g = \frac{1}{m} \sum_{i=1}^{m} (h(x_i) - y_i) \times x_i
g=m1i=1∑m(h(xi)−yi)×xi
值得注意是,均方误差有两种形式,区别在于是否乘以1/2,本题使用的是乘以1/2的形式,这种形式的好处在于求梯度时可以消去1/2,使得计算更加简洁。
3. 更新参数
- 更新参数 w w w。
- 数学表达式为:
w = w − η × g w = w - \eta \times g w=w−η×g
值得注意的是,梯度下降有三种形式,分别是批量梯度下降、随机梯度下降和mini-batch梯度下降。
标准代码如下
def linear_regression_gradient_descent(X, y, alpha, iterations):
m, n = X.shape
# 初始化权重
theta = np.zeros((n, 1))
for _ in range(iterations):
predictions = X @ theta
errors = predictions - y.reshape(-1, 1)
updates = X.T @ errors / m
theta -= alpha * updates
return np.round(theta.flatten(), 4)