前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >向量空间

向量空间

作者头像
老齐
发布2020-05-14 20:42:19
1.1K0
发布2020-05-14 20:42:19
举报
文章被收录于专栏:老齐教室

生活中所说的“空间”,就是我们所处的地方,它有三个维度,它里面有各种物体,这些物体各自遵守着一定的运动规则——注意,“空间”非“空”——或者说,这个空间制定了某些规则,里面的物体必须遵循。有时候我们也会画出一个相对小的范围,在这个范围内的对象类型单一,且遵循统一的规律,比如这几年风靡各地的“创客空间”,其中的对象就是喜欢创造的人,他们遵循的规律就是“创造,改变世界”。诚然,由人组成的“空间”总是很复杂的,超出了本书的研究范畴,我们下面要研究的是由向量组成的“空间”,即“向量空间”。

假设平面直角坐标系中两个向量:

如图所示,如果要将这两个向量相加,可以按照中学物理所学习的“平行四边形”法则,得到了向量,其端点坐标如图中所标示。

“平行四边形”法则是几何方法,如果用代数方法计算,则可以这么做:

即对应坐标的数字相加——这其实就是中学物理中学习过的“正交分解法”。

显然,对于集合,所有的向量都遵循上述加法运算法则。

此外,如果用一个数值乘以某个向量,例如,则得到图1-2-3所示:

1-2-3

所得到的向量与原来的向量方向相同,但长度是原来的倍。其计算过程,可以如此:

因为这里的是标量(标量也称为“数量”),因此这种标量与向量相乘称为“数量乘法”。

显然,对于集合,所有的向量都遵循上述数量乘法运算法则。

在数学中,我们将集合称为一个向量空间,也称为线性空间

上述加法和数量乘法运算法则,不仅仅在中成立,在中也同样成立。

★和是的两个向量: 是一个标量,它们遵循如下运算法则:

  • 加法运算:
  • 数量乘法运算:

从上面的运算不难看出,加法和数量乘法的结果,还都是中的向量,我们称是加法封闭数量乘法封闭

根据向量空间的加法和数量乘法运算法则,可以得到如下8条推论,它们都是某个向量空间中向量所遵循的运算法则。

★设:向量,,,标量,,则:

  • (加法交换律)
  • (加法结合律)

特别注意,不是标量,而是指元素都是的向量,称为零向量,例如中的,即坐标系原点。

以上表示向量的时候,写成了一列,这种称为列向量。此外,也可以写成一行,如,那样,称为行向量。有时为了书写方便,会把列向量写成,T表示转置。

实现与应用

在程序中,创建行向量或者列向量,一般以NumPy数组实现。

代码语言:javascript
复制
import numpy as np
u = np.array([1, 6, 7])
u

输出:

代码语言:javascript
复制
array([1, 6, 7])

这里创建的一维数组u,就可以表示行向量。如果要创建列向量,可以这样操作:

代码语言:javascript
复制
v = u.reshape(-1,1)
v

输出:

代码语言:javascript
复制
array([[1],
       [6],
       [7]])

此外,在Pandas的DataFrame对象中,每一列(即每个特征)都可以认为是一个列向量。

在机器学习中,向量无处不在,可以说只要有计算,就离不开向量。为何?这是因为向量能够让提升运算速度。如下所示,我们创建一个由随机整数组成的列表:

代码语言:javascript
复制
import random
lst = [random.randint(1, 100) for i in range(100000)]

如果要计算列表中每个整数的平方,用Python循环语句可以这样执行(图1-2-4显示结果是在AI Studio中运行的结果):

1-2-4

用循环语句,耗时30毫秒。如果将列表转化为向量,完成同样的计算,结果如何?

1-2-5

图1-2-5所示结果显示,转化为数组(行向量)后,运行速度有了明显提高(注意:在AI Studio运行上述代码,所得运行时长可能有错差异,此结果仅供参考,读者也可以编写计时函数,在本地测量不同计算方式所耗费时长)。

所以,“向量化”是机器学习中的一个重要技巧,例如在自然语言处理(NLP)中,统计文本中的词的出现次数,就是NLP中常见的一种向量化,即创建词向量。

代码语言:javascript
复制
from sklearn.feature_extraction.text import CountVectorizer  
vectorizer=CountVectorizer()                                              # (1)
corpus=["mathematics machine learn", "learn python learn mathematics"]    # (2)
cor_vec = vectorizer.fit_transform(corpus)                                # (3)
vectorizer.get_feature_names()                                            # (4)

输出:

代码语言:javascript
复制
['learn', 'machine', 'mathematics', 'python']

在上述代码中,使用Scikit-Learn中的CountVectorizer创建词向量。(1)创建词向量模型;(2)是待分析的语料库,其中包含两条文本;(3)利用词向量模型对语料库进行训练转换,得到词向量对象。(4)显示所得模型特征,即语料库中都有哪些词语。

代码语言:javascript
复制
print(cor_vec)

输出:

代码语言:javascript
复制
(0, 2) 1
(0, 1) 1
(0, 0) 1
(1, 2) 1
(1, 0) 2
(1, 3) 1
  • 第一列数字表示(2)中语料库文本的索引,0表示的是文本“mathematics machine learn”。
  • 第二列数字表示在该文本中,词语的索引,例如“(0, 2)”中的2表示词语“learn”在0所表示的文本中的索引是2。
  • 第三列数字表示该词语在该文本中出现的次数,例如“(0, 2) 1”中的1表示词语“learn”在0所表示的文本中出现的次数是1。

1-2-6

还可以用DataFrame对象表示向量化结果:

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame(cor_vec.toarray(), columns=vectorizer.get_feature_names())
df

输出:

代码语言:javascript
复制
   learn  machine  mathematics  python
0  1      1        1            0
1  2      0        1            1

上述输出结果显示了每个文本的词语数量统计结果。在本示例中,每个文本的词语比较少,在真实的项目中,每个文本的词语会很多,如果多个文本,就会出现很多个特征,对于某一个文本而言,会出现在很多特征的值是0。

除了将词语出现次数进行向量化之外,在NLP中,还会实现TF-IDF向量化和哈希向量化,具体内容请参阅《数据准备和特征工程》(电子工业出版社)。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老齐教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现与应用
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档