从零推导线性回归:最小二乘法与梯度下降的数学原理
【摘要】 从零推导线性回归:最小二乘法与梯度下降的数学原理 介绍线性回归是一种用于建模因变量和一个或多个自变量之间关系的统计方法。最常用的线性回归方法有最小二乘法和梯度下降法。 应用使用场景房价预测:根据历史数据预测未来房价。销售数据分析:分析市场趋势以做出销售决策。医学研究:评估药物剂量与疗效之间的关系。经济学建模:分析经济指标对 GDP 的影响。 原理解释 最小二乘法最小二乘法通过最小化预测值和...
从零推导线性回归:最小二乘法与梯度下降的数学原理
介绍
线性回归是一种用于建模因变量和一个或多个自变量之间关系的统计方法。最常用的线性回归方法有最小二乘法和梯度下降法。
应用使用场景
- 房价预测:根据历史数据预测未来房价。
- 销售数据分析:分析市场趋势以做出销售决策。
- 医学研究:评估药物剂量与疗效之间的关系。
- 经济学建模:分析经济指标对 GDP 的影响。
原理解释
最小二乘法
最小二乘法通过最小化预测值和实际值之间的平方误差和来找到最佳拟合直线。具体来说,给定数据点 ((x_i, y_i)),目标是找到参数 (b_0) 和 (b_1):
[ \text{Loss} = \sum_{i=1}^{n} (y_i - (b_0 + b_1 x_i))^2 ]
求解过程涉及到计算偏导数并将其设为零来得到参数的闭式解。
梯度下降
梯度下降是一种迭代优化算法,通过不断调整参数以最小化损失函数。在每次迭代中,参数沿着损失函数梯度的反方向更新:
[ b_j := b_j - \alpha \frac{\partial \text{Loss}}{\partial b_j} ]
其中 (\alpha) 是学习率。
算法原理流程图
+---------------------------+
| 初始化参数 |
+-------------+-------------+
|
v
+-------------+-------------+
| 计算预测误差 |
+-------------+-------------+
|
v
+-------------+-------------+
| 更新参数(梯度下降) |
+-------------+-------------+
|
v
+-------------+-------------+
| 检查收敛条件 |
+-------------+-------------+
|
v
+-------------+-------------+
| 输出最终模型 |
+---------------------------+
数学推导
最小二乘法
通过对损失函数 (\text{Loss}) 求导并设为零,可以得到参数的解析解:
[ b_1 = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sum (x_i - \bar{x})^2} ]
[ b_0 = \bar{y} - b_1 \bar{x} ]
梯度下降
损失函数的偏导数为:
[ \frac{\partial \text{Loss}}{\partial b_0} = -2 \sum (y_i - (b_0 + b_1 x_i)) ]
[ \frac{\partial \text{Loss}}{\partial b_1} = -2 \sum x_i (y_i - (b_0 + b_1 x_i)) ]
在每个步骤中,更新参数:
[ b_0 := b_0 - \alpha \cdot \frac{\partial \text{Loss}}{\partial b_0} ]
[ b_1 := b_1 - \alpha \cdot \frac{\partial \text{Loss}}{\partial b_1} ]
实际详细应用代码示例实现
以下是在 Python 中使用最小二乘法和梯度下降实现线性回归的示例:
import numpy as np
import matplotlib.pyplot as plt
# 样本数据
X = np.array([1, 2, 3, 4, 5])
Y = np.array([2, 4, 5, 4, 5])
# 最小二乘法
def least_squares(X, Y):
n = len(X)
X_mean = np.mean(X)
Y_mean = np.mean(Y)
b1 = np.sum((X - X_mean) * (Y - Y_mean)) / np.sum((X - X_mean)**2)
b0 = Y_mean - b1 * X_mean
return b0, b1
b0_ls, b1_ls = least_squares(X, Y)
# 梯度下降
def gradient_descent(X, Y, alpha=0.01, epochs=1000):
n = len(X)
b0, b1 = 0, 0
for _ in range(epochs):
Y_pred = b0 + b1 * X
d_b0 = -2 * np.sum(Y - Y_pred) / n
d_b1 = -2 * np.sum(X * (Y - Y_pred)) / n
b0 -= alpha * d_b0
b1 -= alpha * d_b1
return b0, b1
b0_gd, b1_gd = gradient_descent(X, Y)
# 绘制结果
plt.scatter(X, Y, color='blue', label='Data Points')
plt.plot(X, b0_ls + b1_ls * X, color='red', label='Least Squares')
plt.plot(X, b0_gd + b1_gd * X, color='green', linestyle='--', label='Gradient Descent')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()
测试步骤以及详细代码、部署场景
-
准备数据:
- 使用 numpy 创建样本数据。
-
实现算法:
- 编写
least_squares
和gradient_descent
函数。
- 编写
-
运行脚本:
- 执行代码,查看拟合直线效果,并观察最小二乘法与梯度下降的区别。
-
调整参数:
- 修改学习率和迭代次数,观察梯度下降收敛速度的变化。
材料链接
总结
线性回归是基本且强大的统计工具,可解释和预测变量间关系。最小二乘法适用于简单线性问题,而梯度下降可扩展至更复杂的数据集和多维特征。
未来展望
随着机器学习技术的发展,线性回归将与其他高级模型相结合,用于处理非线性和高维数据。此外,优化算法(如自适应梯度下降)继续演进,将显著提高模型的训练效率和预测性能。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)