我正在寻找一个在Python中实现的OPTICS算法的可靠实现。我将使用它来形成基于密度的点集群((x,y)对)。
我希望找到一个能够接受(x,y)对作为输入,并输出一个包含多个集群的列表,每个集群中包含属于该集群的(x, y)对列表的实现。
回答:
编辑:以下内容已知不是OPTICS的完整实现。
我做了一个快速搜索,发现了以下内容(Optics)。我无法保证其质量,但该算法看起来相当简单,因此你应该能够快速验证/调整它。
以下是如何在optics算法的输出上构建集群的快速示例:
def cluster(order, distance, points, threshold):
''' 给定optics算法的输出,
计算集群:
@param order 点的顺序
@param distance 点的相对距离
@param points 实际的点
@param threshold 用于聚类的阈值
@returns 集群组的列表
'''
clusters = [[]]
points = sorted(zip(order, distance, points))
splits = ((v > threshold, p) for i,v,p in points)
for iscluster, point in splits:
if iscluster: clusters[-1].append(point)
elif len(clusters[-1]) > 0: clusters.append([])
return clusters
rd, cd, order = optics(points, 4)
print cluster(order, rd, points, 38.0)