降低维度的目的是更好刻画组内的相似性和组间的差异性。 t-SNE 相比其他算法优势之处是其内核的距离函数。
距离指标,主要是计算样本间的相似性(similarity),分为
philentropy
包,比较难安装Minkowski 簇函数的三个必要条件
以下我们将对
进行对比。
dist
是专门求距离的。 mnist_sample[195:200 ,-1]
去掉首列。
load("adv-datacamp/datasets/mnist-sample-200.RData")
distance <- dist(mnist_sample[195:200 ,-1])
distance
## 195 196 197 198 199
## 196 2582.812
## 197 2549.652 2520.634
## 198 1823.275 2286.126 2498.119
## 199 2537.907 2064.515 2317.869 2304.517
## 200 2362.112 2539.937 2756.149 2379.478 2593.528
heatmap(
as.matrix(distance)
,Rowv = NA, symm = T
,labRow = mnist_sample$label[195:200]
,labCol = mnist_sample$label[195:200])
我们会发现,同为“8”,相关性并不高,因此尝试 Kullback-Leibler (KL) divergence。
library(philentropy)
mnist_6 <- mnist_sample[195:200, -1]
mnist_6 <- mnist_6 + 1
sums <- rowSums(mnist_6)
distance <- distance(mnist_6/sums, method = "kullback-leibler")
## Metric: 'kullback-leibler' using unit: 'log'.
heatmap(
as.matrix(distance)
,Rowv = NA, symm = T
,labRow = mnist_sample$label[195:200]
,labCol = mnist_sample$label[195:200])
我们会发现 KL divergence 表达的相关性中,“8”之间的相关性明显提高。 因此这就是为什么 t-SNE 作为降低维度的方式好,因为其能够更好的捕捉样本之间的相似性,从而进行更有效的分群。