1. 梯度下降算法简介
梯度下降算法是一种常用的优化算法,主要用于寻找函数的最小值点或最大值点。在机器学习中,梯度下降算法被广泛应用于求解损失函数最小值,从而得到最佳的模型参数。
1.1 梯度的定义
梯度表示函数在某一点上升最快的方向,其大小表示函数的变化率。对于多元函数f(x1, x2, ..., xn),其梯度为:
grad f(x) = (?f/?x1, ?f/?x2, ..., ?f/?xn)
其中,?f/?xi 表示函数 f 在 x 在第 i 个维度上的变化率。
1.2 梯度下降算法步骤
梯度下降算法的基本步骤如下:
随机初始化参数。
计算损失函数在当前参数下的梯度。
更新参数,使损失函数值减小。
重复步骤2和步骤3,直到达到指定的精度或迭代次数。
2. 梯度下降算法实例
下面通过一个简单的线性回归问题来演示梯度下降算法的实现过程。
2.1 问题描述
假设我们有一个关于房价与房屋面积的数据集,现在我们想要使用线性回归模型来预测房价。模型的公式为:
y = wx + b
其中,w 和 b 是待求的参数,y 和 x 表示房价和房屋面积。我们需要使用训练集中的数据来计算最佳的参数值,使得损失函数最小。
2.2 代码实现
首先,我们需要导入相关的库。
import numpy as np
import matplotlib.pyplot as plt
然后,我们需要准备一些训练数据。
# 训练数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([3, 5, 7, 9, 11])
接着,我们随机初始化模型的参数。
# 参数初始化
w = np.random.rand()
b = np.random.rand()
print('w:', w)
print('b:', b)
接下来,我们需要定义损失函数和梯度函数。
# 损失函数
def loss_func(x, y, w, b):
loss = np.mean((y - w * x - b) ** 2)
return loss
# 梯度函数
def grad_func(x, y, w, b):
grad_w = -2 * np.mean(x * (y - w * x - b))
grad_b = -2 * np.mean(y - w * x - b)
return grad_w, grad_b
定义好损失函数和梯度函数后,我们就可以进行模型的训练了。
# 训练模型
lr = 0.01
epochs = 1000
for i in range(epochs):
# 计算梯度
grad_w, grad_b = grad_func(x, y, w, b)
# 更新参数
w -= lr * grad_w
b -= lr * grad_b
# 计算损失函数
loss = loss_func(x, y, w, b)
if i % 100 == 0:
print('epoch:', i, 'loss:', loss)
最后,我们可以使用训练好的模型来预测新的数据。
# 预测新数据
x_new = np.array([6, 7, 8, 9, 10])
y_new = w * x_new + b
print('y_new:', y_new)
3. 结论
在本文中,我们介绍了梯度下降算法,并使用一个简单的线性回归问题演示了梯度下降算法的实现过程。通过训练模型,我们得到了最佳的参数值,并可以使用该模型对新数据进行预测。