在处理大型现实世界的数据集时,处理维数的诅咒是一个常见的问题。降维技术可以帮助克服这些问题。降维的第一步是特征提取。它只是从数据集中去除多余的和不相关的特征,以提取相关的特征。为这种高维数据选择一种可视化方法是一项耗时的工作。为了使这个过程自动化,我们可以使用HyperTools,一个基于Python的工具,专门为高维数据的可视化而设计。在这篇文章中,我们将详细讨论HyperTools以及它如何帮助完成这项任务。下面是我们要讨论的主要内容。
目录
- 关于数据可视化的说明
- HyperTools如何将高维数据可视化?
- 用HyperTools实现高维数据的可视化
我们先来讨论一下数据可视化。
关于数据可视化的说明
数据可视化是信息和数据的图形化表示。数据可视化技术,如图表、图形和地图,使人们能够简单地看到和理解数据的趋势、异常值和模式。
现在我们手中有很多数据,所以数据可视化工具和技术对于分析海量数据和做出数据驱动的决策至关重要。它被用于各种领域,例如,和。将你无法直接看到的现象可视化,如天气模式、医疗状况或数学关系,以模拟复杂的事件。
HyperTools如何将高维数据可视化?
虽然将变量随时间的变化绘制成图上的坐标是可视化低维数据的一个相对简单的方法,但如何以类似的直观方式可视化高维数据集并不总是很明显。
在这一节中,我们将看看开源的ToolBox Hypertools,它基于Python,通过自行降低维度来创建高维数据集的可视化。它主要是基于matplotlib、sklearn和seaborn。这个工具的核心是,它使用降维技术将高维数据集嵌入到低维空间,然后使用一个简单而强大的API对数据进行绘图,并有许多数据操作(如超配、聚类、归一化等)和绘图风格选项。
数据轨迹和点云是该工具箱设计的核心。HyperTools使用降维算法,为高维观测的时间序列创建类似的二维和三维轨迹。轨迹可以被看作是动画或互动的静态图。静态数据集(如观测值或属性的集合)可以从同样的降维和对齐算法中受益。
总之,HyperTools工具箱提供了一套强大的功能,在降维和数据对齐算法的帮助下,对高维数据进行可视化和操作。该工具箱的构建考虑到了易用性,因此即使是复杂的可视化和分析也只需一行代码就可以完成。另一个主要目标是使用户只用一行代码就能简单地创建具有视觉吸引力的出版质量的图,这也是经常出现的情况。
下面的图片描述了工具箱如何使用降维算法将数据映射到二维和三维图中(a)。而第二张(b)则是要显示来自不同坐标系的数据。左图显示了三个几何形状相似但坐标系不同的轨迹,而右图显示了这些轨迹如何利用超对准(通过线性变换)被对准到一个共同的空间。

用HyperTools实现高维数据的可视化
为了使用这个工具箱,我们需要安装它,这可以通过简单地使用pip来完成。直接使用pip安装而不指定版本会安装最新的版本,而最新的软件包存在版本冲突问题,为了避免这种情况,请安装0.6.3版本,否则,你会出现依赖性问题。
! pip install hypertools==0.6.3
要使用HyperTools的绘图功能,首先要把要分析的数据集加载到Python工作区,并把它转换成Numpy数组或Pandas数据框。数据格式应该是特征(F)的采样(S)。一旦数据集被转换为这种格式,只需导入库并调用绘图函数,如下图所示的各种绘图。在这种情况下,我们将使用内置数据集。
对于第一个图,我们使用内置的螺旋数据,这是一个NumPy数组,包含三维螺旋的数据,用于突出数据的线性转换:
import hypertools as hyp
# load the sample data
weights = hyp.load('spiral')
# Creating plot
weights.plot(size=[7,5])
这个绘图函数将进行降维(默认情况下,使用PCA),将S x F数据矩阵转换为S x 3矩阵,然后生成一个交互式的三维线图,可以直观地探索,如下图:

为了促进数据的自动聚类,HyperTools包括K-Means聚类算法。绘图函数的cluster关键字参数,给定一个预定的聚类数目k,使用k-means聚类来自动将每个观测点分配到一个聚类中,然后根据其聚类成员资格给每个观测点着色。
在这种情况下,我们要为sklearn创建的数据集的数字获得一个聚类,它在NumPy数组中代表64个不同的像素数据。我们将为前五个数字画一个聚类:
from sklearn import datasets
data = datasets.load_digits(n_class=5)
df = data.data
hue = data.target.astype('str')
hyp.plot(df, '.', hue=hue, ndims=3,legend=[0,1,2,3,4],size=[7,5])

要想有一个3D动画图,只需切换animate关键字,在绘图函数中创建一个动画。这将导致数据的三维动画表现,动画发生在数据矩阵的各行中。
要在一个图上绘制多个数据集,用户可以传递一个数据矩阵的列表,就像静态图一样,格式字符串和关键字参数可以用来定制图的外观。动画的每一帧都描述了一个立方体中包含的总数据轨迹的一个子集。
在每一帧中,数据轨迹的显示部分前进了一小部分,摄像机的角度围绕立方体旋转,随着动画的进行,提供对数据各方面的视觉访问。
三维动画可以按以下方式获得:
import numpy as np
data = hyp.tools.load('weights', align=True)
group1 = np.mean(data.data[:17], 0)
group2 = np.mean(data.data[18:], 0)
hyp.plot([group1, group2], animate=True, save_path='animation.mp4',zoom=2)

最后的话
通过这篇文章,我们已经讨论了什么是数据可视化,重要的是看到了我们如何使用一个基于Python的工具Hypertools来实现高维数据的可视化。这个工具是非常有用的。通过提供一套简单(但功能强大)的绘图功能和数据处理工具,HyperTools工具箱旨在帮助高维数据的可视化。