UMAP
首先,UMAP是一种非线性降维的算法,相对于t-SNE,UMAP算法更加快速
该方法的原理是利用流形学和投影技术,达到降维目的
首先计算高维空间中的点之间的距离,将它们投影到低维空间,并计算该低维空间中的点之间的距离。然后,它使用随机梯度下降来最小化这些距离之间的差异。
比方说,图中两个黑点,若考虑直线距离,那么这两个黑点之间距离很相近
如果放到流形学上,那么这两个点距离就得沿着图中曲线绕两圈
那么UMAP先计算高维的流形结构特征,将其中各个点之间的位置关系进行确定,从而构造高维的数据分布结构。然后将它们投影到低维空间,然后根据高维空间点与点之间的相对关系,提取特征值,在低维空间中重新构造这种距离关系,从而达到聚类以及特征提取的效果
R
在单细胞的R包Seurat中自带UMAP这个函数
我们这次介绍umap这个R包
install.packages("umap")
library(umap)
iris.umap = umap(iris[,1:4])#进行降维
# display object summary
iris.umap
head(iris.umap$layout)#获取数据矩阵
# create a dataset with structure likeiris, but with perturbation
iris.perturbed = iris[,1:4] +matrix(rnorm(nrow(iris)*4, 0, 0.1), ncol=4)
# project perturbed dataset
perturbed.embedding = predict(iris.umap,iris.perturbed)#做预测
par(mfrow=c(1,2))
# output is a matrix with embeddingcoordinates
plot(iris.umap$layout)
plot(perturbed.embedding)
输入数据
这是降维的聚类图
iris.umap$layout是降维的数值作为新的坐标,画在二维图上
iris.umap$layout