sklearn TSNE 降维向量问题

2017-07-06 10:51:12 +08:00
 armorsmith

现在手里有 360w 个 200 维向量,存放在 np.array 里,想把这些向量降维到二维然后投影出来,观察聚类情况。 使用 TSNE 的时候,出现问题,会卡住,过一段时间自动 kill 掉,但是如果用低维小数据测试则可以正常运行。

请问是不是数据太大,是否应该在训练时就调低向量维度?或者除 TSNE 外其他适合实现该数据降维的轮子。 环境为 python3.5,osx

3643 次点击
所在节点    Python
15 条回复
menc
2017-07-06 10:54:22 +08:00
想要没有性能问题和内存问题,请不要用 sklearn,效率极差。
手写一个就好
livc
2017-07-06 11:19:27 +08:00
一个向量一个向量降就可以了吧
armorsmith
2017-07-06 12:43:51 +08:00
@menc QAQ,这么残忍的么
armorsmith
2017-07-06 12:45:12 +08:00
@livc 现在的想法是一方面用 doc2vec 做句向量,一方面把 360w 个循环进行均值,取最后 3w 个左右结果,然后再做,目前的话切片之后跑个万条是没问题的
Morriaty
2017-07-06 13:06:49 +08:00
200 维这么整,是 w2v 的结果?

没用过 tsne,输入可以是稀疏矩阵或者生成器吗
EmdeBoas
2017-07-06 13:23:39 +08:00
试试 pca 或者用 SPSS 做主成分分析...
billgreen1
2017-07-06 14:27:33 +08:00
换个大内存的机器跑吧
armorsmith
2017-07-06 14:49:59 +08:00
@EmdeBoas 好哒,这就去这就去
armorsmith
2017-07-06 14:52:30 +08:00
@Morriaty 是 word2vec,这个是抓取的部分社交网站用户的发言,之后做的向量化,输入是 np.array
armorsmith
2017-07-06 14:53:45 +08:00
@billgreen1 跑不动了....我选择向量加一加,数量级降下来再跑,应该还是对数据集有代表性的吧?
RustingSword
2017-07-06 18:46:15 +08:00
应该是内存扛不住了。
不过就算能跑出来,360w 也没法看吧,可以采样一部分比较重要的词做降维,比如可以按 embedding 向量的范数排序,选最大的几千个先看看。
另外如果要用 python 来搞,https://github.com/DmitryUlyanov/Multicore-TSNE 比 sklearn 的效率会高很多。
armorsmith
2017-07-06 20:47:07 +08:00
@RustingSword 好哒!谢谢大佬!很有用!
ijustdo
2017-07-06 20:59:27 +08:00
滑窗 归一 然后有中间步骤的话 记得每部 保存磁盘序列化对象
成本最小的是加内存 妈的 昨天晚上刚跑了 8600w+

我是每个 100w 然后结果再下一步 呵呵 然后多进程
ruoyu0088
2017-07-06 22:06:54 +08:00
TSNE 的文档,建议使用 PCA 或 TruncatedSVD 降维

It is highly recommended to use another dimensionality reduction method (e.g. PCA for dense data or TruncatedSVD for sparse data) to reduce the number of dimensions to a reasonable amount (e.g. 50) if the number of features is very high.
aaronzjw
2017-07-06 22:20:00 +08:00
估计 sklearn 吃不消的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/373414

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX