在 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 用户吗
怎样在spss中将数值型变量转换成分类变量,比如将年龄转换成年龄段,并记为1,2,3等类