0

0

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

WBOY

WBOY

发布时间:2023-04-12 19:16:07

|

1628人浏览过

|

来源于51CTO.COM

转载

在数据科学和机器学习中,我们经常将数据表示为向量和矩阵。在数学和物理中,向量被定义大小和方向的量(例如,距离向量)。然而,通常我们处理的数据不一定会遵循向量的定义,但但我们仍然用向量来表示数据。例如,我们可以将人口统计信息(例如,种族、年龄、性别等)的数据表示为一个向量,但这没有对大小或方向的纯几何解释。

同样,在数学中,矩阵是用来表示线性映射的,它被定义为两个向量空间之间的映射,两个向量空间保留了向量加法和标量乘法。然而,在数据科学/机器学习中如何使用矩阵的上下文与这种数学定义是不同的。

既然存在这种差异,那么为什么向量和矩阵在表示数据时被如此广泛地使用呢?在本文中,我们将探讨解释这一现象的几个原因。

计算效率

在处理数据时,我们通常想要将它们输入到机器学习模型中,这个过程涉及大量的计算,通常需要对许多数字进行加法和乘法运算。例如,在构建电影推荐系统时,您可能会收集用户观看库中每部电影的时长数据。然后你可以推荐那些平均观看时间较高的电影。这个平均值是通过所有用户观看电影的时间之和除以电影的数量计算出来的。执行这一过程可能会很慢,特别是当用户和电影数量越来越多时(比如优酷,它拥有超过2.67亿的用户,拥有近2万部影片)。

然而,计算机科学家已经开发出非常高效的线性代数算法,向量和矩阵的加法和乘法比传统的基于元素的加法/乘法要快得多。对于Python,用于科学计算和线性代数的NumPy库提供了更快的速度和效率。再次回顾我们的推荐系统问题,我们可以将每个用户与一个维度为n的观看时间向量相关联,其中n是电影的数量。然后我们的数据将是这些向量的一个矩阵集合,有n行m列,其中n是电影的数量,m是用户的数量。为了找到要推荐的电影,我们可以沿着行取平均值,找出所有用户观看每部电影的平均时间,然后根据平均观看时间最高的电影进行排序。由于高度优化的算法,用向量和矩阵实现这个问题可以加快计算速度。

为了演示,这里有一个Python脚本,比较了使用常规 Python 和 NumPy 库(对矩阵和向量进行了优化)计算行平均值所需的时间。为了评估计算效率,我们将测量程序运行一个包含 500 部电影和 200 个用户的数据集所需的时间。

# import necessary libraries
import random
import numpy as np
import time


# defining the dimensions for our data
n = 500 # number of movies
m = 200 # number of users


# generating the (random) data with n rows and m columns
data = []
for _ in range(n):
data.append(random.choices(range(0, 90), k = m)) # generate random watch time


# normal array iterations to calculate the means along the rows
start_time = time.time()
averages = []
for i in range(n):
row_average = 0
for j in range(m):
row_average += data[i][j]
row_average = row_average / m
averages.append(row_average)
end_time = time.time()
total_time = end_time - start_time # time for normal array implementation


# using NumPy
np_data = np.array(data) # convert data into numpy array


np_start_time = time.time()
np_average = np.mean(np_data, axis = 1) # using numpy mean function
np_end_time = time.time()
np_total_time = np_end_time - np_start_time # time for numpy array implementation


print(f"Regular Python: {total_time:4f}; NumPy: {np_total_time:4f}") # print results

可以将Python代码运行十次并对结果取平均值,常规 Python 耗时 9.088 毫秒,而 NumPy 耗时 0.427 毫秒。NumPy 实现比常规 Python 快大约 20 倍。

更进一步,我们在下面绘制Python和NumPy实现计算平均值的时间,同时将用户数量从1到1000进行变化,同时保持电影数量为500。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

图片


随着数据量的增加,常规Python和NumPy之间的差值会越来越大。我们还可以通过绘制两个实现之间的比率来可视化这一点。

图片

随着数据量的增加,这个比例也在不断增加,这也证明了使用NumPy可以提高效率。对于非常大的数据来源或复杂的模型,这样效率更有价值。考虑一下越来越普遍的大数据领域,往往有数十亿到数万亿的数据点。对于深度神经网络模型,它可能由数百万个节点/参数组成,每个节点/参数的权重和偏差还要进行相乘或相加运算(例如,GPT-3语言模型有超过1750亿个参数)。

线性代数工具

使用向量/矩阵表示数据的另一个优点是,我们可以利用线性代数和数学工具。一个很好的例子是在计算机视觉中,矩阵被用来描述图像转换(例如,平移、旋转、反射、仿射、投影等)。

对于图像旋转,目标是确定一个函数,用于从图像的每个像素旋转某个角度。在线性代数中,旋转矩阵用于旋转向量/矩阵。通过将图像表示为矩阵,我们可以利用旋转矩阵。类似地,还有用于平移、反射和仿射变换的矩阵。

可赞AI
可赞AI

文字一秒可视化,免费AI办公神器

下载

此外,将图像表示为矩阵也有助于进行投影变换,即从一个平面到另一个平面的线的映射。这对于图像拼接和制作全景照片很有用。此外,在处理3D图形图像时还有进一步的应用。

更加简洁

在处理复杂的数据情况时,使用向量和矩阵表示概念可以更加方便、清晰和简洁。我们可以将数据分组到指定的向量或矩阵中,而不是给每个数据点一个名称。此外,我们还可以使用向量/矩阵约定来表示对数据的操作。

例如,考虑有5个特征变量的多元线性回归的例子。这可以表示为:

 

图片

使用向量/矩阵,我们可以传达相同的想法(特征和特征上的系数现在是向量):​

图片

 注意,这个表示要短得多,并且仍然能捕捉到我们的线性回归模型。如果我们有更多的变量,这种表示仍然有效(对于10或1000个特征变量,它的表达式相同)。此外,向量和矩阵可以用来表示许多数据操作和模型(如逻辑回归、随机森林、神经网络等)。

此外,向量/矩阵的约定在许多领域(如物理、工程、计算等)都非常普遍。这意味着从业者通常都很熟悉,这减少了认知负担(因为他们不需要学习新的数据/模型约定)。

结论

许多数据和模型的操作用向量/矩阵表示的原因是:用向量和矩阵表示的数据可以实现高效、更快的计算,还可以使用线性代数技术。


热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

778

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

686

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

769

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

740

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1445

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

571

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

581

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

752

2023.08.11

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

31

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 4.9万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.9万人学习

Git 教程
Git 教程

共21课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号