猿问

如何使用python查找集群?

我有一个点列表(x,y,pointNo),例如:

[(344, 279, 0), (344, 276, 1), (342, 267, 2), (349, 259, 3), (348, 279, 4), (339, 268, 5), (343, 277, 6), (336, 275, 7), (344, 262, 8), (346, 269, 9), (279, 292, 10), (287, 287, 11), (278, 294, 12), (273, 294, 13), (280, 296, 14), (273, 291, 15), (287, 284, 16), (273, 292, 17), (273, 282, 18), (279, 296, 19), (210, 221, 20), (196, 230, 21), (191, 216, 22), (211, 221, 23), (192, 217, 24), (195, 230, 25), (192, 214, 26), (208, 225, 27), (206, 217, 28), (206, 224, 29), (176, 104, 30), (174, 114, 31), (180, 96, 32), (174, 103, 33), (171, 110, 34), (185, 114, 35), (179, 114, 36), (188, 100, 37), (183, 112, 38), (190, 115, 39), (274, 67, 40), (260, 62, 41), (264, 65, 42), (277, 78, 43), (274, 65, 44), (272, 75, 45), (260, 64, 46), (263, 68, 47), (259, 79, 48), (270, 64, 49), (344, 136, 50), (355, 129, 51), (344, 132, 52), (340, 122, 53), (348, 125, 54), (341, 136, 55), (343, 119, 56), (350, 136, 57), (348, 116, 58), (339, 135, 59), (213, 281, 60), (143, 211, 61), (125, 130, 62), (138, 241, 63), (350, 195, 64), (374, 189, 65), (362, 180, 66), (364, 187, 67), (375, 177, 68), (362, 187, 69), (364, 171, 70), (366, 180, 71), (366, 176, 72), (372, 178, 73), (366, 188, 74), (125, 132, 75), (125, 127, 76), (136, 140, 77), (120, 122, 78), (129, 134, 79), (124, 131, 80), (125, 138, 81), (128, 139, 82), (134, 124, 83), (123, 138, 84)]

如何在不给出簇数的情况下将其搜索并划分为簇。我的第二个问题是如何获得每个群集的中心。

我发现kmeans是一个不错的工具,但它需要提供簇数值。


慕无忌1623718
浏览 171回答 3
3回答

慕田峪4524236

1)要知道簇的数量,您必须定义一个阈值,该阈值将告诉算法两个元组必须相差多少才能被视为属于两个不同的组。例如,考虑这两组硬币:5美分和2美分,这样它们中的每一个都有不同的权重。假设您的算法基于这些硬币的权重对其进行聚类。可能发生的情况是,5美分的硬币不一定总是具有相同的重量(它们可能相差10毫克左右),因此您在这方面的门槛应灵活一些。但是,如果假设有两个硬币相差1克,那么它们肯定属于两个不同的组。但是,在您的情况下,您可以使用欧几里得距离来查找元组之间的差异。但是,设定阈值是一项非常具有挑战性的任务,并且可能需要大量有关问题域的知识。因此,您可以直观地尝试不同的阈值,直到看到令人满意的结果。2)一旦设置了簇数,就可以找到它们的中心。群集的中心基本上是属于该群集的所有元素的平均值“ x”和“ y”值。如果您不知道哪些元素属于哪个群集,则可以先在2D空间中随机化群集中心,然后取最接近该中心的元素的平均值(x,y),以获得新的中心。这就是k-means所做的。

守着星空守着你

也许聚会晚了一点,但是在sklearn文档中有很好的聚类算法比较。也许有一种适合您的需求。
随时随地看视频慕课网APP

相关分类

Python
我要回答