读懂 UMAP
Understanding UMAP · Google PAIR 作品,2019
把高维数据压到二维到底做了什么?拖两个滑块就能看见:邻居数管「看多远」,最小距离管「摆多紧」。还有一具三维猛犸象骨架,让 UMAP 与 t-SNE 当场同台。
交互实验(可直接投屏)
原作是一个完整的网页应用,下面直接嵌入;屏幕小或要投影时,点「全屏打开实验」更清楚。
动手三步
- 先看玩具数据:把邻居数从 15 拖到 80,看散开的簇如何收拢成整体轮廓
- 再把最小距离从 0.1 拖到 0.85,看同一份数据被摊平摊松
- 拖半径滑块,看 UMAP 怎么从每个点向外撑开半径、半径相交就连边
- 重点在猛犸象:邻居数调到最小,它碎成一堆互不相干的零件;调到 200,象鼻、象腿、象牙的相对位置才对得上
- 对比同一具猛犸象的 t-SNE 结果:困惑度要拉到很大才开始看出全局结构,而且每跑一次都不一样
课堂怎么用
- 开场只做一件事:让全班猜「邻居数调大,图会变密还是变散」,再当场拖给他们看
- 猛犸象是最好的讲义:三维原形就在旁边,学生能自己判断投影对不对,这是高维数据做不到的
- 把「UMAP 图里簇的大小和簇间距离都没有意义」单独拎出来讲,这是最容易误读的一条
- 让学生用同一组参数跑两次,看结果不一样,引出「随机算法要多画几张图」的科研习惯
思考题
- 邻居数调小到 3,猛犸象为什么会碎成互不相干的零件?这对应算法的哪一步?
- 为什么说 UMAP 图里两个簇之间的距离不能当成「这两类有多不像」?
- 同一份数据、同一组参数跑两次得到不同的图,这是 bug 吗?做科研时该怎么处理?
已知限制
- 参数名按代码记号保留英文,控件标签用「中文(英文参数名)」双写,便于对照官方文档
- t-SNE 对比面板在开始计算前会短暂显示一个英文占位,是原作自带的显示瑕疵
- 猛犸象与服饰图像的投影是原作预先算好的,只能在给定的参数组合里切换;第一张图才是浏览器里实时计算的
- 三维散点用 WebGL 绘制,老旧核显机器上可能掉帧,建议课前试一次
原作 Understanding UMAP(Andy Coenen、Adam Pearce(Google PAIR),Google PAIR 作品,2019),Apache-2.0 许可(原文),界面已中文化。