1.简单介绍
t-SNE(t-distributed stochastic neighbor embedding)是用于降维的一种机器学习算法,是由 Laurens van der Maaten 和 Geoffrey Hinton在08年提出来。此外,t-SNE 是一种非线性降维算法,非常适用于高维数据降维到2维或者3维,进行可视化。
image.png
2.简单举例
## https://blog.csdn.net/hustqb/article/details/80628721
import numpy as np
from sklearn.manifold import TSNE
from mpl_toolkits.mplot3d.axes3d import Axes3D
X = np.array([[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]])
X_embedded = TSNE(n_components=2,init='pca', random_state=501).fit_transform(X)
X_embedded
# plt.scatter(X_embedded[:, 0], X_embedded[:, 1])
## 三维
fig = plt.figure()
axes3d = Axes3D(fig)
axes3d.scatter(X[:,0],X[:,1],X[:,2])
image.png
3.缺点如下:
-
tsne太慢,不适合于大规模计算或者大数据
-
tsne不能对test data做transform。比如说我们对training data进行pca,然后可以利用刚刚得到的pca分解矩阵直接对test data进行变换。但是tsne不行。
-
tsne的结果具有一定的随机性,而不是像pca,结果一致性很好。
除此之外,tsne的稳健性和一致性不是太好。
1. tsne对超参的设置比较严苛,设置不当,会导致结果很差。
最左是原始的数据,剩下五个是tsne处理后的数据,明显看出在一些参数下,结果并不理想
image.png2. tsne后聚类的大小没有实际意义
最左是原始的数据,蓝色较大,黄色较小。剩下五个是tsne处理后的数据,每簇的大小看起来很随机。
image.png3. tsne后聚类间的距离没有意义
最左是原始的数据,黄色蓝色较近、绿色分隔得比较远。剩下五个是tsne处理后的数据,原图中的距离并没有被保留。
image.png4. 随机噪音在tsne处理之后看起来不像随机噪音
最左是原始的数据,正态分布的随机点。剩下五个是tsne处理后的数据,似乎还能看出各种不同的规律,并不像是完全的杂乱无章。
image.png5. tsne后聚类出现不规律的形状
最左是原始的数据,杂乱无章,没有明显的分布。剩下五个是tsne处理后的数据,出现了各种形状,有的似乎还出现了聚类。
image.png上面种种问题让tsne显得难以驾驭。在工程中,使用得并不广泛。
网友评论