梯度下降法python代码
时间: 2023-05-20 19:06:26 浏览: 148
以下是一个简单的梯度下降法的 Python 代码示例:
```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 是迭代次数。函数的作用是通过梯度下降法来优化参数 theta,使得模型的预测结果与真实值之间的误差最小化。
相关问题
梯度下降算法python代码
梯度下降算法是一种常用的优化算法,用于求解函数的最小值。以下是一个简单的梯度下降算法的Python代码示例:
```python
import numpy as np
def gradient_descent(X, y, learning_rate, num_iterations):
num_samples, num_features = X.shape
theta = np.zeros(num_features) # 初始化参数向量
for i in range(num_iterations):
# 计算预测值
y_pred = np.dot(X, theta)
# 计算误差
error = y_pred - y
# 计算梯度
gradient = np.dot(X.T, error) / num_samples
# 更新参数
theta -= learning_rate * gradient
return theta
# 示例数据
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
y = np.array([4, 7, 10])
# 调用梯度下降算法
learning_rate = 0.01
num_iterations = 1000
theta = gradient_descent(X, y, learning_rate, num_iterations)
print("最优参数:", theta)
```
相关问题:
1. 什么是梯度下降算法?
2. 如何选择学习率和迭代次数?
3. 梯度下降算法的优缺点是什么?
4. 还有哪些常用的优化算法?
小批量梯度下降法python代码实现
小批量梯度下降(Stochastic Gradient Descent, SGD)是一种常用的优化算法,在机器学习中常用于训练模型。它通过随机选取一部分样本来更新模型权重,相比批量梯度下降(Batch Gradient Descent)更节省计算资源。以下是Python中使用`scikit-learn`库实现小批量梯度下降的一个简单示例:
```python
import numpy as np
from sklearn.base import BaseEstimator
class StochasticGD(BaseEstimator):
def __init__(self, learning_rate=0.01, batch_size=32):
self.learning_rate = learning_rate
self.batch_size = batch_size
self.weights = None
def fit(self, X, y):
n_samples, n_features = X.shape
self.weights = np.zeros(n_features)
for i in range(0, n_samples, self.batch_size):
batch_X = X[i:i+self.batch_size]
batch_y = y[i:i+self.batch_size]
gradient = self.gradient(batch_X, batch_y)
self.weights -= self.learning_rate * gradient
def gradient(self, X_batch, y_batch):
# 这里假设我们有一个简单的线性模型 w * X + b 的损失函数需要最小化
predictions = np.dot(X_batch, self.weights)
loss_gradient = (predictions - y_batch) / len(y_batch)
return loss_gradient
# 使用示例
X = ... # 输入特征矩阵
y = ... # 目标变量
sgd = StochasticGD()
sgd.fit(X, y)
```
在这个例子中,我们创建了一个基础的SGD类,并实现了`fit`方法来迭代训练数据。每次循环,都会从数据集中抽取一个小批次的样本进行梯度计算并更新权重。
阅读全文