用Python代码实现梯度下降法
时间: 2023-05-15 17:05:04 浏览: 124
可以使用以下代码实现梯度下降法:
```python
import numpy as np
def gradient_descent(X, y, theta, alpha, num_iters):
m = len(y)
for i in range(num_iters):
h = np.dot(X, theta)
loss = h - y
gradient = np.dot(X.T, loss) / m
theta = theta - alpha * gradient
return theta
```
其中,X 是输入特征矩阵,y 是输出向量,theta 是参数向量,alpha 是学习率,num_iters 是迭代次数。在每次迭代中,计算预测值 h,计算误差 loss,计算梯度 gradient,更新参数 theta。最后返回学习到的参数 theta。
注意,这只是梯度下降法的一种实现方式,实际应用中可能需要根据具体问题进行调整。
相关问题
梯度下降法 python_python实现梯度下降法
好的,我理解了你的要求。以下是 Python 实现梯度下降法的代码:
```
import numpy as np
def gradient_descent(X, y, theta, alpha, num_iters):
"""
X: 输入特征矩阵
y: 输出标签向量
theta: 参数向量
alpha: 学习率
num_iters: 迭代次数
"""
m = len(y)
for i in range(num_iters):
h = np.dot(X, theta)
loss = h - y
gradient = np.dot(X.T, loss) / m
theta = theta - alpha * gradient
return theta
```
这个函数接受四个参数:输入特征矩阵 `X`、输出标签向量 `y`、参数向量 `theta`、学习率 `alpha` 和迭代次数 `num_iters`。在函数内部,使用 `for` 循环来进行迭代,每次迭代计算模型预测值 `h`,然后计算损失 `loss` 和梯度 `gradient`。最后更新参数向量 `theta`,返回更新后的参数向量。
需要注意的是,在使用这个函数之前,需要先对输入特征矩阵 `X` 进行预处理,将所有特征值归一化到相同的尺度,以避免在梯度下降过程中出现数值不稳定的情况。
python代码示例梯度下降法对数据进行线性拟合
可以回答这个问题。梯度下降法是一种常用的优化算法,可以用于线性回归模型的参数估计。以下是一个 Python 代码示例:
```python
import numpy as np
# 生成样本数据
x = np.random.rand(100)
y = 2 * x + 1 + np.random.randn(100) * 0.1
# 初始化参数
theta = np.random.randn(2)
# 定义损失函数
def loss_function(theta, x, y):
y_pred = theta[0] + theta[1] * x
return np.mean((y_pred - y) ** 2)
# 定义梯度函数
def gradient(theta, x, y):
y_pred = theta[0] + theta[1] * x
grad = np.zeros(2)
grad[0] = np.mean(y_pred - y)
grad[1] = np.mean((y_pred - y) * x)
return grad
# 梯度下降迭代
learning_rate = 0.1
for i in range(1000):
grad = gradient(theta, x, y)
theta = theta - learning_rate * grad
if i % 100 == 0:
print("Iteration %d, loss = %.4f" % (i, loss_function(theta, x, y)))
# 输出结果
print("theta = ", theta)
```
这段代码使用随机生成的数据,通过梯度下降法对数据进行线性拟合,得到参数估计结果。
阅读全文