在 Python 中将新成员分类到现有集群中

Posted

技术标签:

【中文标题】在 Python 中将新成员分类到现有集群中【英文标题】:classifying new member into existing cluster in Python 【发布时间】:2017-03-17 07:35:50 【问题描述】:

有一组来自text[:n]的文本GROUP(例如1-100)以及它们彼此的余弦相似度矩阵:

     001   002   003  ...   100
001    1  0.53  0.47  ...  0.79
002 0.53     1  0.55  ...  0.30
003 0.47  0.55     1  ...  0.21
...  ...   ...   ...    1   ...
100 0.79  0.30  0.21  ...     1

当创建新成员text[n+1] 时,我想知道text[n+1] 是否是该组的新成员。也就是说,基于它们的表面相似性,它不属于text[1-100] 中的任何潜在集群。

对各种聚类技术了解一点,我想知道如何在 Python 中最好地完成这个分类。我现在正在研究两种相当普遍的方法:

每当新成员 text[n+1] 添加到现有 GROUP:text[:n]:

    运行聚类算法,根据余弦相似度对text[:n] 进行聚类,然后计算text[n+1] 属于现有聚类之一的概率以及它自己应该在新聚类中的概率. -> 然后使用概率来确定text[n+1] 是“新事物”还是“之前我们的数据中已经存在类似事物”

    或者,如果我不关心text[:n] 中有多少簇,而只是关心text[n+1 是否是新事物,是否可以简化将text[n+1] 分类为二进制@ 987654337@或1 (something new)计算效率更高?

另外,像 中餐厅流程 这样的内容是否可能与这里的问题相关?我也很感激你能指出我的任何建议和资源。

【问题讨论】:

我相信您可以通过在线方式使用 DBSCAN,只需相对较少的更改。这允许您将新点分配给现有集群创建一个新集群en.wikipedia.org/wiki/DBSCAN 【参考方案1】:

聚类不是分类。

不要依赖结果是好的还是稳定的 - 运行两次可能会产生非常不同的结果,有些集群可能好,有些可能不好。所以研究它们,然后标记你的数据并使用分类而不是聚类。

后来的 hack 很容易做到(根据您的集群训练分类器),但我不相信它在现实中有用。

【讨论】:

以上是关于在 Python 中将新成员分类到现有集群中的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在现有集群中将 ambari 配置为非 root 用户吗

预测 R 之外的 mclust 集群成员资格

怎样在spss中将数值型变量转换成分类变量,比如将年龄转换成年龄段,并记为1,2,3等类

分类和协议

在 Weka 中将分类预测输出到 CSV——输出文件保存在哪里?

在 scikit-learn 中将分类器保存到磁盘