在创新绘图团队中,我们经常分析大量文本以识别新技术和新行业。为了有效地做到这一点,我们经常需要相关术语组或“同义词”(这个词的广义)。理想情况下,我们会自动化这个过程,但这并不总是那么容易……
云无敌斩
问题就在这里:市场上没有多少算法能够在合理的时间内对非常大、非常高维的数据给出合理的结果,而不会让我的笔记本电脑内存耗尽。我决定重新开始,开发了一种新的聚类算法Omnislash,尽管在某些方面有些粗糙,但它能够快速切分非常大、非常高维的数据集。在自动生成同义词的背景下,它也能给出非常合理的结果。
聚类方法
当数据科学家想要将数据集分割成自然块时,他们会使用聚类方法。一个常见的例子是根据众多字段(“列”)的相似性识别相似的人员或组织(“行”)。在我的例子中,我想将一个单词列表(请参阅此处,了解有关单词如何变成数据的非常高级的描述)分成相似的单词组(即同义词)。各种算法采用不同的方法来实现这一点,其中 摩吉数据 最流行的算法往往可以在sklearn库中找到。
聚类大型数据集
对于中等大小的数据集,数据科学家可以自由选择任何一种聚类算法,除其他外,倾向于优化两个数量:
聚类效果如何;
他们愿意等待多长时间。
第二点其实并不是很轻率:一些算法以“扩展”性很差而闻名:也就是说,如果数据集稍微大一点,算法就会变得很慢。为什么?好吧,我相信您可以想象,许多算法可以通过将数据集中的每个点(“行”)与其他每个点进行比较来工作。因此,如果您的数据集中有十个点,则算法会进行一百次比较。如果数据集中有二十个点,则算法必须进行四百次比较。将数据集的大小加倍会使算法的运行时间增加四倍。显然,对于非常大的数据集,普通数据科学家(在笔记本电脑上工作)将不得不寻找另一种算法。正如其他人的工作所示,通过采用不需要将每个点与其他每个点进行比较的方法,可以很清楚地看出哪些算法可以很好地随着数据集大小而扩展。
高维数据集聚类
因此,如果我们想要对非常大的数据集进行聚类,我们只需忘记传统上可以使用的一半算法。正如您可能已经了解本博客的目的,数据的聚类也倾向于随数据的维数(“列数”)而扩展。简而言之,对于数据集中的每个额外维度,大多数聚类过程都会在数据集的每个点之间执行额外的距离测量。也许我们可以将一些重型计算能力投入到这个问题上。然而,退一步考虑高维数据的另外两个问题将是明智的:冗余和稀疏。数据中的各个字段(“行”)可能相互关联(“相关”),这意味着我们可能会在可以用较少维度描述的高维问题上浪费宝贵的计算时间。其次,考虑到高维数据,任何两点之间距离的测量都开始失去意义 - 因为大多数空间可能为空。现在结合后两种想法:冗余和稀疏;即某些相关性仅存在于空间的某些部分。Omnislash正是考虑到这一点而工作的,它通过递归地将数据集分割成越来越小的数据块,同时将聚类过程简化为一个非常低维的问题。