我已经完成了K-mean ++聚类,并使用Python 2.7,按照http://datasciencelab.wordpress.com/2014/01/15/improved-seeding-for-clustering-with-k-means/中给出的方法获得了聚类的质心
在我的问题中,还有一个限制,即任何质心到任何节点之间的距离应该大于常数。最好的方法是什么?
一个质心可能太靠近几个节点。
关于如何取代质心的任何建议?
非常感谢。
例如,要聚类的节点是 MyNodes = [[469500,5802610],[468764,5803422],[467991,5804202],[470260,5799949],[469486,5800730],[468713,5801510],[467939,5802291],[467166,5803072] [467966,5800204],[467193,58001785],[466420,5801766],[466457,5799700],[465678,5800488],[464950,5799229],[470615,5796600],[469842,5797405],[ 470320,5794955],[469547,5795735],[468773,5796516],[467990,5797297],[470062,5793215],[469289,5793996],[468515,5794776],[467742,5795557],[466969, 5796338],[466195,5797119],[469976,5791334],[469202,5792115],[468429,5792896],[467656,5793676],[466882,5794457],[466109,5795238],[465336,5796050] [464600,5796840],[470160,5789250],[469354,5789972],[468581,5790753],[467808,5791534],[467034,57921515],[466261,5793096],[465488,5793877],[ 464714,5794658],[463941,5795499],[463150,5796210],[469500,5787920],[468698,5788614],[467925,5789395],[467152,5790176]]
Centroids = [[467839.6,5793224.1],[467617.22222222,5800489.94444444]] Centroid [0]太靠近节点[29],Centroid 1太靠近节点[8]。
答案 0 :(得分:1)
如果我正确理解你的问题,而且我完全不确定是否这样做,那么解决方案已经从你的图纸中显而易见了:
您想要最接近给定质心点的点;与一组节点之间的距离最小。
天真实现的运行时应该是O(number_of_nodes^2)
,尽管您可以通过使用某些快速最近邻查找数据结构(例如kd-tree)来优化它,当您与圆相交并丢弃交叉点时太近了。
这应该是最佳解决方案;无论你使用哪种算法,你都找不到更接近最小距离约束的原始质心的点;并且这个算法应该总能找到最佳点。
虽然质心通常被节点包围,但如果节点密集,新点可能相距一段距离。