抱歉不行; 通过相应的散度比较困惑参数的最优性不是一种有效的方法。正如我在这个问题中解释的那样:“困惑参数随着用于计算距离/概率的高斯方差单调增加。因此,当你增加整个困惑参数时,你会得到更小的绝对距离和随后的 KL-分歧值。 ”这在Van der Maaten 和 Hinton的 2008 年 JMLR使用 -SNE可视化数据的原始论文中有详细描述。KL(P||Q)Pt
您也可以使用玩具数据集以编程方式轻松查看此内容。例如,假设您想将 -SNE 用于著名的iris数据集,并尝试不同的困惑,例如。。分数的经验分布是什么?好吧,我们很懒,所以让计算机为我们完成这项工作并使用几个()不同的起始值运行例程,看看我们得到了什么:(注意:我使用 -SNE的Barnes-Hut 实现(van der Maaten,2014),但行为是相同的。)t10,20,30,40Rtsne50t
library(Rtsne)
REPS = 50; # Number of random starts
per10 <- sapply(1:REPS, function(u) {set.seed(u);
Rtsne(iris, perplexity = 10, check_duplicates= FALSE)}, simplify = FALSE)
per20 <- sapply(1:REPS, function(u) {set.seed(u);
Rtsne(iris, perplexity = 20, check_duplicates= FALSE)}, simplify = FALSE)
per30 <- sapply(1:REPS, function(u) {set.seed(u);
Rtsne(iris, perplexity = 30, check_duplicates= FALSE)}, simplify = FALSE)
per40 <- sapply(1:REPS, function(u) {set.seed(u);
Rtsne(iris, perplexity = 40, check_duplicates= FALSE)}, simplify = FALSE)
costs <- c( sapply(per10, function(u) min(u$itercosts)),
sapply(per20, function(u) min(u$itercosts)),
sapply(per30, function(u) min(u$itercosts)),
sapply(per40, function(u) min(u$itercosts)))
perplexities <- c( rep(10,REPS), rep(20,REPS), rep(30,REPS), rep(40,REPS))
plot(density(costs[perplexities == 10]), xlim= c(0,0.3), ylim=c(0,250), lwd= 2,
main='KL scores from difference perplexities on the same dataset'); grid()
lines(density(costs[perplexities == 20]), col='red', lwd= 2);
lines(density(costs[perplexities == 30]), col='blue', lwd= 2)
lines(density(costs[perplexities == 40]), col='magenta', lwd= 2);
legend('topright', col=c('black','red','blue','magenta'),
c('perp. = 10', 'perp. = 20', 'perp. = 30','perp. = 40'), lwd = 2)

看图片很明显,根据上面原始论文的阅读,使用分数来选择最佳困惑度不是很有帮助。不过,您仍然可以使用它来选择给定解决方案的最佳运行!KLKL