向量空间


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

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

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

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

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

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

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

1-2-3

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

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

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

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

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

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

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

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

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

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

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

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

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

实现与应用

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

import numpy as np
u = np.array([1, 6, 7])
u

输出:

array([1, 6, 7])

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

v = u.reshape(-1,1)
v

输出:

array([[1],
       [6],
       [7]])

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

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

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中常见的一种向量化,即创建词向量。

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)

输出:

['learn', 'machine', 'mathematics', 'python']

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

print(cor_vec)

输出:

(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对象表示向量化结果:

import pandas as pd
df = pd.DataFrame(cor_vec.toarray(), columns=vectorizer.get_feature_names())
df

输出:

   learn  machine  mathematics  python
0  1      1        1            0
1  2      0        1            1

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

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

本文分享自微信公众号 - 老齐教室(itdiffer),作者:老齐

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用Python实现各类数学符号运算

    在机器学习项目中,你肯定要在代码中实现各种运算,其中必然要用到各种数学符号,因此,必须了解并熟知如何实现。

    老齐
  • 青少年编程:用Python探究数学(2)

    在上一篇中,绘制了一个正方形,但是,其中要不断重复某些语句。幸亏是正方形,如果是更多边的图形,重复就更多了。在Python语言中,为了让重复的事情做起来不那么烦...

    老齐
  • 必须要了解的Python关键词

    每种编程语言都会有一些特殊的单词,称为关键词。对待关键词的基本要求是,你在命名的时候要避免与之重复。本文将介绍一下Python中的关键词。关键词不是内置函数或者...

    老齐
  • 海量文本求topk相似:faiss库初探

    写公众号本来是因为我脑子转得慢,又患有多动症,只能通过这种方式来慢思考,没想到收获了不少优秀网友,得到了不少鼓励。

    邓邓最棒
  • 向量空间相关概念总结-线性相关

    严格定义: 如果存在不全为零的实数k1、k2...km,使上面的等式成立,则这个向量组线性相关,否则线性无关。 注:这里这个向量组里是包含...

    坑吭吭
  • 从向量空间的角度来理解方程组有无解的问题

    中所有列向量线性独立,换句话说就是其中一个列向量无法由其余的列向量线性表示,即不存在

    marsggbo
  • 机器学习的数学基础:向量篇

    HaHack
  • 向量(vector)

    在数学中,向量(也称为欧几里得向量、几何向量、矢量),指具有大小(magnitude)和方向的量。它可以形象化地表示为带箭头的线段。箭头所指:代表向量的方向;线...

    easyAI
  • 机器学习算法之砖瓦:向量详解

    问题导读 1.你认为什么是向量? 2.向量最开始是来自于哪门学科? 3.本文例子中如何将原始数据转换为向量的? 上一篇

    用户1410343
  • 算法工程师的数学基础|线性代数中的向量内积和外积概念及几何意义

    线性代数主要包含向量、向量空间(或称线性空间)以及向量的线性变换和有限维的线性方程组。本篇文章主要介绍线性代数部分中的向量和向量空间。

    week

扫码关注云+社区

领取腾讯云代金券