我对实施用于 k 中心聚类的 Gonzalez 算法感到困惑。
算法是:
- 设为数据集
- 任意选择数字是中心。(一般让)。
- 对于 i = 2 到 k 做
- 设置
的公式 。
我应该在 Python 中实现它。Python中曾经有用于聚类的函数,Python中有没有针对该算法的函数?
我对实施用于 k 中心聚类的 Gonzalez 算法感到困惑。
算法是:
的公式 。
我应该在 Python 中实现它。Python中曾经有用于聚类的函数,Python中有没有针对该算法的函数?
Gonzalez 算法的输入是要聚类的一组元素以及每对元素之间的距离。Gonzalez 算法的第一步是随机选择一个元素,这将是你的第一个中心(我们称之为 c_1)。由于您已经有了一个中心,您必须计算从每个元素到 c_1 的距离。接下来,选择距离 c_1 最远的元素作为新中心。在剩余的步骤 (k-2) 中,您必须继续计算从每个元素到已选择中心集的距离,并选择最远的元素作为中心。这里重要的是,在这种情况下,从元素 e 到一组中心 C 的距离,距离(e,C),被定义为从 e 到其在 C 中最近的中心的距离。我给你一个一般的冈萨雷斯算法的草图,其中 matrix[i][j] 存储元素 i 到元素 j 的距离。我是 python 的新手,所以我的代码不是最优的,但给了你一个想法。
def gon():
C = []
global distance = []
for i in range(0,n):
distance.append(float("inf"))
f = random.randint(0, n-1)
C.append(f)
update_distance(C, 0)
for i in range(1, k):
f = farthest_element()
C.append(f)
update_distance(C, i)
size = solution_size()
out = [size, C]
return out
# Update the distance of every element to the set of added centers
def update_distance(centers, max_index):
global distance
for i in range(0, n):
if matrix[i][centers[max_index]] < distance[i]:
distance[i] = matrix[i][centers[max_index]]
# Get the farthest element
def farthest_element():
max_dist = 0
max_dist_element = 0
global distance
for i in range(0,n):
if distance[i] > max_dist:
max_dist = distance[i]
max_dist_element = i
return max_dist_element