【python】降维与数据聚类之 TSNE

计算机可以处理任意多维的数据集,但我们人类认知只局限于3维空间,计算机依然需要我们,所以需要通过一些方法有效的可视化高维数据。通过观察现实世界的数据集发现其存在一些较低的本征维度,同时,尽可能多地保持高维数据的重要特征。

 1. 问题转换

在高维空间相似的数据点,映射到低维空间距离也是相似的。常规的做法是用欧式距离表示这种相似性,而SNE把这种距离关系转换为一种条件概率来表示相似性,即利用两点的条件概率来度量空间中两点的相似度,那么一个较为合理的降维方式是使得高维空间的条件概率和低维空间的条件概率应该对应相等。如何衡量两个分布之间的相似性?当然是用经典的KL距离(Kullback-Leibler Divergence)。SNE希望能够找到一个低维数据表示,以最小化所有数据点的KL距离。

2. 无法表示问题

在一个10维空间中,有可能存在11个点,且两两距离相等。而在二维空间中,最多只能找到找到3个点,且它们两两距离相等。因此,想在2维空间中完整地表示10维空间中的距离关系是不可能的。

3. 拥挤问题

【python】降维与数据聚类之 TSNE_第1张图片

从上图可以看出,不同类别的簇挤在一起,无法区分开来,这就是拥挤问题。如果没有颜色标记,可能根本区分不出类别。实际上,拥挤问题的出现与某个特定算法无关,而是由于高维空间距离分布和低维空间距离分布的差异造成的。

假设一个以数据点x为中心,半径为r的m维球(二维空间就是圆,三维空间就是球),且数据点是在m维球中均匀分布的。根据对二维空间和三维空间的想象,我们可以知道,位于圆周和球面附近的点的数量肯定多于其他位置,也就是说,数据集中数据点与x点的距离的分布是不均衡的,即中心区域数据点少,边沿区域数据点多。如果这种不均衡的距离关系保留到低维,肯定会出现拥挤问题。

4. TSNE

出现上述问题的主要原因在于数据中存在离群点,而SNE中使用的高斯分布对噪声非常敏感,因此在TSNE中,采用t分布这种长尾分布。下图显示的是高斯分布normal和t分布在含有离群点和含有离群点两种情况下的表现。可以看出,高斯分布对离群点很敏感,容易受到影响,而t分布则不受影响。

【python】降维与数据聚类之 TSNE_第2张图片

5. 对MINIST数据集进行聚类分析 

TSNE 运行极慢,PCA 则相对较快;因此,尤其在可视化高维数据时,常先用 PCA 进行降维,再用 TSNE 进一步降维。例如,对于MINIST数据集,每个手写体数字的图片共有28X28=784像素。为了加速计算的同时不严重扭曲点间距离的情况下抑制某些噪声,首先利用PCA降维至30维,再使用TSNE进行降维,最终转换为二维。

data_pca= PCA(n_components=30).fit_transform(data)
data_pca_tsne = TSNE(n_components=2).fit_transform(data_pca)

TSNE降维的动态过程如下所示。更多细节请移步:从SNE到t-SNE再到LargeVis

你可能感兴趣的:(强化学习与人工智能)