2013-06-10 5 views
0

У меня есть список точек (х, у, pointNo), например .:Как найти кластеры с использованием python?

[(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 - хороший инструмент, но для этого требуется значение количества кластеров.

+1

Я думаю, что это слишком открыто. Для определения того, что такое кластер, должны быть * некоторые * критерии. – mgilson

ответ

0

1) Чтобы узнать количество кластеров, вы должны определить пороговое значение, которое скажет алгоритму, сколько двух кортежей должно отличаться, прежде чем их можно считать принадлежащими двум различным группам. Например, рассмотрим эти две группы монет: 5 центов и 2 цента, так что каждый из них имеет разный вес. Скажем, ваш алгоритм кластеризирует эти монеты на основе их весов. Может случиться так, что монеты в 5 центов не всегда имеют одинаковый вес (они могут отличаться на 10 миллиграммов или около того), поэтому ваш порог должен быть гибким в этом отношении. Но если две монеты отличаются на 1 грамм, скажем, тогда определенно они принадлежат к двум различным группам. Однако в вашем случае вы можете использовать евклидово расстояние, чтобы найти различия между кортежами. Но придумать порог является очень сложной задачей и может потребовать много знаний о проблемной области. Поэтому вы можете интуитивно попробовать разные пороговые значения, пока не увидите удовлетворительные результаты.

2) После того, как вы установили количество кластеров, вы можете найти их центры. Центром кластера являются в основном средние значения «x» и «y» всех элементов, принадлежащих этому кластеру. Если вы не знаете, какие элементы принадлежат кластеру, вы можете сначала рандомизировать центры кластера в 2D-пространстве, а затем взять среднее (x, y) элементов, наиболее близкое к этому центру, чтобы получить новый центр. Это то, что делает k-средство.

Надеюсь, что это поможет!

1

Возможно, немного поздно на вечеринку, но в документах sklearn есть nice comparison of clustering algorithms. Возможно, есть тот, который соответствует вашим потребностям.