Numpy 3D线性回归
线性回归是数据科学中最基本的任务之一,它是一种预测性建模技术,基于输入变量和输出变量之间的线性关系。在本文中,我们将使用NumPy库来执行3D线性回归分析。
阅读更多:Numpy 教程
NumPy
NumPy是Python生态系统中用于科学计算的主要库之一。它支持操作多维数组和矩阵,开展各种科学计算任务,如图像处理、线性代数、统计分析等。
我们将使用NumPy库来执行3D线性回归分析。因此,我们需要在代码中导入NumPy库。
import numpy as np
数据集
为了理解和实现3D线性回归,我们将创建一个简单的数据集。我们将使用名为“data.txt”的文件来创建此数据集。文件中包含三列数据,每列都代表3D空间中的一个特征。数据集共有10行,每行代表一个数据点。
使用NumPy库的genfromtxt()
函数从上述文件中读取数据,如下所示:
data = np.genfromtxt('data.txt',delimiter=',')
这将把数据存储在一个NumPy数组中。
探索数据
在进行回归任务之前,我们需要了解数据集的特征和分布。我们将使用NumPy库中的一些函数来探索数据集。我们将从打印前5行开始:
print(data[:5])
这将输出数据集的前5行:
[[2.77124472,1.78478393,17.929
1.72857132,1.16976141,1.90312037
...
]
接下来,我们将使用NumPy库中的shape
函数来查看数据集的形状(即,数据集中有多少行和列):
print(data.shape)
这将输出:
(10, 3)
我们可以发现,数据集中有10个数据点,每个数据点有3个特征。
拟合数据
现在,我们将使用NumPy库来构建一个3D线性回归模型,并将其拟合到数据集上。
首先,我们需要从数据集中提取两个数组:X值和Y值。这可以通过使用NumPy库的切片功能轻松实现。第一列到第二列是X值,第三个列是Y值。
X = data[:, :-1] # 数据集的第一列和第二列是X值
Y = data[:, -1] # 数据集的第三列(最后一列)是Y值
接下来,我们需要计算回归系数。回归系数是用于表示模型中自变量和因变量之间关系的数学系数。在3D线性回归中,回归系数由斜率和截距组成。要进行计算,我们需要先从NumPy库中导入lstsq()
函数。
from numpy.linalg import lstsq
我们将使用此函数来计算回归系数。
B,_,_,_ = lstsq(X,Y)
lstsq()
函数返回多个值,包括回归系数(在这里为“B”)和其他解决方案的信息。因此,在等式的左边加入多个占位符变量,以消除那些您不关心的输出。
现在我们已经计算出系数了,我们可以使用它们来预测新数据点的Y值。
new_data_point = np.array([4, 5])
predicted_y = np.dot(new_data_point, B)
这将计算新数据点的预测Y值。在这里,我们假设新的数据点是(4,5)。np.dot()
函数用于计算点积,其中第一个参数是要进行点积的向量,第二个参数是回归系数。
现在,我们已经使用3D线性回归模型拟合了数据集,并使用回归系数预测了新数据点的Y值。
可视化结果
为了更好地理解我们的回归模型,我们将使用matplotlib库来可视化数据点和拟合线。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X[:,0], X[:,1], Y, c='r', marker='o')
x = np.linspace(np.min(X[:,0]), np.max(X[:,0]), 10)
y = np.linspace(np.min(X[:,1]), np.max(X[:,1]), 10)
X,Y = np.meshgrid(x, y)
Z = B[0]*X + B[1]*Y + B[2]
surf = ax.plot_surface(X, Y, Z)
plt.show()
这将显示一个可以旋转的3D散点图,其中,每个数据点作为一个红色圆点显示。从线上出发的所有点都位于线上,因为我们拟合的是线性模型。还画了一条拟合线,它代表我们计算的3D线性回归方程。
总结
在本文中,我们使用NumPy库执行了3D线性回归分析。我们了解了如何使用NumPy库处理数据集,并计算拟合线的回归系数。我们还使用matplotlib库可视化了数据点和拟合线。通过这篇文章,我们学会了如何使用Python和相应的库进行3D线性回归分析,在数据科学领域中这是非常重要的技术之一。