小编MYO*_*kit的帖子

计算pandas帧列组合之间距离的有效方法

任务

我有一个pandas数据框,其中:

  • 列是文档名称
  • 行是这些文档中的单词
  • 帧单元格内的数字是单词相关性的度量(单词计数,如果你想保持简单)

我需要计算一个新的doc1-doc相似矩阵,其中:

  • 行和列是文档名称
  • 帧内的单元格是两个文档之间的相似性度量(1 - 余弦距离)

余弦距离由script.spatial.distance.cosine方便地提供.

我现在正在这样做:

  1. 使用itertools创建文档名称的所有2种组合的列表(dataframe列名称)
  2. 循环遍历这些并创建更新{doc1:{doc2:similarity}}的字典
  3. 在循环之后,使用pandas.DataFrame(dict)创建一个新框架

问题

但这需要很长时间.下面显示了MacBook Pro 13的当前速度,16GB内存和2.9GHz i5cpu运行最新的anaconda python 3.5 ...绘制了对文档组合的时间.

距离计算性能

您可以看到100,000个组合需要1200秒.将其外推到我的7944个文档的语料库中,创建3个1,549,596个组合,需要5天才能计算出这个相似性矩阵!

有任何想法吗?

  • 以前是动态创建数据帧df.ix [doc1,doc2] =相似..这非常慢.
  • 我考虑过numba @git,但它失败了pandas数据结构.
  • 我找不到内置函数,它将在内部完成所有工作(在C?中)
  • 我必须在战术上做的是随机抽样文档以创建一个更小的集合来使用...目前0.02的一小部分导致大约20分钟的计算!

这是代码(github)

docs_combinations = itertools.combinations(docs_sample, 2)
for doc1, doc2 in docs_combinations:
    # scipy cosine similarity function includes normalising the vectors but is a distance .. so we need to take it from 1.0
    doc_similarity_dict[doc2].update({doc1: 1.0 …
Run Code Online (Sandbox Code Playgroud)

python performance nlp numpy pandas

6
推荐指数
1
解决办法
1023
查看次数

标签 统计

nlp ×1

numpy ×1

pandas ×1

performance ×1

python ×1