正文
比较常见的数据有以下几种类型。
-
表格:最为经典的数据类型。在表格数据中,通常行代表样本,列代表特征;
-
点集(point cloud):很多数据都可以看成是某空间中的点的集合;
-
时间序列:文本、通话和DNA序列等都可以看成是时间序列。它们也是一个变量(通常是时间)的函数;
-
图像:可以看成是两个变量的函数;
-
视频:时间和空间坐标的函数;
-
网页和报纸:虽然网页或报纸上的每篇文章都可以看成是时间序列,但整个网页或报纸又具有空间结构;
-
网络数据:网络本质上是图,由节点和联系节点的边构成。
除了上述基本数据类型外,还可以考虑更高层次的数据,如图像集、时间序列集、表格序列等。
数据分析的基本假设是观察到的数据都是由某个模型产生的,而数据分析的基本问题就是找出这个模型。由于数据采集过程中不可避免会引入噪声,因此这些模型都是随机模型。例如,点集对应的数据模型是概率分布,时间序列对应的数据模型是随机过程,图像对应的数据模型是随机场,网络对应的数据模型是图模型和贝叶斯模型。
通常我们对整个模型并不感兴趣,而只是希望找到模型的一部分内容。例如我们利用相关性来判断两组数据是否相关,利用排序来对数据的重要性进行排名,利用分类和聚类将数据进行分组等。
很多情况下,我们还需要对随机模型作近似。最常见的方法是将随机模型近似为确定型模型,所有的回归模型和基于变分原理的图像处理模型都采用了这种近似;另一类方法是对其分布作近似,例如假设概率分布是正态分布或假设时间序列是马尔科夫链等。
要对数据作分析,就必须先在数据集上引入数学结构。基本的数学结构包括度量结构、网络结构和代数结构。
-
度量结构。在数据集上引进度量(距离),使之成为一个度量空间。文本处理中的余弦距离函数就是一个典型的例子。
-
网络结构。有些数据本身就具有网络结构,如社交网络;有些数据本身没有网络结构,但可以附加上一个网络结构,例如度量空间的点集,我们可以根据点与点之间的距离来决定是否把两个点连接起来,这样就得到一个网络结构。网页排名(PageRank)算法是利用网络结构的一个典型例子。
-
代数结构。把数据看成向量、矩阵或更高阶的张量。有些数据集具有隐含的对称性,也可以用代数的方法表达出来。
在上述数学结构的基础上,可以讨论更进一步的问题,例如拓扑结构和函数结构。
-
拓扑结构。从不同的尺度看数据集,得到的拓扑结构可能是不一样的。最著名的例子是3×3的自然图像数据集里面隐含着一个二维的克莱因瓶(Klein bottle)。
-
函数结构。对点集而言,寻找其中的函数结构是统计学的基本问题。这里的函数结构包括线性函数(用于线性回归)、分片常数(用于聚类或分类)、分片多项式(如样条函数)、其他函数(如小波展开)等。
我们研究的数据通常有几个特点:(1)数据量大。数据量大给计算带来挑战,需要一些随机方法或分布式计算来解决问题;(2)数据维数高。例如,前面提到的SNP数据是64万维的;(3)数据类型复杂。网页、报纸、图像、视频等多种类型的数据给数据融合带来困难;(4)噪音大。数据在生成、采集、传输和处理等流程中,均可能引入噪音,这些噪音的存在给数据清洗和分析带来挑战,需要有一定修正功能的模型(如图像中的正则化和机器学习中的去噪自编码器)来进行降噪处理。
其中,最核心的困难是数据维数高。它会导致维数灾难(curse of dimensionality),即模型的复杂度和计算量随着维数的增加而指数增长。那么,如何克服数据维数高带来的困难?通常有两类方法。一类是将数学模型限制在一个极小的特殊类里,如线性模型;另一类是利用数据可能有的特殊结构,如稀疏性、低维、低秩和光滑性等。这些特性可以通过对模型作适当的正则化实现,也可以通过降维方法实现。
总之,数据分析本质上是一个反问题。处理反问题的许多方法(如正则化)在数据分析中扮演了重要角色,这正是统计学与统计力学的不同之处。统计力学处理的是正问题,统计学处理的是反问题。
与模型相辅相成的是算法以及这些算法在计算机上的实现。在数据量很大的情况下,算法的重要性尤为突出。从算法的角度来看,处理大数据主要有两条思路:
-
降低算法的复杂度,即计算量。通常要求算法的计算量是线性标度的,即计算量与数据量成线性关系。但很多关键的算法,尤其是优化方法,还达不到这个要求。对于特别大的数据集,如万维网上的数据或社交网络数据,我们希望能有次线性标度的算法,也就是说计算量远小于数据量。这就要求我们采用抽样的方法。其中最典型的例子是随机梯度下降法(Stochastic Gradient Descent, SGD)。