如何解决当我们对数据进行聚类时,我们如何检查 TSNE 结果是否真实?
我正在应用 TSNE 进行降维。我有几个功能,我减少到 2 个功能。之后,我使用 Kmeans 对数据进行聚类。最后,我使用seaborn绘制聚类结果。
要导入 TSNE,我使用:
from sklearn.manifold import TSNE
要应用 TSNE,我使用:
features_tsne_32= TSNE(2).fit_transform(standarized_data)
之后我使用 Kmeans:
kmeans = KMeans(n_clusters=6,**kmeans_kwargs)
kmeans.fit(features_tsne_32)
km_tsne_32 = kmeans.predict(features_tsne_32)
最后,我使用了以下情节:
import seaborn as sns
#plot data with seaborn
facet = sns.lmplot(data=df,x='km_tsne_32_c1',y='km_tsne_32_c2',hue='km_tsne_32',fit_reg=False,legend=True,legend_out=True)
我有这个情节:
这个情节似乎过于完美和球状,这是我绘制的程序有问题 这个数据?在上面描述的代码中?
解决方法
您的问题并非特定于 t-SNE,而是任何无监督学习算法。您如何评估其结果?
我想说,唯一正确的方法是如果您对数据有一些先验知识或专业知识。诸如标签、其他元数据,甚至用户反馈之类的东西。
话虽如此,关于你的具体情节:
- 您从 tSNE 得到一个连续的“饼”,而不是一些离散的结构,如“岛”或“意大利面”,这一事实可能表明投影没有很好地学习。通常 tSNE 应该创建类似数据点的半不同组。这种形状看起来像一个过度合法化的模型。 (例如具有高 KL 散度系数的 VAE)。
- k-Means 产生的分区正是人们所期望的:k-means 的集群分配隐式地在特征空间上创建了一个 Voronoi 图,其中单元格是集群质心。一个好的初始化会产生散布在特征空间中的初始质心。由于该空间是对称的,因此质心也可能是对称的。
所以 k-Means 很好,但您可能需要调整 t-SNE 的参数。
,检查 t-SNE 算法的困惑度。当困惑度太小时,t-SNE 通常会产生圆盘状的斑点。另外,使用 DBSCAN 聚类算法进行测试,该算法通常比 k-Means 更有效。
,我遵循的程序有问题吗?
是的。
使用 TSNE 会将数据投影到另一个您无法真正控制的空间。
这样做应该使近点保持近,远点保持远。
然后使用 KNN 在投影空间来确定组。
这部分丢失了您之前拥有的任何分组信息[需要引用,需要事先查看数据是什么]!
根据一些先前标记的数据而不是根据 KNN 为组着色会更有意义
-或-
在原始空间上使用KNN进行分组,然后根据该分组对投影空间进行着色。
您所做的实际上毫无意义,因为它丢失了所有先验信息 - 标签和空间。
总结:
- 如果您有标签,请使用标签。
- 如果不这样做,请使用更复杂的聚类算法,从原始空间上的 KNN 开始,因为您可以看到投影空间上的 KNN 是不够的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。