我们要把高维数据降维,SNE这个工具就能派上用场。高维数据看起来特别复杂,要是把十几万维的基因表达数据直接扔到一张二维散点图上,什么结构都找不到了,全被噪声淹没了。SNE就像一位魔术师,能把高维数据压缩到2D或者3D空间里,让科研人员用肉眼就能看见生物信号。你看上面的对比图就明白了,左边是没降维的惨状,右边是用了SNE后的效果,同一簇的样本就像磁铁吸住一样紧紧抱团。 那SNE具体是怎么做到的呢?它分三步:第一步先给每个样本随机分配一个低维坐标,就像给他们踩个点一样。这时候还看不出什么结构来。第二步就开始贪心移动了。同类样本互相吸引把圆圈拉得更紧,异类样本互相排斥被推开。这样经过成千上万次迭代之后,低维空间里就出现了和高维一样的聚类轮廓。第三步就是收敛过程了。相似性矩阵不再变的时候算法就停止了。 这里要特别说明一下什么是相似性得分矩阵。SNE不是随便移动点的位置,它是要让低维空间里的邻近度和高维里的亲疏关系一致。这个时候就需要一张相似性得分矩阵来做桥梁。对任意两个样本都用正态分布曲线计算相似性得分。然后把这些得分缩放到0到1之间,保证紧密簇和稀疏簇权重一样。最后得到一张“红白块”的矩阵,红色代表高相似性,白色代表低相似性。 另外为什么SNE偏爱用t分布而不是正态分布呢?因为正态分布尾巴太长容易把远距离的点误判为“亲兄弟”,t分布尾部薄峰值高能突出近邻点迅速衰减远邻点。这样就不会出现“一片红”的情况了。 整个过程我们可以通过一个动态热图来看清楚:一开始左上角是随机矩阵很乱乱的样子;然后热图慢慢向右上角真实矩阵靠拢;最后热图不抖动、颜色边界锐利清晰的时候就是出图的最佳时机了。 总结一下,SNE这套流程能让高维混沌变成二维秩序。掌握了这套流程你就能看懂高分文章里那些炫目散点图了。