如何在Python中使用梯度下降法求解一元线性回归模型
时间: 2024-10-20 22:09:05 浏览: 51
在Python中,梯度下降法是一种常用的优化算法,用于求解一元线性回归模型中的参数。一元线性回归的目标是最小化预测值和实际值之间的均方误差(MSE)。以下是使用梯度下降的基本步骤:
1. **初始化参数**:假设我们有一个模型 `y = wx + b`,其中 `w` 是权重,`b` 是偏置。初始化权重 `w` 和偏置 `b`。
2. **计算损失函数的梯度**:对于每个训练样本 `(x_i, y_i)`,损失函数通常是均方误差,即 `L = (y_i - wx_i - b)^2 / 2`。梯度是这个损失函数对 `w` 和 `b` 的导数,分别表示为 `-x_i*(y_i - wx_i - b)` 和 `-(y_i - wx_i - b)`。
3. **更新参数**:按照学习率 `alpha` 更新权重和偏置,公式如下:
```
w_new = w - alpha * dw
b_new = b - alpha * db
```
4. **迭代过程**:不断重复步骤2和3,直到满足停止条件,例如达到预设的最大迭代次数、梯度大小小于某个阈值,或者损失函数变化不大等。
5. **返回最优参数**:得到的 `w_new` 和 `b_new` 即为最小化了MSE的一元线性回归模型参数。
以下是一个简单的示例代码:
```python
import numpy as np
def gradient_descent(X, y, learning_rate=0.01, max_iterations=1000):
m, n = X.shape
w = np.zeros(n)
b = 0
for _ in range(max_iterations):
# 预测值
y_pred = np.dot(X, w) + b
# 梯度计算
dw = (-2/n) * np.dot(X.T, (y_pred - y))
db = (-2/m) * sum(y_pred - y)
# 参数更新
w -= learning_rate * dw
b -= learning_rate * db
return w, b
# 示例数据
X = np.array([[1], [2], [3]])
y = np.array([2, 4, 6])
w, b = gradient_descent(X, y)
print(f"权重 w: {w}, 偏置 b: {b}")
```
阅读全文