解决sklearn中tsne算法降维结果不一致的问题

231 阅读1分钟

背景

  最近在做一个文本聚类的分析,在对文本数据embedding后,想着看下数据的分布,于是用sklearn的TSNE算法来降维embedding后的数据结果。当在多次执行后,竟发现TSNE的结果竟然变了,而且每次都不一样。

  主要的逻辑就是用的下面两行函数:

tsne = TSNE(n_components=2)
decomposition_data = tsne.fit_transform(embeddings)

解决流程
  之前只是在网上随便找了个做TSNE的博客,粘了这两行代码就跑结果了,出现了这个问题后,决定还是得好好看看sklearn中的官方文档。官网链接:scikit-learn.org/0.16/module…

  sklearn的相关参数说明如下图所示:

截图 (2).png   
  有一个参数,"random_state", 我用红框标出了。TSNE在运算的时候,会初始化一个随机的种子点,如果没有指定该参数的话,默认该参数为None,同时会使用mumpy.random随机生成一个数作为种子点。这也是导致每次生成的TSE降维结果都是不一致的原因。

  所以后面的解决方案就很简单了。将random_states随便赋予一个固定值就好了。我这次就把random_state设置成了0了,将上述代码改为:

tsne = TSNE(n_components=2, random_state=0)
decomposition_data = tsne.fit_transform(embeddings)

  问题解决。

参考资料

1.scikit-learn.org/0.16/module…