问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

深度学习基础-多元线性回归

创作时间:
作者:
@小白创作中心

深度学习基础-多元线性回归

引用
CSDN
1.
https://blog.csdn.net/shiguang521314/article/details/136788842

目录
前言
一、多元线性回归原理
1.目标
2.重点:
二、使用步骤
1.导入所需的库:
2.定义数据集 x 和 y:
3.设置学习率 lr 和迭代次数 epoches:
4.初始化权重 w:
5.计算预测值 ya:
6.计算损失函数 loss:
7.初始化权重列表 w_list 和损失列表 loss_list:
8.开始迭代训练:
9.计算梯度 w_gra:
10.更新权重 w:
11.计算新的损失值 loss:
12.检查损失是否增加:
13.存储新的权重和损失值:
14.打印迭代信息:
15.打印最终的权重 w:
16.计算并打印预测值 ya:
17.绘制散点图:
18.绘制预测值 ya 和真实值 y 的折线图:
三、运行结果
总结

前言

随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习-多元线性回归的基础内容。

一、多元线性回归原理

1.目标:

多元线性回归模型的一般形式是:
$$
Y = \beta_0 + \beta_1X_1 + \beta_2X_2 + \cdots + \beta_nX_n
$$
其中

  • $Y$ 是目标变量。
  • $X_1, X_2, \ldots, X_n$ 是特征变量。
  • $\beta_0$ 是截距项。
  • $\beta_1, \beta_2, \ldots, \beta_n$ 是每个特征的系数。

目标是:让预测值和真实值之间的差异尽可能的小
为了找到最佳的系数,我们通常使用最小二乘法。最小二乘法的目标是最小化误差的平方和,即最小化以下损失函数:
$$
L(\beta) = \sum_{i=1}^{m}(y_i - \hat{y}_i)^2
$$
其中,$y_i$ 是真实值,$\hat{y}_i$ 是预测值。为了找到损失函数的最小值,我们对每个系数分别求偏导数,并将它们设为零。这样我们可以得到以下方程组:

2.重点:

损失函数用于衡量预测值和真实值之间的差异。数学表达式如下:
$$
L(\beta) = \frac{1}{2m} \sum_{i=1}^{m}(y_i - \hat{y}_i)^2
$$
其中:

  • $m$ 是样本数量。
  • $y_i$ 是第 $i$ 个样本的真实值。
  • $\hat{y}_i$ 是第 $i$ 个样本的预测值。

在代码中,$y$ 对应于 $y$ 数组,而 $\hat{y}$ 对应于通过当前权重 $w$ 预测得到的值 $ya$。因此,损失函数可以重写为:
$$
L(\beta) = \frac{1}{2} \sum_{i=1}^{m}(y_i - \hat{y}_i)^2
$$
其中:

  • $\beta_0$ 是截距项。
  • $\beta_1, \beta_2, \ldots, \beta_n$ 是每个特征的系数。
  • $x_i$ 是第 $i$ 个样本的特征值。

这个损失函数通过最小化预测值和真实值之间的差的平方和,来优化模型的权重参数。
此时,我们得到确定我们的损失函数,之所以在前面加上一个 $\frac{1}{2}$ 是为了方便求导的时候能够消去。

二、使用步骤

1.导入所需的库:

import numpy as np
import matplotlib.pyplot as plt
  • numpy 是用于科学计算的库。
  • matplotlib.pyplot 是用于绘图的库。

2.定义数据集 x 和 y:

x = np.array([[0.180, 0.001*1], [0.100, 0.001*2], ...])
y = np.array([[0.180+0.001*1, 0.100+0.001*2, ...]])
  • x 是一个二维数组,包含11个样本,每个样本有两个特征。
  • y 是一个二维数组,包含11个样本,每个样本有一个目标值。

3.设置学习率 lr 和迭代次数 epoches:

lr = 0.0002
epoches = 100000
  • lr 是学习率,用于控制权重更新的步长。
  • epoches 是迭代次数,表示模型训练的总轮数。

4.初始化权重 w:

w = np.array([[0.5214, 0.5215]])
  • w 是权重向量,用于线性模型的参数。

5.计算预测值 ya:

ya = np.matmul(w, x.T)
  • ya 是通过当前权重 w 对特征 x 进行线性变换后的预测值。

6.计算损失函数 loss:

loss = 1/2.0 * np.sum((np.matmul(w, x.T) - y)**2)
  • loss 是损失函数值,用于衡量预测值和真实值之间的差异。

7.初始化权重列表 w_list 和损失列表 loss_list:

w_list = []
loss_list = []
loss_list.append(loss)
  • w_list 用于存储每次迭代后的权重。
  • loss_list 用于存储每次迭代后的损失值。

8.开始迭代训练:

for i in range(epoches):
    ...
  • 循环进行多次迭代,每次迭代都会更新权重 w

9.计算梯度 w_gra:

w_gra = np.mean(np.matmul((ya - y), x))
  • w_gra 是梯度,表示损失函数关于权重的导数。

10.更新权重 w:

w = w - lr * w_gra
  • 根据梯度下降算法更新权重 w

11.计算新的损失值 loss:

loss = 1/2.0 * np.sum((np.matmul(w, x.T) - y)**2)
  • 计算更新权重后的预测值,并计算新的损失值。

12.检查损失是否增加:

if (loss > loss_list[-1]):
    break
  • 如果损失值没有减小,则停止训练。

13.存储新的权重和损失值:

w_list.append(w)
loss_list.append(loss)
  • 将新的权重和损失值添加到列表中。

14.打印迭代信息:

print(f"迭代第{i}次,梯度为:{w_gra:10f},权重为:{w},损失为{loss:10f}")
  • 打印每次迭代的梯度、权重和损失值。

15.打印最终的权重 w:

print(w)
  • 打印训练完成后的权重。

16.计算并打印预测值 ya:

ya = np.matmul(w, x.T)
print("输出预测值", ya)
  • 打印最终的预测值。

17.绘制散点图:

x_coords = x[:, 0]
plt.scatter(x_coords, y)
plt.title('Scatter Plot of x vs y')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
  • 使用 matplotlib 绘制 xy 的散点图。

18.绘制预测值 ya 和真实值 y 的折线图:

x = ya.flatten()
y = y.flatten()
plt.plot(x, y)
plt.title('Scatter Plot of ya vs y')
plt.xlabel('ya')
plt.ylabel('y')
plt.show()
  • 绘制 yay 的折线图,用于比较预测值和真实值。

三、运行结果

总结

多元线性回归是机器学习中用于预测连续型因变量的一种统计方法。它通过分析多个自变量(特征)与因变量(目标)之间的关系,构建一个线性模型来进行预测。
这个模型假设因变量与自变量之间存在线性关系,即因变量可以表示为自变量的线性组合加上一个误差项。 在多元线性回归中,我们通常寻找一组参数(系数),使得模型预测值与实际观测值之间的差异(即误差)的平方和最小。这通过梯度下降法来实现,它提供了一种计算这些参数的方法,使得预测值尽可能接近真实值。
为了求解模型参数,可以使用正规方程,它提供了一种直接计算系数矩阵的方法。在实际应用中,多元线性回归模型需要满足一些基本假设,如线性关系、误差项的独立性、同方差性和正态分布等。 多元线性回归在金融、经济学、工程学等领域有广泛的应用,它可以帮助研究人员和决策者理解不同变量之间的关系,并预测未来的趋势。然而,模型的准确性受到数据质量和模型假设合理性的影响,因此在应用多元线性回归时,需要对数据进行适当的处理和验证。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号