集群中集群数量的动态选择[关闭]
Posted
技术标签:
【中文标题】集群中集群数量的动态选择[关闭]【英文标题】:Dynamic selection of number of clusters in clustering [closed] 【发布时间】:2019-06-18 22:30:01 【问题描述】:编辑这个问题是在对集群技术知之甚少的情况下写的,现在事后看来甚至不符合 Stack Overflow 网站的标准,但是我不会让我删除它说别人已经投入了时间和能量在这个(有效点)中,如果我继续删除,我可能暂时无法提问,所以我正在更新这个问题,以使其相关,其他人可以从中学习。它仍然没有严格遵守 SO 准则,因为我自己会将其标记为过于宽泛,但在目前的状态下它没有任何价值,因此增加一点价值将值得反对。
更新的对话主题
问题是在聚类算法中选择最佳聚类数,该算法将对作为图像轮廓检测输入的各种形状进行分组,然后将聚类属性的偏差标记为噪声或异常,要点当时提出的问题是所有的数据集都不一样,在它们中获得的形状不同,并且形状的数量也会因数据集而异。正确的解决方案是使用 DBSCAN(基于密度的噪声空间聚类应用程序)应用程序,该应用程序可以在 scikit-learn
中找到,我当时不知道,它有效,现在产品正在测试中,我只是想回到这个并纠正这个老错误。
老问题
旧标题kmeans聚类中k的动态选择
我必须生成一个预先不知道类数的 k-means 聚类模型,有没有办法根据聚类内的欧几里德距离自动确定 k 的值。
我希望它如何工作。从k的值开始,进行聚类,看它是否满足阈值标准,并相应地增加或减少k。问题与框架无关,如果您有 Python 以外的其他语言的想法或实现,也请分享。
我在研究问题https://www.researchgate.net/publication/267752474_Dynamic_Clustering_of_Data_with_Modified_K-Means_Algorithm 时发现了这一点。 我找不到它的实现。
我正在寻找类似的想法来选择最好的并自己实现,或者可以移植到我的代码中的实现。
编辑 我现在正在考虑的想法是:
肘法
X 均值聚类
【问题讨论】:
您可能正在数据中寻找“肘部”或“膝盖”;一个很好的实现the Kneedle method的Python库是kneed。 @mc10 是的,我也在想肘部或 x 表示集群,我希望得到更多的想法来比较,抱歉我的问题中没有包括这些。 【参考方案1】:您迭代 K 的值并使用轮廓分数检查您的集群有效性
【讨论】:
模型的计算量很大,数据集也很大,我觉得不太可能。【参考方案2】:你可以使用肘法。该方法的基本作用是使用各种 k 值(簇数),然后计算每个点与其簇中心的距离。在一定数量之后,您可以对 k(簇数)的这个值进行任何重大改进。
您可以参考this链接进一步阅读。
【讨论】:
我知道Elbow方法,问题是,1.它会自动化,选择k,我不会在那里看到肘部形成的地方,理论上可以由图的斜率和阈值技术处理,然后是 2。数据集很大,大约有 10 亿个对象,每个对象大约有 50 个参数,k 的值是 10-700 之间的任何值,所以我需要写一些不遵循线性方法来选择 k。 对于 10-700 之间的 k,我建议定期使用 value。例如 n+10 或 n+20。 这可能行得通,我正在考虑一种二进制搜索机制来达到 ak 并检查它与 k-10 和 k+10 的差异,基于此,如果仍然显着增加,我认为你得到了理念。如果可能的话,我只是希望找到一个更好的机制。 如果有帮助,再提出一个建议。您可以将总范围划分为固定间隔。例如,如果范围为 100,而您只需要 10 个值,则间隔将为 10/10 = 10。 我想我可以对你所说的做一个尺子缩放版本,首先移动 100,然后移动 10,然后移动 1。【参考方案3】:您可以遍历任何范围的 k 值的分数。您可以检查每个 k 值的轮廓分数,也可以计算每个 k 值的 SSE 值之间的差异。 0.4 * k 值的数量后差异最大的地方将是肘点。
【讨论】:
以上是关于集群中集群数量的动态选择[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
5 weekend01020304050607的分布式集群的HA测试 + hdfs--动态增加节点和副本数量管理 + HA的java api访问要点