梯度下降法python实现
时间: 2023-09-23 13:11:36 浏览: 43
Sure,以下是梯度下降法Python实现的示例代码:
```
import numpy as np
def gradient_descent(X, y, theta, alpha, num_iters):
# 获取样本数量和特征数量
m = len(y) # 样本数量
n = X.shape[1] # 特征数量
# 开始迭代
for i in range(num_iters):
# 计算假设函数
h = X.dot(theta)
# 计算误差
error = h - y
# 计算梯度
grad = X.T.dot(error) / m
# 更新 theta
theta = theta - alpha * grad
return theta
```
其中,X是输入特征矩阵,y是输出变量向量,theta是模型参数向量,alpha是学习率,num_iters是迭代次数。该函数的作用是通过梯度下降法来最小化成本函数,并返回训练好的模型参数theta。
相关问题
梯度下降法python 实现
好的,以下是一个简单的梯度下降法的 Python 实现:
首先,我们需要定义一个损失函数及其梯度函数,以及初始参数值和学习率等超参数:
```python
import numpy as np
# 定义损失函数及其梯度函数
def loss_function(x, y, w):
y_pred = np.dot(x, w)
return np.mean((y_pred - y)**2)
def gradient_function(x, y, w):
y_pred = np.dot(x, w)
return 2*np.dot(x.T, y_pred - y) / len(y)
# 定义初始参数值和学习率等超参数
w = np.zeros((x.shape[1], 1))
learning_rate = 0.01
num_iterations = 1000
```
然后,我们可以开始进行梯度下降迭代:
```python
# 进行梯度下降迭代
for i in range(num_iterations):
gradient = gradient_function(x, y, w)
w -= learning_rate * gradient
loss = loss_function(x, y, w)
if i % 100 == 0:
print(f"Iteration {i}, loss = {loss}")
```
在每次迭代中,我们首先计算损失函数的梯度,然后根据学习率更新参数值,最后计算损失函数的值并输出。
完整代码如下:
```python
import numpy as np
# 定义损失函数及其梯度函数
def loss_function(x, y, w):
y_pred = np.dot(x, w)
return np.mean((y_pred - y)**2)
def gradient_function(x, y, w):
y_pred = np.dot(x, w)
return 2*np.dot(x.T, y_pred - y) / len(y)
# 定义初始参数值和学习率等超参数
x = np.random.rand(100, 10)
y = np.random.rand(100, 1)
w = np.zeros((x.shape[1], 1))
learning_rate = 0.01
num_iterations = 1000
# 进行梯度下降迭代
for i in range(num_iterations):
gradient = gradient_function(x, y, w)
w -= learning_rate * gradient
loss = loss_function(x, y, w)
if i % 100 == 0:
print(f"Iteration {i}, loss = {loss}")
```
机器学习梯度下降法python实现
机器学习中的梯度下降法是一种常用的优化算法,用于求解损失函数的最小值。在Python中,可以使用NumPy和Matplotlib等库来实现梯度下降法。具体实现步骤如下:
1. 定义损失函数和梯度函数;
2. 初始化参数;
3. 设置学习率和迭代次数;
4. 循环迭代,更新参数,直到满足停止条件;
5. 可视化损失函数和参数更新轨迹。
下面是一个简单的梯度下降法实现的范例代码:
import numpy as np
import matplotlib.pyplot as plt
# 定义损失函数和梯度函数
def loss_function(x):
return (x - 2.5)**2 - 1
def gradient_function(x):
return 2 * (x - 2.5)
# 初始化参数
xi = 0
lr = 0.1
epochs = 20
# 设置学习率和迭代次数
trajectory = []
# 循环迭代,更新参数,直到满足停止条件
for i in range(epochs):
trajectory.append(xi)
xi = xi - lr * gradient_function(xi)
# 可视化损失函数和参数更新轨迹
plot_x = np.linspace(-1, 6, 141)
plot_y = loss_function(plot_x)
plt.plot(plot_x, plot_y)
plt.plot(trajectory, loss_function(np.array(trajectory)), 'r-o')
plt.show()