梯度下降算法是一种最常见的机器学习算法,常用于解决回归问题。该算法使用梯度(即损失函数对每个参数的偏导数)来更新参数,以最小化损失函数。
首先,我们定义一个损失函数来衡量预测值和实际值的差异。损失函数可以是均方误差,平均绝对误差等。随后,我们使用梯度下降算法来更新参数,以最小化损失函数。
具体来说,梯度下降算法使用如下步骤:
初始化模型参数;
计算损失函数的梯度;
使用梯度来更新模型参数:参数 = 参数 - 学习率 * 梯度;
重复步骤 2 和 3,直到损失函数的值达到最小值。
梯度下降算法的一个重要的参数是学习率,它决定了每次更新参数的幅度。如果学习率过大,模型可能会不收敛;如果学习率过小,训练速度会变慢。
import numpy as np
class LinearRegression:
def __init__(self):
self.weights = None
def fit(self, X, y):
# 计算权重
X = np.column_stack((np.ones(len(X)), X))
self.weights = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
def predict(self, X):
# 预测输出
X = np.column_stack((np.ones(len(X)), X))
return X.dot(self.weights)
# 生成随机数据
np.random.seed(0)
X = np.random.rand(100, 1)
y = 2 + 3 * X + np.random.randn(100, 1)
# 模型训练
reg = LinearRegression()
reg.fit(X, y)
# 预测输出
y_pred = reg.predict(X)