高维数据的数据精简方法汇总
高维多元数据(Multidimensional Multivariate Data, MDMV Data),指每个数据对象具有两个或两个以上独立或相关属性的数据。高维多元数据在人类社会生活中普遍存在,且数量和规模随着信息化进程加深而不断增长。高维多元数据的来源非常广泛,人口统计数据集,经济普查数据集,公司财政管理数据集,电子邮件信息记录,图像数据集,传感器网络数据集,社交网络数据集等复杂数据集,都属于高维多元数据。若根据其中主要数据类型或分析处理需求的不同,高维多元数据涉及文本数据、层次结构数据、网络结构数据、空间数据、时序数据、流数据等诸多子领域,而每个子领域又有独特的可视化和分析方法。
虽然现阶段机器智能功能有限,很多分析领域尚需借助人类的智慧介入数据分析。但是高维数据人类难以理解,人只能直观地了解二维或三维数据。现阶段应对高维数据的可视化,主要有两方面的处理路径:
- 从数据层面考虑,进行数据精简(data reduction)。简而言之就是减少数据的绝对数量,以符合现阶段机器处理能力和人的识别能力。数据精简的常用策略包含过滤(Filtering)/采样(Sampling)、降维(Dimensionality Reduction)、分组聚合(Binned Aggregation)、模型拟合(Model-fitting)等。
- 从展示层面考虑,对可视化的视觉效果进行优化。包括设计可视化布局(viusal layout)、视觉编码方法、数据抽象方法、交互技术等。
以下介绍数据精简方法中的典型方法和简单定义。
1. 模型拟合(Model-fitting)
模型拟合是统计学的基本方法,即使用数学模型或统计摘要描述数据。例如,学生的数学成绩可以使用正态分布去拟合,时序数据可以使用移动平均数和自回归模型去拟合,散点图可以使用回归模型拟合趋势线。通常,这一类方法更多地会与过滤/采样、降维、分组聚合等方法结合使用。例如,Kairam等人[69]结合了模型和聚合方法,使用多尺度直方图可视化网络统计数据。
2.过滤/采样(Filtering/Sampling)
过滤和采样两种方法的内涵是一致的,都是在原有数据集上选择一个子集,以满足数据精简的要求。常用的选择集抽取方法包括简单随机采样、系统抽样(等距抽样)、分层抽样等。
此类方法最大的挑战是在选择集规模和数据丢失之间寻找平衡点。因此先抽取数据特征,再根据这些特征进行采样,是此类方法的发展趋势。例如在本人之前的博客中,介绍的“利用条件熵筛选数据维度”,就是以条件熵为数据特征进行数据维度过滤/采样的方案。
3.分组聚合(Binned Aggregation):
分组聚合是将数据集中的数据项划分为多个分组,然后通过定义在分组上的统计属性(如数据密度、平均值等),将对每个具体数据样本的考察,简化为对分组(bin)的考察[66]。经过分组聚合的数据可以被直接应用于可视化,例如直方图(histograms)[67]和热力图(heatmaps)[68]是典型的1维和2维的分组数据可视化呈现方案。
过滤和抽样会丢失离群值,模型拟合只针对特定的应用场合。与之相比,分组聚合的最大优点是保留了全局模式(如密度)和局部特征(如离群值),并且允许选择不同的分组大小以建立多个分组粒度等级。例如,时序数据可以按照年、月、日进行分组,地理空间数据可以按照省、县、乡进行分组。
以下简介对一个高维数据集进行分组聚合的基本过程:
(1)确定每个数据维度的基本类型,并将数据按升序或降序排列。数据维度的基本类型有数值型数据和类名数据。一般来说数值型数据可以借助直方图划分bin的方法处理,类名数据可以转换为数值型数据以后处理(例如性别可以按男=1,女=0来转换)。将数据按升序或降序排列是为了之后进行分组和计算分组对应的统计值更轻松。
(2)确定分组级别(grained level of bin)和每个级别下分组的个数(number of bins)。这通常按照业务需求人为指定。例如对于简单数据,可以采用平方根选择法,假设有n个样本,只做一个分组级别,这个分组级别下包含k个分组,k可以用如下公式计算:。
又如,对于按秒统计的网络流量数据,可以按照秒、分、小时、天四个分组级别进行分组聚合。假设样本总数为n,则其中“秒”这个级别下分组个数就是n,“分”的分组个数是样n/60,“小时”的分组个数就是n/3600, “天”的分组个数就是n/86400。
又比如对于年龄这一数值型数据,可以根据需要划分为两个分组级别。在第一个分组级别下,分为两组:未成年人(0-18),成年人(18+)。在第二个分组级别下,未成年人又可以划分为儿童(0-12)、少年(12-18)。成年人可以划分为青年(18-35)、中年(35-65)、老年(65+),总计5个分组。
(3)计算每个分组对应的统计值。这个统计值可以是频数、频率(也称密度)、平均值等。从而将对每个具体数据样本的考察,简化为对分组的考察。
在实际编程上,分组聚合可以使用python的pandas类库的groupby函数、transform函数和apply函数来完成,当然在细节上可能还要使用其他函数和模型拟合方法等。
4. 降维(Dimension Reduction)
通过线性或非线性变换将多维数据投影(project)或嵌入(embed)至低维空间(通常是2维或3维),并保持数据在多元空间中的特征,这种策略称之为降维,或者翻译为维度约简。
我们会发现降维方法有两方面的特质:其一,根据投影/嵌入的方式不同,最后呈现的结果也不同。例如一个3D图形的顶视图、侧视图和俯视图可能完全不同。这就意味着应用何种降维方法,是与需求、数据特征相关的。其二,降维方法导致了数据特征发生了根本性的变化,原始的特征消失了(虽然新的特征也保持了原特征的一些性质)。与之相比,过滤/采样方法并没有改变数据特征,只是在原有数据集上找了一个子集。
正因为降维方法存在“没有最好,只有最合适”的特点,所以相关的算法种类非常多。为了便于了解,以下提供了几个分类图:
除此以外,按照是否有使用样本的标签值,可以将降维算法分为有监督降维和无监督降维。
关于降维方法的选择,与任务需求和数据特征有关。例如一个最常见的案例:任务需求是把100维的数据降低到20维然后做机器学习或者数据分析,数据特征上许多数据维度之间有带有典型的线性相关性(比如总成绩维度等于平时成绩和期末成绩两个维度之和),那么用最简单的PCA算法就好。如果任务需求是要直观地了解一个100维数据集的结构,需要将这个数据集投影到人类能看懂的2维平面上,了解数据大致聚成几团,哪些数据聚成一团,哪些团比较近等等,从而验证各种作用在这个数据集上的算法有效性,那么,用现在特别流行的流形学习降维方法t-SNE(或它的后继算法LargeVis)挺好。例如下面这篇文章:如何用t-SNE分析生物行为学上无法精确测量的有趣行为。
总而言之,降维是一个广阔的研究领域,不仅应用在数据可视化,也经常被归入数据挖掘、机器学习、数据分析领域,中作为数据处理的一个环节或方法。碍于时间有限,不能展开叙述,权当抛砖引玉。