拿我比较了解的无监督学习来说,t-SNE的一个用处是:通过视觉直观验证算法有效性,或者说是算法评估。因为在这种情况下数据没有标签,无法很好的验证结果。比如下面两幅图中,作者都使用了t-SNE来把高维数据压缩到2维空间上来证明算法的有效性。值得一提的是,t-SNE是少数可以同时考虑数据全局与局部关系的算法,在很多聚类问题上的效果都不错。
而将tSNE直接用于降维,并后接分类器比较少见,我认为原因有:
- 当我们意识到需要降维时,一般是发现了特征间的高度线性相关,而t-SNE主打的是非线性降维。如果我们发现了线性相关,可能用PCA处理就可以了。即使发现了“非线性相关性”,我们也不会尝试用t-SNE降维再搭配一个线性分类模型,而会直接选择非线性的分类模型去处理。复杂的非线性关系不适合强行降维再做分类,而应该用非线性模型直接处理。如果是高度稀疏的矩阵,也有适合的分类器直接用,也没必要降维。
- 其次t-SNE的t指的是Student-t distribution,而一般t-SNE最多就是用于2维或者3维上可视化。我们知道一般的降维不仅仅是降维到2或者3个特征,而可能是从100降到20个特征之类的,在这种情况下可能要用更大的自由度(degree of freedom),效果还未知。
- 其次是t-SNE的运算开销比较大 非线性,经过了优化的话可以达到 。同时t-SNE的代价函数非凸,可能得到局部最优。
- t-SNE的核心思想就是保证在低维上数据的分布与原始特征空间的分布相似性高。而相似性度量是依赖于KL散度以及计算欧式距离并概率化。换句话说,它依然受到维度灾难的影响,如果在低维空间上本身不存在区分度或者高维空间中欧式距离差别很小的话,效果也不好。什么是维度灾难可以参考:微调:怎样理解 Curse of Dimensionality(维数灾难)?
- t-SNE的调参比较复杂,尤其是perplexity这个参数的影响还是比较明显的,所以依赖于t-SNE来进行维度压缩并不容易有稳定结果。调参可以看:How to Use t-SNE Effectively
总体而言,t-SNE应该比较适合可视化,了解和验证数据或者模型。至于降维的话,还有很多局限性有待解决。遇到复杂数据,选用非线性的分类器可能效果更好。