Python 机器学习 线性回归 梯度下降法优化损失函数
Python 机器学习中,梯度下降法是一种用于优化线性回归模型(以及其他机器学习算法)的损失函数的通用算法。目的是通过迭代地调整模型的参数(权重和截距),以最小化损失函数,例如均方误差(MSE)。梯度下降的基本思想是计算损失函数相对于每个参数的梯度(即偏导数),然后朝着减少损失的方向调整参数。这个过程重复进行,直到损失函数收敛到最小值或达到预定的迭代次数。
参考文档:
1、线性回归
线性回归是一种监督学习算法,用于模型化特征和目标变量之间的线性关系。它试图找到一条直线(在二维空间中)或一个超平面(在多维空间中),以便最好地拟合给定数据点。线性回归的目标是最小化预测值和实际值之间的差异,通常使用均方误差(MSE)作为损失函数来衡量这种差异。
参考文档:
2、损失函数
为了训练机器学习模型,需要一个评价标准来衡量模型的性能。损失函数提供了这样一个标准,通过最小化损失函数来优化模型参数。损失函数(有时称为成本函数)衡量模型预测值与实际值之间的差异。对于线性回归,常用的损失函数是均方误差(MSE)。公式代码如下,
import numpy as np # 假设 X 是输入特征矩阵,y 是目标值向量 X = np.array([[1, 2], [1, 3], [1, 4], [1, 5]]) # 添加了一列1作为x0,以便处理截距项 y = np.array([5, 7, 9, 11]) # 初始化模型参数,theta0为截距,theta1, theta2为斜率 theta = np.array([0.1, 0.2]) # 线性回归模型的预测函数 def predict(X, theta): return X.dot(theta) # 计算损失函数(MSE) def compute_loss(X, y, theta): m = len(y) y_pred = predict(X, theta) loss = (1 / (2 * m)) * np.sum(np.square(y_pred - y)) return loss # 计算损失值 loss = compute_loss(X, y, theta) print(f"Loss: {loss}")
参考文档:
3、梯度下降
梯度下降法是一种用来优化线性回归模型中损失函数的算法。它通过不断迭代模型的参数(权重和截距),以减少损失函数的值,从而找到损失函数的最小值。这一过程是通过计算损失函数对每个参数的梯度(偏导数)并根据这些梯度更新参数来实现的。对于线性回归,通常使用均方误差(MSE)作为损失函数。公式代码如下,
import numpy as np # 模拟数据 np.random.seed(42) X = 2 * np.random.rand(100, 1) y = 4 + 3 * X + np.random.randn(100, 1) # 添加截距项到X X_b = np.c_[np.ones((100, 1)), X] # 添加x0 = 1到每个实例 # 梯度下降参数 learning_rate = 0.01 n_iterations = 1000 m = len(X_b) # 随机初始化参数 theta = np.random.randn(2, 1) # 梯度下降 for iteration in range(n_iterations): gradients = 2/m * X_b.T.dot(X_b.dot(theta) - y) theta -= learning_rate * gradients print("模型参数:", theta) predictions = X_b.dot(theta) mse = (1/m) * np.sum((predictions - y) ** 2) print("MSE:", mse)
SGDRegressor
是scikit-learn库中用于解决回归问题的一个类,使用随机梯度下降(SGD)算法。这种方法特别适合大规模数据集,因为它每次更新模型参数时只使用数据集中的一个样本,从而减少了计算资源的需求。常用参数如下,
参数 |
描述 |
loss |
损失函数,默认是'squared_loss'。 其他可选项包括'huber'、'epsilon_insensitive' 或者'quantile'等。 |
penalty |
正则化项,默认是'l2'。 也可以设置为'l1'或'elasticnet'。 |
alpha |
正则化项的系数,默认是0.0001。 |
learning_rate |
学习率的调整方式,默认是'invscaling'。 其他选项包括'constant'、'optimal'和'adaptive'。 |
max_iter |
最大迭代次数,默认是1000。 |
tol |
停止标准。当一次迭代中损失的改善小于这个值时, 算法会停止,默认值为1e-3。 |
eta0 |
当学习率设置为'constant' 或'adaptive'时的初始学习率。 |
使用示例: