目录
7.初始化权重列表 w_list 和损失列表 loss_list:
前言
随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习-多元线性回归的基础内容。
一、多元线性回归原理
1.目标:
多元线性回归模型的一般形式是:
其中
- (Y) 是目标变量。
- (X_1, X_2, ..., X_n) 是特征变量。
- 是截距项。
- 是每个特征的系数。
目标是:让 尽可能的小
为了找到最佳的系数 ,我们通常使用最小二乘法。最小二乘法的目标是最小化误差的平方和,即最小化以下损失函数:
为了找到损失函数的最小值,我们对每个系数分别求偏导数,并将它们设为零。这样我们可以得到以下方程组:
2.重点:
!!!
损失函数用于衡量预测值和真实值之间的差异。数学表达式如下:
其中:
- ( m ) 是样本数量。
- ( ) 是第 ( i ) 个样本的真实值。
- ( ) 是第 ( i ) 个样本的预测值。
在代码中,对应于 y
数组,而 对应于通过当前权重 w
预测得到的值 ya
。因此,损失函数可以重写为:
其中:
- () 是截距项。
- ( ) 是每个特征的系数。
- () 是第 ( i ) 个样本的特征值。
这个损失函数通过最小化预测值和真实值之间的差的平方和,来优化模型的权重参数。
此时,我们得到确定我们的损失函数,之所以在前面加上一个是为了方便求导的时候能够消去。
二、使用步骤
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
绘制x
和y
的散点图。
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()
- 绘制
ya
和y
的折线图,用于比较预测值和真实值。
三、运行结果
总结
多元线性回归是机器学习中用于预测连续型因变量的一种统计方法。它通过分析多个自变量(特征)与因变量(目标)之间的关系,构建一个线性模型来进行预测。
这个模型假设因变量与自变量之间存在线性关系,即因变量可以表示为自变量的线性组合加上一个误差项。 在多元线性回归中,我们通常寻找一组参数(系数),使得模型预测值与实际观测值之间的差异(即误差)的平方和最小。这通过梯度下降法来实现,它提供了一种计算这些参数的方法,使得预测值尽可能接近真实值。
为了求解模型参数,可以使用正规方程,它提供了一种直接计算系数矩阵的方法。在实际应用中,多元线性回归模型需要满足一些基本假设,如线性关系、误差项的独立性、同方差性和正态分布等。 多元线性回归在金融、经济学、工程学等领域有广泛的应用,它可以帮助研究人员和决策者理解不同变量之间的关系,并预测未来的趋势。然而,模型的准确性受到数据质量和模型假设合理性的影响,因此在应用多元线性回归时,需要对数据进行适当的处理和验证。