在线性代数中我们学过,矩阵是由m×n个数组成的一个m行n列的矩形表格,或者更深一点的定义,表示由方程组的系数及常数所构成的二维数据表。从机器学习的角度来看,这两个定义都合适,又都不合适。
现在,我们重新考察一下矩阵。上一节,我们有了表和对象的概念。对象是被特征化的客观事物,而表是容纳这些对象的容器。换句话说,对象是表中的元素,表是对象的集合。但这个集合有点特殊,即表中的每个对象都有相同的特征和维度,对象对于每个特征都有一定的取值。这里矩阵可以理解为,具有相同特征和维度的对象集合。
总结一下:
矩阵是具有相同特征和维度的对象集合,表现为一张二维数据表;
一个对象表示为矩阵中的一行,一个特征表示为矩阵中的一列,每个特征都有数值型的取值;
特征相同、取值相异的对象集合所构成的矩阵,使对象之间既相互独立,又相互联系;
由特征列的取值范围所有构成的矩阵空间,应具有完整性,即能够反映出事物的空间形式或变化。(再谈矩阵一节中详细说明)
关于第三点,我们再观察表1.4:动物种属和植物种属是两个风马牛不相及的概念,但如果放到一张表中,我们必须使用一组特征向量来衡量它们,比如:种属、重量、颜色、生命周期(年龄有点牵强)等等。但不能用味道这个特征来衡量,因为大象和鲨鱼很难讲是酸是甜。这就是各类对象之间的联系。
如果不看实例名称,我们从是否动物、重量、颜色、生命周期几个特征也能很容易的分辨出两类对象的差异性。例如,大象重量和苹果重量的悬殊差异,或生命周期/保质期的悬殊差异。这反映了对象间的相互独立。
我们再扩展一下这个例子(如表1.5):
除差异性之外,表1.5中还有一类情况,苹果和梨、大象和鲨鱼。在是否动物、重量和生命周期三个特征中,苹果和梨具有相似性,大象和鲨鱼具有相似性。很明显,大象与鲨鱼的重量较之苹果(或梨)的重量更相似;或者大象与鲨鱼的寿命较之苹果(或梨)的保质期更相似;由于这种相似性,我们很自然地可以将苹果和梨分为一类:水果(区别于植物);大象和鲨鱼分为一类:大型动物(区别于动物)。
由此可见,分类或聚类可以看作是根据对象特征的相似性与差异性,对矩阵空间的一种划分。
下面,我们再看另一个例子(如表1.6):
这个表列举了2~18岁男生的正常体重、身高的变化。数值上呈现一种递增的趋势,每个对象都与上一行或下一行的对象在时间上相关,并且时间间隔相等,都为1年。这种时间上的相关性使矩阵反映出某一事物在时间上连续变化的过程。
由此可见,预测或回归可以看作根据对象在某种序列(时间)上的相关性,表现为特征取值变化的一种趋势。
分类、聚类和回归是机器学习最基本的主题。通过矩阵,可以构建客观事物的多维度数学模型,并通过条件概率分布、梯度、神经网络、协方差等等运算方式,多角度认识和分析事物。
具体来讲,矩阵有三个重要用途,第一是解线性方程组,比如二维矩阵可以理解为一个平面直角坐标系内的点集,通过计算点与点之间的距离,完成聚类、分类或预测,类似的运算完全可以扩展到多维的情况。第二个用途是方程降次,也就是利用矩阵的二次型,通过升维将线性不可分的数据集映射到高维中,转换为线性可分的情形,这是支持向量机的基本原理之一。第三个用途是变换,矩阵可以通过特征值和特征向量,完成维度约简,简化类似图片这种高维数据集的运算,主成分分析使用的就是这个原理。
在程序设计中,我们可以从形式上把矩阵理解为一个二维数组。以Python语言为例,矩阵就是嵌套着若干个list的一个大list。内部的每个list都是等长的,其中每个元素都是整型或浮点型的数值。内部的list就是行向量,即一个对象。
Numpy数据包提供了专门的矩阵数据结构和线性代数库。从下一节开始,我们将详细介绍Numpy的矩阵运算。