当前位置: 首页 > 科技观察

为什么机器学习中的数据用向量-矩阵表示?

时间:2023-03-12 06:26:11 科技观察

在数据科学和机器学习中,我们经常将数据表示为向量和矩阵。在数学和物理学中,向量是定义大小和方向的量(例如,距离向量)。然而,往往我们处理的数据并不一定遵循向量的定义,但我们仍然使用向量来表示数据。例如,我们可以将具有人口统计信息(例如,种族、年龄、性别等)的数据表示为向量,但这没有对大小或方向的纯粹几何解释。还有,在数学中,矩阵用来表示线性映射,线性映射被定义为两个向量空间之间保留向量加法和标量乘法的映射。然而,矩阵在数据科学/机器学习中的使用背景与这个数学定义不同。鉴于这种差异,为什么向量和矩阵如此广泛地用于表示数据?在本文中,我们将探讨解释这种现象的几个原因。计算效率在处理数据时,我们经常希望将它们输入机器学习模型,而这个过程涉及大量计算,通常涉及许多数字的加法和乘法。例如,在构建电影推荐系统时,您可能会收集有关用户观看您图书馆中每部电影的时长的数据。然后,您可以推荐那些平均观看时间较长的电影。这个平均值是用所有用户的电影观看时间总和除以电影数量计算出来的。执行这个过程可能会很慢,尤其是随着用户和电影数量的增加(比如优酷,拥有超过2.67亿用户和近20,000部电影)。然而,计算机科学家已经开发出非常有效的线性代数算法,可以比传统的逐元素加法/乘法更快地对向量和矩阵进行加法和乘法运算。对于Python,用于科学计算和线性代数的NumPy库提供了更高的速度和效率。再次参考我们的推荐系统问题,我们可以将每个用户与一个维度为n的观看时间向量相关联,其中n是电影的数量。我们的数据将是这些向量的矩阵集合,有n行和m列,其中n是电影的数量,m是用户的数量。要找到要推荐的电影,我们可以沿行取平均值,找到所有用户观看每部电影的平均时间,然后根据平均观看时间最长的电影进行排序。由于高度优化的算法,用向量和矩阵实现这个问题可以加快计算速度。为了进行演示,这里有一个Python脚本,它比较了使用常规Python和NumPy库(针对矩阵和向量进行了优化)计算行平均值所花费的时间。为了评估计算效率,我们将测量程序在包含500部电影和200名用户的数据集上运行所花费的时间。#导入必要的库importrandomimportnumpyasnpimporttime#定义数据的维度n=500#电影数量=200#用户数量#生成具有n行和m列的(随机)数据data=[]for_inrange(n):data.append(random.choices(range(0,90),k=m))#生成随机观看时间#正常数组迭代来计算沿行的均值start_time=time.time()av??erages=[]fori在范围(n)中:row_average=0forjinrange(m):row_average+=data[i][j]row_average=row_average/maverages.append(row_average)end_time=time.time()total_time=end_time-start_time#正常数组实现的时间#使用NumPynp_data=np.array(data)#将数据转换为numpy数组np_start_time=time.time()np_average=np.mean(np_data,axis=1)#使用numpymeanfunctionnp_end_time=time.time()np_total_time=np_end_time-np_start_time#numpy数组实现的时间print(f"RegularPython:{total_time:4f};NumPy:{np_total_time:4f}")#打印结果可以将Python代码运行十次并取平均结果。常规Python耗时9.088毫秒,而NumPy耗时0.427毫秒NumPy实现比常规Python快约20倍。更进一步,我们在Python和NumPy实现的下方绘制时间以计算平均值,同时将用户数量从1变为1000,同时将电影数量保持在500。随着数据量的增加,常规Python和NumPy之间的差异将更大并且更大。我们也可以通过绘制两种实现之间的比率来形象化。这个比率也随着数据量的增加而增加,这也证明了使用NumPy可以提高效率。对于非常大的数据源或复杂的模型,这样的效率更有价值。考虑一下日益普遍的大数据领域,它通常有数十亿到数万亿的数据点。对于深度神经网络模型,它可能包含数百万节点/参数的数量,以及每个节点/参数的权重和偏差相乘或相加(例如,GPT-3语言模型有超过1750亿个参数)。线性代数工具使用向量/矩阵表示数据的另一个优点是我们可以利用线性代数和数学工具。一个很好的例子是计算机视觉,其中矩阵用于描述图像变换(例如平移、旋转、反射、仿射、投影等)。对于图像旋转,目标是确定一个函数,用于将图像的每个像素旋转一定角度。在线性代数中,旋转矩阵用于旋转向量/矩阵。通过将图像表示为矩阵,我们可以利用旋转矩阵。类似地,还有用于平移、反射和仿射变换的矩阵。此外,将图像表示为矩阵有助于投影变换,将线从一个平面映射到另一个平面。这对于图像拼接和制作全景图很有用。此外,在处理3D图形图像时还有更进一步的应用。更简洁。在处理复杂的数据情况时,使用向量和矩阵来表示概念可以更加方便、清晰和简洁。我们可以将数据分组到指定的向量或矩阵中,而不是为每个数据点命名。此外,我们可以使用向量/矩阵约定来表示对数据的操作。例如,考虑一个具有5个特征变量的多元线性回归示例。这可以表示为:使用向量/矩阵,我们可以传达相同的想法(特征和特征上的系数现在是向量):请注意,这种表示要短得多,但仍然可以捕获我们的线性回归模型。如果我们有更多变量,这种表示仍然有效(它对10或1000个特征变量具有相同的表达式)。此外,向量和矩阵可用于表示许多数据操作和模型(例如逻辑回归、随机森林、神经网络等)。此外,向量/矩阵约定在许多领域(例如物理、工程、计算等)中非常普遍。这意味着从业者通常很熟悉,这减少了认知负担(因为他们不需要学习新的数据/模型约定)。结语很多数据和模型的操作都用向量/矩阵表示的原因是:用向量和矩阵表示的数据可以进行高效和快速的计算,也可以使用线性代数技术。