我在使用来自 Anaconda 的 Jupyter notebook 和 Python 2.7。我有一个大约 250,000 维的数据集,需要将其压缩到更低的维度。我使用的是 scikit TSNE。当运行 TSNE 时,设置 n=5
或 n=10
时运行正常。但当我设置 n=50
或更高时,会显示以下消息:"The kernel appears to have died."
没有显示任何错误消息。问题出在哪里?是因为内存超载吗?我应该在终端中作为脚本运行代码,而不是在 Jupyter 中运行吗?
我的 TSNE 函数如下:
def tsne_to_n_dimensions(n): start=timer() #tsne print diff_df.shape tsne = sklearn.manifold.TSNE(n_components=n,verbose=2) data_nd_tsne =tsne.fit_transform(diff_df) calculate stuff from data_nd_tsne return stuff
并且 diff_df 是一个全局的 pandas 数据框
回答:
我找到了一个使用python-bhtsne
的解决方案,这也是对Barnes-Hut 的 t-分布随机邻居嵌入方法的一种实现。
它非常容易实现,并且还提供了一个选项,可以在每次运行 tsne
时使用相同的参数获得相同的结果——这是 scikit
实现中所没有的。
它是 Laurens van der Maaten 原始实现的 Python 包装器。
所以你只需要做以下操作来替代来自 scikit
的常规 TSNE
:
from bhtsne import tsnedata_nd_tsne = tsne(diff_df)