【问题标题】:Python KMeans Clustering - Handling nan ValuesPython KMeans 聚类 - 处理 nan 值
【发布时间】:2018-08-22 17:37:21
【问题描述】:

我正在尝试使用来自scikit learnKMeans 算法对多个单词进行聚类。

特别是,我使用预训练的词嵌入(300 维向量)将每个词映射到一个数字向量,然后将这些向量提供给 KMeans 并提供聚类的数量。

我的问题是我的输入语料库中有某些单词在预训练的词嵌入字典中找不到。这意味着在这些情况下,我得到一个充满nan 值的numpy 数组,而不是向量。这不适用于 kmeans 算法,因此我必须排除这些数组。但是,我有兴趣查看在词嵌入中找不到的所有这些情况,更重要的是,如果可能的话,将它们放入一个单独的集群中,该集群将只包含它们。

此时我的想法是设置一个条件,即如果单词从嵌入索引返回一个 nan-values 数组,则为其分配一个任意向量。嵌入向量的每个维度都位于[-1,1] 内。因此,如果我将以下向量 [100000]*300 分配给所有 nan 单词,我就创建了一组异常值。在实践中,这按预期工作,因为这组特定的向量被强制在一个单独的集群中。但是,kmeans 质心的初始化会受到这些异常值的影响,因此我的所有其他集群也会变得混乱。作为一种补救措施,我尝试使用 init = k-means++ 启动 kmeans,但首先,它需要更长的时间来执行,其次,改进并没有好多少。

关于如何解决这个问题有什么建议吗?

谢谢。

【问题讨论】:

  • 为什么你用 10000 作为大小,而其他的都在 -1 和 1 之间?这将极大地扭曲 kmeans 聚类算法。我仍然会填充任意向量,只需将其全部设为 0 或 1 或 -1。它不应该对聚类算法产生太大影响,理想情况下仍然可以让您将未知单词聚类在一起。或者尝试 sklearn 上的其他聚类方法之一,它们可能会更好地处理异常值。

标签: python cluster-analysis k-means


【解决方案1】:

如果您没有关于某个单词的数据,请跳过它。

您可以尝试根据上下文动态计算一个词向量,但这与跳过它本质上是一样的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 2019-12-09
    • 2014-07-23
    • 2013-11-18
    • 1970-01-01
    • 2015-02-20
    • 2017-06-08
    • 2019-12-05
    相关资源
    最近更新 更多